diff --git a/apps/cpu/Applications.cmake b/apps/cpu/Applications.cmake index fb5b9cdf5136f95fad370ee68bf16fbcdb0ba1bd..2fc89f7036ba707fdd4412c702b8be626956bb86 100644 --- a/apps/cpu/Applications.cmake +++ b/apps/cpu/Applications.cmake @@ -68,4 +68,5 @@ add_subdirectory(${APPS_ROOT_CPU}/HerschelBulkleySphere) add_subdirectory(${APPS_ROOT_CPU}/HerschelBulkleyModel) add_subdirectory(${APPS_ROOT_CPU}/rheometer) add_subdirectory(${APPS_ROOT_CPU}/CouetteFlow) +add_subdirectory(${APPS_ROOT_CPU}/Multiphase) diff --git a/apps/cpu/JetBreakup/CMakeLists.txt b/apps/cpu/JetBreakup/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..19553ec4c1cca9dde298d377f82f8730f48269d0 --- /dev/null +++ b/apps/cpu/JetBreakup/CMakeLists.txt @@ -0,0 +1,6 @@ +######################################################## +## C++ PROJECT ### +######################################################## +PROJECT(JetBreakup) + +vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} FILES JetBreakup.cpp ) \ No newline at end of file diff --git a/apps/cpu/JetBreakup/JetBreakup.cfg b/apps/cpu/JetBreakup/JetBreakup.cfg new file mode 100644 index 0000000000000000000000000000000000000000..22d20f7d5667ae30c2f3405334566c4d109e7d9f --- /dev/null +++ b/apps/cpu/JetBreakup/JetBreakup.cfg @@ -0,0 +1,48 @@ +pathname = d:/temp/Multiphase +pathGeo = d:/Projects/VirtualFluids-Multiphase/source/Applications/Multiphase/backup +geoFile = JetBreakup2.ASCII.stl +numOfThreads = 4 +availMem = 10e9 + +#Grid + +#boundingBox = -1.0 121.0 0.5 629.0 -1.0 121.0 #(Jet Breakup) (Original with inlet length) +#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 + + +dx = 0.5 +refineLevel = 0 + +#Simulation +uLB = 0.05 #inlet velocity +uF2 = 0.0001 +Re = 10 +nuL = 1.0e-5 #!1e-2 +nuG = 1.16e-4 #!1e-2 +densityRatio = 10 #30 +sigma = 4.66e-3 #surface tension 1e-4 ./. 1e-5 +interfaceThickness = 5 +radius = 615.0 (Jet Breakup) +contactAngle = 110.0 +gravity = 0.0 +#gravity = -5.04e-6 +phi_L = 0.0 +phi_H = 1.0 +Phase-field Relaxation = 0.6 +Mobility = 0.02 # 0.01 ./. 0.08, fine correction of Phase-field Relaxation parameter, to activate it need to change in kernel tauH to tauH1 + + +logToFile = false + +newStart = true +restartStep = 100000 + +cpStart = 100000 +cpStep = 100000 + +outTime = 1 +endTime = 200000000 \ No newline at end of file diff --git a/apps/cpu/JetBreakup/JetBreakup.cpp b/apps/cpu/JetBreakup/JetBreakup.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e2dc0f0e31483310bc119b26ce246aa8dfb7133c --- /dev/null +++ b/apps/cpu/JetBreakup/JetBreakup.cpp @@ -0,0 +1,516 @@ +#include <iostream> +#include <string> + +#include "VirtualFluids.h" + +using namespace std; + + +void run(string configname) +{ + try + { + ConfigurationFile config; + config.load(configname); + + string pathname = config.getString("pathname"); + string pathGeo = config.getString("pathGeo"); + string geoFile = config.getString("geoFile"); + int numOfThreads = config.getInt("numOfThreads"); + vector<int> blocknx = config.getVector<int>("blocknx"); + vector<double> boundingBox = config.getVector<double>("boundingBox"); + //vector<double> length = config.getVector<double>("length"); + double uLB = config.getDouble("uLB"); + double uF2 = config.getDouble("uF2"); + double nuL = config.getDouble("nuL"); + double nuG = config.getDouble("nuG"); + double densityRatio = config.getDouble("densityRatio"); + double sigma = config.getDouble("sigma"); + int interfaceThickness = config.getInt("interfaceThickness"); + double radius = config.getDouble("radius"); + double theta = config.getDouble("contactAngle"); + double gr = config.getDouble("gravity"); + double phiL = config.getDouble("phi_L"); + double phiH = config.getDouble("phi_H"); + double tauH = config.getDouble("Phase-field Relaxation"); + double mob = config.getDouble("Mobility"); + + + double endTime = config.getDouble("endTime"); + double outTime = config.getDouble("outTime"); + double availMem = config.getDouble("availMem"); + int refineLevel = config.getInt("refineLevel"); + double Re = config.getDouble("Re"); + double dx = config.getDouble("dx"); + bool logToFile = config.getBool("logToFile"); + double restartStep = config.getDouble("restartStep"); + double cpStart = config.getValue<double>("cpStart"); + double cpStep = config.getValue<double>("cpStep"); + bool newStart = config.getValue<bool>("newStart"); + + double beta = 12 * sigma / interfaceThickness; + double kappa = 1.5 * interfaceThickness * sigma; + + CommunicatorPtr comm = MPICommunicator::getInstance(); + int myid = comm->getProcessID(); + + if (logToFile) + { +#if defined(__unix__) + if (myid == 0) + { + const char* str = pathname.c_str(); + mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + } +#endif + + if (myid == 0) + { + stringstream logFilename; + logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; + UbLog::output_policy::setStream(logFilename.str()); + } + } + + //Sleep(30000); + + LBMReal dLB; // = length[1] / dx; + LBMReal rhoLB = 0.0; + LBMReal nuLB = nuL; //(uLB*dLB) / Re; + + LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); + + const int baseLevel = 0; + + + + Grid3DPtr grid(new Grid3D(comm)); + //grid->setPeriodicX1(true); + //grid->setPeriodicX2(true); + //grid->setPeriodicX3(true); + ////////////////////////////////////////////////////////////////////////// + //restart + UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart)); + //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT); + MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm); + ////////////////////////////////////////////////////////////////////////// + + + + + + mu::Parser fctF1; + //fctF1.SetExpr("vy1*(1-((x1-x0)^2+(x3-z0)^2)/(R^2))"); + //fctF1.SetExpr("vy1*(1-(sqrt((x1-x0)^2+(x3-z0)^2)/R))^0.1"); + fctF1.SetExpr("vy1"); + fctF1.DefineConst("vy1", -uLB); + fctF1.DefineConst("R", 8.0); + fctF1.DefineConst("x0", 0.0); + fctF1.DefineConst("z0", 0.0); + + + if (newStart) + { + + //bounding box + /*double g_minX1 = 0.0; + double g_minX2 = -length[1] / 2.0; + double g_minX3 = -length[2] / 2.0; + + double g_maxX1 = length[0]; + double g_maxX2 = length[1] / 2.0; + double g_maxX3 = length[2] / 2.0;*/ + + double g_minX1 = boundingBox[0]; + double g_minX2 = boundingBox[2]; + double g_minX3 = boundingBox[4]; + + double g_maxX1 = boundingBox[1]; + double g_maxX2 = boundingBox[3]; + 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()); + + + + + GbObject3DPtr 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()); + + GbTriFaceMesh3DPtr cylinder; + if (myid == 0) UBLOG(logINFO, "Read geoFile:start"); + //cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); + cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo + "/" + geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT)); + GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance()); + + + + //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)); + 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, g_maxX2-1*dx, g_minX3, g_maxX1, g_maxX2, g_maxX3)); + if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); + + double blockLength = blocknx[0] * dx; + + + + if (myid == 0) + { + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "Preprocess - start"); + } + + grid->setDeltaX(dx); + grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); + + grid->setPeriodicX1(false); + grid->setPeriodicX2(false); + grid->setPeriodicX3(false); + + + + GenBlocksGridVisitor genBlocks(gridCube); + grid->accept(genBlocks); + + + + + //BC Adapter + ////////////////////////////////////////////////////////////////////////////// + BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + + + BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + + 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); + + mu::Parser fctPhi_F2; + fctPhi_F2.SetExpr("phiL"); + fctPhi_F2.DefineConst("phiL", phiL); + + mu::Parser fctvel_F2_init; + 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 velBCAdapterF1(new VelocityBCAdapterMultiphase(false, true, false, fctF1, phiH, 0.0, endTime)); + + //BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiH, 0.0, endTime)); + //BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_2, phiH, 0.0, endTime)); + + //BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + //BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + + velBCAdapterF1->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + //velBCAdapterF2_1_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + //velBCAdapterF2_2_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + + + //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())); + + + ////////////////////////////////////////////////////////////////////////////////// + //BC visitor + BoundaryConditionsBlockVisitorMultiphase bcVisitor; + bcVisitor.addBC(noSlipBCAdapter); + bcVisitor.addBC(denBCAdapter); + bcVisitor.addBC(velBCAdapterF1); + //bcVisitor.addBC(velBCAdapterF2_1_init); + //bcVisitor.addBC(velBCAdapterF2_2_init); + + + + WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); + + ppblocks->process(0); + + Interactor3DPtr tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::SOLID)); + + D3Q27InteractorPtr inflowF1Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF1, grid, velBCAdapterF1, Interactor3D::SOLID)); + + //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)); + + D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(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); + + + Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW)); + InteractorsHelper intHelper(grid, metisVisitor); + intHelper.addInteractor(tubes); + intHelper.addInteractor(inflowF1Int); + intHelper.addInteractor(outflowInt); + intHelper.selectBlocks(); + + + ppblocks->process(0); + ppblocks.reset(); + + unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks(); + int ghostLayer = 3; + unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0]) * (unsigned long long)(blocknx[1]) * (unsigned long long)(blocknx[2]); + unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock; + unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer); + double needMemAll = double(numberOfNodesPerBlockWithGhostLayer * (27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); + double needMem = needMemAll / double(comm->getNumberOfProcesses()); + + if (myid == 0) + { + UBLOG(logINFO, "Number of blocks = " << numberOfBlocks); + UBLOG(logINFO, "Number of nodes = " << numberOfNodes); + int minInitLevel = grid->getCoarsestInitializedLevel(); + int maxInitLevel = grid->getFinestInitializedLevel(); + for (int level = minInitLevel; level <= maxInitLevel; level++) + { + int nobl = grid->getNumberOfBlocks(level); + UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl); + UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl * numberOfNodesPerBlock); + } + UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); + UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); + 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); + + SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem); + + grid->accept(kernelVisitor); + + if (refineLevel > 0) + { + SetUndefinedNodesBlockVisitor undefNodesVisitor; + 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);*/ + + + InitDistributionsBlockVisitorMultiphase 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); + grid->accept(setConnsVisitor); + + //domain decomposition for threads + //PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); + //grid->accept(pqPartVisitor); + + + + + //boundary conditions grid + { + UbSchedulerPtr geoSch(new UbScheduler(1)); + WriteBoundaryConditionsCoProcessorPtr ppgeo( + new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); + ppgeo->process(0); + ppgeo.reset(); + } + + if (myid == 0) UBLOG(logINFO, "Preprocess - end"); + } + else + { + if (myid == 0) + { + UBLOG(logINFO, "Parameters:"); + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "number of levels = " << refineLevel + 1); + UBLOG(logINFO, "numOfThreads = " << numOfThreads); + UBLOG(logINFO, "path = " << pathname); + } + + 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"); + } + UbSchedulerPtr visSch(new UbScheduler(outTime)); + WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm); + + UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); + NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); + + + + + + + //UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000)); + //TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch)); + //inflowF2->addInteractor(inflowF2_1Int); + //inflowF2->addInteractor(inflowF2_2Int); + + //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI)); + CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch)); + if (myid == 0) UBLOG(logINFO, "Simulation-start"); + calculation->calculate(); + if (myid == 0) UBLOG(logINFO, "Simulation-end"); + } + catch (std::exception& e) + { + cerr << e.what() << endl << flush; + } + catch (std::string& s) + { + cerr << s << endl; + } + catch (...) + { + cerr << "unknown exception" << endl; + } + +} +int main(int argc, char* argv[]) +{ + //Sleep(30000); + if (argv != NULL) + { + if (argv[1] != NULL) + { + run(string(argv[1])); + } + else + { + cout << "Configuration file is missing!" << endl; + } + } + +} + diff --git a/apps/cpu/Multiphase/CMakeLists.txt b/apps/cpu/Multiphase/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..3daebaf854a900fa1fdb9bc31b015969167de15d --- /dev/null +++ b/apps/cpu/Multiphase/CMakeLists.txt @@ -0,0 +1,3 @@ +PROJECT(Multiphase) + +vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} FILES Multiphase.cpp ) diff --git a/apps/cpu/Multiphase/Multiphase (Droplet Test).cpp.backup b/apps/cpu/Multiphase/Multiphase (Droplet Test).cpp.backup new file mode 100644 index 0000000000000000000000000000000000000000..46297d526c76362e2d45e00ad5496c20dac2af99 --- /dev/null +++ b/apps/cpu/Multiphase/Multiphase (Droplet Test).cpp.backup @@ -0,0 +1,482 @@ +#include <iostream> +#include <string> + +#include "VirtualFluids.h" + +using namespace std; + + +void run(string configname) +{ + try + { + ConfigurationFile config; + config.load(configname); + + string pathname = config.getString("pathname"); + string pathGeo = config.getString("pathGeo"); + string geoFile = config.getString("geoFile"); + int numOfThreads = config.getInt("numOfThreads"); + vector<int> blocknx = config.getVector<int>("blocknx"); + vector<double> boundingBox = config.getVector<double>("boundingBox"); + //vector<double> length = config.getVector<double>("length"); + double uLB = config.getDouble("uLB"); + double uF2 = config.getDouble("uF2"); + double nuL = config.getDouble("nuL"); + double nuG = config.getDouble("nuG"); + double densityRatio = config.getDouble("densityRatio"); + double sigma = config.getDouble("sigma"); + int interfaceThickness = config.getInt("interfaceThickness"); + double radius = config.getDouble("radius"); + double theta = config.getDouble("contactAngle"); + double gr = config.getDouble("gravity"); + double phiL = config.getDouble("phi_L"); + double phiH = config.getDouble("phi_H"); + double tauH = config.getDouble("Phase-field Relaxation"); + double mob = config.getDouble("Mobility"); + + + double endTime = config.getDouble("endTime"); + double outTime = config.getDouble("outTime"); + double availMem = config.getDouble("availMem"); + int refineLevel = config.getInt("refineLevel"); + double Re = config.getDouble("Re"); + double dx = config.getDouble("dx"); + bool logToFile = config.getBool("logToFile"); + double restartStep = config.getDouble("restartStep"); + double cpStart = config.getValue<double>("cpStart"); + double cpStep = config.getValue<double>("cpStep"); + bool newStart = config.getValue<bool>("newStart"); + + double beta = 12*sigma/interfaceThickness; + double kappa = 1.5*interfaceThickness*sigma; + + CommunicatorPtr comm = MPICommunicator::getInstance(); + int myid = comm->getProcessID(); + + if (logToFile) + { +#if defined(__unix__) + if (myid == 0) + { + const char* str = pathname.c_str(); + mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + } +#endif + + if (myid == 0) + { + stringstream logFilename; + logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; + UbLog::output_policy::setStream(logFilename.str()); + } + } + + //Sleep(30000); + + LBMReal dLB; // = length[1] / dx; + LBMReal rhoLB = 0.0; + LBMReal nuLB = nuL; //(uLB*dLB) / Re; + + LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); + + const int baseLevel = 0; + + + + Grid3DPtr grid(new Grid3D(comm)); + //grid->setPeriodicX1(true); + //grid->setPeriodicX2(true); + //grid->setPeriodicX3(true); + ////////////////////////////////////////////////////////////////////////// + //restart + UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart)); + //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT); + MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm); + ////////////////////////////////////////////////////////////////////////// + + + + if (newStart) + { + + //bounding box + /*double g_minX1 = 0.0; + double g_minX2 = -length[1] / 2.0; + double g_minX3 = -length[2] / 2.0; + + double g_maxX1 = length[0]; + double g_maxX2 = length[1] / 2.0; + double g_maxX3 = length[2] / 2.0;*/ + + double g_minX1 = boundingBox[0]; + double g_minX2 = boundingBox[2]; + double g_minX3 = boundingBox[4]; + + double g_maxX1 = boundingBox[1]; + double g_maxX2 = boundingBox[3]; + double g_maxX3 = boundingBox[5]; + + //geometry + + 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, 20.0)); + GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/cylinder", WbWriterVtkXmlBinary::getInstance()); + + GbObject3DPtr 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()); + + + double blockLength = blocknx[0] * dx; + + + + if (myid == 0) + { + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "Preprocess - start"); + } + + grid->setDeltaX(dx); + grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); + + grid->setPeriodicX1(true); + grid->setPeriodicX2(true); + grid->setPeriodicX3(true); + + + + GenBlocksGridVisitor genBlocks(gridCube); + grid->accept(genBlocks); + + + //inflow + //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_minX1, g_maxX2+blockLength, g_maxX3+blockLength)); + //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(-34.0, -20.0, 1.0, -31.5, 16.0, 46.0)); + //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(-24.0, 3, 20.0, -22.0, 24.0, 42.0)); + //if (myid==0) GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname+"/geo/geoInflowF1", WbWriterVtkXmlASCII::getInstance()); + + /*GbCuboid3DPtr geoInflowF2_1(new GbCuboid3D(-24.0, -24.0, 0.0, 26.0, 26.0, 3.5)); + if (myid==0) GbSystem3D::writeGeoObject(geoInflowF2_1.get(), pathname+"/geo/geoInflowF2_1", WbWriterVtkXmlASCII::getInstance()); + + GbCuboid3DPtr geoInflowF2_2(new GbCuboid3D(-24.0, -24.0, 56.5, 26.0, 26.0, 59.9)); + if (myid==0) GbSystem3D::writeGeoObject(geoInflowF2_2.get(), pathname+"/geo/geoInflowF2_2", WbWriterVtkXmlASCII::getInstance());*/ + + //outflow + //GbCuboid3DPtr geoOutflow(new GbCuboid3D(126.0-50, -20.0, 1.0, 130.0-50, 16.0, 46.0)); + //GbCuboid3DPtr geoOutflow(new GbCuboid3D(126.0, -20.0, 1.0, 130.0, 16.0, 46.0)); + //GbCuboid3DPtr geoOutflow(new GbCuboid3D(78.0, 3, 20.0, 81.0, 24.0, 42.0)); + //if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); + + //BC Adapter + ////////////////////////////////////////////////////////////////////////////// + //BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + //noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + + + //BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + //denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + + 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 fctF1; + fctF1.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))"); + //fctF1.SetExpr("vx1"); + fctF1.DefineConst("R", 10.0); + //fctF1.DefineConst("R", 8.0); // FlowFocusingSS + fctF1.DefineConst("vx1", uLB); + fctF1.DefineConst("y0", 1.0); + fctF1.DefineConst("z0", 31.0); + + mu::Parser fctF2_1; + fctF2_1.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))"); + //fctF2_1.SetExpr("vx3"); + fctF2_1.DefineConst("R", 12.0); + fctF2_1.DefineConst("vx3", uF2); + fctF2_1.DefineConst("x0", 1.0); + fctF2_1.DefineConst("y0", 1.0); + + mu::Parser fctF2_2; + fctF2_2.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))"); + //fctF2_2.SetExpr("vx3"); + fctF2_2.DefineConst("R", 12.0); + fctF2_2.DefineConst("vx3", -uF2); + fctF2_2.DefineConst("x0", 1.0); + fctF2_2.DefineConst("y0", 1.0); + + mu::Parser fctPhi_F1; + fctPhi_F1.SetExpr("phiH"); + fctPhi_F1.DefineConst("phiH", phiH); + + mu::Parser fctPhi_F2; + fctPhi_F2.SetExpr("phiL"); + fctPhi_F2.DefineConst("phiL", phiL); + + mu::Parser fctvel_F2_init; + 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 velBCAdapterF1(new VelocityBCAdapterMultiphase(true, false, false, fctF1, phiH, 0.0, endTime)); + + //BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiL, 0.0, endTime)); + //BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_2, phiL, 0.0, endTime)); + + //BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + //BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + + //velBCAdapterF1->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + //velBCAdapterF2_1_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + //velBCAdapterF2_2_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + + + //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())); + + + ////////////////////////////////////////////////////////////////////////////////// + //BC visitor + BoundaryConditionsBlockVisitorMultiphase bcVisitor; + /*bcVisitor.addBC(noSlipBCAdapter); + bcVisitor.addBC(denBCAdapter); + bcVisitor.addBC(velBCAdapterF1); + bcVisitor.addBC(velBCAdapterF2_1_init); + bcVisitor.addBC(velBCAdapterF2_2_init);*/ + + + + WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); + + ppblocks->process(0); + + //Interactor3DPtr tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::INVERSESOLID)); + + + + Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B)); + InteractorsHelper intHelper(grid, metisVisitor); + //intHelper.addInteractor(tubes); + + intHelper.selectBlocks(); + + + ppblocks->process(0); + ppblocks.reset(); + + unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks(); + int ghostLayer = 3; + unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]); + unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock; + unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer); + double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); + double needMem = needMemAll / double(comm->getNumberOfProcesses()); + + if (myid == 0) + { + UBLOG(logINFO, "Number of blocks = " << numberOfBlocks); + UBLOG(logINFO, "Number of nodes = " << numberOfNodes); + int minInitLevel = grid->getCoarsestInitializedLevel(); + int maxInitLevel = grid->getFinestInitializedLevel(); + for (int level = minInitLevel; level <= maxInitLevel; level++) + { + int nobl = grid->getNumberOfBlocks(level); + UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl); + UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock); + } + UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); + UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); + UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); + } + + LBMKernelPtr kernel; + + kernel = LBMKernelPtr(new MultiphaseCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], MultiphaseCumulantLBMKernel::NORMAL)); + + kernel->setWithForcing(false); + kernel->setForcingX1(gr); + kernel->setForcingX2(0.0); + 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); + + SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem); + + grid->accept(kernelVisitor); + + if (refineLevel > 0) + { + SetUndefinedNodesBlockVisitor undefNodesVisitor; + grid->accept(undefNodesVisitor); + } + + + + //intHelper.setBC(); + //grid->accept(bcVisitor); + + //initialization of distributions + //initialization of distributions + LBMReal x1c = (g_maxX1 - g_minX1-1)/2; + LBMReal x2c = (g_maxX2 - g_minX2-1)/2; + LBMReal x3c = (g_maxX3 - g_minX3-1)/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.DefineConst("x1c", x1c); + fct1.DefineConst("x2c", x2c); + fct1.DefineConst("x3c", x3c); + 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("0.5*uLB-uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + //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); + + + InitDistributionsBlockVisitorMultiphase 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); + grid->accept(setConnsVisitor); + + //domain decomposition for threads + //PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); + //grid->accept(pqPartVisitor); + + + + + //boundary conditions grid + { + UbSchedulerPtr geoSch(new UbScheduler(1)); + WriteBoundaryConditionsCoProcessorPtr ppgeo( + new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); + ppgeo->process(0); + ppgeo.reset(); + } + + if (myid == 0) UBLOG(logINFO, "Preprocess - end"); + } + else + { + if (myid == 0) + { + UBLOG(logINFO, "Parameters:"); + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "number of levels = " << refineLevel + 1); + UBLOG(logINFO, "numOfThreads = " << numOfThreads); + UBLOG(logINFO, "path = " << pathname); + } + + 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"); + } + UbSchedulerPtr visSch(new UbScheduler(outTime)); + //WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm); + + UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); + NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); + + + + + + + UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000)); + TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch)); + //inflowF2->addInteractor(inflowF2_1Int); + //inflowF2->addInteractor(inflowF2_2Int); + + //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI)); + CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch)); + if (myid == 0) UBLOG(logINFO, "Simulation-start"); + calculation->calculate(); + if (myid == 0) UBLOG(logINFO, "Simulation-end"); + } + catch (std::exception& e) + { + cerr << e.what() << endl << flush; + } + catch (std::string& s) + { + cerr << s << endl; + } + catch (...) + { + cerr << "unknown exception" << endl; + } + +} +int main(int argc, char* argv[]) +{ + //Sleep(30000); + if (argv != NULL) + { + if (argv[1] != NULL) + { + run(string(argv[1])); + } + else + { + cout << "Configuration file is missing!" << endl; + } + } + +} + diff --git a/apps/cpu/Multiphase/Multiphase (Jet breakup on Phoenix).cpp.backup b/apps/cpu/Multiphase/Multiphase (Jet breakup on Phoenix).cpp.backup new file mode 100644 index 0000000000000000000000000000000000000000..9f28008987968254edb46a1b7750155aad4f5ced --- /dev/null +++ b/apps/cpu/Multiphase/Multiphase (Jet breakup on Phoenix).cpp.backup @@ -0,0 +1,508 @@ +#include <iostream> +#include <string> + +#include "VirtualFluids.h" + +using namespace std; + + +void run(string configname) +{ + try + { + ConfigurationFile config; + config.load(configname); + + string pathname = config.getString("pathname"); + string pathGeo = config.getString("pathGeo"); + string geoFile = config.getString("geoFile"); + int numOfThreads = config.getInt("numOfThreads"); + vector<int> blocknx = config.getVector<int>("blocknx"); + vector<double> boundingBox = config.getVector<double>("boundingBox"); + //vector<double> length = config.getVector<double>("length"); + double uLB = config.getDouble("uLB"); + double uF2 = config.getDouble("uF2"); + double nuL = config.getDouble("nuL"); + double nuG = config.getDouble("nuG"); + double densityRatio = config.getDouble("densityRatio"); + double sigma = config.getDouble("sigma"); + int interfaceThickness = config.getInt("interfaceThickness"); + double radius = config.getDouble("radius"); + double theta = config.getDouble("contactAngle"); + double gr = config.getDouble("gravity"); + double phiL = config.getDouble("phi_L"); + double phiH = config.getDouble("phi_H"); + double tauH = config.getDouble("Phase-field Relaxation"); + double mob = config.getDouble("Mobility"); + + + double endTime = config.getDouble("endTime"); + double outTime = config.getDouble("outTime"); + double availMem = config.getDouble("availMem"); + int refineLevel = config.getInt("refineLevel"); + double Re = config.getDouble("Re"); + double dx = config.getDouble("dx"); + bool logToFile = config.getBool("logToFile"); + double restartStep = config.getDouble("restartStep"); + double cpStart = config.getValue<double>("cpStart"); + double cpStep = config.getValue<double>("cpStep"); + bool newStart = config.getValue<bool>("newStart"); + + double beta = 12*sigma/interfaceThickness; + double kappa = 1.5*interfaceThickness*sigma; + + CommunicatorPtr comm = MPICommunicator::getInstance(); + int myid = comm->getProcessID(); + + if (logToFile) + { +#if defined(__unix__) + if (myid == 0) + { + const char* str = pathname.c_str(); + mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + } +#endif + + if (myid == 0) + { + stringstream logFilename; + logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; + UbLog::output_policy::setStream(logFilename.str()); + } + } + + //Sleep(30000); + + LBMReal dLB; // = length[1] / dx; + LBMReal rhoLB = 0.0; + LBMReal nuLB = nuL; //(uLB*dLB) / Re; + + LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); + + const int baseLevel = 0; + + + + Grid3DPtr grid(new Grid3D(comm)); + //grid->setPeriodicX1(true); + //grid->setPeriodicX2(true); + //grid->setPeriodicX3(true); + ////////////////////////////////////////////////////////////////////////// + //restart + UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart)); + //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT); + MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm); + ////////////////////////////////////////////////////////////////////////// + + + + + + mu::Parser fctF1; + //fctF1.SetExpr("vy1*(1-((x1-x0)^2+(x3-z0)^2)/(R^2))"); + //fctF1.SetExpr("vy1*(1-(sqrt((x1-x0)^2+(x3-z0)^2)/R))^0.1"); + fctF1.SetExpr("vy1"); + fctF1.DefineConst("vy1", -uLB); + fctF1.DefineConst("R", 8.0); + fctF1.DefineConst("x0", 0.0); + fctF1.DefineConst("z0", 0.0); + + + if (newStart) + { + + //bounding box + /*double g_minX1 = 0.0; + double g_minX2 = -length[1] / 2.0; + double g_minX3 = -length[2] / 2.0; + + double g_maxX1 = length[0]; + double g_maxX2 = length[1] / 2.0; + double g_maxX3 = length[2] / 2.0;*/ + + double g_minX1 = boundingBox[0]; + double g_minX2 = boundingBox[2]; + double g_minX3 = boundingBox[4]; + + double g_maxX1 = boundingBox[1]; + double g_maxX2 = boundingBox[3]; + 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()); + + + + + GbObject3DPtr 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()); + + GbTriFaceMesh3DPtr cylinder; + if (myid==0) UBLOG(logINFO, "Read geoFile:start"); + //cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); + cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT)); + GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance()); + + + + //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, g_minX2-0.5*dx, g_minX3, g_maxX1, g_minX2 - 1.0*dx, g_maxX3)); + 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, g_maxX2-1*dx, g_minX3, g_maxX1, g_maxX2, g_maxX3)); + if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); + + + double blockLength = blocknx[0] * dx; + + + + if (myid == 0) + { + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "Preprocess - start"); + } + + grid->setDeltaX(dx); + grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); + + grid->setPeriodicX1(false); + grid->setPeriodicX2(false); + grid->setPeriodicX3(false); + + + + GenBlocksGridVisitor genBlocks(gridCube); + grid->accept(genBlocks); + + + + + //BC Adapter + ////////////////////////////////////////////////////////////////////////////// + BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + + + BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + + 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); + + mu::Parser fctPhi_F2; + fctPhi_F2.SetExpr("phiL"); + fctPhi_F2.DefineConst("phiL", phiL); + + mu::Parser fctvel_F2_init; + 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 velBCAdapterF1 (new VelocityBCAdapterMultiphase(false, true, false, fctF1 , phiH, 0.0, endTime)); + + //BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiH, 0.0, endTime)); + //BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_2, phiH, 0.0, endTime)); + + //BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + //BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + + velBCAdapterF1->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + //velBCAdapterF2_1_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + //velBCAdapterF2_2_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + + + //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())); + + + ////////////////////////////////////////////////////////////////////////////////// + //BC visitor + BoundaryConditionsBlockVisitorMultiphase bcVisitor; + bcVisitor.addBC(noSlipBCAdapter); + bcVisitor.addBC(denBCAdapter); + bcVisitor.addBC(velBCAdapterF1); + //bcVisitor.addBC(velBCAdapterF2_1_init); + //bcVisitor.addBC(velBCAdapterF2_2_init); + + + + WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); + + ppblocks->process(0); + + Interactor3DPtr tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::SOLID)); + + D3Q27InteractorPtr inflowF1Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF1, grid, velBCAdapterF1, Interactor3D::SOLID)); + + //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)); + + D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(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); + + + Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW)); + InteractorsHelper intHelper(grid, metisVisitor); + intHelper.addInteractor(tubes); + intHelper.addInteractor(inflowF1Int); + intHelper.addInteractor(outflowInt); + intHelper.selectBlocks(); + + + ppblocks->process(0); + ppblocks.reset(); + + unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks(); + int ghostLayer = 3; + unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]); + unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock; + unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer); + double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); + double needMem = needMemAll / double(comm->getNumberOfProcesses()); + + if (myid == 0) + { + UBLOG(logINFO, "Number of blocks = " << numberOfBlocks); + UBLOG(logINFO, "Number of nodes = " << numberOfNodes); + int minInitLevel = grid->getCoarsestInitializedLevel(); + int maxInitLevel = grid->getFinestInitializedLevel(); + for (int level = minInitLevel; level <= maxInitLevel; level++) + { + int nobl = grid->getNumberOfBlocks(level); + UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl); + UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock); + } + UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); + UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); + 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); + + SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem); + + grid->accept(kernelVisitor); + + if (refineLevel > 0) + { + SetUndefinedNodesBlockVisitor undefNodesVisitor; + 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);*/ + + + InitDistributionsBlockVisitorMultiphase 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); + grid->accept(setConnsVisitor); + + //domain decomposition for threads + //PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); + //grid->accept(pqPartVisitor); + + + + + //boundary conditions grid + { + UbSchedulerPtr geoSch(new UbScheduler(1)); + WriteBoundaryConditionsCoProcessorPtr ppgeo( + new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); + ppgeo->process(0); + ppgeo.reset(); + } + + if (myid == 0) UBLOG(logINFO, "Preprocess - end"); + } + else + { + if (myid == 0) + { + UBLOG(logINFO, "Parameters:"); + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "number of levels = " << refineLevel + 1); + UBLOG(logINFO, "numOfThreads = " << numOfThreads); + UBLOG(logINFO, "path = " << pathname); + } + + 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"); + } + UbSchedulerPtr visSch(new UbScheduler(outTime)); + WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm); + + UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); + NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); + + + + + + + //UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000)); + //TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch)); + //inflowF2->addInteractor(inflowF2_1Int); + //inflowF2->addInteractor(inflowF2_2Int); + + //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI)); + CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch)); + if (myid == 0) UBLOG(logINFO, "Simulation-start"); + calculation->calculate(); + if (myid == 0) UBLOG(logINFO, "Simulation-end"); + } + catch (std::exception& e) + { + cerr << e.what() << endl << flush; + } + catch (std::string& s) + { + cerr << s << endl; + } + catch (...) + { + cerr << "unknown exception" << endl; + } + +} +int main(int argc, char* argv[]) +{ + //Sleep(30000); + if (argv != NULL) + { + if (argv[1] != NULL) + { + run(string(argv[1])); + } + else + { + cout << "Configuration file is missing!" << endl; + } + } + +} + diff --git a/apps/cpu/Multiphase/Multiphase.cfg b/apps/cpu/Multiphase/Multiphase.cfg new file mode 100644 index 0000000000000000000000000000000000000000..0d3e5633ea5b4c718eadd5fba04b89abc38497ed --- /dev/null +++ b/apps/cpu/Multiphase/Multiphase.cfg @@ -0,0 +1,48 @@ +pathname = d:/temp/MultiphaseNew +pathGeo = d:/Projects/VirtualFluids-Multiphase/source/Applications/Multiphase/backup +geoFile = JetBreakup2.ASCII.stl +numOfThreads = 4 +availMem = 10e9 + +#Grid + +#boundingBox = -1.0 121.0 0.5 629.0 -1.0 121.0 #(Jet Breakup) (Original with inlet length) +#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 + + +dx = 0.5 +refineLevel = 0 + +#Simulation +uLB = 0.05 #inlet velocity +uF2 = 0.0001 +Re = 10 +nuL = 1.0e-5 #!1e-2 +nuG = 1.16e-4 #!1e-2 +densityRatio = 10 #30 +sigma = 4.66e-3 #surface tension 1e-4 ./. 1e-5 +interfaceThickness = 5 +radius = 615.0 (Jet Breakup) +contactAngle = 110.0 +gravity = 0.0 +#gravity = -5.04e-6 +phi_L = 0.0 +phi_H = 1.0 +Phase-field Relaxation = 0.6 +Mobility = 0.02 # 0.01 ./. 0.08, fine correction of Phase-field Relaxation parameter, to activate it need to change in kernel tauH to tauH1 + + +logToFile = false + +newStart = true +restartStep = 100000 + +cpStart = 100000 +cpStep = 100000 + +outTime = 1 +endTime = 200000000 \ No newline at end of file diff --git a/apps/cpu/Multiphase/Multiphase.cpp b/apps/cpu/Multiphase/Multiphase.cpp new file mode 100644 index 0000000000000000000000000000000000000000..4ea38e31c7ec3b29f157bcb66d0b0d885bcc12af --- /dev/null +++ b/apps/cpu/Multiphase/Multiphase.cpp @@ -0,0 +1,503 @@ +#include <iostream> +#include <string> + +#include "VirtualFluids.h" + +using namespace std; + +void run(string configname) +{ + try { + ConfigurationFile config; + config.load(configname); + + string pathname = config.getValue<string>("pathname"); + string pathGeo = config.getValue<string>("pathGeo"); + string geoFile = config.getValue<string>("geoFile"); + int numOfThreads = config.getValue<int>("numOfThreads"); + vector<int> blocknx = config.getVector<int>("blocknx"); + vector<double> boundingBox = config.getVector<double>("boundingBox"); + // vector<double> length = config.getVector<double>("length"); + double uLB = config.getValue<double>("uLB"); + // double uF2 = config.getValue<double>("uF2"); + double nuL = config.getValue<double>("nuL"); + double nuG = config.getValue<double>("nuG"); + double densityRatio = config.getValue<double>("densityRatio"); + double sigma = config.getValue<double>("sigma"); + int interfaceThickness = config.getValue<int>("interfaceThickness"); + double radius = config.getValue<double>("radius"); + double theta = config.getValue<double>("contactAngle"); + double gr = config.getValue<double>("gravity"); + double phiL = config.getValue<double>("phi_L"); + double phiH = config.getValue<double>("phi_H"); + double tauH = config.getValue<double>("Phase-field Relaxation"); + double mob = config.getValue<double>("Mobility"); + + double endTime = config.getValue<double>("endTime"); + double outTime = config.getValue<double>("outTime"); + double availMem = config.getValue<double>("availMem"); + int refineLevel = config.getValue<int>("refineLevel"); + double Re = config.getValue<double>("Re"); + double dx = config.getValue<double>("dx"); + bool logToFile = config.getValue<bool>("logToFile"); + double restartStep = config.getValue<double>("restartStep"); + double cpStart = config.getValue<double>("cpStart"); + double cpStep = config.getValue<double>("cpStep"); + bool newStart = config.getValue<bool>("newStart"); + + double beta = 12 * sigma / interfaceThickness; + double kappa = 1.5 * interfaceThickness * sigma; + + SPtr<Communicator> comm = MPICommunicator::getInstance(); + int myid = comm->getProcessID(); + + if (myid == 0) + UBLOG(logINFO, "Jet Breakup: Start!"); + + if (logToFile) { +#if defined(__unix__) + if (myid == 0) { + const char *str = pathname.c_str(); + mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + } +#endif + + if (myid == 0) { + stringstream logFilename; + logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; + UbLog::output_policy::setStream(logFilename.str()); + } + } + + // Sleep(30000); + + // LBMReal dLB = 0; // = length[1] / dx; + LBMReal rhoLB = 0.0; + LBMReal nuLB = nuL; //(uLB*dLB) / Re; + + SPtr<LBMUnitConverter> conv(new LBMUnitConverter()); + + const int baseLevel = 0; + + SPtr<LBMKernel> kernel; + + kernel = SPtr<LBMKernel>(new MultiphaseCumulantLBMKernel()); + + 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); + + SPtr<BCProcessor> bcProc(new BCProcessor()); + // BCProcessorPtr bcProc(new ThinWallBCProcessor()); + + kernel->setBCProcessor(bcProc); + + SPtr<Grid3D> grid(new Grid3D(comm)); + // grid->setPeriodicX1(true); + // grid->setPeriodicX2(true); + // grid->setPeriodicX3(true); + ////////////////////////////////////////////////////////////////////////// + // 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); + ////////////////////////////////////////////////////////////////////////// + + mu::Parser fctF1; + // fctF1.SetExpr("vy1*(1-((x1-x0)^2+(x3-z0)^2)/(R^2))"); + // fctF1.SetExpr("vy1*(1-(sqrt((x1-x0)^2+(x3-z0)^2)/R))^0.1"); + fctF1.SetExpr("vy1"); + fctF1.DefineConst("vy1", -uLB); + fctF1.DefineConst("R", 8.0); + fctF1.DefineConst("x0", 0.0); + fctF1.DefineConst("z0", 0.0); + + if (newStart) { + + // bounding box + /*double g_minX1 = 0.0; + double g_minX2 = -length[1] / 2.0; + double g_minX3 = -length[2] / 2.0; + + double g_maxX1 = length[0]; + double g_maxX2 = length[1] / 2.0; + double g_maxX3 = length[2] / 2.0;*/ + + double g_minX1 = boundingBox[0]; + double g_minX2 = boundingBox[2]; + double g_minX3 = boundingBox[4]; + + double g_maxX1 = boundingBox[1]; + double g_maxX2 = boundingBox[3]; + 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); + 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)); + 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, g_maxX2 - 1 * dx, g_minX3, g_maxX1, g_maxX2, g_maxX3)); + if (myid == 0) + GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + "/geo/geoOutflow", + WbWriterVtkXmlASCII::getInstance()); + + // double blockLength = blocknx[0] * dx; + + if (myid == 0) { + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "Preprocess - start"); + } + + grid->setDeltaX(dx); + grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); + + grid->setPeriodicX1(false); + grid->setPeriodicX2(false); + grid->setPeriodicX3(false); + + GenBlocksGridVisitor genBlocks(gridCube); + grid->accept(genBlocks); + + // BC Adapter + ////////////////////////////////////////////////////////////////////////////// + SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithmMultiphase())); + + SPtr<BCAdapter> denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NonReflectingOutflowBCAlgorithmMultiphase())); + + // 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); + + mu::Parser fctPhi_F2; + fctPhi_F2.SetExpr("phiL"); + fctPhi_F2.DefineConst("phiL", phiL); + + mu::Parser fctvel_F2_init; + 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)); + + SPtr<BCAdapter> velBCAdapterF1( + new VelocityBCAdapterMultiphase(false, true, false, fctF1, phiH, 0.0, endTime)); + + // BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiH, + // 0.0, endTime)); BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, + // fctF2_2, phiH, 0.0, endTime)); + + // BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, + // phiL, 0.0, endTime)); BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, + // true, fctvel_F2_init, phiL, 0.0, endTime)); + + velBCAdapterF1->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityBCAlgorithmMultiphase())); + // velBCAdapterF2_1_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + // velBCAdapterF2_2_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + + // 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())); + + ////////////////////////////////////////////////////////////////////////////////// + // BC visitor + BoundaryConditionsBlockVisitorMultiphase bcVisitor; + bcVisitor.addBC(noSlipBCAdapter); + bcVisitor.addBC(denBCAdapter); + 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)); + + SPtr<D3Q27Interactor> inflowF1Int( + new D3Q27Interactor(geoInflowF1, grid, velBCAdapterF1, Interactor3D::SOLID)); + + // 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)); + + 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); + + SPtr<Grid3DVisitor> metisVisitor( + new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW)); + InteractorsHelper intHelper(grid, metisVisitor); + intHelper.addInteractor(tubes); + intHelper.addInteractor(inflowF1Int); + intHelper.addInteractor(outflowInt); + intHelper.selectBlocks(); + + ppblocks->process(0); + ppblocks.reset(); + + unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks(); + int ghostLayer = 3; + unsigned long long numberOfNodesPerBlock = + (unsigned long long)(blocknx[0]) * (unsigned long long)(blocknx[1]) * (unsigned long long)(blocknx[2]); + unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock; + unsigned long long numberOfNodesPerBlockWithGhostLayer = + numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer); + double needMemAll = + double(numberOfNodesPerBlockWithGhostLayer * (27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); + double needMem = needMemAll / double(comm->getNumberOfProcesses()); + + if (myid == 0) { + UBLOG(logINFO, "Number of blocks = " << numberOfBlocks); + UBLOG(logINFO, "Number of nodes = " << numberOfNodes); + int minInitLevel = grid->getCoarsestInitializedLevel(); + int maxInitLevel = grid->getFinestInitializedLevel(); + for (int level = minInitLevel; level <= maxInitLevel; level++) { + int nobl = grid->getNumberOfBlocks(level); + UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl); + UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl * numberOfNodesPerBlock); + } + UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); + UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); + 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); + + SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, + needMem); + + grid->accept(kernelVisitor); + + if (refineLevel > 0) { + SetUndefinedNodesBlockVisitor undefNodesVisitor; + 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);*/ + + InitDistributionsBlockVisitorMultiphase 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); + grid->accept(setConnsVisitor); + + // domain decomposition for threads + // PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); + // grid->accept(pqPartVisitor); + + // boundary conditions grid + { + SPtr<UbScheduler> geoSch(new UbScheduler(1)); + SPtr<WriteBoundaryConditionsCoProcessor> ppgeo(new WriteBoundaryConditionsCoProcessor( + grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), comm)); + ppgeo->process(0); + ppgeo.reset(); + } + + if (myid == 0) + UBLOG(logINFO, "Preprocess - end"); + } else { + if (myid == 0) { + UBLOG(logINFO, "Parameters:"); + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "number of levels = " << refineLevel + 1); + UBLOG(logINFO, "numOfThreads = " << numOfThreads); + UBLOG(logINFO, "path = " << pathname); + } + + 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"); + } + SPtr<UbScheduler> visSch(new UbScheduler(outTime)); + SPtr<WriteMacroscopicQuantitiesCoProcessor> pp(new WriteMacroscopicQuantitiesCoProcessor( + grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm)); + + SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100)); + SPtr<NUPSCounterCoProcessor> npr(new NUPSCounterCoProcessor(grid, nupsSch, numOfThreads, comm)); + + SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1)); + SPtr<Calculator> calculator(new BasicCalculator(grid, stepGhostLayer, endTime)); + calculator->addCoProcessor(npr); + calculator->addCoProcessor(pp); + + if (myid == 0) + UBLOG(logINFO, "Simulation-start"); + calculator->calculate(); + if (myid == 0) + UBLOG(logINFO, "Simulation-end"); + } catch (std::exception &e) { + cerr << e.what() << endl << flush; + } catch (std::string &s) { + cerr << s << endl; + } catch (...) { + cerr << "unknown exception" << endl; + } +} +int main(int argc, char *argv[]) +{ + // Sleep(30000); + if (argv != NULL) { + if (argv[1] != NULL) { + run(string(argv[1])); + } else { + cout << "Configuration file is missing!" << endl; + } + } +} diff --git a/apps/cpu/Multiphase/backup/3D flow-focusing.STL b/apps/cpu/Multiphase/backup/3D flow-focusing.STL new file mode 100644 index 0000000000000000000000000000000000000000..88aa3e365ce64c70526dc909d3578ac35a72f815 Binary files /dev/null and b/apps/cpu/Multiphase/backup/3D flow-focusing.STL differ diff --git a/apps/cpu/Multiphase/backup/Cubic_jet.stl b/apps/cpu/Multiphase/backup/Cubic_jet.stl new file mode 100644 index 0000000000000000000000000000000000000000..c72bd5e4cc997a156f43cc526b38d7fb49077aa1 Binary files /dev/null and b/apps/cpu/Multiphase/backup/Cubic_jet.stl differ diff --git a/apps/cpu/Multiphase/backup/CumulantKernel-Before Cumulant modifications.cpp b/apps/cpu/Multiphase/backup/CumulantKernel-Before Cumulant modifications.cpp new file mode 100644 index 0000000000000000000000000000000000000000..860a1f1128fb161ee502bf8e1989748722a7941b --- /dev/null +++ b/apps/cpu/Multiphase/backup/CumulantKernel-Before Cumulant modifications.cpp @@ -0,0 +1,2006 @@ +#include "MultiphaseCumulantLBMKernel.h" +#include "D3Q27System.h" +#include "InterpolationProcessor.h" +#include "D3Q27EsoTwist3DSplittedVector.h" +#include <math.h> +#include <omp.h> + +#define PROOF_CORRECTNESS + +////////////////////////////////////////////////////////////////////////// +MultiphaseCumulantLBMKernel::MultiphaseCumulantLBMKernel() +{ + this->nx1 = 0; + this->nx2 = 0; + this->nx3 = 0; + this->parameter = NORMAL; + this->OxyyMxzz = 1.0; + this->compressible = false; +} +////////////////////////////////////////////////////////////////////////// +MultiphaseCumulantLBMKernel::MultiphaseCumulantLBMKernel(int nx1, int nx2, int nx3, Parameter p) +{ + this->nx1 = nx1; + this->nx2 = nx2; + this->nx3 = nx3; + parameter = p; + this->compressible = false; +} +////////////////////////////////////////////////////////////////////////// +MultiphaseCumulantLBMKernel::~MultiphaseCumulantLBMKernel(void) +{ + +} +////////////////////////////////////////////////////////////////////////// +void MultiphaseCumulantLBMKernel::init() +{ + //DistributionArray3DPtr d(new D3Q27EsoTwist3DSplittedVector(nx1+ghostLayerWitdh*2, nx2+ghostLayerWitdh*2, nx3+ghostLayerWitdh*2, -999.0)); + DistributionArray3DPtr f(new D3Q27EsoTwist3DSplittedVector(nx1+2, nx2+2, nx3+2, -999.0)); + DistributionArray3DPtr h(new D3Q27EsoTwist3DSplittedVector(nx1+2, nx2+2, nx3+2, -999.0)); // For phase-field + //PhaseFieldArray3DPtr phi(new CbArray3D<LBMReal,IndexerX3X2X1>(nx1+2, nx2+2, nx3+2, -999.0)); + dataSet->setFdistributions(f); + dataSet->setHdistributions(h); // For phase-field + //dataSet->setPhaseField(phi); +} +////////////////////////////////////////////////////////////////////////// +LBMKernelPtr MultiphaseCumulantLBMKernel::clone() +{ + LBMKernelPtr kernel(new MultiphaseCumulantLBMKernel(nx1, nx2, nx3, parameter)); + boost::dynamic_pointer_cast<MultiphaseCumulantLBMKernel>(kernel)->init(); + + kernel->setCollisionFactorMultiphase(this->collFactorL, this->collFactorG); + kernel->setDensityRatio(this->densityRatio); + kernel->setMultiphaseModelParameters(this->beta, this->kappa); + kernel->setContactAngle(this->contactAngle); + kernel->setPhiL(this->phiL); + kernel->setPhiH(this->phiH); + kernel->setPhaseFieldRelaxation(this->tauH); + + kernel->setBCProcessor(bcProcessor->clone(kernel)); + kernel->setWithForcing(withForcing); + kernel->setForcingX1(muForcingX1); + kernel->setForcingX2(muForcingX2); + kernel->setForcingX3(muForcingX3); + kernel->setIndex(ix1, ix2, ix3); + kernel->setDeltaT(deltaT); + switch (parameter) + { + case NORMAL: + boost::dynamic_pointer_cast<MultiphaseCumulantLBMKernel>(kernel)->OxyyMxzz = 1.0; + break; + case MAGIC: + boost::dynamic_pointer_cast<MultiphaseCumulantLBMKernel>(kernel)->OxyyMxzz = 2.0 +(-collFactor); + break; + } + return kernel; +} +////////////////////////////////////////////////////////////////////////// +void MultiphaseCumulantLBMKernel::calculate() +{ + timer.resetAndStart(); + collideAll(); + timer.stop(); +} +////////////////////////////////////////////////////////////////////////// +void MultiphaseCumulantLBMKernel::collideAll() +{ + using namespace D3Q27System; + + //initializing of forcing stuff + /*if (withForcing) + { + muForcingX1.DefineVar("x1",&muX1); muForcingX1.DefineVar("x2",&muX2); muForcingX1.DefineVar("x3",&muX3); + muForcingX2.DefineVar("x1",&muX1); muForcingX2.DefineVar("x2",&muX2); muForcingX2.DefineVar("x3",&muX3); + muForcingX3.DefineVar("x1",&muX1); muForcingX3.DefineVar("x2",&muX2); muForcingX3.DefineVar("x3",&muX3); + + muDeltaT = deltaT; + + muForcingX1.DefineVar("dt",&muDeltaT); + muForcingX2.DefineVar("dt",&muDeltaT); + muForcingX3.DefineVar("dt",&muDeltaT); + + muNu = (1.0/3.0)*(1.0/collFactor - 1.0/2.0); + + muForcingX1.DefineVar("nu",&muNu); + muForcingX2.DefineVar("nu",&muNu); + muForcingX3.DefineVar("nu",&muNu); + + LBMReal forcingX1 = 0; + LBMReal forcingX2 = 0; + LBMReal forcingX3 = 0; + }*/ + forcingX1 = 0.0; + forcingX2 = 0.0; + forcingX3 = 0.0; + ///////////////////////////////////// + + localDistributionsF = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); + nonLocalDistributionsF = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); + zeroDistributionsF = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); + + localDistributionsH = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions(); + nonLocalDistributionsH = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions(); + zeroDistributionsH = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions(); + + //phaseField = dataSet->getPhaseField(); + + BCArray3DPtr bcArray = this->getBCProcessor()->getBCArray(); + + + + const int bcArrayMaxX1 = (int)bcArray->getNX1(); + const int bcArrayMaxX2 = (int)bcArray->getNX2(); + const int bcArrayMaxX3 = (int)bcArray->getNX3(); + + int minX1 = ghostLayerWidth; + int minX2 = ghostLayerWidth; + int minX3 = ghostLayerWidth; + int maxX1 = bcArrayMaxX1-ghostLayerWidth; + int maxX2 = bcArrayMaxX2-ghostLayerWidth; + int maxX3 = bcArrayMaxX3-ghostLayerWidth; + + +//#pragma omp parallel num_threads(8) + { + // int i = omp_get_thread_num(); + // printf_s("Hello from thread %d\n", i); + //} +//#pragma omp for + + + +/* +/////// Filling ghost nodes for FD computations ////////// + for(int x1 = minX1; x1 < maxX1; x1++) + { + for(int x2 = minX2; x2 < maxX2; x2++) + { + int x3 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, x2, maxX3-1); + x3 = maxX3; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, x2, minX3); + } + } + for(int x2 = minX2; x2 < maxX2; x2++) + { + for(int x3 = minX3; x3 < maxX3; x3++) + { + int x1 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(maxX1-1, x2, x3); + x1 = maxX1; + (*phaseField)(x1, x2, x3) = (*phaseField)(minX1, x2, x3); + } + } + for(int x1 = minX1; x1 < maxX1; x1++) + { + for(int x3 = minX3; x3 < maxX3; x3++) + { + int x2 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, maxX2-1, x3); + x2 = maxX2; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, minX2, x3); + } + } + (*phaseField)(0, 0, 0 ) = (*phaseField)(maxX1-1, maxX2-1, maxX3-1); + (*phaseField)(0, 0, maxX3) = (*phaseField)(maxX1-1, maxX2-1, minX3 ); + (*phaseField)(0, maxX2, 0 ) = (*phaseField)(maxX1-1, minX2, maxX3-1 ); + (*phaseField)(0, maxX2, maxX3) = (*phaseField)(maxX1-1, minX2, minX3 ); + + (*phaseField)(maxX1, 0, 0 ) = (*phaseField)(minX1, maxX2-1, maxX3-1); + (*phaseField)(maxX1, 0, maxX3) = (*phaseField)(minX1, maxX2-1, minX3 ); + (*phaseField)(maxX1, maxX2, 0 ) = (*phaseField)(minX1, minX2, maxX3-1 ); + (*phaseField)(maxX1, maxX2, maxX3) = (*phaseField)(minX1, minX2, minX3 ); + +///////////////////////////////////////////////////////// +*/ + + CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr phaseField(new CbArray3D<LBMReal,IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0)); + + //CbArray3D<LBMReal> phaseField(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3,-999); + + + for(int x3 = 0; x3 <= maxX3; x3++) + { + for(int x2 = 0; x2 <= maxX2; x2++) + { + for(int x1 = 0; x1 <= maxX1; x1++) + { + if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3)) + { + int x1p = x1 + 1; + int x2p = x2 + 1; + int x3p = x3 + 1; + + 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[ZERO] = (*this->zeroDistributionsH)(x1,x2,x3); + //LBMReal phase = h[ZERO] + h[E] + h[W] + h[N] + h[S] + h[T] + h[B] + h[NE] + h[SW] + h[SE] + h[NW] + h[TE] + h[BW] + + // h[BE] + h[TW] + h[TN] + h[BS] + h[BN] + h[TS] + h[TNE] + h[TNW] + h[TSE] + h[TSW] + h[BNE] + h[BNW] + h[BSE] + h[BSW]; + //if (phase > 1.0) phase = 1.0e0; + //(*phaseField)(x1,x2,x3) = phase; + (*phaseField)(x1,x2,x3) = h[ZERO] + h[E] + h[W] + h[N] + h[S] + h[T] + h[B] + h[NE] + h[SW] + h[SE] + h[NW] + h[TE] + h[BW] + + h[BE] + h[TW] + h[TN] + h[BS] + h[BN] + h[TS] + h[TNE] + h[TNW] + h[TSE] + h[TSW] + h[BNE] + h[BNW] + h[BSE] + h[BSW]; + } + } + } + } + + + LBMReal collFactorM; + LBMReal forcingTerm[D3Q27System::ENDF+1]; + LBMReal m000, m100, m010, m001, m110, m101, m011, m200, m020, m002, m120, m102, m210, m012, m201, m021, m111, m220, m202, m022, m211, m121, m112, m221, m212, m122, m222; + LBMReal k000, k100, k010, k001, k110, k101, k011, k200, k020, k002, k120, k102, k210, k012, k201, k021, k111, k220, k202, k022, k211, k121, k112, k221, k212, k122, k222; + LBMReal c000, c100, c010, c001, c110, c101, c011, c200, c020, c002, c120, c102, c210, c012, c201, c021, c111, c220, c202, c022, c211, c121, c112, c221, c212, c122, c222; + + LBMReal k200_pl_k020_pl_k002, k200_mi_k020, k200_mi_k002, k210_pl_k012, k210_mi_k012, k201_pl_k021, k201_mi_k021, k120_pl_k102, k120_mi_k102, k220_pl_k202_pl_k022, + k220_mi2_k202_pl_k022, k220_pl_k202_mi2_k022; + + LBMReal c200_pl_c020_pl_c002, c200_mi_c020, c200_mi_c002, c210_pl_c012, c210_mi_c012, c201_pl_c021, c201_mi_c021, c120_pl_c102, c120_mi_c102, c220_pl_c202_pl_c022, + c220_mi2_c202_pl_c022, c220_pl_c202_mi2_c022; + + LBMReal w1, w2, w3, w4, w5, w6, w7, w8, w9, w10; + + w2 = 1.0; + w3 = 1.0; + w4 = 1.0; + w5 = 1.0; + w6 = 1.0; + w7 = 1.0; + w8 = 1.0; + w9 = 1.0; + w10 = 1.0; + + for(int x3 = minX3; x3 < maxX3; x3++) + { + for(int x2 = minX2; x2 < maxX2; x2++) + { + for(int x1 = minX1; x1 < maxX1; x1++) + { + if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3)) + { + int x1p = x1 + 1; + int x2p = x2 + 1; + int x3p = x3 + 1; + + + ////////////////////////////////////////////////////////////////////////// + //Read distributions and phase field + //////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////// + + //E N T + //c c c + ////////// + //W S B + //a a a + + //Rest ist b + + //mfxyz + //a - negative + //b - null + //c - positive + + // a b c + //-1 0 1 + + /* + phi[ZERO] = (phaseField)(x1,x2,x3); + phi[E ] = (phaseField)(x1 + DX1[E ], x2 + DX2[E ], x3 + DX3[E ]); + phi[N ] = (phaseField)(x1 + DX1[N ], x2 + DX2[N ], x3 + DX3[N ]); + phi[T ] = (phaseField)(x1 + DX1[T ], x2 + DX2[T ], x3 + DX3[T ]); + phi[W ] = (phaseField)(x1 + DX1[W ], x2 + DX2[W ], x3 + DX3[W ]); + phi[S ] = (phaseField)(x1 + DX1[S ], x2 + DX2[S ], x3 + DX3[S ]); + phi[B ] = (phaseField)(x1 + DX1[B ], x2 + DX2[B ], x3 + DX3[B ]); + phi[NE ] = (phaseField)(x1 + DX1[NE ], x2 + DX2[NE ], x3 + DX3[NE ]); + phi[NW ] = (phaseField)(x1 + DX1[NW ], x2 + DX2[NW ], x3 + DX3[NW ]); + phi[TE ] = (phaseField)(x1 + DX1[TE ], x2 + DX2[TE ], x3 + DX3[TE ]); + phi[TW ] = (phaseField)(x1 + DX1[TW ], x2 + DX2[TW ], x3 + DX3[TW ]); + phi[TN ] = (phaseField)(x1 + DX1[TN ], x2 + DX2[TN ], x3 + DX3[TN ]); + phi[TS ] = (phaseField)(x1 + DX1[TS ], x2 + DX2[TS ], x3 + DX3[TS ]); + phi[SW ] = (phaseField)(x1 + DX1[SW ], x2 + DX2[SW ], x3 + DX3[SW ]); + phi[SE ] = (phaseField)(x1 + DX1[SE ], x2 + DX2[SE ], x3 + DX3[SE ]); + phi[BW ] = (phaseField)(x1 + DX1[BW ], x2 + DX2[BW ], x3 + DX3[BW ]); + phi[BE ] = (phaseField)(x1 + DX1[BE ], x2 + DX2[BE ], x3 + DX3[BE ]); + phi[BS ] = (phaseField)(x1 + DX1[BS ], x2 + DX2[BS ], x3 + DX3[BS ]); + phi[BN ] = (phaseField)(x1 + DX1[BN ], x2 + DX2[BN ], x3 + DX3[BN ]); + phi[BSW] = (phaseField)(x1 + DX1[BSW], x2 + DX2[BSW], x3 + DX3[BSW]); + phi[BSE] = (phaseField)(x1 + DX1[BSE], x2 + DX2[BSE], x3 + DX3[BSE]); + phi[BNW] = (phaseField)(x1 + DX1[BNW], x2 + DX2[BNW], x3 + DX3[BNW]); + phi[BNE] = (phaseField)(x1 + DX1[BNE], x2 + DX2[BNE], x3 + DX3[BNE]); + phi[TNE] = (phaseField)(x1 + DX1[TNE], x2 + DX2[TNE], x3 + DX3[TNE]); + phi[TNW] = (phaseField)(x1 + DX1[TNW], x2 + DX2[TNW], x3 + DX3[TNW]); + phi[TSE] = (phaseField)(x1 + DX1[TSE], x2 + DX2[TSE], x3 + DX3[TSE]); + phi[TSW] = (phaseField)(x1 + DX1[TSW], x2 + DX2[TSW], x3 + DX3[TSW]); + */ + findNeighbors(phaseField, x1, x2, x3); + + g[E ] = (*this->localDistributionsF)(D3Q27System::ET_E, x1,x2,x3); + g[N ] = (*this->localDistributionsF)(D3Q27System::ET_N,x1,x2,x3); + g[T ] = (*this->localDistributionsF)(D3Q27System::ET_T,x1,x2,x3); + g[NE ] = (*this->localDistributionsF)(D3Q27System::ET_NE,x1,x2,x3); + g[NW ] = (*this->localDistributionsF)(D3Q27System::ET_NW,x1p,x2,x3); + g[TE ] = (*this->localDistributionsF)(D3Q27System::ET_TE,x1,x2,x3); + g[TW ] = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p,x2,x3); + g[TN ] = (*this->localDistributionsF)(D3Q27System::ET_TN,x1,x2,x3); + g[TS ] = (*this->localDistributionsF)(D3Q27System::ET_TS,x1,x2p,x3); + g[TNE] = (*this->localDistributionsF)(D3Q27System::ET_TNE,x1,x2,x3); + g[TNW] = (*this->localDistributionsF)(D3Q27System::ET_TNW,x1p,x2,x3); + g[TSE] = (*this->localDistributionsF)(D3Q27System::ET_TSE,x1,x2p,x3); + g[TSW] = (*this->localDistributionsF)(D3Q27System::ET_TSW,x1p,x2p,x3); + + g[W ] = (*this->nonLocalDistributionsF)(D3Q27System::ET_W,x1p,x2,x3 ); + g[S ] = (*this->nonLocalDistributionsF)(D3Q27System::ET_S,x1,x2p,x3 ); + g[B ] = (*this->nonLocalDistributionsF)(D3Q27System::ET_B,x1,x2,x3p ); + g[SW ] = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW,x1p,x2p,x3 ); + g[SE ] = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE,x1,x2p,x3 ); + g[BW ] = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW,x1p,x2,x3p ); + g[BE ] = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE,x1,x2,x3p ); + g[BS ] = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS,x1,x2p,x3p ); + g[BN ] = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN,x1,x2,x3p ); + g[BSW] = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW,x1p,x2p,x3p); + g[BSE] = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE,x1,x2p,x3p); + g[BNW] = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW,x1p,x2,x3p); + g[BNE] = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE,x1,x2,x3p); + + g[ZERO] = (*this->zeroDistributionsF)(x1,x2,x3); + + + + 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[ZERO] = (*this->zeroDistributionsH)(x1,x2,x3); + + LBMReal rhoH = 1.0; + LBMReal rhoL = 1.0/densityRatio; + + //LBMReal rhoToPhi = (1.0 - 1.0/densityRatio); + LBMReal rhoToPhi = (rhoH - rhoL)/(phiH - phiL); + + //collFactorM = phi[ZERO]*collFactorL + (1-phi[ZERO])*collFactorG; + //collFactorM = phi[ZERO]*collFactorG + (1-phi[ZERO])*collFactorL; + collFactorM = collFactorL + (collFactorL - collFactorG)*(phi[ZERO] - phiH)/(phiH - phiL); + + w1 = collFactorM; + //LBMReal tauH = 1.0; + LBMReal dX1_phi = gradX1_phi(); + LBMReal dX2_phi = gradX2_phi(); + LBMReal dX3_phi = gradX3_phi(); + LBMReal mu = 2*beta*phi[ZERO]*(phi[ZERO]-1)*(2*phi[ZERO]-1) - kappa*nabla2_phi(); + + //LBMReal rhoToPhi = (1.0/densityRatio - 1.0); + + + + //----------- Calculating Macroscopic Values ------------- + + //LBMReal rho = phi[ZERO] + (1.0 - phi[ZERO])*1.0/densityRatio; + LBMReal rho = rhoH + rhoToPhi*(phi[ZERO] - phiH); + //LBMReal rho = phi[ZERO]*1.0/densityRatio + (1.0 - phi[ZERO]); + + if (withForcing) + { + //muX1 = static_cast<double>(x1-1+ix1*maxX1); + //muX2 = static_cast<double>(x2-1+ix2*maxX2); + //muX3 = static_cast<double>(x3-1+ix3*maxX3); + + forcingX1 = muForcingX1.Eval(); + forcingX2 = muForcingX2.Eval(); + forcingX3 = muForcingX3.Eval(); + + LBMReal rho_m = 1.0/densityRatio; + forcingX1 = forcingX1*(rho-rho_m); + forcingX2 = forcingX2*(rho-rho_m); + forcingX3 = forcingX3*(rho-rho_m); + + //ux += forcingX1*deltaT*0.5; // X + //uy += forcingX2*deltaT*0.5; // Y + //uz += forcingX3*deltaT*0.5; // Z + } + + LBMReal ux = (g[BE] + g[BNE] - g[BNW] + g[BSE] - g[BSW] - g[BW] + g[E] + g[NE] - g[NW] + g[SE] - g[SW] + g[TE] + + g[TNE] - g[TNW] + g[TSE] - g[TSW] - g[TW] - g[W]) / (rho*c1o3) + (mu*dX1_phi + forcingX1)/(2*rho); + + LBMReal uy = (g[BN] + g[BNE] + g[BNW] - g[BS] - g[BSE] - g[BSW] + g[N] + g[NE] + g[NW] - g[S] - g[SE] - g[SW] + + g[TN] + g[TNE] + g[TNW] - g[TS] - g[TSE] - g[TSW]) / (rho*c1o3) + (mu*dX2_phi + forcingX2)/(2*rho); + + LBMReal uz = (g[T] + g[TE] + g[TN] + g[TNE] + g[TNW] + g[TS] + g[TSE] + g[TSW] + g[TW] - g[B] - g[BE] - g[BN] - + g[BNE] - g[BNW] - g[BS] - g[BSE] - g[BSW] - g[BW]) / (rho*c1o3) + (mu*dX3_phi + forcingX3)/(2*rho); + + LBMReal p1 = (g[ZERO] + g[E] + g[W] + g[N] + g[S] + g[T] + g[B] + g[NE] + g[SW] + g[SE] + g[NW] + g[TE] + g[BW] + + g[BE] + g[TW] + g[TN] + g[BS] + g[BN] + g[TS] + g[TNE] + g[TNW] + g[TSE] + g[TSW] + g[BNE] + g[BNW] + g[BSE] + g[BSW]) + + (ux*rhoToPhi*dX1_phi*c1o3 + uy*rhoToPhi*dX2_phi*c1o3 + uz*rhoToPhi*dX3_phi*c1o3)/2.0; + + //vvx = 0.0; vvy = 0.0; vvz = 0.0; + //-------------------------------------------------------- + + + + + LBMReal ux2 = ux*ux; + LBMReal uy2 = uy*uy; + LBMReal uz2 = uz*uz; + LBMReal ux_uy = ux*uy; + LBMReal ux_uz = ux*uz; + LBMReal uy_uz = uy*uz; + LBMReal ux_uy_uz = ux*uy*uz; + + +/* + //----------- Calculating Forcing Terms ------------- + LBMReal forcingTerm1 = (ux*mu*dX1_phi + uy*mu*dX2_phi + uz*mu*dX3_phi); + for (int dir = STARTF; dir < (ENDF+1); dir++) + { + if (dir != ZERO) + { + LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0; + forcingTerm[dir] = (c1o3*rhoToPhi*dirGrad_phi + mu*dirGrad_phi)*(DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz)*WEIGTH[dir]/c1o3 + mu*dirGrad_phi*WEIGTH[dir] - + (forcingTerm1)*WEIGTH[dir]; + } + else + { + forcingTerm[ZERO] = -(forcingTerm1)*WEIGTH[ZERO]; + } + } + //-------------------------------------------------------- +*/ + + //----------- Calculating Forcing Terms * ------------- + //LBMReal forcingTerm1 = (ux*mu*dX1_phi + uy*mu*dX2_phi + uz*mu*dX3_phi); + for (int dir = STARTF; dir <= (FENDDIR); dir++) + { + LBMReal velProd = DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz; + LBMReal velSq1 = velProd*velProd; + LBMReal gamma = WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(ux2+uy2+uz2)); + + //forcingTerm[dir] = (DX1[dir] - ux)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX1_phi + gamma*mu*dX1_phi) + + // (DX2[dir] - uy)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX2_phi + gamma*mu*dX2_phi) + + // (DX3[dir] - uz)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX3_phi + gamma*mu*dX3_phi); + + LBMReal fac1 = (gamma - WEIGTH[dir])*c1o3*rhoToPhi; + //LBMReal fac2 = gamma*mu; + //LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0; + //LBMReal dirGrad_phi = DX1[dir]*dX1_phi + DX2[dir]*dX2_phi + DX3[dir]*dX3_phi; + /*forcingTerm[dir] = (fac1*dirGrad_phi + gamma*mu*dirGrad_phi + DX1[dir]*forcingX1 + DX2[dir]*forcingX2 + DX3[dir]*forcingX3) - + (ux)*(fac1*dX1_phi + gamma*mu*dX1_phi) - + (uy)*(fac1*dX2_phi + gamma*mu*dX2_phi) - + (uz)*(fac1*dX3_phi + gamma*mu*dX3_phi);*/ + forcingTerm[dir] = (DX1[dir] - ux)*(fac1*dX1_phi + gamma*(mu*dX1_phi + forcingX1)) + + (DX2[dir] - uy)*(fac1*dX2_phi + gamma*(mu*dX2_phi + forcingX2)) + + (DX3[dir] - uz)*(fac1*dX3_phi + gamma*(mu*dX3_phi + forcingX3)); + + } + + LBMReal gamma = WEIGTH[ZERO]*(1 - 1.5*(ux2+uy2+uz2)); + /*forcingTerm[ZERO] = -(ux)*((gamma - WEIGTH[ZERO])*c1o3*rhoToPhi*dX1_phi + gamma*mu*dX1_phi) - + (uy)*((gamma - WEIGTH[ZERO])*c1o3*rhoToPhi*dX2_phi + gamma*mu*dX2_phi) - + (uz)*((gamma - WEIGTH[ZERO])*c1o3*rhoToPhi*dX3_phi + gamma*mu*dX3_phi);*/ + LBMReal fac1 = (gamma - WEIGTH[ZERO])*c1o3*rhoToPhi; + forcingTerm[ZERO] = (-ux)*(fac1*dX1_phi + gamma*(mu*dX1_phi + forcingX1)) + + (-uy)*(fac1*dX2_phi + gamma*(mu*dX2_phi + forcingX2)) + + (-uz)*(fac1*dX3_phi + gamma*(mu*dX3_phi + forcingX3)); + + //-------------------------------------------------------- + +/* + f1[E ] = (g[E ] + 0.5*forcingTerm[E ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[E ]/c1o3; + f1[N ] = (g[N ] + 0.5*forcingTerm[N ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[N ]/c1o3; + f1[T ] = (g[T ] + 0.5*forcingTerm[T ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[T ]/c1o3; + f1[NE ] = (g[NE ] + 0.5*forcingTerm[NE ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[NE ]/c1o3; + f1[NW ] = (g[NW ] + 0.5*forcingTerm[NW ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[NW ]/c1o3; + f1[TE ] = (g[TE ] + 0.5*forcingTerm[TE ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TE ]/c1o3; + f1[TW ] = (g[TW ] + 0.5*forcingTerm[TW ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TW ]/c1o3; + f1[TN ] = (g[TN ] + 0.5*forcingTerm[TN ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TN ]/c1o3; + f1[TS ] = (g[TS ] + 0.5*forcingTerm[TS ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TS ]/c1o3; + f1[TNE] = (g[TNE] + 0.5*forcingTerm[TNE])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TNE]/c1o3; + f1[TNW] = (g[TNW] + 0.5*forcingTerm[TNW])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TNW]/c1o3; + f1[TSE] = (g[TSE] + 0.5*forcingTerm[TSE])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TSE]/c1o3; + f1[TSW] = (g[TSW] + 0.5*forcingTerm[TSW])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TSW]/c1o3; + f1[W ] = (g[W ] + 0.5*forcingTerm[W ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[W ]/c1o3; + f1[S ] = (g[S ] + 0.5*forcingTerm[S ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[S ]/c1o3; + f1[B ] = (g[B ] + 0.5*forcingTerm[B ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[B ]/c1o3; + f1[SW ] = (g[SW ] + 0.5*forcingTerm[SW ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[SW ]/c1o3; + f1[SE ] = (g[SE ] + 0.5*forcingTerm[SE ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[SE ]/c1o3; + f1[BW ] = (g[BW ] + 0.5*forcingTerm[BW ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BW ]/c1o3; + f1[BE ] = (g[BE ] + 0.5*forcingTerm[BE ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BE ]/c1o3; + f1[BS ] = (g[BS ] + 0.5*forcingTerm[BS ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BS ]/c1o3; + f1[BN ] = (g[BN ] + 0.5*forcingTerm[BN ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BN ]/c1o3; + f1[BSW] = (g[BSW] + 0.5*forcingTerm[BSW])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BSW]/c1o3; + f1[BSE] = (g[BSE] + 0.5*forcingTerm[BSE])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BSE]/c1o3; + f1[BNW] = (g[BNW] + 0.5*forcingTerm[BNW])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BNW]/c1o3; + f1[BNE] = (g[BNE] + 0.5*forcingTerm[BNE])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BNE]/c1o3; + f1[ZERO] = (g[ZERO] + 0.5*forcingTerm[ZERO])/c1o3 - (p1 - rho*c1o3)*WEIGTH[ZERO]/c1o3; +*/ + + LBMReal mfcbb = (g[E ] + 0.5*forcingTerm[E ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[E ]/c1o3; + LBMReal mfbcb = (g[N ] + 0.5*forcingTerm[N ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[N ]/c1o3; + LBMReal mfbbc = (g[T ] + 0.5*forcingTerm[T ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[T ]/c1o3; + LBMReal mfccb = (g[NE ] + 0.5*forcingTerm[NE ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[NE ]/c1o3; + LBMReal mfacb = (g[NW ] + 0.5*forcingTerm[NW ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[NW ]/c1o3; + LBMReal mfcbc = (g[TE ] + 0.5*forcingTerm[TE ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[TE ]/c1o3; + LBMReal mfabc = (g[TW ] + 0.5*forcingTerm[TW ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[TW ]/c1o3; + LBMReal mfbcc = (g[TN ] + 0.5*forcingTerm[TN ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[TN ]/c1o3; + LBMReal mfbac = (g[TS ] + 0.5*forcingTerm[TS ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[TS ]/c1o3; + LBMReal mfccc = (g[TNE] + 0.5*forcingTerm[TNE])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[TNE]/c1o3; + LBMReal mfacc = (g[TNW] + 0.5*forcingTerm[TNW])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[TNW]/c1o3; + LBMReal mfcac = (g[TSE] + 0.5*forcingTerm[TSE])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[TSE]/c1o3; + LBMReal mfaac = (g[TSW] + 0.5*forcingTerm[TSW])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[TSW]/c1o3; + LBMReal mfabb = (g[W ] + 0.5*forcingTerm[W ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[W ]/c1o3; + LBMReal mfbab = (g[S ] + 0.5*forcingTerm[S ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[S ]/c1o3; + LBMReal mfbba = (g[B ] + 0.5*forcingTerm[B ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[B ]/c1o3; + LBMReal mfaab = (g[SW ] + 0.5*forcingTerm[SW ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[SW ]/c1o3; + LBMReal mfcab = (g[SE ] + 0.5*forcingTerm[SE ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[SE ]/c1o3; + LBMReal mfaba = (g[BW ] + 0.5*forcingTerm[BW ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[BW ]/c1o3; + LBMReal mfcba = (g[BE ] + 0.5*forcingTerm[BE ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[BE ]/c1o3; + LBMReal mfbaa = (g[BS ] + 0.5*forcingTerm[BS ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[BS ]/c1o3; + LBMReal mfbca = (g[BN ] + 0.5*forcingTerm[BN ])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[BN ]/c1o3; + LBMReal mfaaa = (g[BSW] + 0.5*forcingTerm[BSW])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[BSW]/c1o3; + LBMReal mfcaa = (g[BSE] + 0.5*forcingTerm[BSE])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[BSE]/c1o3; + LBMReal mfaca = (g[BNW] + 0.5*forcingTerm[BNW])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[BNW]/c1o3; + LBMReal mfcca = (g[BNE] + 0.5*forcingTerm[BNE])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[BNE]/c1o3; + + LBMReal mfbbb = (g[ZERO] + 0.5*forcingTerm[ZERO])/c1o3 - 0*(p1 - rho*c1o3)*WEIGTH[ZERO]/c1o3; + + + + /* + //forcing + /////////////////////////////////////////////////////////////////////////////////////////// + if (withForcing) + { + muX1 = static_cast<double>(x1-1+ix1*maxX1); + muX2 = static_cast<double>(x2-1+ix2*maxX2); + muX3 = static_cast<double>(x3-1+ix3*maxX3); + + forcingX1 = muForcingX1.Eval(); + forcingX2 = muForcingX2.Eval(); + forcingX3 = muForcingX3.Eval(); + + vvx += forcingX1*deltaT*0.5; // X + vvy += forcingX2*deltaT*0.5; // Y + vvz += forcingX3*deltaT*0.5; // Z + } + /////////////////////////////////////////////////////////////////////////////////////////// + */ + + LBMReal oMdrho, m0, m1, m2; + + oMdrho=mfccc+mfaaa; + m0=mfaca+mfcac; + m1=mfacc+mfcaa; + m2=mfaac+mfcca; + oMdrho+=m0; + m1+=m2; + oMdrho+=m1; + m0=mfbac+mfbca; + m1=mfbaa+mfbcc; + m0+=m1; + m1=mfabc+mfcba; + m2=mfaba+mfcbc; + m1+=m2; + m0+=m1; + m1=mfacb+mfcab; + m2=mfaab+mfccb; + m1+=m2; + m0+=m1; + oMdrho+=m0; + m0=mfabb+mfcbb; + m1=mfbab+mfbcb; + m2=mfbba+mfbbc; + m0+=m1+m2; + m0+=mfbbb; //hat gefehlt + //oMdrho = 1. - (oMdrho + m0); + oMdrho = rho - (oMdrho + p1/c1o3); + + + //////////////////////////////////////////////////////////////////////////////////// + LBMReal wadjust; + LBMReal qudricLimit = 0.01; + //////////////////////////////////////////////////////////////////////////////////// + //Hin + //////////////////////////////////////////////////////////////////////////////////// + // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Z - Dir + m2 = mfaaa + mfaac; + m1 = mfaac - mfaaa; + m0 = m2 + mfaab; + mfaaa = m0; + m0 += c1o36 * oMdrho; + mfaab = m1 - m0 * uz; + mfaac = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaba + mfabc; + m1 = mfabc - mfaba; + m0 = m2 + mfabb; + mfaba = m0; + m0 += c1o9 * oMdrho; + mfabb = m1 - m0 * uz; + mfabc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaca + mfacc; + m1 = mfacc - mfaca; + m0 = m2 + mfacb; + mfaca = m0; + m0 += c1o36 * oMdrho; + mfacb = m1 - m0 * uz; + mfacc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbaa + mfbac; + m1 = mfbac - mfbaa; + m0 = m2 + mfbab; + mfbaa = m0; + m0 += c1o9 * oMdrho; + mfbab = m1 - m0 * uz; + mfbac = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbba + mfbbc; + m1 = mfbbc - mfbba; + m0 = m2 + mfbbb; + mfbba = m0; + m0 += c4o9 * oMdrho; + mfbbb = m1 - m0 * uz; + mfbbc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbca + mfbcc; + m1 = mfbcc - mfbca; + m0 = m2 + mfbcb; + mfbca = m0; + m0 += c1o9 * oMdrho; + mfbcb = m1 - m0 * uz; + mfbcc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcaa + mfcac; + m1 = mfcac - mfcaa; + m0 = m2 + mfcab; + mfcaa = m0; + m0 += c1o36 * oMdrho; + mfcab = m1 - m0 * uz; + mfcac = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcba + mfcbc; + m1 = mfcbc - mfcba; + m0 = m2 + mfcbb; + mfcba = m0; + m0 += c1o9 * oMdrho; + mfcbb = m1 - m0 * uz; + mfcbc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcca + mfccc; + m1 = mfccc - mfcca; + m0 = m2 + mfccb; + mfcca = m0; + m0 += c1o36 * oMdrho; + mfccb = m1 - m0 * uz; + mfccc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Y - Dir + m2 = mfaaa + mfaca; + m1 = mfaca - mfaaa; + m0 = m2 + mfaba; + mfaaa = m0; + m0 += c1o6 * oMdrho; + mfaba = m1 - m0 * uy; + mfaca = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaab + mfacb; + m1 = mfacb - mfaab; + m0 = m2 + mfabb; + mfaab = m0; + mfabb = m1 - m0 * uy; + mfacb = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaac + mfacc; + m1 = mfacc - mfaac; + m0 = m2 + mfabc; + mfaac = m0; + m0 += c1o18 * oMdrho; + mfabc = m1 - m0 * uy; + mfacc = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbaa + mfbca; + m1 = mfbca - mfbaa; + m0 = m2 + mfbba; + mfbaa = m0; + m0 += c2o3 * oMdrho; + mfbba = m1 - m0 * uy; + mfbca = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbab + mfbcb; + m1 = mfbcb - mfbab; + m0 = m2 + mfbbb; + mfbab = m0; + mfbbb = m1 - m0 * uy; + mfbcb = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbac + mfbcc; + m1 = mfbcc - mfbac; + m0 = m2 + mfbbc; + mfbac = m0; + m0 += c2o9 * oMdrho; + mfbbc = m1 - m0 * uy; + mfbcc = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcaa + mfcca; + m1 = mfcca - mfcaa; + m0 = m2 + mfcba; + mfcaa = m0; + m0 += c1o6 * oMdrho; + mfcba = m1 - m0 * uy; + mfcca = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcab + mfccb; + m1 = mfccb - mfcab; + m0 = m2 + mfcbb; + mfcab = m0; + mfcbb = m1 - m0 * uy; + mfccb = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcac + mfccc; + m1 = mfccc - mfcac; + m0 = m2 + mfcbc; + mfcac = m0; + m0 += c1o18 * oMdrho; + mfcbc = m1 - m0 * uy; + mfccc = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // X - Dir + m2 = mfaaa + mfcaa; + m1 = mfcaa - mfaaa; + m0 = m2 + mfbaa; + mfaaa = m0; + m0 += 1. * oMdrho; + mfbaa = m1 - m0 * ux; + mfcaa = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaba + mfcba; + m1 = mfcba - mfaba; + m0 = m2 + mfbba; + mfaba = m0; + mfbba = m1 - m0 * ux; + mfcba = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaca + mfcca; + m1 = mfcca - mfaca; + m0 = m2 + mfbca; + mfaca = m0; + m0 += c1o3 * oMdrho; + mfbca = m1 - m0 * ux; + mfcca = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaab + mfcab; + m1 = mfcab - mfaab; + m0 = m2 + mfbab; + mfaab = m0; + mfbab = m1 - m0 * ux; + mfcab = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfabb + mfcbb; + m1 = mfcbb - mfabb; + m0 = m2 + mfbbb; + mfabb = m0; + mfbbb = m1 - m0 * ux; + mfcbb = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfacb + mfccb; + m1 = mfccb - mfacb; + m0 = m2 + mfbcb; + mfacb = m0; + mfbcb = m1 - m0 * ux; + mfccb = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaac + mfcac; + m1 = mfcac - mfaac; + m0 = m2 + mfbac; + mfaac = m0; + m0 += c1o3 * oMdrho; + mfbac = m1 - m0 * ux; + mfcac = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfabc + mfcbc; + m1 = mfcbc - mfabc; + m0 = m2 + mfbbc; + mfabc = m0; + mfbbc = m1 - m0 * ux; + mfcbc = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfacc + mfccc; + m1 = mfccc - mfacc; + m0 = m2 + mfbcc; + mfacc = m0; + m0 += c1o9 * oMdrho; + mfbcc = m1 - m0 * ux; + mfccc = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + // Cumulants + //////////////////////////////////////////////////////////////////////////////////// + LBMReal OxxPyyPzz = 1.; //omega2 or bulk viscosity + LBMReal OxyyPxzz = 1.;//-s9;//2+s9;// + //LBMReal OxyyMxzz = 1.;//2+s9;// + LBMReal O4 = 1.; + LBMReal O5 = 1.; + LBMReal O6 = 1.; + + //Cum 4. + //LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015 + //LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015 + //LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015 + + LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 ) * mfabb + 2. * mfbba * mfbab); + LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 ) * mfbab + 2. * mfbba * mfabb); + LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 ) * mfbba + 2. * mfbab * mfabb); + + LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho); + LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho-1)*oMdrho); + LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho); + + //LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(-p1/c1o3)*oMdrho); + //LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(-p1/c1o3)*oMdrho); + //LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(-p1/c1o3)*oMdrho); + + //Cum 5. + LBMReal CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho; + LBMReal CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho; + LBMReal CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho; + + //Cum 6. + LBMReal CUMccc = mfccc +((-4. * mfbbb * mfbbb + - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) + - 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) + - 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) + +( 4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) + + 2. * (mfcaa * mfaca * mfaac) + + 16. * mfbba * mfbab * mfabb) + - c1o3* (mfacc + mfcac + mfcca) * oMdrho -c1o9*oMdrho*oMdrho + - c1o9* (mfcaa + mfaca + mfaac) * oMdrho*(1.-2.* oMdrho)- c1o27* oMdrho * oMdrho*(-2.* oMdrho) + +( 2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) + + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) +c1o27*oMdrho; + + //2. + // linear combinations + LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac; + LBMReal mxxMyy = mfcaa - mfaca; + LBMReal mxxMzz = mfcaa - mfaac; + + LBMReal dxux = -c1o2 * collFactorM *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz*(mfaaa - mxxPyyPzz); + LBMReal dyuy = dxux + collFactorM * c3o2 * mxxMyy; + LBMReal dzuz = dxux + collFactorM * c3o2 * mxxMzz; + + //relax + mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- 3. * (1. - c1o2 * OxxPyyPzz) * (ux2 * dxux + uy2 * dyuy + uz2 * dzuz); + mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (ux2 * dxux - uy2 * dyuy); + mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (ux2 * dxux - uz2 * dzuz); + + mfabb += collFactorM * (-mfabb); + mfbab += collFactorM * (-mfbab); + mfbba += collFactorM * (-mfbba); + + // linear combinations back + mfcaa = c1o3 * ( mxxMyy + mxxMzz + mxxPyyPzz); + mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz); + mfaac = c1o3 * ( mxxMyy - 2. * mxxMzz + mxxPyyPzz); + + //3. + // linear combinations + LBMReal mxxyPyzz = mfcba + mfabc; + LBMReal mxxyMyzz = mfcba - mfabc; + + LBMReal mxxzPyyz = mfcab + mfacb; + LBMReal mxxzMyyz = mfcab - mfacb; + + LBMReal mxyyPxzz = mfbca + mfbac; + LBMReal mxyyMxzz = mfbca - mfbac; + + //relax + wadjust = OxyyMxzz+(1.-OxyyMxzz)*fabs(mfbbb)/(fabs(mfbbb)+qudricLimit); + mfbbb += wadjust * (-mfbbb); + wadjust = OxyyPxzz+(1.-OxyyPxzz)*fabs(mxxyPyzz)/(fabs(mxxyPyzz)+qudricLimit); + mxxyPyzz += wadjust * (-mxxyPyzz); + wadjust = OxyyMxzz+(1.-OxyyMxzz)*fabs(mxxyMyzz)/(fabs(mxxyMyzz)+qudricLimit); + mxxyMyzz += wadjust * (-mxxyMyzz); + wadjust = OxyyPxzz+(1.-OxyyPxzz)*fabs(mxxzPyyz)/(fabs(mxxzPyyz)+qudricLimit); + mxxzPyyz += wadjust * (-mxxzPyyz); + wadjust = OxyyMxzz+(1.-OxyyMxzz)*fabs(mxxzMyyz)/(fabs(mxxzMyyz)+qudricLimit); + mxxzMyyz += wadjust * (-mxxzMyyz); + wadjust = OxyyPxzz+(1.-OxyyPxzz)*fabs(mxyyPxzz)/(fabs(mxyyPxzz)+qudricLimit); + mxyyPxzz += wadjust * (-mxyyPxzz); + wadjust = OxyyMxzz+(1.-OxyyMxzz)*fabs(mxyyMxzz)/(fabs(mxyyMxzz)+qudricLimit); + mxyyMxzz += wadjust * (-mxyyMxzz); + + // linear combinations back + mfcba = ( mxxyMyzz + mxxyPyzz) * c1o2; + mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; + mfcab = ( mxxzMyyz + mxxzPyyz) * c1o2; + mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; + mfbca = ( mxyyMxzz + mxyyPxzz) * c1o2; + mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; + + //4. + CUMacc += O4 * (-CUMacc); + CUMcac += O4 * (-CUMcac); + CUMcca += O4 * (-CUMcca); + + CUMbbc += O4 * (-CUMbbc); + CUMbcb += O4 * (-CUMbcb); + CUMcbb += O4 * (-CUMcbb); + + //5. + CUMbcc += O5 * (-CUMbcc); + CUMcbc += O5 * (-CUMcbc); + CUMccb += O5 * (-CUMccb); + + //6. + CUMccc += O6 * (-CUMccc); + + //back cumulants to central moments + //4. + //mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015 + //mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015 + //mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015 + + mfcbb = CUMcbb + ((mfcaa + c1o3 ) * mfabb + 2. * mfbba * mfbab); + mfbcb = CUMbcb + ((mfaca + c1o3 ) * mfbab + 2. * mfbba * mfabb); + mfbbc = CUMbbc + ((mfaac + c1o3 ) * mfbba + 2. * mfbab * mfabb); + + mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho; + mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho-1)*oMdrho; + mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho; + + //mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(-p1/c1o3)*oMdrho; + //mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(-p1/c1o3)*oMdrho; + //mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(-p1/c1o3)*oMdrho; + + //5. + mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho; + mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho; + mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho; + + //6. + mfccc = CUMccc -((-4. * mfbbb * mfbbb + - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) + - 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) + - 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) + +( 4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) + + 2. * (mfcaa * mfaca * mfaac) + + 16. * mfbba * mfbab * mfabb) + - c1o3* (mfacc + mfcac + mfcca) * oMdrho -c1o9*oMdrho*oMdrho + - c1o9* (mfcaa + mfaca + mfaac) * oMdrho*(1.-2.* oMdrho)- c1o27* oMdrho * oMdrho*(-2.* oMdrho) + +( 2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) + + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) -c1o27*oMdrho; + + //////////////////////////////////////////////////////////////////////////////////// + //forcing + mfbaa=-mfbaa; + mfaba=-mfaba; + mfaab=-mfaab; + ////////////////////////////////////////////////////////////////////////////////////// + + //////////////////////////////////////////////////////////////////////////////////// + //back + //////////////////////////////////////////////////////////////////////////////////// + //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Z - Dir + m0 = mfaac * c1o2 + mfaab * (uz - c1o2) + (mfaaa + 1. * oMdrho) * ( uz2 - uz) * c1o2; + m1 = -mfaac - 2. * mfaab * uz + mfaaa * (1. - uz2) - 1. * oMdrho * uz2; + m2 = mfaac * c1o2 + mfaab * (uz + c1o2) + (mfaaa + 1. * oMdrho) * ( uz2 + uz) * c1o2; + mfaaa = m0; + mfaab = m1; + mfaac = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfabc * c1o2 + mfabb * (uz - c1o2) + mfaba * ( uz2 - uz) * c1o2; + m1 = -mfabc - 2. * mfabb * uz + mfaba * (1. - uz2); + m2 = mfabc * c1o2 + mfabb * (uz + c1o2) + mfaba * ( uz2 + uz) * c1o2; + mfaba = m0; + mfabb = m1; + mfabc = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfacc * c1o2 + mfacb * (uz - c1o2) + (mfaca + c1o3 * oMdrho) * ( uz2 - uz) * c1o2; + m1 = -mfacc - 2. * mfacb * uz + mfaca * (1. - uz2) - c1o3 * oMdrho * uz2; + m2 = mfacc * c1o2 + mfacb * (uz + c1o2) + (mfaca + c1o3 * oMdrho) * ( uz2 + uz) * c1o2; + mfaca = m0; + mfacb = m1; + mfacc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfbac * c1o2 + mfbab * (uz - c1o2) + mfbaa * ( uz2 - uz) * c1o2; + m1 = -mfbac - 2. * mfbab * uz + mfbaa * (1. - uz2); + m2 = mfbac * c1o2 + mfbab * (uz + c1o2) + mfbaa * ( uz2 + uz) * c1o2; + mfbaa = m0; + mfbab = m1; + mfbac = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbbc * c1o2 + mfbbb * (uz - c1o2) + mfbba * ( uz2 - uz) * c1o2; + m1 = -mfbbc - 2. * mfbbb * uz + mfbba * (1. - uz2); + m2 = mfbbc * c1o2 + mfbbb * (uz + c1o2) + mfbba * ( uz2 + uz) * c1o2; + mfbba = m0; + mfbbb = m1; + mfbbc = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbcc * c1o2 + mfbcb * (uz - c1o2) + mfbca * ( uz2 - uz) * c1o2; + m1 = -mfbcc - 2. * mfbcb * uz + mfbca * (1. - uz2); + m2 = mfbcc * c1o2 + mfbcb * (uz + c1o2) + mfbca * ( uz2 + uz) * c1o2; + mfbca = m0; + mfbcb = m1; + mfbcc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcac * c1o2 + mfcab * (uz - c1o2) + (mfcaa + c1o3 * oMdrho) * ( uz2 - uz) * c1o2; + m1 = -mfcac - 2. * mfcab * uz + mfcaa * (1. - uz2) - c1o3 * oMdrho * uz2; + m2 = mfcac * c1o2 + mfcab * (uz + c1o2) + (mfcaa + c1o3 * oMdrho) * ( uz2 + uz) * c1o2; + mfcaa = m0; + mfcab = m1; + mfcac = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfcbc * c1o2 + mfcbb * (uz - c1o2) + mfcba * ( uz2 - uz) * c1o2; + m1 = -mfcbc - 2. * mfcbb * uz + mfcba * (1. - uz2); + m2 = mfcbc * c1o2 + mfcbb * (uz + c1o2) + mfcba * ( uz2 + uz) * c1o2; + mfcba = m0; + mfcbb = m1; + mfcbc = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfccc * c1o2 + mfccb * (uz - c1o2) + (mfcca + c1o9 * oMdrho) * ( uz2 - uz) * c1o2; + m1 = -mfccc - 2. * mfccb * uz + mfcca * (1. - uz2) - c1o9 * oMdrho * uz2; + m2 = mfccc * c1o2 + mfccb * (uz + c1o2) + (mfcca + c1o9 * oMdrho) * ( uz2 + uz) * c1o2; + mfcca = m0; + mfccb = m1; + mfccc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Y - Dir + m0 = mfaca * c1o2 + mfaba * (uy - c1o2) + (mfaaa + c1o6 * oMdrho) * ( uy2 - uy) * c1o2; + m1 = -mfaca - 2. * mfaba * uy + mfaaa * (1. - uy2) - c1o6 * oMdrho * uy2; + m2 = mfaca * c1o2 + mfaba * (uy + c1o2) + (mfaaa + c1o6 * oMdrho) * ( uy2 + uy) * c1o2; + mfaaa = m0; + mfaba = m1; + mfaca = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfacb * c1o2 + mfabb * (uy - c1o2) + (mfaab + c2o3 * oMdrho) * ( uy2 - uy) * c1o2; + m1 = -mfacb - 2. * mfabb * uy + mfaab * (1. - uy2) - c2o3 * oMdrho * uy2; + m2 = mfacb * c1o2 + mfabb * (uy + c1o2) + (mfaab + c2o3 * oMdrho) * ( uy2 + uy) * c1o2; + mfaab = m0; + mfabb = m1; + mfacb = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfacc * c1o2 + mfabc * (uy - c1o2) + (mfaac + c1o6 * oMdrho) * ( uy2 - uy) * c1o2; + m1 = -mfacc - 2. * mfabc * uy + mfaac * (1. - uy2) - c1o6 * oMdrho * uy2; + m2 = mfacc * c1o2 + mfabc * (uy + c1o2) + (mfaac + c1o6 * oMdrho) * ( uy2 + uy) * c1o2; + mfaac = m0; + mfabc = m1; + mfacc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfbca * c1o2 + mfbba * (uy - c1o2) + mfbaa * ( uy2 - uy) * c1o2; + m1 = -mfbca - 2. * mfbba * uy + mfbaa * (1. - uy2); + m2 = mfbca * c1o2 + mfbba * (uy + c1o2) + mfbaa * ( uy2 + uy) * c1o2; + mfbaa = m0; + mfbba = m1; + mfbca = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbcb * c1o2 + mfbbb * (uy - c1o2) + mfbab * ( uy2 - uy) * c1o2; + m1 = -mfbcb - 2. * mfbbb * uy + mfbab * (1. - uy2); + m2 = mfbcb * c1o2 + mfbbb * (uy + c1o2) + mfbab * ( uy2 + uy) * c1o2; + mfbab = m0; + mfbbb = m1; + mfbcb = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbcc * c1o2 + mfbbc * (uy - c1o2) + mfbac * ( uy2 - uy) * c1o2; + m1 = -mfbcc - 2. * mfbbc * uy + mfbac * (1. - uy2); + m2 = mfbcc * c1o2 + mfbbc * (uy + c1o2) + mfbac * ( uy2 + uy) * c1o2; + mfbac = m0; + mfbbc = m1; + mfbcc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcca * c1o2 + mfcba * (uy - c1o2) + (mfcaa + c1o18 * oMdrho) * ( uy2 - uy) * c1o2; + m1 = -mfcca - 2. * mfcba * uy + mfcaa * (1. - uy2) - c1o18 * oMdrho * uy2; + m2 = mfcca * c1o2 + mfcba * (uy + c1o2) + (mfcaa + c1o18 * oMdrho) * ( uy2 + uy) * c1o2; + mfcaa = m0; + mfcba = m1; + mfcca = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfccb * c1o2 + mfcbb * (uy - c1o2) + (mfcab + c2o9 * oMdrho) * ( uy2 - uy) * c1o2; + m1 = -mfccb - 2. * mfcbb * uy + mfcab * (1. - uy2) - c2o9 * oMdrho * uy2; + m2 = mfccb * c1o2 + mfcbb * (uy + c1o2) + (mfcab + c2o9 * oMdrho) * ( uy2 + uy) * c1o2; + mfcab = m0; + mfcbb = m1; + mfccb = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfccc * c1o2 + mfcbc * (uy - c1o2) + (mfcac + c1o18 * oMdrho) * ( uy2 - uy) * c1o2; + m1 = -mfccc - 2. * mfcbc * uy + mfcac * (1. - uy2) - c1o18 * oMdrho * uy2; + m2 = mfccc * c1o2 + mfcbc * (uy + c1o2) + (mfcac + c1o18 * oMdrho) * ( uy2 + uy) * c1o2; + mfcac = m0; + mfcbc = m1; + mfccc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // X - Dir + m0 = mfcaa * c1o2 + mfbaa * (ux - c1o2) + (mfaaa + c1o36 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfcaa - 2. * mfbaa * ux + mfaaa * (1. - ux2) - c1o36 * oMdrho * ux2; + m2 = mfcaa * c1o2 + mfbaa * (ux + c1o2) + (mfaaa + c1o36 * oMdrho) * ( ux2 + ux) * c1o2; + mfaaa = m0; + mfbaa = m1; + mfcaa = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcba * c1o2 + mfbba * (ux - c1o2) + (mfaba + c1o9 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfcba - 2. * mfbba * ux + mfaba * (1. - ux2) - c1o9 * oMdrho * ux2; + m2 = mfcba * c1o2 + mfbba * (ux + c1o2) + (mfaba + c1o9 * oMdrho) * ( ux2 + ux) * c1o2; + mfaba = m0; + mfbba = m1; + mfcba = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcca * c1o2 + mfbca * (ux - c1o2) + (mfaca + c1o36 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfcca - 2. * mfbca * ux + mfaca * (1. - ux2) - c1o36 * oMdrho * ux2; + m2 = mfcca * c1o2 + mfbca * (ux + c1o2) + (mfaca + c1o36 * oMdrho) * ( ux2 + ux) * c1o2; + mfaca = m0; + mfbca = m1; + mfcca = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcab * c1o2 + mfbab * (ux - c1o2) + (mfaab + c1o9 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfcab - 2. * mfbab * ux + mfaab * (1. - ux2) - c1o9 * oMdrho * ux2; + m2 = mfcab * c1o2 + mfbab * (ux + c1o2) + (mfaab + c1o9 * oMdrho) * ( ux2 + ux) * c1o2; + mfaab = m0; + mfbab = m1; + mfcab = m2; + ///////////b//////////////////////////////////////////////////////////////////////// + m0 = mfcbb * c1o2 + mfbbb * (ux - c1o2) + (mfabb + c4o9 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfcbb - 2. * mfbbb * ux + mfabb * (1. - ux2) - c4o9 * oMdrho * ux2; + m2 = mfcbb * c1o2 + mfbbb * (ux + c1o2) + (mfabb + c4o9 * oMdrho) * ( ux2 + ux) * c1o2; + mfabb = m0; + mfbbb = m1; + mfcbb = m2; + ///////////b//////////////////////////////////////////////////////////////////////// + m0 = mfccb * c1o2 + mfbcb * (ux - c1o2) + (mfacb + c1o9 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfccb - 2. * mfbcb * ux + mfacb * (1. - ux2) - c1o9 * oMdrho * ux2; + m2 = mfccb * c1o2 + mfbcb * (ux + c1o2) + (mfacb + c1o9 * oMdrho) * ( ux2 + ux) * c1o2; + mfacb = m0; + mfbcb = m1; + mfccb = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcac * c1o2 + mfbac * (ux - c1o2) + (mfaac + c1o36 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfcac - 2. * mfbac * ux + mfaac * (1. - ux2) - c1o36 * oMdrho * ux2; + m2 = mfcac * c1o2 + mfbac * (ux + c1o2) + (mfaac + c1o36 * oMdrho) * ( ux2 + ux) * c1o2; + mfaac = m0; + mfbac = m1; + mfcac = m2; + ///////////c//////////////////////////////////////////////////////////////////////// + m0 = mfcbc * c1o2 + mfbbc * (ux - c1o2) + (mfabc + c1o9 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfcbc - 2. * mfbbc * ux + mfabc * (1. - ux2) - c1o9 * oMdrho * ux2; + m2 = mfcbc * c1o2 + mfbbc * (ux + c1o2) + (mfabc + c1o9 * oMdrho) * ( ux2 + ux) * c1o2; + mfabc = m0; + mfbbc = m1; + mfcbc = m2; + ///////////c//////////////////////////////////////////////////////////////////////// + m0 = mfccc * c1o2 + mfbcc * (ux - c1o2) + (mfacc + c1o36 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfccc - 2. * mfbcc * ux + mfacc * (1. - ux2) - c1o36 * oMdrho * ux2; + m2 = mfccc * c1o2 + mfbcc * (ux + c1o2) + (mfacc + c1o36 * oMdrho) * ( ux2 + ux) * c1o2; + mfacc = m0; + mfbcc = m1; + mfccc = m2; + + + +/////////////////////////////////////////////////////////////////////////// + +/* + m000 = f1[ZERO] + f1[E] + f1[W] + f1[N] + f1[S] + f1[T] + f1[B] + f1[NE] + f1[SW] + f1[SE] + f1[NW] + f1[TE] + f1[BW] + f1[BE] + f1[TW] + f1[TN] + f1[BS] + f1[BN] + + f1[TS] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW]; + + m100 = f1[BE] + f1[BNE] - f1[BNW] + f1[BSE] - f1[BSW] - f1[BW] + f1[E] + f1[NE] - f1[NW] + f1[SE] - f1[SW] + f1[TE] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW] - f1[TW] - f1[W]; + m010 = f1[BN] + f1[BNE] + f1[BNW] - f1[BS] - f1[BSE] - f1[BSW] + f1[N] + f1[NE] + f1[NW] - f1[S] - f1[SE] - f1[SW] + f1[TN] + f1[TNE] + f1[TNW] - f1[TS] - f1[TSE] - f1[TSW]; + m001 = f1[T] + f1[TE] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW] + f1[TW] - f1[B] - f1[BE] - f1[BN] - f1[BNE] - f1[BNW] - f1[BS] - f1[BSE] - f1[BSW] - f1[BW]; + + m110 = f1[BNE] - f1[BNW] - f1[BSE] + f1[BSW] + f1[NE] - f1[NW] - f1[SE] + f1[SW] + f1[TNE] - f1[TNW] - f1[TSE] + f1[TSW]; + m101 = -f1[BE] - f1[BNE] + f1[BNW] - f1[BSE] + f1[BSW] + f1[BW] + f1[TE] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW] - f1[TW]; + m011 = -f1[BN] - f1[BNE] - f1[BNW] + f1[BS] + f1[BSE] + f1[BSW] + f1[TN] + f1[TNE] + f1[TNW] - f1[TS] - f1[TSE] - f1[TSW]; + m200 = f1[BE] + f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW] + f1[BW] + f1[E] + f1[NE] + f1[NW] + f1[SE] + f1[SW] + f1[TE] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[TW] + f1[W]; + m020 = f1[BN] + f1[BNE] + f1[BNW] + f1[BS] + f1[BSE] + f1[BSW] + f1[N] + f1[NE] + f1[NW] + f1[S] + f1[SE] + f1[SW] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW]; + m002 = f1[B] + f1[BE] + f1[BN] + f1[BNE] + f1[BNW] + f1[BS] + f1[BSE] + f1[BSW] + f1[BW] + f1[T] + f1[TE] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW] + f1[TW]; + m120 = f1[BNE] - f1[BNW] + f1[BSE] - f1[BSW] + f1[NE] - f1[NW] + f1[SE] - f1[SW] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW]; + m102 = f1[BE] + f1[BNE] - f1[BNW] + f1[BSE] - f1[BSW] - f1[BW] + f1[TE] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW] - f1[TW]; + m210 = f1[BNE] + f1[BNW] - f1[BSE] - f1[BSW] + f1[NE] + f1[NW] - f1[SE] - f1[SW] + f1[TNE] + f1[TNW] - f1[TSE] - f1[TSW]; + m012 = f1[BN] + f1[BNE] + f1[BNW] - f1[BS] - f1[BSE] - f1[BSW] + f1[TN] + f1[TNE] + f1[TNW] - f1[TS] - f1[TSE] - f1[TSW]; + m201 = -f1[BE] - f1[BNE] - f1[BNW] - f1[BSE] - f1[BSW] - f1[BW] + f1[TE] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[TW]; + m021 = -f1[BN] - f1[BNE] - f1[BNW] - f1[BS] - f1[BSE] - f1[BSW] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW]; + m111 = -f1[BNE] + f1[BNW] + f1[BSE] - f1[BSW] + f1[TNE] - f1[TNW] - f1[TSE] + f1[TSW]; + m220 = f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW] + f1[NE] + f1[NW] + f1[SE] + f1[SW] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW]; + m202 = f1[BE] + f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW] + f1[BW] + f1[TE] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[TW]; + m022 = f1[BN] + f1[BNE] + f1[BNW] + f1[BS] + f1[BSE] + f1[BSW] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW]; + m211 = -f1[BNE] - f1[BNW] + f1[BSE] + f1[BSW] + f1[TNE] + f1[TNW] - f1[TSE] - f1[TSW]; + m121 = -f1[BNE] + f1[BNW] - f1[BSE] + f1[BSW] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW]; + m112 = f1[BNE] - f1[BNW] - f1[BSE] + f1[BSW] + f1[TNE] - f1[TNW] - f1[TSE] + f1[TSW]; + m221 = -f1[BNE] - f1[BNW] - f1[BSE] - f1[BSW] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW]; + m212 = f1[BNE] + f1[BNW] - f1[BSE] - f1[BSW] + f1[TNE] + f1[TNW] - f1[TSE] - f1[TSW]; + m122 = f1[BNE] - f1[BNW] + f1[BSE] - f1[BSW] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW]; + m222 = f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW]; + + k200 = m200 - m000*ux2; + k020 = m020 - m000*uy2; + k002 = m002 - m000*uz2; + k110 = m110 - m000*ux_uy; + k101 = m101 - m000*ux_uz; + k011 = m011 - m000*uy_uz; + + k021 = m021 - (m020*uz + 2.0*uy*k011); + k012 = m012 - (uy*m002 + 2.0*uz*k011); + k102 = m102 - (ux*m002 + 2.0*uz*k101); + k201 = m201 - (m200*uz + 2.0*ux*k101 ); + k210 = m210 - (m200*uy + 2.0*ux*k110 ); + k120 = m120 - (ux*m020 + 2.0*uy*k110); + k111 = m111 - (ux_uy_uz + ux*k011 + uy*k101 + uz*k110); + + k121 = m121 - (uz*m120+ 2.0*ux_uy*k011+ux*k021+uy2*k101+2.0*uy*k111); + k112 = m112 - (uy*m102+ 2.0*ux_uz*k011+ux*k012+uz2*k110+2.0*uz*k111); + k211 = m211 - (uz*m210+ 2.0*ux_uy*k101+uy*k201+ux2*k011+2.0*ux*k111); + + + k220 = m220 - ( ux2*m020+ 4.0*ux_uy*k110 + 2.0*ux*k120 + uy2*k200 + 2.0*uy*k210); + k022 = m022 - ( uy2*m002+ 4.0*uy_uz*k011 + 2.0*uy*k012 + uz2*k020 + 2.0*uz*k021); + k202 = m202 - ( ux2*m002+ 4.0*ux_uz*k101 + 2.0*ux*k102 + uz2*k200 + 2.0*uz*k201); + + k221 = m221 - (uz*m220+ + 2.0*ux2*uy*k011 + ux2*k021 + 2.0*ux*uy2*k101 +4.0*ux_uy*k111 + + 2.0*ux*k121 + uy2*k201 + 2.0*uy*k211); + k122 = m122 - (ux*m022 + + 2.0*uy2*uz*k101 + uy2*k102 + 2.0*uy*uz2*k110 + 4.0*uy_uz*k111 + + 2.0*uy*k112 + uz2*k120 + 2.0*uz*k121); + k212 = m212 - (uy*m202 + + 2.0*ux2*uz*k011 +ux2*k012 + 2.0*ux*uz2*k110 + 4.0*ux_uz*k111 + + 2.0*ux*k112 + uz2*k210 + 2.0*uz*k211); + + k222 = m222 - (ux2*m022 + + 4.0* ux*uy2*uz*k101 + + 2.0* ux*uy2*k102 + 4.0* ux_uy*uz2*k110+ + 8.0* ux_uy_uz*k111 + 4.0* ux_uy*k112 + + 2.0* ux*uz2*k120 + 4.0* ux_uz*k121 + 2.0*ux*k122 + + uy2*uz2*k200 + 2.0* uy2*uz*k201 + + uy2*k202 + 2.0* uy*uz2*k210 + 4.0*uy_uz*k211 + + 2.0* uy*k212 + uz2*k220 +2.0* uz*k221); + + //////////////// Central moments to Cumulants \\\\\\\\\\\\\\\\\\\\\\\\\ + + c200 = k200; + c020 = k020; + c002 = k002; + c110 = k110; + c101 = k101; + c011 = k011; + + c021 = k021; + c012 = k012; + c102 = k102; + c201 = k201; + c210 = k210; + c120 = k120; + c111 = k111; + + c121 = k121 - (k020*k101 + 2*k011*k110)/m000; + c211 = k211 - (k200*k011 + 2*k110*k101)/m000; + c112 = k112 - (k002*k110 + 2*k011*k101)/m000; + + c220 = k220 - (k200*k020 + 2*k110*k110)/m000; + c202 = k202 - (k200*k002 + 2*k101*k101)/m000; + c022 = k022 - (k020*k002 + 2*k011*k011)/m000; + + c122 = k122 - (k002*k120 + k020*k102 + 4*k011*k111 + 2*(k101*k021 + k110*k012))/m000; + c212 = k212 - (k200*k012 + k002*k210 + 4*k101*k111 + 2*(k110*k102 + k011*k201))/m000; + c221 = k221 - (k200*k021 + k020*k201 + 4*k110*k111 + 2*(k101*k120 + k011*k210))/m000; + + c222 = k222 - (4*k111*k111 + k200*k022 + k020*k202 + k002*k220 + 4*(k011*k211 + k101*k121 + k110*k112) + + 2*(k120*k102 + k210*k012 + k201*k021))/m000 + + (16*k110*k101*k011 + 4*(k101*k101*k020 + k011*k011*k200 + k110*k110*k002) + 2*k200*k020*k002)/(m000*m000); + + c200_pl_c020_pl_c002 = c200 + c020 + c002; + c200_mi_c020 = c200 - c020; + c200_mi_c002 = c200 - c002; + + c210_pl_c012 = c210+c012; + c210_mi_c012 = c210-c012; + c201_pl_c021 = c201+c021; + c201_mi_c021 = c201-c021; + c120_pl_c102 = c120+c102; + c120_mi_c102 = c120-c102; + + c220_pl_c202_pl_c022 = c220 + c202 + c022; + c220_mi2_c202_pl_c022 = c220 - 2.0*c202 + c022; + c220_pl_c202_mi2_c022 = c220 + c202 - 2.0*c022; + + /////////////////////////// Relaxation \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ + + c110 = c110*(1-w1); + c101 = c101*(1-w1); + c011 = c011*(1-w1); + + c200_mi_c020 = c200_mi_c020*(1-w1); + c200_mi_c002 = c200_mi_c002*(1-w1); + + c200_pl_c020_pl_c002 = c200_pl_c020_pl_c002*(1-w2) + m000*w2; + + c120_pl_c102 = c120_pl_c102*(1-w3); + c210_pl_c012 = c210_pl_c012*(1-w3); + c201_pl_c021 = c201_pl_c021*(1-w3); + + + c120_mi_c102 = c120_mi_c102*(1-w4); + c210_mi_c012 = c210_mi_c012*(1-w4); + c201_mi_c021 = c201_mi_c021*(1-w4); + + c111 = c111*(1-w5); + + c220_mi2_c202_pl_c022 = c220_mi2_c202_pl_c022*(1-w6); + c220_pl_c202_mi2_c022 = c220_pl_c202_mi2_c022*(1-w6); + + c220_pl_c202_pl_c022 = c220_pl_c202_pl_c022*(1-w7); + + c211 = c211*(1-w8); + c121 = c121*(1-w8); + c112 = c112*(1-w8); + + + c221 = c221*(1-w9); + c212 = c212*(1-w9); + c122 = c122*(1-w9); + + c222 = c222*(1-w10); + + + c200 = c1o3 *c200_mi_c020 + c1o3 *c200_mi_c002 + c1o3* c200_pl_c020_pl_c002; + c020 = -2*c1o3* c200_mi_c020+ c1o3* c200_mi_c002 + c1o3* c200_pl_c020_pl_c002; + c002 = c1o3 * c200_mi_c020 -2*c1o3 *c200_mi_c002 + c1o3* c200_pl_c020_pl_c002; + + c210 = (c210_mi_c012 + c210_pl_c012)*0.5; + c012 = 0.5*(-c210_mi_c012 + c210_pl_c012); + c120 =(c120_mi_c102 + c120_pl_c102)*0.5; + c102 = 0.5*(-c120_mi_c102 + c120_pl_c102); + c201 = (c201_mi_c021 + c201_pl_c021)*0.5; + c021 = 0.5*(-c201_mi_c021 + c201_pl_c021); + + c220 = c1o3* c220_mi2_c202_pl_c022 + c1o3* c220_pl_c202_mi2_c022 + c1o3*c220_pl_c202_pl_c022; + c202 = -c1o3* c220_mi2_c202_pl_c022 + c1o3* c220_pl_c202_pl_c022; + c022 = -c1o3* c220_pl_c202_mi2_c022 + c1o3* c220_pl_c202_pl_c022; + + + ////////////////////// Cumulants to Central moments \\\\\\\\\\\\\\\\\\\\\\\\\ + + k200 = c200; + k020 = c020; + k002 = c002; + k110 = c110; + k101 = c101; + k011 = c011; + + k021 = c021; + k012 = c012; + k102 = c102; + k201 = c201; + k210 = c210; + k120 = c120; + k111 = c111; + + k121 = c121 + (k020*k101 + 2*k011*k110)/m000; + k211 = c211 + (k200*k011 + 2*k110*k101)/m000; + k112 = c112 + (k002*k110 + 2*k011*k101)/m000; + + k220 = c220 + (k200*k020 + 2*k110*k110)/m000; + k202 = c202 + (k200*k002 + 2*k101*k101)/m000; + k022 = c022 + (k020*k002 + 2*k011*k011)/m000; + + k122 = c122 + (k002*k120 + k020*k102 + 4*k011*k111 + 2*(k101*k021 + k110*k012))/m000; + k212 = c212 + (k200*k012 + k002*k210 + 4*k101*k111 + 2*(k110*k102 + k011*k201))/m000; + k221 = c221 + (k200*k021 + k020*k201 + 4*k110*k111 + 2*(k101*k120 + k011*k210))/m000; + + k222 = c222 + (4*k111*k111 + k200*k022 + k020*k202 + k002*k220 + 4*(k011*k211 + k101*k121 + k110*k112) + + 2*(k120*k102 + k210*k012 + k201*k021))/m000 + - (16*k110*k101*k011 + 4*(k101*k101*k020 + k011*k011*k200 + k110*k110*k002) + 2*k200*k020*k002)/(m000*m000); + + /////////////////////////////////////////////////////////////////////////////// + + + m200 = k200 + m000*ux2; + m020 = k020 + m000*uy2; + m002 = k002 + m000*uz2; + m110 = k110 + m000*ux_uy; + m101 = k101 + m000*ux_uz; + m011 = k011 + m000*uy_uz; + + m021 = m020*uz + 2.0*uy*k011 + k021; + m012 = uy*m002 + 2.0*uz*k011 + k012; + m102 = ux*m002 + 2.0*uz*k101 + k102; + m112 = uy*m102 + 2.0*ux_uz*k011+ux*k012+uz2*k110+2.0*uz*k111+k112; + + m201 = m200*uz + 2.0*ux*k101 + k201; + m210 = m200*uy + 2.0*ux*k110 + k210; + m211 = uz*m210 + 2.0*ux_uy*k101+uy*k201+ux2*k011+2.0*ux*k111+k211; + + m120 = ux*m020 + 2.0*uy*k110 + k120; + m121 = uz*m120 + 2.0*ux_uy*k011+ux*k021+uy2*k101+2.0*uy*k111+ k121; + + m111 = ux_uy_uz + ux*k011 + uy*k101 + uz*k110+k111; + + m220 = ux2*m020 + 4.0*ux_uy*k110 + 2.0*ux*k120 + uy2*k200 + 2.0*uy*k210 + k220; + + m221 = uz*m220 + 2.0*ux2*uy*k011 + ux2*k021 + 2.0*ux*uy2*k101 +4.0*ux_uy*k111+ + 2.0*ux*k121 + uy2*k201 + 2.0*uy*k211 + k221; + + m022 = uy2*m002 + 4.0*uy_uz*k011 +2.0*uy*k012+ uz2*k020+ 2.0*uz*k021 + k022; + + m122 = ux*m022 + 2.0*uy2*uz*k101 + uy2*k102 + + 2.0*uy*uz2*k110 + 4.0*uy_uz*k111 + 2.0*uy*k112 +uz2*k120 + 2.0*uz*k121 + k122; + + m202 = ux2*m002 + 4.0*ux_uz*k101+ 2.0*ux*k102 + uz2*k200+ 2.0*uz*k201 + k202; + + m212 = uy*m202 + 2.0*ux2*uz*k011 +ux2*k012 + 2.0*ux*uz2*k110 + 4.0*ux_uz*k111 + + 2.0*ux*k112 + uz2*k210 + 2.0*uz*k211 + k212; + + m222 = ux2*m022 + + 4.0* ux*uy2*uz*k101 + + 2.0* ux*uy2*k102 + 4.0* ux_uy*uz2*k110+ + 8.0* ux_uy_uz*k111 + 4.0* ux_uy*k112 + + 2.0* ux*uz2*k120 + 4.0* ux_uz*k121 + 2.0*ux*k122 + + uy2*uz2*k200 + 2.0* uy2*uz*k201 + + uy2*k202 + 2.0* uy*uz2*k210 + 4.0*uy_uz*k211 + + 2.0* uy*k212 + uz2*k220 +2.0* uz*k221 + k222; + + f1[ZERO] = (-m200 + m220 - m222 + m202 - m020 + m022 - m002 + m000); + f1[E] = 0.5* (m200 - m220 + m222 - m202 - m120 + m122 - m102 +m100); + f1[W] = 0.5* (m200 - m220 + m222 - m202 + m120 - m122 + m102 -m100); + f1[N] = 0.5* (-m210 - m220 + m222 + m212 + m020 - m022 - m012 +m010); + f1[S] = 0.5* (m210 - m220 + m222 - m212 + m020 - m022 + m012 -m010); + f1[T] = 0.5* (m221 + m222 - m201 - m202 - m021 - m022 + m002 +m001); + f1[B] = 0.5* (-m221 + m222 + m201 - m202 + m021 - m022 + m002-m001); + + f1[NE] = 0.25*( m210 + m220- m222 - m212 + m110+ m120- m122 -m112); + f1[SW] = 0.25*(-m210 + m220- m222 + m212 + m110- m120+ m122 -m112); + f1[SE] = 0.25*(-m210 + m220- m222 + m212 - m110+ m120- m122 +m112); + f1[NW] = 0.25*( m210 + m220- m222 - m212 - m110- m120+ m122 + m112); + f1[TE] = 0.25*(-m221 - m222 + m201 + m202 - m121 - m122 + m101 + m102); + f1[BW] = 0.25*( m221 -m222 - m201 + m202 - m121 + m122 + m101 - m102); + f1[BE] = 0.25*(m221 - m222 - m201 + m202 + m121 - m122 - m101 +m102); + f1[TW] = 0.25*(-m221 - m222 + m201 + m202 + m121 + m122 - m101 -m102); + f1[TN] = 0.25*(-m221 - m222 - m211 - m212 + m021 + m022 + m011+m012); + f1[BS] = 0.25*( m221 - m222 - m211 + m212 - m021 + m022 + m011 - m012); + f1[BN] = 0.25*( m221 - m222 + m211 - m212 - m021 + m022 - m011 + m012); + f1[TS] = 0.25*(-m221 - m222 + m211 + m212 + m021 + m022 - m011 -m012); + + f1[TNE]=0.125*( m221 + m222 + m211 + m212 + m121 + m122 + m111 + m112); + f1[BNE]=0.125*(-m221 + m222 -m211 + m212 -m121 + m122 -m111 + m112); + f1[TSE]=0.125*( m221 + m222 - m211 - m212 + m121 + m122 - m111 - m112); + f1[BSE]=0.125*(-m221 + m222 +m211 - m212 -m121 + m122 +m111 - m112); + f1[TNW]=0.125*( m221 + m222 + m211 + m212 - m121 - m122 - m111 - m112); + f1[BNW]=0.125*(-m221 + m222 -m211 + m212 +m121 - m122 +m111 - m112); + f1[TSW]=0.125*( m221 + m222 - m211 - m212 - m121 - m122 + m111 + m112); + f1[BSW]=0.125*(-m221 + m222+m211 - m212+m121 - m122-m111 + m112); + +*/ + ////////////////////////////////////////////////////////////////////////// + //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 rho_post = f1[ZERO] + f1[E] + f1[W] + f1[N] + f1[S] + f1[T] + f1[B] + f1[NE] + f1[SW] + f1[SE] + f1[NW] + f1[TE] + f1[BW] + + f1[BE] + f1[TW] + f1[TN] + f1[BS] + f1[BN] + f1[TS] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW]; */ + //LBMReal dif = fabs(rho - rho_post); + LBMReal dif = rho - rho_post; +#ifdef SINGLEPRECISION + if(dif > 10.0E-7 || dif < -10.0E-7) +#else + if(dif > 10.0E-15 || dif < -10.0E-15) +#endif + { + UB_THROW(UbException(UB_EXARGS,"rho="+UbSystem::toString(rho)+", rho_post="+UbSystem::toString(rho_post) + +" dif="+UbSystem::toString(dif) + +" rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3))); + //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3)); + //exit(EXIT_FAILURE); + } +#endif + /* + g[E ] = (f1[E ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[E ] + 0.5*forcingTerm[E ]); + g[N ] = (f1[N ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[N ] + 0.5*forcingTerm[N ]); + g[T ] = (f1[T ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[T ] + 0.5*forcingTerm[T ]); + g[NE ] = (f1[NE ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[NE ] + 0.5*forcingTerm[NE ]); + g[NW ] = (f1[NW ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[NW ] + 0.5*forcingTerm[NW ]); + g[TE ] = (f1[TE ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[TE ] + 0.5*forcingTerm[TE ]); + g[TW ] = (f1[TW ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[TW ] + 0.5*forcingTerm[TW ]); + g[TN ] = (f1[TN ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[TN ] + 0.5*forcingTerm[TN ]); + g[TS ] = (f1[TS ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[TS ] + 0.5*forcingTerm[TS ]); + g[TNE] = (f1[TNE]*c1o3 + (p1 - rho*c1o3)*WEIGTH[TNE] + 0.5*forcingTerm[TNE]); + g[TNW] = (f1[TNW]*c1o3 + (p1 - rho*c1o3)*WEIGTH[TNW] + 0.5*forcingTerm[TNW]); + g[TSE] = (f1[TSE]*c1o3 + (p1 - rho*c1o3)*WEIGTH[TSE] + 0.5*forcingTerm[TSE]); + g[TSW] = (f1[TSW]*c1o3 + (p1 - rho*c1o3)*WEIGTH[TSW] + 0.5*forcingTerm[TSW]); + g[W ] = (f1[W ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[W ] + 0.5*forcingTerm[W ]); + g[S ] = (f1[S ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[S ] + 0.5*forcingTerm[S ]); + g[B ] = (f1[B ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[B ] + 0.5*forcingTerm[B ]); + g[SW ] = (f1[SW ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[SW ] + 0.5*forcingTerm[SW ]); + g[SE ] = (f1[SE ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[SE ] + 0.5*forcingTerm[SE ]); + g[BW ] = (f1[BW ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[BW ] + 0.5*forcingTerm[BW ]); + g[BE ] = (f1[BE ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[BE ] + 0.5*forcingTerm[BE ]); + g[BS ] = (f1[BS ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[BS ] + 0.5*forcingTerm[BS ]); + g[BN ] = (f1[BN ]*c1o3 + (p1 - rho*c1o3)*WEIGTH[BN ] + 0.5*forcingTerm[BN ]); + g[BSW] = (f1[BSW]*c1o3 + (p1 - rho*c1o3)*WEIGTH[BSW] + 0.5*forcingTerm[BSW]); + g[BSE] = (f1[BSE]*c1o3 + (p1 - rho*c1o3)*WEIGTH[BSE] + 0.5*forcingTerm[BSE]); + g[BNW] = (f1[BNW]*c1o3 + (p1 - rho*c1o3)*WEIGTH[BNW] + 0.5*forcingTerm[BNW]); + g[BNE] = (f1[BNE]*c1o3 + (p1 - rho*c1o3)*WEIGTH[BNE] + 0.5*forcingTerm[BNE]); + + g[ZERO] = (f1[ZERO]*c1o3 + (p1 - rho*c1o3)*WEIGTH[ZERO] + 0.5*forcingTerm[ZERO]); + */ + + + mfcbb = (mfcbb*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[E ] + 0.5*forcingTerm[E ]); + mfbcb = (mfbcb*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[N ] + 0.5*forcingTerm[N ]); + mfbbc = (mfbbc*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[T ] + 0.5*forcingTerm[T ]); + mfccb = (mfccb*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[NE ] + 0.5*forcingTerm[NE ]); + mfacb = (mfacb*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[NW ] + 0.5*forcingTerm[NW ]); + mfcbc = (mfcbc*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[TE ] + 0.5*forcingTerm[TE ]); + mfabc = (mfabc*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[TW ] + 0.5*forcingTerm[TW ]); + mfbcc = (mfbcc*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[TN ] + 0.5*forcingTerm[TN ]); + mfbac = (mfbac*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[TS ] + 0.5*forcingTerm[TS ]); + mfccc = (mfccc*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[TNE] + 0.5*forcingTerm[TNE]); + mfacc = (mfacc*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[TNW] + 0.5*forcingTerm[TNW]); + mfcac = (mfcac*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[TSE] + 0.5*forcingTerm[TSE]); + mfaac = (mfaac*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[TSW] + 0.5*forcingTerm[TSW]); + mfabb = (mfabb*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[W ] + 0.5*forcingTerm[W ]); + mfbab = (mfbab*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[S ] + 0.5*forcingTerm[S ]); + mfbba = (mfbba*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[B ] + 0.5*forcingTerm[B ]); + mfaab = (mfaab*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[SW ] + 0.5*forcingTerm[SW ]); + mfcab = (mfcab*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[SE ] + 0.5*forcingTerm[SE ]); + mfaba = (mfaba*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[BW ] + 0.5*forcingTerm[BW ]); + mfcba = (mfcba*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[BE ] + 0.5*forcingTerm[BE ]); + mfbaa = (mfbaa*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[BS ] + 0.5*forcingTerm[BS ]); + mfbca = (mfbca*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[BN ] + 0.5*forcingTerm[BN ]); + mfaaa = (mfaaa*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[BSW] + 0.5*forcingTerm[BSW]); + mfcaa = (mfcaa*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[BSE] + 0.5*forcingTerm[BSE]); + mfaca = (mfaca*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[BNW] + 0.5*forcingTerm[BNW]); + mfcca = (mfcca*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[BNE] + 0.5*forcingTerm[BNE]); + + mfbbb = (mfbbb*c1o3 + 0*(p1 - rho*c1o3)*WEIGTH[ZERO] + 0.5*forcingTerm[ZERO]); + + + + + LBMReal denom = sqrt(dX1_phi*dX1_phi + dX2_phi*dX2_phi + dX3_phi*dX3_phi) + 1e-9; + 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 != ZERO) + { + LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0; + LBMReal hSource = (tauH - 0.5)*(1.0 - phi[ZERO])*(phi[ZERO])*(dirGrad_phi)/denom; + hEq = phi[ZERO]*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(ux2+uy2+uz2)) + hSource*WEIGTH[dir]; + //gEq = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx2+vy2+vz2))*c1o3 + (p1-rho*c1o3)*WEIGTH[dir]; + //h[dir] = hEq; //h[dir] - (h[dir] - hEq)/(tauH + 0.5)); /// This corresponds with the collision factor of 1.0 which equals (tauH + 0.5). + h[dir] = h[dir] - (h[dir] - hEq)/(tauH); + //g[dir] = g[dir] - collFactorM*(g[dir]-gEq) + 0.5*forcingTerm[dir]; + + } + else + { + hEq = phi[ZERO]*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(ux2+uy2+uz2)); + //gEq = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx2+vy2+vz2))*c1o3 + (p1-rho*c1o3)*WEIGTH[dir]; + //h[dir] = hEq; + h[dir] = h[dir] - (h[dir] - hEq)/(tauH); + //g[dir] = g[dir] - collFactorM*(g[dir]-gEq) + 0.5*forcingTerm[dir]; + } + } + + ////////////////////////////////////////////////////////////////////////// + //write distribution + ////////////////////////////////////////////////////////////////////////// + + (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb; + (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab; + (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba; + (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab; + (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab; + (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba; + (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba; + (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa; + (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca; + (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa; + (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa; + (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca; + (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca; + + (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3 ) = mfcbb; + (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3 ) = mfbcb; + (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3 ) = mfccb; + (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3 ) = mfacb; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac; + + (*this->zeroDistributionsF)(x1,x2,x3) = mfbbb; + + + /* + (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = g[D3Q27System::INV_E]; + (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = g[D3Q27System::INV_N]; + (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = g[D3Q27System::INV_T]; + (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = g[D3Q27System::INV_NE]; + (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = g[D3Q27System::INV_NW]; + (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = g[D3Q27System::INV_TE]; + (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = g[D3Q27System::INV_TW]; + (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = g[D3Q27System::INV_TN]; + (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = g[D3Q27System::INV_TS]; + (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = g[D3Q27System::INV_TNE]; + (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = g[D3Q27System::INV_TNW]; + (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = g[D3Q27System::INV_TSE]; + (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = g[D3Q27System::INV_TSW]; + + (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3 ) = g[D3Q27System::INV_W ]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3 ) = g[D3Q27System::INV_S ]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = g[D3Q27System::INV_B ]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3 ) = g[D3Q27System::INV_SW]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3 ) = g[D3Q27System::INV_SE]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = g[D3Q27System::INV_BW]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = g[D3Q27System::INV_BE]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = g[D3Q27System::INV_BS]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = g[D3Q27System::INV_BN]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = g[D3Q27System::INV_BSW]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = g[D3Q27System::INV_BSE]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = g[D3Q27System::INV_BNW]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = g[D3Q27System::INV_BNE]; + + (*this->zeroDistributionsF)(x1,x2,x3) = g[D3Q27System::ZERO]; + */ + + + (*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::ZERO]; + ////////////////////////////////////////////////////////////////////////// + + } + } + } + } + + } +} +////////////////////////////////////////////////////////////////////////// +double MultiphaseCumulantLBMKernel::getCallculationTime() +{ + //return timer.getDuration(); + return timer.getTotalTime(); +} +////////////////////////////////////////////////////////////////////////// + +LBMReal MultiphaseCumulantLBMKernel::gradX1_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*DX1[k]*phi[k]; + } + return 3.0*sum; +} + +LBMReal MultiphaseCumulantLBMKernel::gradX2_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*DX2[k]*phi[k]; + } + return 3.0*sum; +} + +LBMReal MultiphaseCumulantLBMKernel::gradX3_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*DX3[k]*phi[k]; + } + return 3.0*sum; +} + +LBMReal MultiphaseCumulantLBMKernel::nabla2_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*(phi[k] - phi[ZERO]); + } + return 6.0*sum; +} +///// Commnets neeeded //////// + +void MultiphaseCumulantLBMKernel::computePhasefield() +{ + using namespace D3Q27System; + DistributionArray3DPtr distributionsH = dataSet->getHdistributions(); + + //const int bcArrayMaxX1 = (int)distributionsH->getNX1(); + //const int bcArrayMaxX2 = (int)distributionsH->getNX2(); + //const int bcArrayMaxX3 = (int)distributionsH->getNX3(); + + int minX1 = ghostLayerWidth; + int minX2 = ghostLayerWidth; + int minX3 = ghostLayerWidth; + int maxX1 = (int)distributionsH->getNX1() - ghostLayerWidth; + int maxX2 = (int)distributionsH->getNX2() - ghostLayerWidth; + int maxX3 = (int)distributionsH->getNX3() - ghostLayerWidth; + + //------------- Computing the phase-field ------------------ + for(int x3 = minX3; x3 < maxX3; x3++) + { + for(int x2 = minX2; x2 < maxX2; x2++) + { + for(int x1 = minX1; x1 < maxX1; x1++) + { + //if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3)) + { + int x1p = x1 + 1; + int x2p = x2 + 1; + int x3p = x3 + 1; + + 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[ZERO] = (*this->zeroDistributionsH)(x1,x2,x3); + + /*(*this->phaseField)(x1,x2,x3) = h[ZERO] + h[E] + h[W] + h[N] + h[S] + h[T] + h[B] + h[NE] + h[SW] + h[SE] + h[NW] + h[TE] + h[BW] + + h[BE] + h[TW] + h[TN] + h[BS] + h[BN] + h[TS] + h[TNE] + h[TNW] + h[TSE] + h[TSW] + h[BNE] + h[BNW] + h[BSE] + h[BSW];*/ + + } + } + } + } + //---------------------------------------------------------- + +/* + /////// Filling ghost nodes for FD computations ////////// + for(int x1 = minX1; x1 < maxX1; x1++) + { + for(int x2 = minX2; x2 < maxX2; x2++) + { + int x3 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, x2, maxX3-1); + x3 = maxX3; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, x2, minX3); + } + } + for(int x2 = minX2; x2 < maxX2; x2++) + { + for(int x3 = minX3; x3 < maxX3; x3++) + { + int x1 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(maxX1-1, x2, x3); + x1 = maxX1; + (*phaseField)(x1, x2, x3) = (*phaseField)(minX1, x2, x3); + } + } + for(int x1 = minX1; x1 < maxX1; x1++) + { + for(int x3 = minX3; x3 < maxX3; x3++) + { + int x2 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, maxX2-1, x3); + x2 = maxX2; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, minX2, x3); + } + } + (*phaseField)(0, 0, 0 ) = (*phaseField)(maxX1-1, maxX2-1, maxX3-1); + (*phaseField)(0, 0, maxX3) = (*phaseField)(maxX1-1, maxX2-1, minX3 ); + (*phaseField)(0, maxX2, 0 ) = (*phaseField)(maxX1-1, minX2, maxX3-1 ); + (*phaseField)(0, maxX2, maxX3) = (*phaseField)(maxX1-1, minX2, minX3 ); + + (*phaseField)(maxX1, 0, 0 ) = (*phaseField)(minX1, maxX2-1, maxX3-1); + (*phaseField)(maxX1, 0, maxX3) = (*phaseField)(minX1, maxX2-1, minX3 ); + (*phaseField)(maxX1, maxX2, 0 ) = (*phaseField)(minX1, minX2, maxX3-1 ); + (*phaseField)(maxX1, maxX2, maxX3) = (*phaseField)(minX1, minX2, minX3 ); + + ///////////////////////////////////////////////////////// +*/ +} + +void MultiphaseCumulantLBMKernel::findNeighbors(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, int x3) +{ + using namespace D3Q27System; + + BCArray3DPtr bcArray = this->getBCProcessor()->getBCArray(); + + phi[ZERO] = (*ph)(x1,x2,x3); + + LBMReal a = -0.5*sqrt(2*beta/kappa)*cos(contactAngle*PI/180); + LBMReal a1 = 1 + a; + + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) + { + phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]); + } + else + { + /* + if (phi[ZERO] < 1e-2) + { + phi[k] = (*ph)(x1 + DX1[INVDIR[k]], x2 + DX2[INVDIR[k]], x3 + DX3[INVDIR[k]]); + } + else + { + LBMReal phi_f = (*ph)(x1 + DX1[k], x2, x3 + DX3[k]); + phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f; + } + */ + phi[k] = (*ph)(x1 + DX1[INVDIR[k]], x2 + DX2[INVDIR[k]], x3 + DX3[INVDIR[k]]); + + + } + } + + /* + phi[E ] = (*ph)(x1 + DX1[E ], x2 + DX2[E ], x3 + DX3[E ]); + phi[N ] = (*ph)(x1 + DX1[N ], x2 + DX2[N ], x3 + DX3[N ]); + phi[T ] = (*ph)(x1 + DX1[T ], x2 + DX2[T ], x3 + DX3[T ]); + phi[W ] = (*ph)(x1 + DX1[W ], x2 + DX2[W ], x3 + DX3[W ]); + phi[S ] = (*ph)(x1 + DX1[S ], x2 + DX2[S ], x3 + DX3[S ]); + phi[B ] = (*ph)(x1 + DX1[B ], x2 + DX2[B ], x3 + DX3[B ]); + phi[NE ] = (*ph)(x1 + DX1[NE ], x2 + DX2[NE ], x3 + DX3[NE ]); + phi[NW ] = (*ph)(x1 + DX1[NW ], x2 + DX2[NW ], x3 + DX3[NW ]); + phi[TE ] = (*ph)(x1 + DX1[TE ], x2 + DX2[TE ], x3 + DX3[TE ]); + phi[TW ] = (*ph)(x1 + DX1[TW ], x2 + DX2[TW ], x3 + DX3[TW ]); + phi[TN ] = (*ph)(x1 + DX1[TN ], x2 + DX2[TN ], x3 + DX3[TN ]); + phi[TS ] = (*ph)(x1 + DX1[TS ], x2 + DX2[TS ], x3 + DX3[TS ]); + phi[SW ] = (*ph)(x1 + DX1[SW ], x2 + DX2[SW ], x3 + DX3[SW ]); + phi[SE ] = (*ph)(x1 + DX1[SE ], x2 + DX2[SE ], x3 + DX3[SE ]); + phi[BW ] = (*ph)(x1 + DX1[BW ], x2 + DX2[BW ], x3 + DX3[BW ]); + phi[BE ] = (*ph)(x1 + DX1[BE ], x2 + DX2[BE ], x3 + DX3[BE ]); + phi[BS ] = (*ph)(x1 + DX1[BS ], x2 + DX2[BS ], x3 + DX3[BS ]); + phi[BN ] = (*ph)(x1 + DX1[BN ], x2 + DX2[BN ], x3 + DX3[BN ]); + phi[BSW] = (*ph)(x1 + DX1[BSW], x2 + DX2[BSW], x3 + DX3[BSW]); + phi[BSE] = (*ph)(x1 + DX1[BSE], x2 + DX2[BSE], x3 + DX3[BSE]); + phi[BNW] = (*ph)(x1 + DX1[BNW], x2 + DX2[BNW], x3 + DX3[BNW]); + phi[BNE] = (*ph)(x1 + DX1[BNE], x2 + DX2[BNE], x3 + DX3[BNE]); + phi[TNE] = (*ph)(x1 + DX1[TNE], x2 + DX2[TNE], x3 + DX3[TNE]); + phi[TNW] = (*ph)(x1 + DX1[TNW], x2 + DX2[TNW], x3 + DX3[TNW]); + phi[TSE] = (*ph)(x1 + DX1[TSE], x2 + DX2[TSE], x3 + DX3[TSE]); + phi[TSW] = (*ph)(x1 + DX1[TSW], x2 + DX2[TSW], x3 + DX3[TSW]); + */ +} + +void MultiphaseCumulantLBMKernel::swapDistributions() +{ + dataSet->getFdistributions()->swap(); + dataSet->getHdistributions()->swap(); + //computePhasefield(); +} \ No newline at end of file diff --git a/apps/cpu/Multiphase/backup/Final.ast b/apps/cpu/Multiphase/backup/Final.ast new file mode 100644 index 0000000000000000000000000000000000000000..d1909c7ae985f4014060a4e9b19e1f0bc093fe92 --- /dev/null +++ b/apps/cpu/Multiphase/backup/Final.ast @@ -0,0 +1,5042 @@ +solid Mesh + facet normal -0.945841 -0.324629 0.000002 + outer loop + vertex -190.759033 12.614820 -497.317169 + vertex -190.732468 12.537620 -470.000000 + vertex -190.758972 12.614843 -470.000000 + endloop + endfacet + facet normal -0.913815 -0.406131 -0.000259 + outer loop + vertex -190.716019 12.517895 -497.096222 + vertex -190.692001 12.446568 -470.000000 + vertex -190.732468 12.537620 -470.000000 + endloop + endfacet + facet normal -0.913813 -0.406134 -0.000259 + outer loop + vertex -190.732468 12.537620 -470.000000 + vertex -190.759033 12.614820 -497.317169 + vertex -190.716019 12.517895 -497.096222 + endloop + endfacet + facet normal -0.913987 -0.405744 0.000002 + outer loop + vertex -190.759033 12.614820 -497.317169 + vertex -190.758972 12.614843 -470.000000 + vertex -190.829590 12.773918 -470.000000 + endloop + endfacet + facet normal -0.914011 -0.405689 0.000002 + outer loop + vertex -190.829590 12.773918 -470.000000 + vertex -190.833801 12.783269 -497.701202 + vertex -190.759033 12.614820 -497.317169 + endloop + endfacet + facet normal 0.000000 -0.915769 -0.401705 + outer loop + vertex -190.716019 12.517895 -497.096222 + vertex -90.000000 12.563623 -497.200470 + vertex -90.000000 12.517895 -497.096222 + endloop + endfacet + facet normal 0.000000 -0.915761 -0.401724 + outer loop + vertex -190.716019 12.517895 -497.096222 + vertex -190.759033 12.614820 -497.317169 + vertex -90.000000 12.563623 -497.200470 + endloop + endfacet + facet normal -0.928601 -0.371080 -0.000154 + outer loop + vertex -190.571716 12.156562 -496.543152 + vertex -190.555878 12.105928 -470.000000 + vertex -190.692001 12.446568 -470.000000 + endloop + endfacet + facet normal -0.928600 -0.371082 -0.000154 + outer loop + vertex -190.692001 12.446568 -470.000000 + vertex -190.716019 12.517895 -497.096222 + vertex -190.571716 12.156562 -496.543152 + endloop + endfacet + facet normal 0.000000 -0.915773 -0.401697 + outer loop + vertex -190.759033 12.614820 -497.317169 + vertex -90.000000 12.783269 -497.701202 + vertex -90.000000 12.703794 -497.520020 + endloop + endfacet + facet normal 0.000000 -0.915776 -0.401689 + outer loop + vertex -190.759033 12.614820 -497.317169 + vertex -190.833801 12.783269 -497.701202 + vertex -90.000000 12.783269 -497.701202 + endloop + endfacet + facet normal -0.904908 -0.425607 -0.000006 + outer loop + vertex -190.833801 12.783269 -497.701202 + vertex -190.829590 12.773918 -470.000000 + vertex -190.871490 12.863006 -470.000000 + endloop + endfacet + facet normal -0.904902 -0.425620 -0.000006 + outer loop + vertex -190.871490 12.863006 -470.000000 + vertex -190.878250 12.877775 -498.018738 + vertex -190.833801 12.783269 -497.701202 + endloop + endfacet + facet normal 0.000000 -0.837180 -0.546928 + outer loop + vertex -190.716019 12.517895 -497.096222 + vertex -90.000000 12.517895 -497.096222 + vertex -90.000000 12.327077 -496.804138 + endloop + endfacet + facet normal 0.000000 -0.915770 -0.401704 + outer loop + vertex -190.759033 12.614820 -497.317169 + vertex -90.000000 12.703794 -497.520020 + vertex -90.000000 12.563623 -497.200470 + endloop + endfacet + facet normal 0.000000 -0.837160 -0.546958 + outer loop + vertex -190.571716 12.156562 -496.543152 + vertex -90.000000 12.327077 -496.804138 + vertex -90.000000 12.156562 -496.543152 + endloop + endfacet + facet normal 0.000000 -0.837171 -0.546942 + outer loop + vertex -190.571716 12.156562 -496.543152 + vertex -190.716019 12.517895 -497.096222 + vertex -90.000000 12.327077 -496.804138 + endloop + endfacet + facet normal -0.945346 -0.326068 -0.000058 + outer loop + vertex -190.417419 11.709126 -496.057098 + vertex -190.409958 11.682874 -470.000000 + vertex -190.555878 12.105928 -470.000000 + endloop + endfacet + facet normal -0.945348 -0.326063 -0.000058 + outer loop + vertex -190.571716 12.156562 -496.543152 + vertex -190.417419 11.709126 -496.057098 + vertex -190.555878 12.105928 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.958450 -0.285260 + outer loop + vertex -190.833801 12.783269 -497.701202 + vertex -90.000000 12.827829 -497.850922 + vertex -90.000000 12.783269 -497.701202 + endloop + endfacet + facet normal 0.000000 -0.958451 -0.285258 + outer loop + vertex -190.833801 12.783269 -497.701202 + vertex -190.878250 12.877775 -498.018738 + vertex -90.000000 12.827829 -497.850922 + endloop + endfacet + facet normal -0.900645 -0.434557 -0.000012 + outer loop + vertex -190.878250 12.877775 -498.018738 + vertex -190.871490 12.863006 -470.000000 + vertex -190.902206 12.926666 -470.000000 + endloop + endfacet + facet normal -0.900605 -0.434639 -0.000012 + outer loop + vertex -190.902206 12.926666 -470.000000 + vertex -190.910904 12.945445 -498.341614 + vertex -190.878250 12.877775 -498.018738 + endloop + endfacet + facet normal 0.000000 -0.735719 -0.677287 + outer loop + vertex -190.571716 12.156562 -496.543152 + vertex -90.000000 12.156562 -496.543152 + vertex -90.000000 11.920433 -496.286652 + endloop + endfacet + facet normal -0.962260 -0.272134 0.000001 + outer loop + vertex -190.276031 11.209196 -495.667999 + vertex -190.276001 11.209205 -470.000000 + vertex -190.409958 11.682874 -470.000000 + endloop + endfacet + facet normal -0.962258 -0.272141 0.000001 + outer loop + vertex -190.417419 11.709126 -496.057098 + vertex -190.276031 11.209196 -495.667999 + vertex -190.409958 11.682874 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.735742 -0.677262 + outer loop + vertex -190.417419 11.709126 -496.057098 + vertex -90.000000 11.920433 -496.286652 + vertex -90.000000 11.709126 -496.057098 + endloop + endfacet + facet normal 0.000000 -0.735730 -0.677275 + outer loop + vertex -190.417419 11.709126 -496.057098 + vertex -190.571716 12.156562 -496.543152 + vertex -90.000000 11.920433 -496.286652 + endloop + endfacet + facet normal -0.000072 -0.969398 -0.245496 + outer loop + vertex -190.878250 12.877775 -498.018738 + vertex -90.000000 12.913538 -498.189362 + vertex -90.000000 12.827829 -497.850922 + endloop + endfacet + facet normal -0.897461 -0.441094 -0.000017 + outer loop + vertex -190.910904 12.945445 -498.341614 + vertex -190.902206 12.926666 -470.000000 + vertex -190.920990 12.964884 -470.000000 + endloop + endfacet + facet normal -0.897547 -0.440920 -0.000017 + outer loop + vertex -190.920990 12.964884 -470.000000 + vertex -190.930923 12.986210 -498.668121 + vertex -190.910904 12.945445 -498.341614 + endloop + endfacet + facet normal 0.000000 -0.978739 -0.205112 + outer loop + vertex -190.878250 12.877775 -498.018738 + vertex -90.000000 12.945445 -498.341614 + vertex -90.000000 12.913538 -498.189362 + endloop + endfacet + facet normal 0.000000 -0.978735 -0.205128 + outer loop + vertex -190.878250 12.877775 -498.018738 + vertex -190.910904 12.945445 -498.341614 + vertex -90.000000 12.945445 -498.341614 + endloop + endfacet + facet normal 0.000000 -0.614219 -0.789136 + outer loop + vertex -90.000000 11.709126 -496.057098 + vertex -90.000000 11.472660 -495.873047 + vertex -190.276031 11.209196 -495.667999 + endloop + endfacet + facet normal 0.000000 -0.614201 -0.789149 + outer loop + vertex -90.000000 11.709126 -496.057098 + vertex -190.276031 11.209196 -495.667999 + vertex -190.417419 11.709126 -496.057098 + endloop + endfacet + facet normal -0.986371 -0.164536 0.000001 + outer loop + vertex -190.276031 11.209196 -495.667999 + vertex -190.263336 11.133281 -470.000000 + vertex -190.276001 11.209205 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.992295 -0.123895 + outer loop + vertex -190.910904 12.945445 -498.341614 + vertex -90.000000 12.964661 -498.495514 + vertex -90.000000 12.945445 -498.341614 + endloop + endfacet + facet normal 0.000000 -0.992296 -0.123889 + outer loop + vertex -190.910904 12.945445 -498.341614 + vertex -190.930923 12.986210 -498.668121 + vertex -90.000000 12.964661 -498.495514 + endloop + endfacet + facet normal -0.896136 -0.443780 -0.000020 + outer loop + vertex -190.930923 12.986210 -498.668121 + vertex -190.920990 12.964884 -470.000000 + vertex -190.927307 12.977640 -470.000000 + endloop + endfacet + facet normal -0.896165 -0.443720 -0.000020 + outer loop + vertex -190.927307 12.977640 -470.000000 + vertex -190.937744 13.000000 -499.000000 + vertex -190.930923 12.986210 -498.668121 + endloop + endfacet + facet normal 0.000000 -0.614203 -0.789148 + outer loop + vertex -90.000000 11.472660 -495.873047 + vertex -90.000000 11.197916 -495.659210 + vertex -190.276031 11.209196 -495.667999 + endloop + endfacet + facet normal -0.961940 -0.273261 -0.000332 + outer loop + vertex -190.269958 11.187792 -495.651337 + vertex -190.257584 11.113030 -470.000000 + vertex -190.263336 11.133281 -470.000000 + endloop + endfacet + facet normal -0.961959 -0.273194 -0.000332 + outer loop + vertex -190.276031 11.209196 -495.667999 + vertex -190.269958 11.187792 -495.651337 + vertex -190.263336 11.133281 -470.000000 + endloop + endfacet + facet normal -0.000072 -0.996585 -0.082575 + outer loop + vertex -190.930923 12.986210 -498.668121 + vertex -90.000000 12.993500 -498.843567 + vertex -90.000000 12.964661 -498.495514 + endloop + endfacet + facet normal 0.000000 -0.999138 -0.041517 + outer loop + vertex -190.930923 12.986210 -498.668121 + vertex -90.000000 13.000000 -499.000000 + vertex -90.000000 12.993500 -498.843567 + endloop + endfacet + facet normal 0.000000 -0.999138 -0.041516 + outer loop + vertex -190.930923 12.986210 -498.668121 + vertex -190.937744 13.000000 -499.000000 + vertex -90.000000 13.000000 -499.000000 + endloop + endfacet + facet normal -0.879513 -0.475874 -0.000050 + outer loop + vertex -190.937744 13.000000 -499.000000 + vertex -190.927307 12.977640 -470.000000 + vertex -190.968414 13.053615 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.613899 -0.789384 + outer loop + vertex -90.000000 11.197916 -495.659210 + vertex -90.000000 11.187792 -495.651337 + vertex -190.269958 11.187792 -495.651337 + endloop + endfacet + facet normal 0.000000 -0.614281 -0.789087 + outer loop + vertex -90.000000 11.197916 -495.659210 + vertex -190.269958 11.187792 -495.651337 + vertex -190.276031 11.209196 -495.667999 + endloop + endfacet + facet normal -0.977484 -0.211011 -0.000143 + outer loop + vertex -190.144592 10.606782 -495.336914 + vertex -190.138763 10.562610 -470.000000 + vertex -190.257584 11.113030 -470.000000 + endloop + endfacet + facet normal -0.977488 -0.210993 -0.000143 + outer loop + vertex -190.269958 11.187792 -495.651337 + vertex -190.144592 10.606782 -495.336914 + vertex -190.257584 11.113030 -470.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -190.937744 13.000000 -499.000000 + vertex -90.000000 13.000000 -499.942719 + vertex -90.000000 13.000000 -499.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -190.937744 13.000000 -499.000000 + vertex -190.937744 13.000000 -501.000000 + vertex -90.000000 13.000000 -499.942719 + endloop + endfacet + facet normal -0.868067 -0.496447 0.000000 + outer loop + vertex -190.937744 13.000000 -499.000000 + vertex -190.968414 13.053615 -470.000000 + vertex -190.970398 13.057083 -470.000000 + endloop + endfacet + facet normal -0.868015 -0.496539 0.000000 + outer loop + vertex -190.970398 13.057083 -470.000000 + vertex -190.937744 13.000000 -501.000000 + vertex -190.937744 13.000000 -499.000000 + endloop + endfacet + facet normal 0.000000 -0.475973 -0.879460 + outer loop + vertex -90.000000 11.187792 -495.651337 + vertex -90.000000 10.881607 -495.485626 + vertex -190.269958 11.187792 -495.651337 + endloop + endfacet + facet normal -0.989593 -0.143898 -0.000024 + outer loop + vertex -190.053726 9.981941 -495.122406 + vertex -190.052567 9.969829 -470.000000 + vertex -190.138763 10.562610 -470.000000 + endloop + endfacet + facet normal -0.989590 -0.143917 -0.000023 + outer loop + vertex -190.144592 10.606782 -495.336914 + vertex -190.053726 9.981941 -495.122406 + vertex -190.138763 10.562610 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.475908 -0.879495 + outer loop + vertex -90.000000 10.881607 -495.485626 + vertex -90.000000 10.606782 -495.336914 + vertex -190.144592 10.606782 -495.336914 + endloop + endfacet + facet normal 0.000000 -0.475942 -0.879476 + outer loop + vertex -90.000000 10.881607 -495.485626 + vertex -190.144592 10.606782 -495.336914 + vertex -190.269958 11.187792 -495.651337 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -190.937744 13.000000 -501.000000 + vertex -90.000000 13.000000 -501.000000 + vertex -90.000000 13.000000 -499.942719 + endloop + endfacet + facet normal -0.868001 -0.496562 0.000000 + outer loop + vertex -190.937744 13.000000 -501.000000 + vertex -190.970398 13.057083 -470.000000 + vertex -191.465500 13.922533 -470.000000 + endloop + endfacet + facet normal -0.868002 -0.496561 0.000000 + outer loop + vertex -191.465500 13.922533 -530.000000 + vertex -190.968414 13.053615 -530.000000 + vertex -190.937744 13.000000 -501.000000 + endloop + endfacet + facet normal -0.868002 -0.496560 0.000000 + outer loop + vertex -191.465500 13.922533 -470.000000 + vertex -191.465500 13.922533 -530.000000 + vertex -190.937744 13.000000 -501.000000 + endloop + endfacet + facet normal -0.995390 -0.095910 0.000000 + outer loop + vertex -190.030731 9.743214 -495.069641 + vertex -190.030731 9.743214 -470.000000 + vertex -190.052567 9.969829 -470.000000 + endloop + endfacet + facet normal -0.995393 -0.095879 0.000000 + outer loop + vertex -190.053726 9.981941 -495.122406 + vertex -190.030731 9.743214 -495.069641 + vertex -190.052567 9.969829 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.324699 -0.945817 + outer loop + vertex -90.000000 10.277694 -495.223938 + vertex -90.000000 9.981941 -495.122406 + vertex -190.053726 9.981941 -495.122406 + endloop + endfacet + facet normal 0.000000 -0.324699 -0.945817 + outer loop + vertex -90.000000 10.277694 -495.223938 + vertex -190.053726 9.981941 -495.122406 + vertex -190.144592 10.606782 -495.336914 + endloop + endfacet + facet normal 0.000000 -0.324699 -0.945817 + outer loop + vertex -90.000000 10.606782 -495.336914 + vertex -90.000000 10.277694 -495.223938 + vertex -190.144592 10.606782 -495.336914 + endloop + endfacet + facet normal 0.000000 -0.999143 0.041403 + outer loop + vertex -190.930969 12.986291 -501.330841 + vertex -90.000000 12.993538 -501.155945 + vertex -90.000000 13.000000 -501.000000 + endloop + endfacet + facet normal 0.000000 -0.999143 0.041401 + outer loop + vertex -190.937744 13.000000 -501.000000 + vertex -190.930969 12.986291 -501.330841 + vertex -90.000000 13.000000 -501.000000 + endloop + endfacet + facet normal -0.895361 -0.445340 0.000124 + outer loop + vertex -190.968414 13.053615 -530.000000 + vertex -190.961700 13.040116 -530.000000 + vertex -190.930969 12.986291 -501.330841 + endloop + endfacet + facet normal -0.895315 -0.445434 0.000123 + outer loop + vertex -190.937744 13.000000 -501.000000 + vertex -190.968414 13.053615 -530.000000 + vertex -190.930969 12.986291 -501.330841 + endloop + endfacet + facet normal -0.789137 -0.614218 0.000000 + outer loop + vertex -191.465500 13.922533 -530.000000 + vertex -191.465500 13.922533 -470.000000 + vertex -191.894608 14.473844 -470.000000 + endloop + endfacet + facet normal -0.789137 -0.614218 0.000000 + outer loop + vertex -191.949387 14.544223 -530.000000 + vertex -191.465500 13.922533 -530.000000 + vertex -191.894608 14.473844 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.215817 -0.976434 + outer loop + vertex -90.000000 9.981941 -495.122406 + vertex -190.030731 9.743214 -495.069641 + vertex -190.053726 9.981941 -495.122406 + endloop + endfacet + facet normal 0.000000 -0.215851 -0.976426 + outer loop + vertex -90.000000 9.981941 -495.122406 + vertex -90.000000 9.868878 -495.097412 + vertex -190.030731 9.743214 -495.069641 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -190.030731 9.743214 -495.069641 + vertex -190.030731 9.667943 -470.000000 + vertex -190.030731 9.743214 -470.000000 + endloop + endfacet + facet normal -0.000072 -0.996585 0.082575 + outer loop + vertex -190.930969 12.986291 -501.330841 + vertex -90.000000 12.964699 -501.503998 + vertex -90.000000 12.993538 -501.155945 + endloop + endfacet + facet normal -0.897115 -0.441797 0.000132 + outer loop + vertex -190.961700 13.040116 -530.000000 + vertex -190.942444 13.001014 -530.000000 + vertex -190.910904 12.945445 -501.658386 + endloop + endfacet + facet normal -0.897128 -0.441770 0.000132 + outer loop + vertex -190.930969 12.986291 -501.330841 + vertex -190.961700 13.040116 -530.000000 + vertex -190.910904 12.945445 -501.658386 + endloop + endfacet + facet normal -0.789137 -0.614218 0.000000 + outer loop + vertex -191.949387 14.544223 -530.000000 + vertex -191.894608 14.473844 -470.000000 + vertex -192.378494 15.095533 -470.000000 + endloop + endfacet + facet normal -0.789137 -0.614218 0.000000 + outer loop + vertex -192.378494 15.095533 -530.000000 + vertex -191.949387 14.544223 -530.000000 + vertex -192.378494 15.095533 -470.000000 + endloop + endfacet + facet normal -0.000106 -0.134402 -0.990927 + outer loop + vertex -90.000000 9.868878 -495.097412 + vertex -190.006058 9.330317 -495.013641 + vertex -190.030731 9.743214 -495.069641 + endloop + endfacet + facet normal -0.000107 -0.134359 -0.990933 + outer loop + vertex -90.000000 9.868878 -495.097412 + vertex -90.000000 9.673287 -495.070892 + vertex -190.006058 9.330317 -495.013641 + endloop + endfacet + facet normal -0.998219 -0.059664 -0.000179 + outer loop + vertex -190.006058 9.330317 -495.013641 + vertex -190.007309 9.276071 -470.000000 + vertex -190.030731 9.667943 -470.000000 + endloop + endfacet + facet normal -0.998218 -0.059675 -0.000179 + outer loop + vertex -190.030731 9.743214 -495.069641 + vertex -190.006058 9.330317 -495.013641 + vertex -190.030731 9.667943 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.992313 0.123751 + outer loop + vertex -190.910904 12.945445 -501.658386 + vertex -90.000000 12.945445 -501.658386 + vertex -90.000000 12.964699 -501.503998 + endloop + endfacet + facet normal 0.000000 -0.992314 0.123745 + outer loop + vertex -190.930969 12.986291 -501.330841 + vertex -190.910904 12.945445 -501.658386 + vertex -90.000000 12.964699 -501.503998 + endloop + endfacet + facet normal -0.900340 -0.435187 0.000149 + outer loop + vertex -190.942444 13.001014 -530.000000 + vertex -190.910950 12.935857 -530.000000 + vertex -190.877899 12.877043 -501.984131 + endloop + endfacet + facet normal -0.900362 -0.435142 0.000149 + outer loop + vertex -190.910904 12.945445 -501.658386 + vertex -190.942444 13.001014 -530.000000 + vertex -190.877899 12.877043 -501.984131 + endloop + endfacet + facet normal -0.677284 -0.735722 0.000000 + outer loop + vertex -192.892487 15.568697 -470.000000 + vertex -192.958099 15.629101 -530.000000 + vertex -192.378494 15.095533 -530.000000 + endloop + endfacet + facet normal -0.677282 -0.735724 0.000000 + outer loop + vertex -192.378494 15.095533 -470.000000 + vertex -192.892487 15.568697 -470.000000 + vertex -192.378494 15.095533 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.164649 -0.986352 + outer loop + vertex -90.000000 9.673287 -495.070892 + vertex -90.000000 9.330317 -495.013641 + vertex -190.006058 9.330317 -495.013641 + endloop + endfacet + facet normal -0.999830 -0.018425 -0.000090 + outer loop + vertex -190.000000 9.001518 -495.000000 + vertex -190.001556 8.963905 -470.000000 + vertex -190.007309 9.276071 -470.000000 + endloop + endfacet + facet normal -0.999830 -0.018424 -0.000090 + outer loop + vertex -190.006058 9.330317 -495.013641 + vertex -190.000000 9.001518 -495.000000 + vertex -190.007309 9.276071 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.978657 0.205501 + outer loop + vertex -190.877899 12.877043 -501.984131 + vertex -90.000000 12.913193 -501.811981 + vertex -90.000000 12.945445 -501.658386 + endloop + endfacet + facet normal 0.000000 -0.978656 0.205505 + outer loop + vertex -190.910904 12.945445 -501.658386 + vertex -190.877899 12.877043 -501.984131 + vertex -90.000000 12.945445 -501.658386 + endloop + endfacet + facet normal -0.904717 -0.426013 0.000173 + outer loop + vertex -190.910950 12.935857 -530.000000 + vertex -190.868958 12.846679 -530.000000 + vertex -190.833801 12.783269 -502.298767 + endloop + endfacet + facet normal -0.904710 -0.426027 0.000173 + outer loop + vertex -190.877899 12.877043 -501.984131 + vertex -190.910950 12.935857 -530.000000 + vertex -190.833801 12.783269 -502.298767 + endloop + endfacet + facet normal -0.677282 -0.735724 0.000000 + outer loop + vertex -193.472092 16.102264 -470.000000 + vertex -193.472092 16.102264 -530.000000 + vertex -192.958099 15.629101 -530.000000 + endloop + endfacet + facet normal -0.677284 -0.735722 0.000000 + outer loop + vertex -192.892487 15.568697 -470.000000 + vertex -193.472092 16.102264 -470.000000 + vertex -192.958099 15.629101 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.041453 -0.999140 + outer loop + vertex -90.000000 9.330317 -495.013641 + vertex -190.000000 9.001518 -495.000000 + vertex -190.006058 9.330317 -495.013641 + endloop + endfacet + facet normal 0.000000 -0.041504 -0.999138 + outer loop + vertex -90.000000 9.330317 -495.013641 + vertex -90.000000 9.174570 -495.007172 + vertex -190.000000 9.001518 -495.000000 + endloop + endfacet + facet normal -0.999833 0.018254 -0.000035 + outer loop + vertex -190.000000 9.001518 -495.000000 + vertex -190.007309 8.648817 -470.000000 + vertex -190.001556 8.963905 -470.000000 + endloop + endfacet + facet normal -0.999833 0.018254 -0.000035 + outer loop + vertex -190.000000 9.001518 -495.000000 + vertex -190.006058 8.669682 -495.013641 + vertex -190.007309 8.648817 -470.000000 + endloop + endfacet + facet normal -0.000072 -0.969398 0.245496 + outer loop + vertex -190.877899 12.877043 -501.984131 + vertex -90.000000 12.827484 -502.150421 + vertex -90.000000 12.913193 -501.811981 + endloop + endfacet + facet normal 0.000000 -0.958338 0.285637 + outer loop + vertex -190.833801 12.783269 -502.298767 + vertex -90.000000 12.783269 -502.298767 + vertex -90.000000 12.827484 -502.150421 + endloop + endfacet + facet normal 0.000000 -0.958342 0.285623 + outer loop + vertex -190.877899 12.877043 -501.984131 + vertex -190.833801 12.783269 -502.298767 + vertex -90.000000 12.827484 -502.150421 + endloop + endfacet + facet normal -0.913816 -0.406128 0.000230 + outer loop + vertex -190.868958 12.846679 -530.000000 + vertex -190.797836 12.686651 -530.000000 + vertex -190.759033 12.614820 -502.682800 + endloop + endfacet + facet normal -0.913815 -0.406131 0.000230 + outer loop + vertex -190.833801 12.783269 -502.298767 + vertex -190.868958 12.846679 -530.000000 + vertex -190.759033 12.614820 -502.682800 + endloop + endfacet + facet normal -0.546945 -0.837169 0.000000 + outer loop + vertex -194.056946 16.484375 -470.000000 + vertex -194.131622 16.533154 -530.000000 + vertex -193.472092 16.102264 -530.000000 + endloop + endfacet + facet normal -0.546955 -0.837162 0.000000 + outer loop + vertex -193.472092 16.102264 -470.000000 + vertex -194.056946 16.484375 -470.000000 + vertex -193.472092 16.102264 -530.000000 + endloop + endfacet + facet normal -0.000143 0.041077 -0.999156 + outer loop + vertex -90.000000 9.017395 -495.013641 + vertex -190.006058 8.669682 -495.013641 + vertex -190.000000 9.001518 -495.000000 + endloop + endfacet + facet normal -0.000143 0.041128 -0.999154 + outer loop + vertex -90.000000 9.174570 -495.007172 + vertex -90.000000 9.017395 -495.013641 + vertex -190.000000 9.001518 -495.000000 + endloop + endfacet + facet normal -0.998220 0.059639 0.000000 + outer loop + vertex -190.006058 8.669682 -495.013641 + vertex -190.030731 8.256785 -470.000000 + vertex -190.007309 8.648817 -470.000000 + endloop + endfacet + facet normal -0.998219 0.059651 0.000000 + outer loop + vertex -190.006058 8.669682 -495.013641 + vertex -190.030731 8.256785 -495.069641 + vertex -190.030731 8.256785 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.915789 0.401660 + outer loop + vertex -190.833801 12.783269 -502.298767 + vertex -90.000000 12.643049 -502.618469 + vertex -90.000000 12.783269 -502.298767 + endloop + endfacet + facet normal 0.000000 -0.915764 0.401717 + outer loop + vertex -190.759033 12.614820 -502.682800 + vertex -90.000000 12.563623 -502.799530 + vertex -90.000000 12.643049 -502.618469 + endloop + endfacet + facet normal 0.000000 -0.915776 0.401689 + outer loop + vertex -190.833801 12.783269 -502.298767 + vertex -190.759033 12.614820 -502.682800 + vertex -90.000000 12.643049 -502.618469 + endloop + endfacet + facet normal -0.879455 -0.475982 -0.000002 + outer loop + vertex -190.797836 12.686651 -530.000000 + vertex -190.758972 12.614843 -530.000000 + vertex -190.759033 12.614820 -502.682800 + endloop + endfacet + facet normal -0.546955 -0.837162 0.000000 + outer loop + vertex -194.716476 16.915264 -470.000000 + vertex -194.716476 16.915264 -530.000000 + vertex -194.131622 16.533154 -530.000000 + endloop + endfacet + facet normal -0.546945 -0.837169 0.000000 + outer loop + vertex -194.056946 16.484375 -470.000000 + vertex -194.716476 16.915264 -470.000000 + vertex -194.131622 16.533154 -530.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -190.006058 8.669682 -495.013641 + vertex -90.000000 9.017395 -495.013641 + vertex -90.000000 8.669682 -495.013641 + endloop + endfacet + facet normal 0.000000 0.134396 -0.990928 + outer loop + vertex -90.000000 8.474131 -495.040161 + vertex -190.030731 8.256785 -495.069641 + vertex -190.006058 8.669682 -495.013641 + endloop + endfacet + facet normal 0.000000 0.134386 -0.990929 + outer loop + vertex -90.000000 8.669682 -495.013641 + vertex -90.000000 8.474131 -495.040161 + vertex -190.006058 8.669682 -495.013641 + endloop + endfacet + facet normal -0.986359 0.164606 0.000000 + outer loop + vertex -190.030731 8.256785 -495.069641 + vertex -190.043121 8.182541 -470.000000 + vertex -190.030731 8.256785 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.915813 0.401606 + outer loop + vertex -190.716019 12.517895 -502.903809 + vertex -90.000000 12.517895 -502.903809 + vertex -90.000000 12.563623 -502.799530 + endloop + endfacet + facet normal 0.000000 -0.915801 0.401631 + outer loop + vertex -190.759033 12.614820 -502.682800 + vertex -190.716019 12.517895 -502.903809 + vertex -90.000000 12.563623 -502.799530 + endloop + endfacet + facet normal -0.914051 -0.405598 -0.000002 + outer loop + vertex -190.758972 12.614843 -530.000000 + vertex -190.718307 12.523202 -530.000000 + vertex -190.716019 12.517895 -502.903809 + endloop + endfacet + facet normal -0.914034 -0.405637 -0.000002 + outer loop + vertex -190.759033 12.614820 -502.682800 + vertex -190.758972 12.614843 -530.000000 + vertex -190.716019 12.517895 -502.903809 + endloop + endfacet + facet normal -0.401696 -0.915773 0.000000 + outer loop + vertex -195.356247 17.195898 -470.000000 + vertex -195.437927 17.231722 -530.000000 + vertex -194.716476 16.915264 -530.000000 + endloop + endfacet + facet normal -0.401701 -0.915771 0.000000 + outer loop + vertex -194.716476 16.915264 -470.000000 + vertex -195.356247 17.195898 -470.000000 + vertex -194.716476 16.915264 -530.000000 + endloop + endfacet + facet normal -0.000181 0.215833 -0.976430 + outer loop + vertex -90.000000 8.361105 -495.065155 + vertex -190.053726 8.018058 -495.122406 + vertex -190.030731 8.256785 -495.069641 + endloop + endfacet + facet normal -0.000181 0.215918 -0.976411 + outer loop + vertex -90.000000 8.474131 -495.040161 + vertex -90.000000 8.361105 -495.065155 + vertex -190.030731 8.256785 -495.069641 + endloop + endfacet + facet normal -0.995390 0.095915 -0.000208 + outer loop + vertex -190.030731 8.256785 -495.069641 + vertex -190.064972 7.955779 -470.000000 + vertex -190.043121 8.182541 -470.000000 + endloop + endfacet + facet normal -0.995389 0.095925 -0.000208 + outer loop + vertex -190.030731 8.256785 -495.069641 + vertex -190.053726 8.018058 -495.122406 + vertex -190.064972 7.955779 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.837147 0.546978 + outer loop + vertex -190.571716 12.156562 -503.456818 + vertex -90.000000 12.347251 -503.164978 + vertex -90.000000 12.517895 -502.903809 + endloop + endfacet + facet normal 0.000000 -0.837143 0.546984 + outer loop + vertex -190.716019 12.517895 -502.903809 + vertex -190.571716 12.156562 -503.456818 + vertex -90.000000 12.517895 -502.903809 + endloop + endfacet + facet normal -0.928683 -0.370874 0.000006 + outer loop + vertex -190.718307 12.523202 -530.000000 + vertex -190.581680 12.181082 -530.000000 + vertex -190.571716 12.156562 -503.456818 + endloop + endfacet + facet normal -0.928678 -0.370887 0.000006 + outer loop + vertex -190.716019 12.517895 -502.903809 + vertex -190.718307 12.523202 -530.000000 + vertex -190.571716 12.156562 -503.456818 + endloop + endfacet + facet normal -0.401701 -0.915771 0.000000 + outer loop + vertex -196.077698 17.512356 -470.000000 + vertex -196.077698 17.512356 -530.000000 + vertex -195.437927 17.231722 -530.000000 + endloop + endfacet + facet normal -0.401696 -0.915773 0.000000 + outer loop + vertex -195.356247 17.195898 -470.000000 + vertex -196.077698 17.512356 -470.000000 + vertex -195.437927 17.231722 -530.000000 + endloop + endfacet + facet normal 0.000000 0.164613 -0.986358 + outer loop + vertex -90.000000 8.361105 -495.065155 + vertex -90.000000 8.018058 -495.122406 + vertex -190.053726 8.018058 -495.122406 + endloop + endfacet + facet normal -0.989587 0.143938 -0.000087 + outer loop + vertex -190.053726 8.018058 -495.122406 + vertex -190.144592 7.393218 -495.336914 + vertex -190.151291 7.362395 -470.000000 + endloop + endfacet + facet normal -0.989584 0.143954 -0.000086 + outer loop + vertex -190.053726 8.018058 -495.122406 + vertex -190.151291 7.362395 -470.000000 + vertex -190.064972 7.955779 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.837139 0.546990 + outer loop + vertex -190.571716 12.156562 -503.456818 + vertex -90.000000 12.156562 -503.456818 + vertex -90.000000 12.347251 -503.164978 + endloop + endfacet + facet normal -0.945350 -0.326059 0.000054 + outer loop + vertex -190.581680 12.181082 -530.000000 + vertex -190.417419 11.709126 -503.942902 + vertex -190.571716 12.156562 -503.456818 + endloop + endfacet + facet normal -0.945351 -0.326054 0.000054 + outer loop + vertex -190.581680 12.181082 -530.000000 + vertex -190.435318 11.756723 -530.000000 + vertex -190.417419 11.709126 -503.942902 + endloop + endfacet + facet normal -0.245483 -0.969401 0.000000 + outer loop + vertex -196.754944 17.683857 -470.000000 + vertex -196.841400 17.705750 -530.000000 + vertex -196.077698 17.512356 -530.000000 + endloop + endfacet + facet normal -0.245484 -0.969401 0.000000 + outer loop + vertex -196.077698 17.512356 -470.000000 + vertex -196.754944 17.683857 -470.000000 + vertex -196.077698 17.512356 -530.000000 + endloop + endfacet + facet normal 0.000000 0.324667 -0.945828 + outer loop + vertex -90.000000 8.018058 -495.122406 + vertex -90.000000 7.689111 -495.235321 + vertex -190.053726 8.018058 -495.122406 + endloop + endfacet + facet normal -0.977242 0.212130 0.000000 + outer loop + vertex -190.144592 7.393218 -495.336914 + vertex -190.270752 6.812060 -470.000000 + vertex -190.151291 7.362395 -470.000000 + endloop + endfacet + facet normal -0.977241 0.212134 0.000000 + outer loop + vertex -190.144592 7.393218 -495.336914 + vertex -190.270493 6.813230 -495.653198 + vertex -190.270752 6.812060 -470.000000 + endloop + endfacet + facet normal 0.000000 0.324700 -0.945817 + outer loop + vertex -90.000000 7.393218 -495.336914 + vertex -190.144592 7.393218 -495.336914 + vertex -190.053726 8.018058 -495.122406 + endloop + endfacet + facet normal 0.000000 0.324736 -0.945805 + outer loop + vertex -90.000000 7.689111 -495.235321 + vertex -90.000000 7.393218 -495.336914 + vertex -190.053726 8.018058 -495.122406 + endloop + endfacet + facet normal 0.000000 -0.735737 0.677268 + outer loop + vertex -190.417419 11.709126 -503.942902 + vertex -90.000000 11.945083 -503.686554 + vertex -90.000000 12.156562 -503.456818 + endloop + endfacet + facet normal 0.000000 -0.735751 0.677253 + outer loop + vertex -190.571716 12.156562 -503.456818 + vertex -190.417419 11.709126 -503.942902 + vertex -90.000000 12.156562 -503.456818 + endloop + endfacet + facet normal -0.961883 -0.273460 0.000161 + outer loop + vertex -190.435318 11.756723 -530.000000 + vertex -190.275406 11.209369 -504.334442 + vertex -190.417419 11.709126 -503.942902 + endloop + endfacet + facet normal -0.961882 -0.273466 0.000161 + outer loop + vertex -190.435318 11.756723 -530.000000 + vertex -190.300400 11.282166 -530.000000 + vertex -190.275406 11.209369 -504.334442 + endloop + endfacet + facet normal -0.245484 -0.969401 0.000000 + outer loop + vertex -197.518646 17.877251 -470.000000 + vertex -197.518646 17.877251 -530.000000 + vertex -196.841400 17.705750 -530.000000 + endloop + endfacet + facet normal -0.245483 -0.969401 0.000000 + outer loop + vertex -196.754944 17.683857 -470.000000 + vertex -197.518646 17.877251 -470.000000 + vertex -196.841400 17.705750 -530.000000 + endloop + endfacet + facet normal -0.977221 0.212222 0.000000 + outer loop + vertex -190.270493 6.813230 -495.653198 + vertex -190.275406 6.790630 -470.000000 + vertex -190.270752 6.812060 -470.000000 + endloop + endfacet + facet normal -0.977173 0.212444 0.000000 + outer loop + vertex -190.270493 6.813230 -495.653198 + vertex -190.275406 6.790630 -495.665527 + vertex -190.275406 6.790630 -470.000000 + endloop + endfacet + facet normal 0.000011 0.478766 -0.877943 + outer loop + vertex -90.000000 6.812691 -495.652222 + vertex -190.270493 6.813230 -495.653198 + vertex -190.144592 7.393218 -495.336914 + endloop + endfacet + facet normal 0.000011 0.478802 -0.877923 + outer loop + vertex -90.000000 7.087213 -495.502502 + vertex -90.000000 6.812691 -495.652222 + vertex -190.144592 7.393218 -495.336914 + endloop + endfacet + facet normal 0.000000 0.475919 -0.879489 + outer loop + vertex -90.000000 7.393218 -495.336914 + vertex -90.000000 7.087213 -495.502502 + vertex -190.144592 7.393218 -495.336914 + endloop + endfacet + facet normal 0.000000 -0.735763 0.677239 + outer loop + vertex -190.417419 11.709126 -503.942902 + vertex -90.000000 11.709126 -503.942902 + vertex -90.000000 11.945083 -503.686554 + endloop + endfacet + facet normal -0.000011 -0.616727 0.787177 + outer loop + vertex -90.000000 11.434198 -504.156891 + vertex -190.417419 11.709126 -503.942902 + vertex -190.275406 11.209369 -504.334442 + endloop + endfacet + facet normal -0.000011 -0.616734 0.787171 + outer loop + vertex -90.000000 11.197998 -504.341949 + vertex -90.000000 11.434198 -504.156891 + vertex -190.275406 11.209369 -504.334442 + endloop + endfacet + facet normal -0.945806 -0.324731 0.000000 + outer loop + vertex -190.300400 11.282166 -530.000000 + vertex -190.275406 11.209369 -530.000000 + vertex -190.275406 11.209369 -504.334442 + endloop + endfacet + facet normal -0.082581 -0.996584 0.000000 + outer loop + vertex -198.214890 17.934942 -470.000000 + vertex -198.303757 17.942308 -530.000000 + vertex -197.518646 17.877251 -530.000000 + endloop + endfacet + facet normal -0.082578 -0.996585 0.000000 + outer loop + vertex -197.518646 17.877251 -470.000000 + vertex -198.214890 17.934942 -470.000000 + vertex -197.518646 17.877251 -530.000000 + endloop + endfacet + facet normal 0.000011 0.478910 -0.877864 + outer loop + vertex -90.000000 6.802001 -495.658051 + vertex -190.275406 6.790630 -495.665527 + vertex -190.270493 6.813230 -495.653198 + endloop + endfacet + facet normal 0.000011 0.478731 -0.877961 + outer loop + vertex -90.000000 6.812691 -495.652222 + vertex -90.000000 6.802001 -495.658051 + vertex -190.270493 6.813230 -495.653198 + endloop + endfacet + facet normal -0.945806 0.324731 0.000000 + outer loop + vertex -190.275406 6.790630 -495.665527 + vertex -190.300400 6.717834 -470.000000 + vertex -190.275406 6.790630 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.614221 0.789134 + outer loop + vertex -90.000000 11.434198 -504.156891 + vertex -90.000000 11.709126 -503.942902 + vertex -190.417419 11.709126 -503.942902 + endloop + endfacet + facet normal 0.000011 -0.479830 0.877361 + outer loop + vertex -90.000000 11.197998 -504.341949 + vertex -190.275406 11.209369 -504.334442 + vertex -190.270493 11.186769 -504.346802 + endloop + endfacet + facet normal 0.000011 -0.480660 0.876907 + outer loop + vertex -90.000000 11.187308 -504.347809 + vertex -90.000000 11.197998 -504.341949 + vertex -190.270493 11.186769 -504.346802 + endloop + endfacet + facet normal -0.977172 -0.212448 0.000000 + outer loop + vertex -190.275406 11.209369 -530.000000 + vertex -190.270493 11.186769 -504.346802 + vertex -190.275406 11.209369 -504.334442 + endloop + endfacet + facet normal -0.977221 -0.212222 0.000000 + outer loop + vertex -190.275406 11.209369 -530.000000 + vertex -190.270752 11.187939 -530.000000 + vertex -190.270493 11.186769 -504.346802 + endloop + endfacet + facet normal -0.082578 -0.996585 0.000000 + outer loop + vertex -199.000000 18.000000 -470.000000 + vertex -199.000000 18.000000 -530.000000 + vertex -198.303757 17.942308 -530.000000 + endloop + endfacet + facet normal -0.082581 -0.996584 0.000000 + outer loop + vertex -198.214890 17.934942 -470.000000 + vertex -199.000000 18.000000 -470.000000 + vertex -198.303757 17.942308 -530.000000 + endloop + endfacet + facet normal -0.000011 0.616756 -0.787154 + outer loop + vertex -90.000000 6.565801 -495.843109 + vertex -190.417419 6.290874 -496.057098 + vertex -190.275406 6.790630 -495.665527 + endloop + endfacet + facet normal -0.000011 0.616734 -0.787171 + outer loop + vertex -90.000000 6.802001 -495.658051 + vertex -90.000000 6.565801 -495.843109 + vertex -190.275406 6.790630 -495.665527 + endloop + endfacet + facet normal -0.961882 0.273466 -0.000161 + outer loop + vertex -190.275406 6.790630 -495.665527 + vertex -190.435318 6.243276 -470.000000 + vertex -190.300400 6.717834 -470.000000 + endloop + endfacet + facet normal -0.961883 0.273460 -0.000161 + outer loop + vertex -190.275406 6.790630 -495.665527 + vertex -190.417419 6.290874 -496.057098 + vertex -190.435318 6.243276 -470.000000 + endloop + endfacet + facet normal 0.000011 -0.478801 0.877923 + outer loop + vertex -90.000000 11.187308 -504.347809 + vertex -190.270493 11.186769 -504.346802 + vertex -190.144592 10.606782 -504.663116 + endloop + endfacet + facet normal 0.000011 -0.478802 0.877923 + outer loop + vertex -90.000000 10.912786 -504.497528 + vertex -90.000000 11.187308 -504.347809 + vertex -190.144592 10.606782 -504.663116 + endloop + endfacet + facet normal -0.977241 -0.212134 0.000000 + outer loop + vertex -190.270752 11.187939 -530.000000 + vertex -190.144592 10.606782 -504.663116 + vertex -190.270493 11.186769 -504.346802 + endloop + endfacet + facet normal -0.977241 -0.212130 0.000000 + outer loop + vertex -190.270752 11.187939 -530.000000 + vertex -190.151291 10.637605 -530.000000 + vertex -190.144592 10.606782 -504.663116 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -199.000000 18.000000 -470.000000 + vertex -199.940002 18.000000 -530.000000 + vertex -199.000000 18.000000 -530.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -200.059998 18.000000 -470.000000 + vertex -199.940002 18.000000 -530.000000 + vertex -199.000000 18.000000 -470.000000 + endloop + endfacet + facet normal 0.000000 0.614221 -0.789134 + outer loop + vertex -90.000000 6.565801 -495.843109 + vertex -90.000000 6.290874 -496.057098 + vertex -190.417419 6.290874 -496.057098 + endloop + endfacet + facet normal -0.945351 0.326054 -0.000054 + outer loop + vertex -190.417419 6.290874 -496.057098 + vertex -190.581680 5.818917 -470.000000 + vertex -190.435318 6.243276 -470.000000 + endloop + endfacet + facet normal -0.945349 0.326059 -0.000054 + outer loop + vertex -190.571716 5.843437 -496.543152 + vertex -190.581680 5.818917 -470.000000 + vertex -190.417419 6.290874 -496.057098 + endloop + endfacet + facet normal 0.000000 -0.475920 0.879489 + outer loop + vertex -90.000000 10.606782 -504.663116 + vertex -90.000000 10.912786 -504.497528 + vertex -190.144592 10.606782 -504.663116 + endloop + endfacet + facet normal -0.989587 -0.143938 0.000087 + outer loop + vertex -190.151291 10.637605 -530.000000 + vertex -190.053726 9.981941 -504.877625 + vertex -190.144592 10.606782 -504.663116 + endloop + endfacet + facet normal -0.989584 -0.143954 0.000086 + outer loop + vertex -190.151291 10.637605 -530.000000 + vertex -190.064972 10.044221 -530.000000 + vertex -190.053726 9.981941 -504.877625 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -200.059998 18.000000 -470.000000 + vertex -201.000000 18.000000 -530.000000 + vertex -199.940002 18.000000 -530.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -201.000000 18.000000 -470.000000 + vertex -201.000000 18.000000 -530.000000 + vertex -200.059998 18.000000 -470.000000 + endloop + endfacet + facet normal 0.000000 0.735722 -0.677283 + outer loop + vertex -190.417419 6.290874 -496.057098 + vertex -90.000000 6.290874 -496.057098 + vertex -90.000000 6.054916 -496.313416 + endloop + endfacet + facet normal -0.928683 0.370874 -0.000006 + outer loop + vertex -190.571716 5.843437 -496.543152 + vertex -190.718307 5.476798 -470.000000 + vertex -190.581680 5.818917 -470.000000 + endloop + endfacet + facet normal -0.928678 0.370887 -0.000006 + outer loop + vertex -190.716019 5.482105 -497.096222 + vertex -190.718307 5.476798 -470.000000 + vertex -190.571716 5.843437 -496.543152 + endloop + endfacet + facet normal 0.000000 0.735737 -0.677267 + outer loop + vertex -190.417419 6.290874 -496.057098 + vertex -90.000000 6.054916 -496.313416 + vertex -90.000000 5.843437 -496.543152 + endloop + endfacet + facet normal 0.000000 0.735729 -0.677275 + outer loop + vertex -190.571716 5.843437 -496.543152 + vertex -190.417419 6.290874 -496.057098 + vertex -90.000000 5.843437 -496.543152 + endloop + endfacet + facet normal 0.000000 -0.324699 0.945817 + outer loop + vertex -90.000000 10.606782 -504.663116 + vertex -190.144592 10.606782 -504.663116 + vertex -190.053726 9.981941 -504.877625 + endloop + endfacet + facet normal 0.000000 -0.324735 0.945805 + outer loop + vertex -90.000000 10.310888 -504.764709 + vertex -90.000000 10.606782 -504.663116 + vertex -190.053726 9.981941 -504.877625 + endloop + endfacet + facet normal -0.995389 -0.095925 0.000208 + outer loop + vertex -190.064972 10.044221 -530.000000 + vertex -190.030731 9.743214 -504.930389 + vertex -190.053726 9.981941 -504.877625 + endloop + endfacet + facet normal -0.995390 -0.095914 0.000208 + outer loop + vertex -190.064972 10.044221 -530.000000 + vertex -190.043121 9.817457 -530.000000 + vertex -190.030731 9.743214 -504.930389 + endloop + endfacet + facet normal 0.082581 -0.996584 0.000000 + outer loop + vertex -201.696243 17.942308 -470.000000 + vertex -201.785110 17.934942 -530.000000 + vertex -201.000000 18.000000 -530.000000 + endloop + endfacet + facet normal 0.082578 -0.996585 0.000000 + outer loop + vertex -201.000000 18.000000 -470.000000 + vertex -201.696243 17.942308 -470.000000 + vertex -201.000000 18.000000 -530.000000 + endloop + endfacet + facet normal -0.914052 0.405597 0.000002 + outer loop + vertex -190.716019 5.482105 -497.096222 + vertex -190.758972 5.385156 -470.000000 + vertex -190.718307 5.476798 -470.000000 + endloop + endfacet + facet normal -0.914034 0.405637 0.000002 + outer loop + vertex -190.759033 5.385180 -497.317169 + vertex -190.758972 5.385156 -470.000000 + vertex -190.716019 5.482105 -497.096222 + endloop + endfacet + facet normal 0.000000 0.837176 -0.546933 + outer loop + vertex -190.571716 5.843437 -496.543152 + vertex -90.000000 5.652749 -496.835022 + vertex -90.000000 5.482105 -497.096222 + endloop + endfacet + facet normal 0.000000 0.837171 -0.546941 + outer loop + vertex -190.716019 5.482105 -497.096222 + vertex -190.571716 5.843437 -496.543152 + vertex -90.000000 5.482105 -497.096222 + endloop + endfacet + facet normal 0.000000 0.837166 -0.546949 + outer loop + vertex -190.571716 5.843437 -496.543152 + vertex -90.000000 5.843437 -496.543152 + vertex -90.000000 5.652749 -496.835022 + endloop + endfacet + facet normal 0.000000 -0.324667 0.945828 + outer loop + vertex -90.000000 9.981941 -504.877625 + vertex -90.000000 10.310888 -504.764709 + vertex -190.053726 9.981941 -504.877625 + endloop + endfacet + facet normal -0.000181 -0.215833 0.976430 + outer loop + vertex -90.000000 9.638894 -504.934875 + vertex -190.053726 9.981941 -504.877625 + vertex -190.030731 9.743214 -504.930389 + endloop + endfacet + facet normal -0.000181 -0.215667 0.976467 + outer loop + vertex -90.000000 9.525868 -504.959839 + vertex -90.000000 9.638894 -504.934875 + vertex -190.030731 9.743214 -504.930389 + endloop + endfacet + facet normal -0.986359 -0.164609 0.000000 + outer loop + vertex -190.043121 9.817457 -530.000000 + vertex -190.030731 9.743214 -530.000000 + vertex -190.030731 9.743214 -504.930389 + endloop + endfacet + facet normal 0.082578 -0.996585 0.000000 + outer loop + vertex -202.481354 17.877251 -470.000000 + vertex -202.481354 17.877251 -530.000000 + vertex -201.785110 17.934942 -530.000000 + endloop + endfacet + facet normal 0.082581 -0.996584 0.000000 + outer loop + vertex -201.696243 17.942308 -470.000000 + vertex -202.481354 17.877251 -470.000000 + vertex -201.785110 17.934942 -530.000000 + endloop + endfacet + facet normal 0.000000 0.915768 -0.401708 + outer loop + vertex -190.716019 5.482105 -497.096222 + vertex -90.000000 5.482105 -497.096222 + vertex -90.000000 5.436376 -497.200470 + endloop + endfacet + facet normal 0.000000 0.915761 -0.401724 + outer loop + vertex -190.759033 5.385180 -497.317169 + vertex -190.716019 5.482105 -497.096222 + vertex -90.000000 5.436376 -497.200470 + endloop + endfacet + facet normal -0.879454 0.475985 0.000002 + outer loop + vertex -190.759033 5.385180 -497.317169 + vertex -190.797836 5.313348 -470.000000 + vertex -190.758972 5.385156 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.164613 0.986358 + outer loop + vertex -90.000000 9.638894 -504.934875 + vertex -90.000000 9.981941 -504.877625 + vertex -190.053726 9.981941 -504.877625 + endloop + endfacet + facet normal 0.000000 -0.134324 0.990937 + outer loop + vertex -90.000000 9.525868 -504.959839 + vertex -190.030731 9.743214 -504.930389 + vertex -190.006058 9.330317 -504.986359 + endloop + endfacet + facet normal 0.000000 -0.134386 0.990929 + outer loop + vertex -90.000000 9.330317 -504.986359 + vertex -90.000000 9.525868 -504.959839 + vertex -190.006058 9.330317 -504.986359 + endloop + endfacet + facet normal -0.998219 -0.059651 0.000000 + outer loop + vertex -190.030731 9.743214 -530.000000 + vertex -190.006058 9.330317 -504.986359 + vertex -190.030731 9.743214 -504.930389 + endloop + endfacet + facet normal -0.998220 -0.059639 0.000000 + outer loop + vertex -190.030731 9.743214 -530.000000 + vertex -190.007309 9.351182 -530.000000 + vertex -190.006058 9.330317 -504.986359 + endloop + endfacet + facet normal 0.245483 -0.969401 0.000000 + outer loop + vertex -203.158600 17.705750 -470.000000 + vertex -203.245056 17.683857 -530.000000 + vertex -202.481354 17.877251 -530.000000 + endloop + endfacet + facet normal 0.245484 -0.969401 0.000000 + outer loop + vertex -202.481354 17.877251 -470.000000 + vertex -203.158600 17.705750 -470.000000 + vertex -202.481354 17.877251 -530.000000 + endloop + endfacet + facet normal 0.000000 0.915765 -0.401715 + outer loop + vertex -190.759033 5.385180 -497.317169 + vertex -90.000000 5.436376 -497.200470 + vertex -90.000000 5.356950 -497.381531 + endloop + endfacet + facet normal 0.000000 0.915776 -0.401689 + outer loop + vertex -190.833801 5.216731 -497.701202 + vertex -190.759033 5.385180 -497.317169 + vertex -90.000000 5.356950 -497.381531 + endloop + endfacet + facet normal -0.913816 0.406129 -0.000230 + outer loop + vertex -190.759033 5.385180 -497.317169 + vertex -190.868958 5.153321 -470.000000 + vertex -190.797836 5.313348 -470.000000 + endloop + endfacet + facet normal -0.913815 0.406131 -0.000230 + outer loop + vertex -190.833801 5.216731 -497.701202 + vertex -190.868958 5.153321 -470.000000 + vertex -190.759033 5.385180 -497.317169 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -90.000000 9.330317 -504.986359 + vertex -190.006058 9.330317 -504.986359 + vertex -90.000000 8.982604 -504.986359 + endloop + endfacet + facet normal -0.999833 -0.018254 0.000035 + outer loop + vertex -190.007309 9.351182 -530.000000 + vertex -190.000000 8.998481 -505.000000 + vertex -190.006058 9.330317 -504.986359 + endloop + endfacet + facet normal -0.999833 -0.018254 0.000035 + outer loop + vertex -190.007309 9.351182 -530.000000 + vertex -190.001556 9.036094 -530.000000 + vertex -190.000000 8.998481 -505.000000 + endloop + endfacet + facet normal 0.245484 -0.969401 0.000000 + outer loop + vertex -203.922302 17.512356 -470.000000 + vertex -203.922302 17.512356 -530.000000 + vertex -203.245056 17.683857 -530.000000 + endloop + endfacet + facet normal 0.245483 -0.969401 0.000000 + outer loop + vertex -203.158600 17.705750 -470.000000 + vertex -203.922302 17.512356 -470.000000 + vertex -203.245056 17.683857 -530.000000 + endloop + endfacet + facet normal 0.000000 0.915775 -0.401692 + outer loop + vertex -190.833801 5.216731 -497.701202 + vertex -90.000000 5.356950 -497.381531 + vertex -90.000000 5.216731 -497.701202 + endloop + endfacet + facet normal -0.904718 0.426011 -0.000173 + outer loop + vertex -190.833801 5.216731 -497.701202 + vertex -190.910950 5.064143 -470.000000 + vertex -190.868958 5.153321 -470.000000 + endloop + endfacet + facet normal -0.904710 0.426027 -0.000173 + outer loop + vertex -190.877899 5.122957 -498.015839 + vertex -190.910950 5.064143 -470.000000 + vertex -190.833801 5.216731 -497.701202 + endloop + endfacet + facet normal -0.000143 -0.041077 0.999156 + outer loop + vertex -90.000000 8.982604 -504.986359 + vertex -190.006058 9.330317 -504.986359 + vertex -190.000000 8.998481 -505.000000 + endloop + endfacet + facet normal -0.000143 -0.041128 0.999154 + outer loop + vertex -90.000000 8.825429 -504.992828 + vertex -90.000000 8.982604 -504.986359 + vertex -190.000000 8.998481 -505.000000 + endloop + endfacet + facet normal -0.999830 0.018424 0.000090 + outer loop + vertex -190.007309 8.723928 -530.000000 + vertex -190.006058 8.669682 -504.986359 + vertex -190.000000 8.998481 -505.000000 + endloop + endfacet + facet normal -0.999830 0.018425 0.000090 + outer loop + vertex -190.001556 9.036094 -530.000000 + vertex -190.007309 8.723928 -530.000000 + vertex -190.000000 8.998481 -505.000000 + endloop + endfacet + facet normal 0.401696 -0.915773 0.000000 + outer loop + vertex -204.562073 17.231722 -470.000000 + vertex -204.643753 17.195898 -530.000000 + vertex -203.922302 17.512356 -530.000000 + endloop + endfacet + facet normal 0.401701 -0.915771 0.000000 + outer loop + vertex -203.922302 17.512356 -470.000000 + vertex -204.562073 17.231722 -470.000000 + vertex -203.922302 17.512356 -530.000000 + endloop + endfacet + facet normal 0.000000 0.958339 -0.285634 + outer loop + vertex -190.833801 5.216731 -497.701202 + vertex -90.000000 5.216731 -497.701202 + vertex -90.000000 5.172516 -497.849548 + endloop + endfacet + facet normal 0.000000 0.958342 -0.285623 + outer loop + vertex -190.877899 5.122957 -498.015839 + vertex -190.833801 5.216731 -497.701202 + vertex -90.000000 5.172516 -497.849548 + endloop + endfacet + facet normal -0.900340 0.435187 -0.000149 + outer loop + vertex -190.877899 5.122957 -498.015839 + vertex -190.942444 4.998986 -470.000000 + vertex -190.910950 5.064143 -470.000000 + endloop + endfacet + facet normal -0.900362 0.435142 -0.000149 + outer loop + vertex -190.910904 5.054554 -498.341614 + vertex -190.942444 4.998986 -470.000000 + vertex -190.877899 5.122957 -498.015839 + endloop + endfacet + facet normal 0.000000 0.041453 0.999140 + outer loop + vertex -90.000000 8.669682 -504.986359 + vertex -190.000000 8.998481 -505.000000 + vertex -190.006058 8.669682 -504.986359 + endloop + endfacet + facet normal 0.000000 0.041504 0.999138 + outer loop + vertex -90.000000 8.669682 -504.986359 + vertex -90.000000 8.825429 -504.992828 + vertex -190.000000 8.998481 -505.000000 + endloop + endfacet + facet normal -0.998218 0.059675 0.000179 + outer loop + vertex -190.030731 8.332056 -530.000000 + vertex -190.030731 8.256785 -504.930389 + vertex -190.006058 8.669682 -504.986359 + endloop + endfacet + facet normal -0.998219 0.059664 0.000179 + outer loop + vertex -190.007309 8.723928 -530.000000 + vertex -190.030731 8.332056 -530.000000 + vertex -190.006058 8.669682 -504.986359 + endloop + endfacet + facet normal 0.401701 -0.915771 0.000000 + outer loop + vertex -205.283524 16.915264 -470.000000 + vertex -205.283524 16.915264 -530.000000 + vertex -204.643753 17.195898 -530.000000 + endloop + endfacet + facet normal 0.401696 -0.915773 0.000000 + outer loop + vertex -204.562073 17.231722 -470.000000 + vertex -205.283524 16.915264 -470.000000 + vertex -204.643753 17.195898 -530.000000 + endloop + endfacet + facet normal -0.000072 0.969402 -0.245478 + outer loop + vertex -190.877899 5.122957 -498.015839 + vertex -90.000000 5.172516 -497.849548 + vertex -90.000000 5.086806 -498.188019 + endloop + endfacet + facet normal 0.000000 0.978657 -0.205498 + outer loop + vertex -190.877899 5.122957 -498.015839 + vertex -90.000000 5.086806 -498.188019 + vertex -90.000000 5.054554 -498.341614 + endloop + endfacet + facet normal 0.000000 0.978660 -0.205487 + outer loop + vertex -190.910904 5.054554 -498.341614 + vertex -190.877899 5.122957 -498.015839 + vertex -90.000000 5.054554 -498.341614 + endloop + endfacet + facet normal -0.897122 0.441784 -0.000132 + outer loop + vertex -190.910904 5.054554 -498.341614 + vertex -190.961700 4.959882 -470.000000 + vertex -190.942444 4.998986 -470.000000 + endloop + endfacet + facet normal -0.897133 0.441762 -0.000132 + outer loop + vertex -190.930969 5.013708 -498.669128 + vertex -190.961700 4.959882 -470.000000 + vertex -190.910904 5.054554 -498.341614 + endloop + endfacet + facet normal 0.000000 0.164564 0.986367 + outer loop + vertex -90.000000 8.326712 -504.929138 + vertex -90.000000 8.669682 -504.986359 + vertex -190.006058 8.669682 -504.986359 + endloop + endfacet + facet normal -0.000106 0.134331 0.990937 + outer loop + vertex -90.000000 8.131121 -504.902618 + vertex -190.006058 8.669682 -504.986359 + vertex -190.030731 8.256785 -504.930389 + endloop + endfacet + facet normal -0.000106 0.134359 0.990933 + outer loop + vertex -90.000000 8.131121 -504.902618 + vertex -90.000000 8.326712 -504.929138 + vertex -190.006058 8.669682 -504.986359 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -190.030731 8.332056 -530.000000 + vertex -190.030731 8.256785 -530.000000 + vertex -190.030731 8.256785 -504.930389 + endloop + endfacet + facet normal 0.546945 -0.837169 0.000000 + outer loop + vertex -205.868393 16.533154 -470.000000 + vertex -205.943054 16.484375 -530.000000 + vertex -205.283524 16.915264 -530.000000 + endloop + endfacet + facet normal 0.546944 -0.837169 0.000000 + outer loop + vertex -205.283524 16.915264 -470.000000 + vertex -205.868393 16.533154 -470.000000 + vertex -205.283524 16.915264 -530.000000 + endloop + endfacet + facet normal 0.000000 0.992313 -0.123754 + outer loop + vertex -190.910904 5.054554 -498.341614 + vertex -90.000000 5.054554 -498.341614 + vertex -90.000000 5.035300 -498.496002 + endloop + endfacet + facet normal 0.000000 0.992312 -0.123759 + outer loop + vertex -190.930969 5.013708 -498.669128 + vertex -190.910904 5.054554 -498.341614 + vertex -90.000000 5.035300 -498.496002 + endloop + endfacet + facet normal -0.895336 0.445391 -0.000124 + outer loop + vertex -190.930969 5.013708 -498.669128 + vertex -190.968414 4.946385 -470.000000 + vertex -190.961700 4.959882 -470.000000 + endloop + endfacet + facet normal -0.895303 0.445458 -0.000123 + outer loop + vertex -190.937744 5.000000 -499.000000 + vertex -190.968414 4.946385 -470.000000 + vertex -190.930969 5.013708 -498.669128 + endloop + endfacet + facet normal 0.000000 0.215817 0.976434 + outer loop + vertex -90.000000 8.018058 -504.877625 + vertex -190.030731 8.256785 -504.930389 + vertex -190.053726 8.018058 -504.877625 + endloop + endfacet + facet normal 0.000000 0.215851 0.976426 + outer loop + vertex -90.000000 8.018058 -504.877625 + vertex -90.000000 8.131121 -504.902618 + vertex -190.030731 8.256785 -504.930389 + endloop + endfacet + facet normal -0.995393 0.095879 0.000000 + outer loop + vertex -190.052567 8.030170 -530.000000 + vertex -190.053726 8.018058 -504.877625 + vertex -190.030731 8.256785 -504.930389 + endloop + endfacet + facet normal -0.995390 0.095910 0.000000 + outer loop + vertex -190.030731 8.256785 -530.000000 + vertex -190.052567 8.030170 -530.000000 + vertex -190.030731 8.256785 -504.930389 + endloop + endfacet + facet normal 0.546944 -0.837169 0.000000 + outer loop + vertex -206.527924 16.102264 -470.000000 + vertex -206.527924 16.102264 -530.000000 + vertex -205.943054 16.484375 -530.000000 + endloop + endfacet + facet normal 0.546945 -0.837169 0.000000 + outer loop + vertex -205.868393 16.533154 -470.000000 + vertex -206.527924 16.102264 -470.000000 + vertex -205.943054 16.484375 -530.000000 + endloop + endfacet + facet normal -0.000072 0.996584 -0.082583 + outer loop + vertex -190.930969 5.013708 -498.669128 + vertex -90.000000 5.035300 -498.496002 + vertex -90.000000 5.006461 -498.844025 + endloop + endfacet + facet normal -0.868002 0.496561 0.000000 + outer loop + vertex -190.937744 5.000000 -499.000000 + vertex -191.465500 4.077466 -470.000000 + vertex -190.968414 4.946385 -470.000000 + endloop + endfacet + facet normal -0.868002 0.496561 0.000000 + outer loop + vertex -190.970398 4.942916 -530.000000 + vertex -191.465500 4.077466 -530.000000 + vertex -190.937744 5.000000 -499.000000 + endloop + endfacet + facet normal -0.868002 0.496560 0.000000 + outer loop + vertex -191.465500 4.077466 -530.000000 + vertex -191.465500 4.077466 -470.000000 + vertex -190.937744 5.000000 -499.000000 + endloop + endfacet + facet normal 0.000000 0.999143 -0.041392 + outer loop + vertex -190.930969 5.013708 -498.669128 + vertex -90.000000 5.006461 -498.844025 + vertex -90.000000 5.000000 -499.000000 + endloop + endfacet + facet normal 0.000000 0.999143 -0.041395 + outer loop + vertex -190.937744 5.000000 -499.000000 + vertex -190.930969 5.013708 -498.669128 + vertex -90.000000 5.000000 -499.000000 + endloop + endfacet + facet normal 0.000000 0.324700 0.945817 + outer loop + vertex -90.000000 7.722306 -504.776093 + vertex -90.000000 8.018058 -504.877625 + vertex -190.053726 8.018058 -504.877625 + endloop + endfacet + facet normal 0.000000 0.324700 0.945817 + outer loop + vertex -90.000000 7.722306 -504.776093 + vertex -190.053726 8.018058 -504.877625 + vertex -190.144592 7.393218 -504.663116 + endloop + endfacet + facet normal -0.989590 0.143917 0.000023 + outer loop + vertex -190.138763 7.437390 -530.000000 + vertex -190.144592 7.393218 -504.663116 + vertex -190.053726 8.018058 -504.877625 + endloop + endfacet + facet normal -0.989593 0.143898 0.000024 + outer loop + vertex -190.052567 8.030170 -530.000000 + vertex -190.138763 7.437390 -530.000000 + vertex -190.053726 8.018058 -504.877625 + endloop + endfacet + facet normal 0.677284 -0.735722 0.000000 + outer loop + vertex -207.041916 15.629101 -470.000000 + vertex -207.107529 15.568697 -530.000000 + vertex -206.527924 16.102264 -530.000000 + endloop + endfacet + facet normal 0.677282 -0.735724 0.000000 + outer loop + vertex -206.527924 16.102264 -470.000000 + vertex -207.041916 15.629101 -470.000000 + vertex -206.527924 16.102264 -530.000000 + endloop + endfacet + facet normal -0.868096 0.496396 0.000000 + outer loop + vertex -190.968414 4.946385 -530.000000 + vertex -190.970398 4.942916 -530.000000 + vertex -190.937744 5.000000 -501.000000 + endloop + endfacet + facet normal -0.868015 0.496539 0.000000 + outer loop + vertex -190.970398 4.942916 -530.000000 + vertex -190.937744 5.000000 -499.000000 + vertex -190.937744 5.000000 -501.000000 + endloop + endfacet + facet normal -0.789137 0.614217 0.000000 + outer loop + vertex -191.894608 3.526156 -530.000000 + vertex -191.949387 3.455776 -470.000000 + vertex -191.465500 4.077466 -470.000000 + endloop + endfacet + facet normal -0.789137 0.614218 0.000000 + outer loop + vertex -191.465500 4.077466 -530.000000 + vertex -191.894608 3.526156 -530.000000 + vertex -191.465500 4.077466 -470.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex -190.937744 5.000000 -499.000000 + vertex -90.000000 5.000000 -499.000000 + vertex -90.000000 5.000000 -500.057281 + endloop + endfacet + facet normal 0.000000 0.324699 0.945817 + outer loop + vertex -90.000000 7.393218 -504.663116 + vertex -90.000000 7.722306 -504.776093 + vertex -190.144592 7.393218 -504.663116 + endloop + endfacet + facet normal -0.977488 0.210993 0.000143 + outer loop + vertex -190.257584 6.886968 -530.000000 + vertex -190.269958 6.812207 -504.348694 + vertex -190.144592 7.393218 -504.663116 + endloop + endfacet + facet normal -0.977484 0.211010 0.000143 + outer loop + vertex -190.138763 7.437390 -530.000000 + vertex -190.257584 6.886968 -530.000000 + vertex -190.144592 7.393218 -504.663116 + endloop + endfacet + facet normal 0.677282 -0.735724 0.000000 + outer loop + vertex -207.621521 15.095533 -470.000000 + vertex -207.621521 15.095533 -530.000000 + vertex -207.107529 15.568697 -530.000000 + endloop + endfacet + facet normal 0.677284 -0.735722 0.000000 + outer loop + vertex -207.041916 15.629101 -470.000000 + vertex -207.621521 15.095533 -470.000000 + vertex -207.107529 15.568697 -530.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex -190.937744 5.000000 -501.000000 + vertex -90.000000 5.000000 -500.057281 + vertex -90.000000 5.000000 -501.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex -190.937744 5.000000 -501.000000 + vertex -190.937744 5.000000 -499.000000 + vertex -90.000000 5.000000 -500.057281 + endloop + endfacet + facet normal -0.879512 0.475877 0.000050 + outer loop + vertex -190.927307 5.022359 -530.000000 + vertex -190.968414 4.946385 -530.000000 + vertex -190.937744 5.000000 -501.000000 + endloop + endfacet + facet normal -0.789137 0.614218 0.000000 + outer loop + vertex -192.378494 2.904465 -530.000000 + vertex -192.378494 2.904465 -470.000000 + vertex -191.949387 3.455776 -470.000000 + endloop + endfacet + facet normal -0.789137 0.614217 0.000000 + outer loop + vertex -191.894608 3.526156 -530.000000 + vertex -192.378494 2.904465 -530.000000 + vertex -191.949387 3.455776 -470.000000 + endloop + endfacet + facet normal 0.000000 0.475908 0.879495 + outer loop + vertex -90.000000 7.118392 -504.514404 + vertex -90.000000 7.393218 -504.663116 + vertex -190.144592 7.393218 -504.663116 + endloop + endfacet + facet normal 0.000000 0.475942 0.879477 + outer loop + vertex -90.000000 7.118392 -504.514404 + vertex -190.144592 7.393218 -504.663116 + vertex -190.269958 6.812207 -504.348694 + endloop + endfacet + facet normal -0.961957 0.273200 0.000332 + outer loop + vertex -190.263336 6.866718 -530.000000 + vertex -190.276031 6.790803 -504.332001 + vertex -190.269958 6.812207 -504.348694 + endloop + endfacet + facet normal -0.961937 0.273273 0.000332 + outer loop + vertex -190.257584 6.886968 -530.000000 + vertex -190.263336 6.866718 -530.000000 + vertex -190.269958 6.812207 -504.348694 + endloop + endfacet + facet normal 0.789137 -0.614218 0.000000 + outer loop + vertex -207.621521 15.095533 -530.000000 + vertex -207.621521 15.095533 -470.000000 + vertex -208.050629 14.544223 -470.000000 + endloop + endfacet + facet normal 0.789137 -0.614218 0.000000 + outer loop + vertex -208.105408 14.473844 -530.000000 + vertex -207.621521 15.095533 -530.000000 + vertex -208.050629 14.544223 -470.000000 + endloop + endfacet + facet normal 0.000000 0.999138 0.041517 + outer loop + vertex -190.930923 5.013789 -501.331879 + vertex -90.000000 5.000000 -501.000000 + vertex -90.000000 5.006500 -501.156433 + endloop + endfacet + facet normal 0.000000 0.999138 0.041514 + outer loop + vertex -190.930923 5.013789 -501.331879 + vertex -190.937744 5.000000 -501.000000 + vertex -90.000000 5.000000 -501.000000 + endloop + endfacet + facet normal -0.896122 0.443807 0.000020 + outer loop + vertex -190.920990 5.035115 -530.000000 + vertex -190.927307 5.022359 -530.000000 + vertex -190.930923 5.013789 -501.331879 + endloop + endfacet + facet normal -0.896159 0.443733 0.000020 + outer loop + vertex -190.927307 5.022359 -530.000000 + vertex -190.937744 5.000000 -501.000000 + vertex -190.930923 5.013789 -501.331879 + endloop + endfacet + facet normal -0.677282 0.735724 0.000000 + outer loop + vertex -192.378494 2.904465 -470.000000 + vertex -192.378494 2.904465 -530.000000 + vertex -192.892487 2.431302 -530.000000 + endloop + endfacet + facet normal -0.677284 0.735722 0.000000 + outer loop + vertex -192.958099 2.370898 -470.000000 + vertex -192.378494 2.904465 -470.000000 + vertex -192.892487 2.431302 -530.000000 + endloop + endfacet + facet normal 0.000000 0.475972 0.879460 + outer loop + vertex -90.000000 6.812207 -504.348694 + vertex -90.000000 7.118392 -504.514404 + vertex -190.269958 6.812207 -504.348694 + endloop + endfacet + facet normal 0.000000 0.615397 0.788217 + outer loop + vertex -90.000000 6.802083 -504.340790 + vertex -90.000000 6.812207 -504.348694 + vertex -190.269958 6.812207 -504.348694 + endloop + endfacet + facet normal 0.000000 0.614990 0.788535 + outer loop + vertex -90.000000 6.802083 -504.340790 + vertex -190.269958 6.812207 -504.348694 + vertex -190.276031 6.790803 -504.332001 + endloop + endfacet + facet normal -0.986371 0.164535 -0.000001 + outer loop + vertex -190.263336 6.866718 -530.000000 + vertex -190.276001 6.790794 -530.000000 + vertex -190.276031 6.790803 -504.332001 + endloop + endfacet + facet normal 0.789137 -0.614218 0.000000 + outer loop + vertex -208.105408 14.473844 -530.000000 + vertex -208.050629 14.544223 -470.000000 + vertex -208.534515 13.922533 -470.000000 + endloop + endfacet + facet normal 0.789137 -0.614218 0.000000 + outer loop + vertex -208.534515 13.922533 -530.000000 + vertex -208.105408 14.473844 -530.000000 + vertex -208.534515 13.922533 -470.000000 + endloop + endfacet + facet normal -0.000072 0.996585 0.082575 + outer loop + vertex -190.930923 5.013789 -501.331879 + vertex -90.000000 5.006500 -501.156433 + vertex -90.000000 5.035339 -501.504486 + endloop + endfacet + facet normal -0.897463 0.441089 0.000017 + outer loop + vertex -190.902206 5.073333 -530.000000 + vertex -190.920990 5.035115 -530.000000 + vertex -190.910904 5.054554 -501.658386 + endloop + endfacet + facet normal -0.897549 0.440916 0.000017 + outer loop + vertex -190.920990 5.035115 -530.000000 + vertex -190.930923 5.013789 -501.331879 + vertex -190.910904 5.054554 -501.658386 + endloop + endfacet + facet normal -0.677284 0.735722 0.000000 + outer loop + vertex -192.958099 2.370898 -470.000000 + vertex -192.892487 2.431302 -530.000000 + vertex -193.472092 1.897735 -530.000000 + endloop + endfacet + facet normal -0.677282 0.735724 0.000000 + outer loop + vertex -193.472092 1.897735 -470.000000 + vertex -192.958099 2.370898 -470.000000 + vertex -193.472092 1.897735 -530.000000 + endloop + endfacet + facet normal 0.000000 0.614203 0.789148 + outer loop + vertex -90.000000 6.527339 -504.126953 + vertex -90.000000 6.802083 -504.340790 + vertex -190.276031 6.790803 -504.332001 + endloop + endfacet + facet normal -0.962258 0.272141 -0.000001 + outer loop + vertex -190.409958 6.317125 -530.000000 + vertex -190.417419 6.290874 -503.942902 + vertex -190.276031 6.790803 -504.332001 + endloop + endfacet + facet normal -0.962260 0.272134 -0.000001 + outer loop + vertex -190.276001 6.790794 -530.000000 + vertex -190.409958 6.317125 -530.000000 + vertex -190.276031 6.790803 -504.332001 + endloop + endfacet + facet normal 0.868006 -0.496553 0.000000 + outer loop + vertex -209.062256 13.000000 -494.000000 + vertex -208.534515 13.922533 -470.000000 + vertex -209.036621 13.044820 -470.000000 + endloop + endfacet + facet normal 0.868011 -0.496545 0.000000 + outer loop + vertex -209.024704 13.065635 -530.000000 + vertex -208.534515 13.922533 -530.000000 + vertex -209.062256 13.000000 -494.000000 + endloop + endfacet + facet normal 0.868008 -0.496549 0.000000 + outer loop + vertex -208.534515 13.922533 -530.000000 + vertex -208.534515 13.922533 -470.000000 + vertex -209.062256 13.000000 -494.000000 + endloop + endfacet + facet normal 0.000000 0.992295 0.123895 + outer loop + vertex -190.910904 5.054554 -501.658386 + vertex -90.000000 5.035339 -501.504486 + vertex -90.000000 5.054554 -501.658386 + endloop + endfacet + facet normal 0.000000 0.992296 0.123891 + outer loop + vertex -190.910904 5.054554 -501.658386 + vertex -190.930923 5.013789 -501.331879 + vertex -90.000000 5.035339 -501.504486 + endloop + endfacet + facet normal -0.900643 0.434559 0.000012 + outer loop + vertex -190.871490 5.136993 -530.000000 + vertex -190.902206 5.073333 -530.000000 + vertex -190.878250 5.122224 -501.981262 + endloop + endfacet + facet normal -0.900604 0.434641 0.000012 + outer loop + vertex -190.902206 5.073333 -530.000000 + vertex -190.910904 5.054554 -501.658386 + vertex -190.878250 5.122224 -501.981262 + endloop + endfacet + facet normal -0.546954 0.837163 0.000000 + outer loop + vertex -193.472092 1.897735 -470.000000 + vertex -193.472092 1.897735 -530.000000 + vertex -194.056946 1.515625 -530.000000 + endloop + endfacet + facet normal -0.546945 0.837168 0.000000 + outer loop + vertex -194.131622 1.466845 -470.000000 + vertex -193.472092 1.897735 -470.000000 + vertex -194.056946 1.515625 -530.000000 + endloop + endfacet + facet normal 0.000000 0.614220 0.789135 + outer loop + vertex -90.000000 6.290874 -503.942902 + vertex -90.000000 6.527339 -504.126953 + vertex -190.276031 6.790803 -504.332001 + endloop + endfacet + facet normal 0.000000 0.614201 0.789149 + outer loop + vertex -90.000000 6.290874 -503.942902 + vertex -190.276031 6.790803 -504.332001 + vertex -190.417419 6.290874 -503.942902 + endloop + endfacet + facet normal -0.945348 0.326063 0.000058 + outer loop + vertex -190.555878 5.894070 -530.000000 + vertex -190.571716 5.843437 -503.456818 + vertex -190.417419 6.290874 -503.942902 + endloop + endfacet + facet normal -0.945346 0.326068 0.000058 + outer loop + vertex -190.409958 6.317125 -530.000000 + vertex -190.555878 5.894070 -530.000000 + vertex -190.417419 6.290874 -503.942902 + endloop + endfacet + facet normal 0.867832 -0.496858 -0.000001 + outer loop + vertex -209.036621 13.044820 -530.000000 + vertex -209.024704 13.065635 -530.000000 + vertex -209.062256 13.000000 -505.999969 + endloop + endfacet + facet normal 0.867979 -0.496601 0.000000 + outer loop + vertex -209.024704 13.065635 -530.000000 + vertex -209.062256 13.000000 -494.000000 + vertex -209.062256 13.000000 -505.999969 + endloop + endfacet + facet normal 0.895214 -0.445636 -0.000124 + outer loop + vertex -209.069046 12.986291 -493.669128 + vertex -209.036621 13.044820 -470.000000 + vertex -209.043411 13.031179 -470.000000 + endloop + endfacet + facet normal 0.894924 -0.446218 -0.000123 + outer loop + vertex -209.062256 13.000000 -494.000000 + vertex -209.036621 13.044820 -470.000000 + vertex -209.069046 12.986291 -493.669128 + endloop + endfacet + facet normal 0.000000 0.978739 0.205109 + outer loop + vertex -190.878250 5.122224 -501.981262 + vertex -90.000000 5.054554 -501.658386 + vertex -90.000000 5.086461 -501.810638 + endloop + endfacet + facet normal 0.000000 0.978735 0.205127 + outer loop + vertex -190.878250 5.122224 -501.981262 + vertex -190.910904 5.054554 -501.658386 + vertex -90.000000 5.054554 -501.658386 + endloop + endfacet + facet normal -0.904911 0.425601 0.000006 + outer loop + vertex -190.829590 5.226082 -530.000000 + vertex -190.871490 5.136993 -530.000000 + vertex -190.833801 5.216731 -502.298767 + endloop + endfacet + facet normal -0.904903 0.425618 0.000006 + outer loop + vertex -190.871490 5.136993 -530.000000 + vertex -190.878250 5.122224 -501.981262 + vertex -190.833801 5.216731 -502.298767 + endloop + endfacet + facet normal -0.546945 0.837168 0.000000 + outer loop + vertex -194.131622 1.466845 -470.000000 + vertex -194.056946 1.515625 -530.000000 + vertex -194.716476 1.084736 -530.000000 + endloop + endfacet + facet normal -0.546954 0.837163 0.000000 + outer loop + vertex -194.716476 1.084736 -470.000000 + vertex -194.131622 1.466845 -470.000000 + vertex -194.716476 1.084736 -530.000000 + endloop + endfacet + facet normal 0.000000 0.735742 0.677262 + outer loop + vertex -190.417419 6.290874 -503.942902 + vertex -90.000000 6.079566 -503.713348 + vertex -90.000000 6.290874 -503.942902 + endloop + endfacet + facet normal 0.000000 0.735751 0.677253 + outer loop + vertex -190.417419 6.290874 -503.942902 + vertex -190.571716 5.843437 -503.456818 + vertex -90.000000 6.079566 -503.713348 + endloop + endfacet + facet normal -0.928601 0.371080 0.000154 + outer loop + vertex -190.555878 5.894070 -530.000000 + vertex -190.692001 5.553431 -530.000000 + vertex -190.571716 5.843437 -503.456818 + endloop + endfacet + facet normal -0.928600 0.371083 0.000154 + outer loop + vertex -190.692001 5.553431 -530.000000 + vertex -190.716019 5.482105 -502.903809 + vertex -190.571716 5.843437 -503.456818 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -230.000000 13.000000 -494.253540 + vertex -230.000000 13.000000 -505.999969 + vertex -209.062256 13.000000 -505.999969 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -230.000000 13.000000 -494.253540 + vertex -209.062256 13.000000 -505.999969 + vertex -209.062256 13.000000 -494.000000 + endloop + endfacet + facet normal 0.879521 -0.475861 0.000051 + outer loop + vertex -209.070984 12.981308 -530.000000 + vertex -209.036621 13.044820 -530.000000 + vertex -209.062256 13.000000 -505.999969 + endloop + endfacet + facet normal 0.897251 -0.441521 -0.000134 + outer loop + vertex -209.089096 12.945445 -493.341614 + vertex -209.043411 13.031179 -470.000000 + vertex -209.062851 12.991674 -470.000000 + endloop + endfacet + facet normal 0.897254 -0.441514 -0.000134 + outer loop + vertex -209.069046 12.986291 -493.669128 + vertex -209.043411 13.031179 -470.000000 + vertex -209.089096 12.945445 -493.341614 + endloop + endfacet + facet normal 0.000000 -0.999143 -0.041398 + outer loop + vertex -230.000000 13.000000 -494.000000 + vertex -209.062256 13.000000 -494.000000 + vertex -209.069046 12.986291 -493.669128 + endloop + endfacet + facet normal 0.000000 -0.999143 -0.041397 + outer loop + vertex -230.000000 12.986581 -493.676117 + vertex -230.000000 13.000000 -494.000000 + vertex -209.069046 12.986291 -493.669128 + endloop + endfacet + facet normal -0.000072 0.969392 0.245518 + outer loop + vertex -190.878250 5.122224 -501.981262 + vertex -90.000000 5.086461 -501.810638 + vertex -90.000000 5.172170 -502.149048 + endloop + endfacet + facet normal -0.913986 0.405746 -0.000002 + outer loop + vertex -190.758972 5.385156 -530.000000 + vertex -190.829590 5.226082 -530.000000 + vertex -190.759033 5.385180 -502.682800 + endloop + endfacet + facet normal -0.914011 0.405689 -0.000002 + outer loop + vertex -190.829590 5.226082 -530.000000 + vertex -190.833801 5.216731 -502.298767 + vertex -190.759033 5.385180 -502.682800 + endloop + endfacet + facet normal 0.000000 0.958450 0.285260 + outer loop + vertex -190.833801 5.216731 -502.298767 + vertex -90.000000 5.172170 -502.149048 + vertex -90.000000 5.216731 -502.298767 + endloop + endfacet + facet normal 0.000000 0.958443 0.285285 + outer loop + vertex -190.833801 5.216731 -502.298767 + vertex -190.878250 5.122224 -501.981262 + vertex -90.000000 5.172170 -502.149048 + endloop + endfacet + facet normal -0.401700 0.915771 0.000000 + outer loop + vertex -194.716476 1.084736 -470.000000 + vertex -194.716476 1.084736 -530.000000 + vertex -195.356247 0.804103 -530.000000 + endloop + endfacet + facet normal -0.401696 0.915773 0.000000 + outer loop + vertex -195.437927 0.768277 -470.000000 + vertex -194.716476 1.084736 -470.000000 + vertex -195.356247 0.804103 -530.000000 + endloop + endfacet + facet normal 0.000000 0.735759 0.677244 + outer loop + vertex -190.571716 5.843437 -503.456818 + vertex -90.000000 5.843437 -503.456818 + vertex -90.000000 6.079566 -503.713348 + endloop + endfacet + facet normal 0.000000 0.837131 0.547002 + outer loop + vertex -190.571716 5.843437 -503.456818 + vertex -90.000000 5.672922 -503.195862 + vertex -90.000000 5.843437 -503.456818 + endloop + endfacet + facet normal 0.000000 0.837143 0.546984 + outer loop + vertex -190.571716 5.843437 -503.456818 + vertex -190.716019 5.482105 -502.903809 + vertex -90.000000 5.672922 -503.195862 + endloop + endfacet + facet normal -0.913815 0.406131 0.000259 + outer loop + vertex -190.692001 5.553431 -530.000000 + vertex -190.732468 5.462380 -530.000000 + vertex -190.716019 5.482105 -502.903809 + endloop + endfacet + facet normal -0.913813 0.406135 0.000259 + outer loop + vertex -190.732468 5.462380 -530.000000 + vertex -190.759033 5.385180 -502.682800 + vertex -190.716019 5.482105 -502.903809 + endloop + endfacet + facet normal 0.000000 -0.999138 0.041518 + outer loop + vertex -230.000000 13.000000 -505.999969 + vertex -230.000000 12.986501 -506.324829 + vertex -209.069092 12.986210 -506.331848 + endloop + endfacet + facet normal 0.000000 -0.999138 0.041516 + outer loop + vertex -230.000000 13.000000 -505.999969 + vertex -209.069092 12.986210 -506.331848 + vertex -209.062256 13.000000 -505.999969 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -230.000000 13.000000 -494.000000 + vertex -230.000000 13.000000 -494.253540 + vertex -209.062256 13.000000 -494.000000 + endloop + endfacet + facet normal 0.895763 -0.444533 0.000020 + outer loop + vertex -209.077377 12.968425 -530.000000 + vertex -209.070984 12.981308 -530.000000 + vertex -209.069092 12.986210 -506.331848 + endloop + endfacet + facet normal 0.895763 -0.444533 0.000020 + outer loop + vertex -209.070984 12.981308 -530.000000 + vertex -209.062256 13.000000 -505.999969 + vertex -209.069092 12.986210 -506.331848 + endloop + endfacet + facet normal 0.000000 -0.992313 -0.123756 + outer loop + vertex -230.000000 12.985428 -493.662201 + vertex -209.069046 12.986291 -493.669128 + vertex -209.089096 12.945445 -493.341614 + endloop + endfacet + facet normal 0.000000 -0.992312 -0.123759 + outer loop + vertex -230.000000 12.945445 -493.341614 + vertex -230.000000 12.985428 -493.662201 + vertex -209.089096 12.945445 -493.341614 + endloop + endfacet + facet normal 0.900352 -0.435162 -0.000150 + outer loop + vertex -209.122101 12.877043 -493.015869 + vertex -209.062851 12.991674 -470.000000 + vertex -209.094666 12.925850 -470.000000 + endloop + endfacet + facet normal 0.900359 -0.435149 -0.000151 + outer loop + vertex -209.089096 12.945445 -493.341614 + vertex -209.062851 12.991674 -470.000000 + vertex -209.122101 12.877043 -493.015869 + endloop + endfacet + facet normal 0.000014 -0.996585 -0.082571 + outer loop + vertex -230.000000 12.985428 -493.662201 + vertex -230.000000 12.986581 -493.676117 + vertex -209.069046 12.986291 -493.669128 + endloop + endfacet + facet normal 0.000000 0.915773 0.401697 + outer loop + vertex -190.759033 5.385180 -502.682800 + vertex -90.000000 5.216731 -502.298767 + vertex -90.000000 5.296205 -502.479950 + endloop + endfacet + facet normal 0.000000 0.915776 0.401689 + outer loop + vertex -190.759033 5.385180 -502.682800 + vertex -190.833801 5.216731 -502.298767 + vertex -90.000000 5.216731 -502.298767 + endloop + endfacet + facet normal -0.945842 0.324627 -0.000002 + outer loop + vertex -190.732468 5.462380 -530.000000 + vertex -190.758972 5.385156 -530.000000 + vertex -190.759033 5.385180 -502.682800 + endloop + endfacet + facet normal -0.401696 0.915773 0.000000 + outer loop + vertex -195.437927 0.768277 -470.000000 + vertex -195.356247 0.804103 -530.000000 + vertex -196.077698 0.487644 -530.000000 + endloop + endfacet + facet normal -0.401700 0.915771 0.000000 + outer loop + vertex -196.077698 0.487644 -470.000000 + vertex -195.437927 0.768277 -470.000000 + vertex -196.077698 0.487644 -530.000000 + endloop + endfacet + facet normal 0.000000 0.837154 0.546967 + outer loop + vertex -190.716019 5.482105 -502.903809 + vertex -90.000000 5.482105 -502.903809 + vertex -90.000000 5.672922 -503.195862 + endloop + endfacet + facet normal 0.000000 0.915811 0.401610 + outer loop + vertex -190.716019 5.482105 -502.903809 + vertex -90.000000 5.436376 -502.799530 + vertex -90.000000 5.482105 -502.903809 + endloop + endfacet + facet normal 0.000000 0.915801 0.401631 + outer loop + vertex -190.716019 5.482105 -502.903809 + vertex -190.759033 5.385180 -502.682800 + vertex -90.000000 5.436376 -502.799530 + endloop + endfacet + facet normal 0.000014 -0.996591 0.082503 + outer loop + vertex -230.000000 12.986501 -506.324829 + vertex -230.000000 12.985349 -506.338745 + vertex -209.069092 12.986210 -506.331848 + endloop + endfacet + facet normal 0.897655 -0.440700 0.000017 + outer loop + vertex -209.096329 12.929823 -530.000000 + vertex -209.077377 12.968425 -530.000000 + vertex -209.089096 12.945445 -506.658386 + endloop + endfacet + facet normal 0.897680 -0.440648 0.000017 + outer loop + vertex -209.077377 12.968425 -530.000000 + vertex -209.069092 12.986210 -506.331848 + vertex -209.089096 12.945445 -506.658386 + endloop + endfacet + facet normal 0.000000 -0.978656 -0.205505 + outer loop + vertex -230.000000 12.945445 -493.341614 + vertex -209.089096 12.945445 -493.341614 + vertex -209.122101 12.877043 -493.015869 + endloop + endfacet + facet normal 0.000000 -0.978655 -0.205508 + outer loop + vertex -230.000000 12.878484 -493.022736 + vertex -230.000000 12.945445 -493.341614 + vertex -209.122101 12.877043 -493.015869 + endloop + endfacet + facet normal 0.904666 -0.426122 -0.000174 + outer loop + vertex -209.166199 12.783269 -492.701202 + vertex -209.094666 12.925850 -470.000000 + vertex -209.137100 12.835760 -470.000000 + endloop + endfacet + facet normal 0.904708 -0.426033 -0.000175 + outer loop + vertex -209.122101 12.877043 -493.015869 + vertex -209.094666 12.925850 -470.000000 + vertex -209.166199 12.783269 -492.701202 + endloop + endfacet + facet normal 0.000000 0.915784 0.401671 + outer loop + vertex -190.759033 5.385180 -502.682800 + vertex -90.000000 5.296205 -502.479950 + vertex -90.000000 5.436376 -502.799530 + endloop + endfacet + facet normal -0.245484 0.969401 0.000000 + outer loop + vertex -196.077698 0.487644 -470.000000 + vertex -196.077698 0.487644 -530.000000 + vertex -196.754944 0.316143 -530.000000 + endloop + endfacet + facet normal -0.245484 0.969401 0.000000 + outer loop + vertex -196.841400 0.294249 -470.000000 + vertex -196.077698 0.487644 -470.000000 + vertex -196.754944 0.316143 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.992298 0.123877 + outer loop + vertex -230.000000 12.985349 -506.338745 + vertex -230.000000 12.945445 -506.658386 + vertex -209.089096 12.945445 -506.658386 + endloop + endfacet + facet normal 0.000000 -0.992298 0.123878 + outer loop + vertex -230.000000 12.985349 -506.338745 + vertex -209.089096 12.945445 -506.658386 + vertex -209.069092 12.986210 -506.331848 + endloop + endfacet + facet normal 0.900591 -0.434668 0.000012 + outer loop + vertex -209.127365 12.865519 -530.000000 + vertex -209.096329 12.929823 -530.000000 + vertex -209.121750 12.877775 -506.981262 + endloop + endfacet + facet normal 0.900605 -0.434639 0.000012 + outer loop + vertex -209.096329 12.929823 -530.000000 + vertex -209.089096 12.945445 -506.658386 + vertex -209.121750 12.877775 -506.981262 + endloop + endfacet + facet normal 0.000014 -0.969380 -0.245566 + outer loop + vertex -230.000000 12.875067 -493.009247 + vertex -230.000000 12.878484 -493.022736 + vertex -209.122101 12.877043 -493.015869 + endloop + endfacet + facet normal 0.000000 -0.958350 -0.285598 + outer loop + vertex -230.000000 12.875067 -493.009247 + vertex -209.122101 12.877043 -493.015869 + vertex -209.166199 12.783269 -492.701202 + endloop + endfacet + facet normal 0.000000 -0.958352 -0.285591 + outer loop + vertex -230.000000 12.783269 -492.701202 + vertex -230.000000 12.875067 -493.009247 + vertex -209.166199 12.783269 -492.701202 + endloop + endfacet + facet normal 0.913835 -0.406086 -0.000233 + outer loop + vertex -209.240967 12.614820 -492.317169 + vertex -209.137100 12.835760 -470.000000 + vertex -209.208939 12.674099 -470.000000 + endloop + endfacet + facet normal 0.913813 -0.406135 -0.000232 + outer loop + vertex -209.166199 12.783269 -492.701202 + vertex -209.137100 12.835760 -470.000000 + vertex -209.240967 12.614820 -492.317169 + endloop + endfacet + facet normal -0.245484 0.969401 0.000000 + outer loop + vertex -196.841400 0.294249 -470.000000 + vertex -196.754944 0.316143 -530.000000 + vertex -197.518646 0.122748 -530.000000 + endloop + endfacet + facet normal -0.245484 0.969401 0.000000 + outer loop + vertex -197.518646 0.122748 -470.000000 + vertex -196.841400 0.294249 -470.000000 + vertex -197.518646 0.122748 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.978735 0.205130 + outer loop + vertex -230.000000 12.945445 -506.658386 + vertex -230.000000 12.879201 -506.974457 + vertex -209.121750 12.877775 -506.981262 + endloop + endfacet + facet normal 0.000000 -0.978735 0.205128 + outer loop + vertex -230.000000 12.945445 -506.658386 + vertex -209.121750 12.877775 -506.981262 + vertex -209.089096 12.945445 -506.658386 + endloop + endfacet + facet normal 0.904899 -0.425627 0.000006 + outer loop + vertex -209.169693 12.775528 -530.000000 + vertex -209.127365 12.865519 -530.000000 + vertex -209.166199 12.783269 -507.298828 + endloop + endfacet + facet normal 0.904902 -0.425620 0.000006 + outer loop + vertex -209.127365 12.865519 -530.000000 + vertex -209.121750 12.877775 -506.981262 + vertex -209.166199 12.783269 -507.298828 + endloop + endfacet + facet normal 0.000000 -0.915829 -0.401568 + outer loop + vertex -230.000000 12.777689 -492.688477 + vertex -230.000000 12.783269 -492.701202 + vertex -209.166199 12.783269 -492.701202 + endloop + endfacet + facet normal 0.000000 -0.915776 -0.401689 + outer loop + vertex -230.000000 12.777689 -492.688477 + vertex -209.166199 12.783269 -492.701202 + vertex -209.240967 12.614820 -492.317169 + endloop + endfacet + facet normal 0.000000 -0.915778 -0.401684 + outer loop + vertex -230.000000 12.612789 -492.312531 + vertex -230.000000 12.777689 -492.688477 + vertex -209.240967 12.614820 -492.317169 + endloop + endfacet + facet normal 0.879447 -0.475998 0.000002 + outer loop + vertex -209.240967 12.614820 -492.317169 + vertex -209.208939 12.674099 -470.000000 + vertex -209.241013 12.614840 -470.000000 + endloop + endfacet + facet normal -0.082578 0.996585 0.000000 + outer loop + vertex -197.518646 0.122748 -470.000000 + vertex -197.518646 0.122748 -530.000000 + vertex -198.214890 0.065057 -530.000000 + endloop + endfacet + facet normal -0.082580 0.996584 0.000000 + outer loop + vertex -198.303757 0.057692 -470.000000 + vertex -197.518646 0.122748 -470.000000 + vertex -198.214890 0.065057 -530.000000 + endloop + endfacet + facet normal 0.000014 -0.969380 0.245566 + outer loop + vertex -230.000000 12.879201 -506.974457 + vertex -230.000000 12.875784 -506.987946 + vertex -209.121750 12.877775 -506.981262 + endloop + endfacet + facet normal 0.914017 -0.405675 -0.000002 + outer loop + vertex -209.241013 12.614840 -530.000000 + vertex -209.169693 12.775528 -530.000000 + vertex -209.240967 12.614820 -507.682800 + endloop + endfacet + facet normal 0.914011 -0.405688 -0.000002 + outer loop + vertex -209.169693 12.775528 -530.000000 + vertex -209.166199 12.783269 -507.298828 + vertex -209.240967 12.614820 -507.682800 + endloop + endfacet + facet normal 0.000000 -0.958460 0.285226 + outer loop + vertex -230.000000 12.875784 -506.987946 + vertex -230.000000 12.783269 -507.298828 + vertex -209.166199 12.783269 -507.298828 + endloop + endfacet + facet normal 0.000000 -0.958458 0.285233 + outer loop + vertex -230.000000 12.875784 -506.987946 + vertex -209.166199 12.783269 -507.298828 + vertex -209.121750 12.877775 -506.981262 + endloop + endfacet + facet normal 0.000000 -0.915761 -0.401724 + outer loop + vertex -230.000000 12.612789 -492.312531 + vertex -209.240967 12.614820 -492.317169 + vertex -209.283997 12.517895 -492.096222 + endloop + endfacet + facet normal 0.000000 -0.915754 -0.401740 + outer loop + vertex -230.000000 12.517895 -492.096222 + vertex -230.000000 12.612789 -492.312531 + vertex -209.283997 12.517895 -492.096222 + endloop + endfacet + facet normal 0.914001 -0.405712 0.000002 + outer loop + vertex -209.283997 12.517895 -492.096222 + vertex -209.241013 12.614840 -470.000000 + vertex -209.282104 12.522266 -470.000000 + endloop + endfacet + facet normal 0.913981 -0.405757 0.000002 + outer loop + vertex -209.240967 12.614820 -492.317169 + vertex -209.241013 12.614840 -470.000000 + vertex -209.283997 12.517895 -492.096222 + endloop + endfacet + facet normal -0.082580 0.996584 0.000000 + outer loop + vertex -198.303757 0.057692 -470.000000 + vertex -198.214890 0.065057 -530.000000 + vertex -199.000000 0.000000 -530.000000 + endloop + endfacet + facet normal -0.082578 0.996585 0.000000 + outer loop + vertex -199.000000 0.000000 -470.000000 + vertex -198.303757 0.057692 -470.000000 + vertex -199.000000 0.000000 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.915748 0.401753 + outer loop + vertex -230.000000 12.783269 -507.298828 + vertex -230.000000 12.618349 -507.674744 + vertex -209.240967 12.614820 -507.682800 + endloop + endfacet + facet normal 0.000000 -0.915753 0.401743 + outer loop + vertex -230.000000 12.783269 -507.298828 + vertex -209.240967 12.614820 -507.682800 + vertex -209.166199 12.783269 -507.298828 + endloop + endfacet + facet normal 0.945806 -0.324732 -0.000002 + outer loop + vertex -209.262894 12.551109 -530.000000 + vertex -209.241013 12.614840 -530.000000 + vertex -209.240967 12.614820 -507.682800 + endloop + endfacet + facet normal 0.000000 -0.837170 -0.546942 + outer loop + vertex -230.000000 12.517895 -492.096222 + vertex -209.283997 12.517895 -492.096222 + vertex -209.428299 12.156562 -491.543152 + endloop + endfacet + facet normal 0.000000 -0.837175 -0.546935 + outer loop + vertex -230.000000 12.164065 -491.554626 + vertex -230.000000 12.517895 -492.096222 + vertex -209.428299 12.156562 -491.543152 + endloop + endfacet + facet normal 0.928671 -0.370905 -0.000006 + outer loop + vertex -209.428299 12.156562 -491.543152 + vertex -209.282104 12.522266 -470.000000 + vertex -209.420135 12.176665 -470.000000 + endloop + endfacet + facet normal 0.928678 -0.370887 -0.000006 + outer loop + vertex -209.283997 12.517895 -492.096222 + vertex -209.282104 12.522266 -470.000000 + vertex -209.428299 12.156562 -491.543152 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex -199.000000 0.000000 -530.000000 + vertex -199.940002 0.000000 -470.000000 + vertex -199.000000 0.000000 -470.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex -200.059998 0.000000 -530.000000 + vertex -199.940002 0.000000 -470.000000 + vertex -199.000000 0.000000 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.916006 0.401165 + outer loop + vertex -230.000000 12.618349 -507.674744 + vertex -230.000000 12.612789 -507.687439 + vertex -209.240967 12.614820 -507.682800 + endloop + endfacet + facet normal 0.913746 -0.406286 0.000262 + outer loop + vertex -209.303787 12.459139 -530.000000 + vertex -209.262894 12.551109 -530.000000 + vertex -209.283997 12.517895 -507.903809 + endloop + endfacet + facet normal 0.913757 -0.406260 0.000262 + outer loop + vertex -209.262894 12.551109 -530.000000 + vertex -209.240967 12.614820 -507.682800 + vertex -209.283997 12.517895 -507.903809 + endloop + endfacet + facet normal 0.000000 -0.836940 -0.547294 + outer loop + vertex -230.000000 12.156562 -491.543152 + vertex -230.000000 12.164065 -491.554626 + vertex -209.428299 12.156562 -491.543152 + endloop + endfacet + facet normal 0.945359 -0.326031 -0.000054 + outer loop + vertex -209.582581 11.709126 -491.057098 + vertex -209.420135 12.176665 -470.000000 + vertex -209.567978 11.747981 -470.000000 + endloop + endfacet + facet normal 0.945359 -0.326030 -0.000054 + outer loop + vertex -209.428299 12.156562 -491.543152 + vertex -209.420135 12.176665 -470.000000 + vertex -209.582581 11.709126 -491.057098 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex -200.059998 0.000000 -530.000000 + vertex -201.000000 0.000000 -470.000000 + vertex -199.940002 0.000000 -470.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex -201.000000 0.000000 -530.000000 + vertex -201.000000 0.000000 -470.000000 + vertex -200.059998 0.000000 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.915795 0.401645 + outer loop + vertex -230.000000 12.612789 -507.687439 + vertex -230.000000 12.517895 -507.903809 + vertex -209.283997 12.517895 -507.903809 + endloop + endfacet + facet normal 0.000000 -0.915801 0.401631 + outer loop + vertex -230.000000 12.612789 -507.687439 + vertex -209.283997 12.517895 -507.903809 + vertex -209.240967 12.614820 -507.682800 + endloop + endfacet + facet normal 0.928606 -0.371067 0.000155 + outer loop + vertex -209.441284 12.115048 -530.000000 + vertex -209.303787 12.459139 -530.000000 + vertex -209.428299 12.156562 -508.456818 + endloop + endfacet + facet normal 0.928599 -0.371084 0.000155 + outer loop + vertex -209.303787 12.459139 -530.000000 + vertex -209.283997 12.517895 -507.903809 + vertex -209.428299 12.156562 -508.456818 + endloop + endfacet + facet normal 0.000000 -0.735729 -0.677276 + outer loop + vertex -230.000000 12.156562 -491.543152 + vertex -209.428299 12.156562 -491.543152 + vertex -209.582581 11.709126 -491.057098 + endloop + endfacet + facet normal 0.000000 -0.735737 -0.677268 + outer loop + vertex -230.000000 11.718349 -491.067108 + vertex -230.000000 12.156562 -491.543152 + vertex -209.582581 11.709126 -491.057098 + endloop + endfacet + facet normal 0.961875 -0.273488 -0.000162 + outer loop + vertex -209.724609 11.209369 -490.665527 + vertex -209.567978 11.747981 -470.000000 + vertex -209.704285 11.268581 -470.000000 + endloop + endfacet + facet normal 0.961875 -0.273488 -0.000162 + outer loop + vertex -209.724609 11.209369 -490.665527 + vertex -209.582581 11.709126 -491.057098 + vertex -209.567978 11.747981 -470.000000 + endloop + endfacet + facet normal 0.082578 0.996585 0.000000 + outer loop + vertex -201.000000 0.000000 -470.000000 + vertex -201.000000 0.000000 -530.000000 + vertex -201.696243 0.057692 -530.000000 + endloop + endfacet + facet normal 0.082580 0.996584 0.000000 + outer loop + vertex -201.785110 0.065057 -470.000000 + vertex -201.000000 0.000000 -470.000000 + vertex -201.696243 0.057692 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.837186 0.546918 + outer loop + vertex -230.000000 12.517895 -507.903809 + vertex -230.000000 12.510339 -507.915375 + vertex -209.283997 12.517895 -507.903809 + endloop + endfacet + facet normal 0.000000 -0.837142 0.546986 + outer loop + vertex -230.000000 12.510339 -507.915375 + vertex -230.000000 12.156562 -508.456818 + vertex -209.428299 12.156562 -508.456818 + endloop + endfacet + facet normal 0.000000 -0.837143 0.546984 + outer loop + vertex -230.000000 12.510339 -507.915375 + vertex -209.428299 12.156562 -508.456818 + vertex -209.283997 12.517895 -507.903809 + endloop + endfacet + facet normal 0.945358 -0.326035 0.000058 + outer loop + vertex -209.441284 12.115048 -530.000000 + vertex -209.428299 12.156562 -508.456818 + vertex -209.582581 11.709126 -508.942902 + endloop + endfacet + facet normal 0.945358 -0.326033 0.000058 + outer loop + vertex -209.588669 11.687696 -530.000000 + vertex -209.441284 12.115048 -530.000000 + vertex -209.582581 11.709126 -508.942902 + endloop + endfacet + facet normal 0.000000 -0.735383 -0.677651 + outer loop + vertex -230.000000 11.709126 -491.057098 + vertex -230.000000 11.718349 -491.067108 + vertex -209.582581 11.709126 -491.057098 + endloop + endfacet + facet normal 0.000002 -0.616772 -0.787142 + outer loop + vertex -209.724609 11.209369 -490.665527 + vertex -230.000000 11.208927 -490.665222 + vertex -230.000000 11.698379 -491.048737 + endloop + endfacet + facet normal 0.000002 -0.616755 -0.787155 + outer loop + vertex -209.582581 11.709126 -491.057098 + vertex -209.724609 11.209369 -490.665527 + vertex -230.000000 11.698379 -491.048737 + endloop + endfacet + facet normal 0.945832 -0.324656 0.000000 + outer loop + vertex -209.724609 11.209369 -490.665527 + vertex -209.704285 11.268581 -470.000000 + vertex -209.724609 11.209369 -470.000000 + endloop + endfacet + facet normal 0.082580 0.996584 0.000000 + outer loop + vertex -201.785110 0.065057 -470.000000 + vertex -201.696243 0.057692 -530.000000 + vertex -202.481354 0.122748 -530.000000 + endloop + endfacet + facet normal 0.082578 0.996585 0.000000 + outer loop + vertex -202.481354 0.122748 -470.000000 + vertex -201.785110 0.065057 -470.000000 + vertex -202.481354 0.122748 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.735953 0.677032 + outer loop + vertex -230.000000 12.156562 -508.456818 + vertex -230.000000 12.147269 -508.466919 + vertex -209.428299 12.156562 -508.456818 + endloop + endfacet + facet normal 0.962250 -0.272168 -0.000001 + outer loop + vertex -209.588669 11.687696 -530.000000 + vertex -209.582581 11.709126 -508.942902 + vertex -209.723984 11.209196 -509.332001 + endloop + endfacet + facet normal 0.962246 -0.272180 -0.000002 + outer loop + vertex -209.724014 11.209204 -530.000000 + vertex -209.588669 11.687696 -530.000000 + vertex -209.723984 11.209196 -509.332001 + endloop + endfacet + facet normal 0.000000 -0.735746 0.677257 + outer loop + vertex -230.000000 12.147269 -508.466919 + vertex -230.000000 11.709126 -508.942902 + vertex -209.582581 11.709126 -508.942902 + endloop + endfacet + facet normal 0.000000 -0.735751 0.677253 + outer loop + vertex -230.000000 12.147269 -508.466919 + vertex -209.582581 11.709126 -508.942902 + vertex -209.428299 12.156562 -508.456818 + endloop + endfacet + facet normal 0.000000 -0.614081 -0.789243 + outer loop + vertex -209.582581 11.709126 -491.057098 + vertex -230.000000 11.698379 -491.048737 + vertex -230.000000 11.709126 -491.057098 + endloop + endfacet + facet normal -0.000002 -0.477302 -0.878739 + outer loop + vertex -209.729507 11.186769 -490.653229 + vertex -230.000000 11.186790 -490.653198 + vertex -230.000000 11.208927 -490.665222 + endloop + endfacet + facet normal -0.000003 -0.478005 -0.878357 + outer loop + vertex -209.724609 11.209369 -490.665527 + vertex -209.729507 11.186769 -490.653229 + vertex -230.000000 11.208927 -490.665222 + endloop + endfacet + facet normal 0.977380 -0.211493 0.000000 + outer loop + vertex -209.729507 11.186769 -490.653229 + vertex -209.724609 11.209369 -470.000000 + vertex -209.729294 11.187720 -470.000000 + endloop + endfacet + facet normal 0.977309 -0.211818 0.000000 + outer loop + vertex -209.729507 11.186769 -490.653229 + vertex -209.724609 11.209369 -490.665527 + vertex -209.724609 11.209369 -470.000000 + endloop + endfacet + facet normal 0.245484 0.969401 0.000000 + outer loop + vertex -202.481354 0.122748 -470.000000 + vertex -202.481354 0.122748 -530.000000 + vertex -203.158600 0.294249 -530.000000 + endloop + endfacet + facet normal 0.245484 0.969401 0.000000 + outer loop + vertex -203.245056 0.316143 -470.000000 + vertex -202.481354 0.122748 -470.000000 + vertex -203.158600 0.294249 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.614203 0.789148 + outer loop + vertex -209.723984 11.209196 -509.332001 + vertex -230.000000 11.709126 -508.942902 + vertex -230.000000 11.219432 -509.324036 + endloop + endfacet + facet normal 0.000000 -0.614201 0.789149 + outer loop + vertex -209.723984 11.209196 -509.332001 + vertex -209.582581 11.709126 -508.942902 + vertex -230.000000 11.709126 -508.942902 + endloop + endfacet + facet normal 0.986377 -0.164503 -0.000002 + outer loop + vertex -209.734314 11.147446 -530.000000 + vertex -209.724014 11.209204 -530.000000 + vertex -209.723984 11.209196 -509.332001 + endloop + endfacet + facet normal -0.000002 -0.478835 -0.877905 + outer loop + vertex -209.855408 10.606782 -490.336884 + vertex -230.000000 10.618603 -490.343292 + vertex -230.000000 11.186790 -490.653198 + endloop + endfacet + facet normal -0.000002 -0.478838 -0.877903 + outer loop + vertex -209.729507 11.186769 -490.653229 + vertex -209.855408 10.606782 -490.336884 + vertex -230.000000 11.186790 -490.653198 + endloop + endfacet + facet normal 0.977241 -0.212134 0.000000 + outer loop + vertex -209.855408 10.606782 -490.336884 + vertex -209.729294 11.187720 -470.000000 + vertex -209.849976 10.631775 -470.000000 + endloop + endfacet + facet normal 0.977241 -0.212134 0.000000 + outer loop + vertex -209.855408 10.606782 -490.336884 + vertex -209.729507 11.186769 -490.653229 + vertex -209.729294 11.187720 -470.000000 + endloop + endfacet + facet normal 0.245484 0.969401 0.000000 + outer loop + vertex -203.245056 0.316143 -470.000000 + vertex -203.158600 0.294249 -530.000000 + vertex -203.922302 0.487644 -530.000000 + endloop + endfacet + facet normal 0.245484 0.969401 0.000000 + outer loop + vertex -203.922302 0.487644 -470.000000 + vertex -203.245056 0.316143 -470.000000 + vertex -203.922302 0.487644 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.613867 0.789409 + outer loop + vertex -209.723984 11.209196 -509.332001 + vertex -230.000000 11.219432 -509.324036 + vertex -230.000000 11.208757 -509.332336 + endloop + endfacet + facet normal 0.962139 -0.272560 0.000333 + outer loop + vertex -209.734314 11.147446 -530.000000 + vertex -209.723984 11.209196 -509.332001 + vertex -209.730042 11.187792 -509.348694 + endloop + endfacet + facet normal 0.962094 -0.272718 0.000334 + outer loop + vertex -209.740112 11.126990 -530.000000 + vertex -209.734314 11.147446 -530.000000 + vertex -209.730042 11.187792 -509.348694 + endloop + endfacet + facet normal 0.000000 -0.476614 -0.879112 + outer loop + vertex -209.855408 10.606782 -490.336884 + vertex -230.000000 10.606782 -490.336884 + vertex -230.000000 10.618603 -490.343292 + endloop + endfacet + facet normal 0.989587 -0.143938 -0.000087 + outer loop + vertex -209.946274 9.981941 -490.122406 + vertex -209.855408 10.606782 -490.336884 + vertex -209.849976 10.631775 -470.000000 + endloop + endfacet + facet normal 0.989583 -0.143960 -0.000087 + outer loop + vertex -209.946274 9.981941 -490.122406 + vertex -209.849976 10.631775 -470.000000 + vertex -209.937180 10.032334 -470.000000 + endloop + endfacet + facet normal 0.401700 0.915771 0.000000 + outer loop + vertex -203.922302 0.487644 -470.000000 + vertex -203.922302 0.487644 -530.000000 + vertex -204.562073 0.768277 -530.000000 + endloop + endfacet + facet normal 0.401696 0.915773 0.000000 + outer loop + vertex -204.643753 0.804103 -470.000000 + vertex -203.922302 0.487644 -470.000000 + vertex -204.562073 0.768277 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.615132 0.788424 + outer loop + vertex -209.730042 11.187792 -509.348694 + vertex -230.000000 11.208757 -509.332336 + vertex -230.000000 11.187792 -509.348694 + endloop + endfacet + facet normal 0.000000 -0.614981 0.788542 + outer loop + vertex -209.730042 11.187792 -509.348694 + vertex -209.723984 11.209196 -509.332001 + vertex -230.000000 11.208757 -509.332336 + endloop + endfacet + facet normal 0.977487 -0.210994 0.000145 + outer loop + vertex -209.740112 11.126990 -530.000000 + vertex -209.730042 11.187792 -509.348694 + vertex -209.855408 10.606782 -509.663116 + endloop + endfacet + facet normal 0.977491 -0.210978 0.000145 + outer loop + vertex -209.860123 10.570965 -530.000000 + vertex -209.740112 11.126990 -530.000000 + vertex -209.855408 10.606782 -509.663116 + endloop + endfacet + facet normal -0.000001 -0.324673 -0.945826 + outer loop + vertex -209.946274 9.981941 -490.122406 + vertex -230.000000 9.994597 -490.126740 + vertex -230.000000 10.606782 -490.336884 + endloop + endfacet + facet normal 0.000000 -0.324658 -0.945831 + outer loop + vertex -209.855408 10.606782 -490.336884 + vertex -209.946274 9.981941 -490.122406 + vertex -230.000000 10.606782 -490.336884 + endloop + endfacet + facet normal 0.995394 -0.095874 -0.000210 + outer loop + vertex -209.969269 9.743214 -490.069672 + vertex -209.937180 10.032334 -470.000000 + vertex -209.959244 9.803257 -470.000000 + endloop + endfacet + facet normal 0.995389 -0.095925 -0.000210 + outer loop + vertex -209.969269 9.743214 -490.069672 + vertex -209.946274 9.981941 -490.122406 + vertex -209.937180 10.032334 -470.000000 + endloop + endfacet + facet normal 0.401696 0.915773 0.000000 + outer loop + vertex -204.643753 0.804103 -470.000000 + vertex -204.562073 0.768277 -530.000000 + vertex -205.283524 1.084736 -530.000000 + endloop + endfacet + facet normal 0.401700 0.915771 0.000000 + outer loop + vertex -205.283524 1.084736 -470.000000 + vertex -204.643753 0.804103 -470.000000 + vertex -205.283524 1.084736 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.476142 0.879368 + outer loop + vertex -209.730042 11.187792 -509.348694 + vertex -230.000000 11.187792 -509.348694 + vertex -230.000000 11.175900 -509.355133 + endloop + endfacet + facet normal 0.989590 -0.143917 0.000024 + outer loop + vertex -209.860123 10.570965 -530.000000 + vertex -209.855408 10.606782 -509.663116 + vertex -209.946274 9.981941 -509.877625 + endloop + endfacet + facet normal 0.989588 -0.143932 0.000024 + outer loop + vertex -209.947220 9.972140 -530.000000 + vertex -209.860123 10.570965 -530.000000 + vertex -209.946274 9.981941 -509.877625 + endloop + endfacet + facet normal 0.000000 -0.475938 0.879479 + outer loop + vertex -209.855408 10.606782 -509.663116 + vertex -230.000000 11.175900 -509.355133 + vertex -230.000000 10.606782 -509.663116 + endloop + endfacet + facet normal 0.000000 -0.475942 0.879476 + outer loop + vertex -209.855408 10.606782 -509.663116 + vertex -209.730042 11.187792 -509.348694 + vertex -230.000000 11.175900 -509.355133 + endloop + endfacet + facet normal 0.000000 -0.323938 -0.946078 + outer loop + vertex -209.946274 9.981941 -490.122406 + vertex -230.000000 9.981941 -490.122406 + vertex -230.000000 9.994597 -490.126740 + endloop + endfacet + facet normal 0.000035 -0.215706 -0.976458 + outer loop + vertex -209.969269 9.743214 -490.069672 + vertex -230.000000 9.734859 -490.068542 + vertex -230.000000 9.968742 -490.120209 + endloop + endfacet + facet normal 0.000035 -0.215701 -0.976459 + outer loop + vertex -209.946274 9.981941 -490.122406 + vertex -209.969269 9.743214 -490.069672 + vertex -230.000000 9.968742 -490.120209 + endloop + endfacet + facet normal 0.986346 -0.164684 0.000000 + outer loop + vertex -209.969269 9.743214 -490.069672 + vertex -209.959244 9.803257 -470.000000 + vertex -209.969269 9.743214 -470.000000 + endloop + endfacet + facet normal 0.546944 0.837169 0.000000 + outer loop + vertex -205.283524 1.084736 -470.000000 + vertex -205.283524 1.084736 -530.000000 + vertex -205.868393 1.466845 -530.000000 + endloop + endfacet + facet normal 0.546945 0.837168 0.000000 + outer loop + vertex -205.943054 1.515625 -470.000000 + vertex -205.283524 1.084736 -470.000000 + vertex -205.868393 1.466845 -530.000000 + endloop + endfacet + facet normal 0.995393 -0.095879 0.000000 + outer loop + vertex -209.947220 9.972140 -530.000000 + vertex -209.946274 9.981941 -509.877625 + vertex -209.969269 9.743214 -509.930359 + endloop + endfacet + facet normal 0.995394 -0.095871 0.000000 + outer loop + vertex -209.969269 9.743214 -530.000000 + vertex -209.947220 9.972140 -530.000000 + vertex -209.969269 9.743214 -509.930359 + endloop + endfacet + facet normal 0.000000 -0.324700 0.945817 + outer loop + vertex -209.946274 9.981941 -509.877625 + vertex -230.000000 10.594069 -509.667480 + vertex -230.000000 9.981941 -509.877625 + endloop + endfacet + facet normal 0.000000 -0.324699 0.945817 + outer loop + vertex -209.946274 9.981941 -509.877625 + vertex -209.855408 10.606782 -509.663116 + vertex -230.000000 10.594069 -509.667480 + endloop + endfacet + facet normal 0.000000 -0.324687 0.945821 + outer loop + vertex -209.855408 10.606782 -509.663116 + vertex -230.000000 10.606782 -509.663116 + vertex -230.000000 10.594069 -509.667480 + endloop + endfacet + facet normal 0.000000 -0.164214 -0.986425 + outer loop + vertex -209.946274 9.981941 -490.122406 + vertex -230.000000 9.968742 -490.120209 + vertex -230.000000 9.981941 -490.122406 + endloop + endfacet + facet normal 0.000000 -0.134406 -0.990926 + outer loop + vertex -209.993942 9.330317 -490.013672 + vertex -230.000000 9.330317 -490.013672 + vertex -230.000000 9.734859 -490.068542 + endloop + endfacet + facet normal 0.000000 -0.134396 -0.990928 + outer loop + vertex -209.969269 9.743214 -490.069672 + vertex -209.993942 9.330317 -490.013672 + vertex -230.000000 9.734859 -490.068542 + endloop + endfacet + facet normal 0.998219 -0.059652 0.000000 + outer loop + vertex -209.993942 9.330317 -490.013672 + vertex -209.969269 9.743214 -470.000000 + vertex -209.992935 9.347181 -470.000000 + endloop + endfacet + facet normal 0.998219 -0.059651 0.000000 + outer loop + vertex -209.993942 9.330317 -490.013672 + vertex -209.969269 9.743214 -490.069672 + vertex -209.969269 9.743214 -470.000000 + endloop + endfacet + facet normal 0.546945 0.837168 0.000000 + outer loop + vertex -205.943054 1.515625 -470.000000 + vertex -205.868393 1.466845 -530.000000 + vertex -206.527924 1.897735 -530.000000 + endloop + endfacet + facet normal 0.546944 0.837169 0.000000 + outer loop + vertex -206.527924 1.897735 -470.000000 + vertex -205.943054 1.515625 -470.000000 + vertex -206.527924 1.897735 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.215698 0.976460 + outer loop + vertex -209.969269 9.743214 -509.930359 + vertex -209.946274 9.981941 -509.877625 + vertex -230.000000 9.981941 -509.877625 + endloop + endfacet + facet normal 0.000000 -0.215693 0.976461 + outer loop + vertex -209.969269 9.743214 -509.930359 + vertex -230.000000 9.981941 -509.877625 + vertex -230.000000 9.748044 -509.929291 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex -209.969269 9.743214 -509.930359 + vertex -209.969269 9.682341 -530.000000 + vertex -209.969269 9.743214 -530.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -209.993942 9.330317 -490.013672 + vertex -230.000000 9.316967 -490.013672 + vertex -230.000000 9.330317 -490.013672 + endloop + endfacet + facet normal 0.999832 -0.018309 -0.000035 + outer loop + vertex -210.000015 8.998481 -490.000000 + vertex -209.992935 9.347181 -470.000000 + vertex -209.998764 9.028878 -470.000000 + endloop + endfacet + facet normal 0.999833 -0.018300 -0.000035 + outer loop + vertex -210.000015 8.998481 -490.000000 + vertex -209.993942 9.330317 -490.013672 + vertex -209.992935 9.347181 -470.000000 + endloop + endfacet + facet normal 0.677282 0.735724 0.000000 + outer loop + vertex -206.527924 1.897735 -470.000000 + vertex -206.527924 1.897735 -530.000000 + vertex -207.041916 2.370898 -530.000000 + endloop + endfacet + facet normal 0.677284 0.735722 0.000000 + outer loop + vertex -207.107529 2.431302 -470.000000 + vertex -206.527924 1.897735 -470.000000 + vertex -207.041916 2.370898 -530.000000 + endloop + endfacet + facet normal 0.000020 -0.134327 0.990937 + outer loop + vertex -209.993942 9.330317 -509.986328 + vertex -230.000000 9.748044 -509.929291 + vertex -230.000000 9.343486 -509.984131 + endloop + endfacet + facet normal 0.000020 -0.134326 0.990937 + outer loop + vertex -209.993942 9.330317 -509.986328 + vertex -209.969269 9.743214 -509.930359 + vertex -230.000000 9.748044 -509.929291 + endloop + endfacet + facet normal 0.998218 -0.059675 0.000181 + outer loop + vertex -209.969269 9.682341 -530.000000 + vertex -209.969269 9.743214 -509.930359 + vertex -209.993942 9.330317 -509.986328 + endloop + endfacet + facet normal 0.998218 -0.059677 0.000181 + outer loop + vertex -209.992935 9.286471 -530.000000 + vertex -209.969269 9.682341 -530.000000 + vertex -209.993942 9.330317 -509.986328 + endloop + endfacet + facet normal 0.000027 -0.041171 -0.999152 + outer loop + vertex -210.000015 8.998481 -490.000000 + vertex -230.000000 8.991838 -490.000275 + vertex -230.000000 9.316967 -490.013672 + endloop + endfacet + facet normal 0.000027 -0.041166 -0.999152 + outer loop + vertex -209.993942 9.330317 -490.013672 + vertex -210.000015 8.998481 -490.000000 + vertex -230.000000 9.316967 -490.013672 + endloop + endfacet + facet normal 0.999829 0.018481 -0.000091 + outer loop + vertex -210.000015 8.998481 -490.000000 + vertex -209.998764 9.028878 -470.000000 + vertex -209.992935 8.713528 -470.000000 + endloop + endfacet + facet normal 0.999829 0.018471 -0.000091 + outer loop + vertex -209.993942 8.669682 -490.013672 + vertex -210.000015 8.998481 -490.000000 + vertex -209.992935 8.713528 -470.000000 + endloop + endfacet + facet normal 0.677284 0.735722 0.000000 + outer loop + vertex -207.107529 2.431302 -470.000000 + vertex -207.041916 2.370898 -530.000000 + vertex -207.621521 2.904465 -530.000000 + endloop + endfacet + facet normal 0.677282 0.735724 0.000000 + outer loop + vertex -207.621521 2.904465 -470.000000 + vertex -207.107529 2.431302 -470.000000 + vertex -207.621521 2.904465 -530.000000 + endloop + endfacet + facet normal 0.000000 -0.164584 0.986363 + outer loop + vertex -209.993942 9.330317 -509.986328 + vertex -230.000000 9.343486 -509.984131 + vertex -230.000000 9.330317 -509.986328 + endloop + endfacet + facet normal 0.999829 -0.018471 0.000091 + outer loop + vertex -209.992935 9.286471 -530.000000 + vertex -209.993942 9.330317 -509.986328 + vertex -210.000015 9.001518 -510.000000 + endloop + endfacet + facet normal 0.999829 -0.018481 0.000091 + outer loop + vertex -209.998764 8.971121 -530.000000 + vertex -209.992935 9.286471 -530.000000 + vertex -210.000015 9.001518 -510.000000 + endloop + endfacet + facet normal 0.000000 0.041545 -0.999137 + outer loop + vertex -210.000015 8.998481 -490.000000 + vertex -209.993942 8.669682 -490.013672 + vertex -230.000000 8.669682 -490.013672 + endloop + endfacet + facet normal 0.000000 0.041550 -0.999136 + outer loop + vertex -210.000015 8.998481 -490.000000 + vertex -230.000000 8.669682 -490.013672 + vertex -230.000000 8.991838 -490.000275 + endloop + endfacet + facet normal 0.998218 0.059677 -0.000181 + outer loop + vertex -209.993942 8.669682 -490.013672 + vertex -209.992935 8.713528 -470.000000 + vertex -209.969269 8.317658 -470.000000 + endloop + endfacet + facet normal 0.998218 0.059675 -0.000181 + outer loop + vertex -209.969269 8.256785 -490.069672 + vertex -209.993942 8.669682 -490.013672 + vertex -209.969269 8.317658 -470.000000 + endloop + endfacet + facet normal 0.789137 0.614217 0.000000 + outer loop + vertex -208.050629 3.455776 -530.000000 + vertex -208.105408 3.526156 -470.000000 + vertex -207.621521 2.904465 -470.000000 + endloop + endfacet + facet normal 0.789137 0.614218 0.000000 + outer loop + vertex -207.621521 2.904465 -530.000000 + vertex -208.050629 3.455776 -530.000000 + vertex -207.621521 2.904465 -470.000000 + endloop + endfacet + facet normal 0.000000 -0.041545 0.999137 + outer loop + vertex -210.000015 9.001518 -510.000000 + vertex -209.993942 9.330317 -509.986328 + vertex -230.000000 9.330317 -509.986328 + endloop + endfacet + facet normal 0.000000 -0.041550 0.999136 + outer loop + vertex -210.000015 9.001518 -510.000000 + vertex -230.000000 9.330317 -509.986328 + vertex -230.000000 9.008161 -509.999725 + endloop + endfacet + facet normal 0.999833 0.018300 0.000035 + outer loop + vertex -209.992935 8.652818 -530.000000 + vertex -210.000015 9.001518 -510.000000 + vertex -209.993942 8.669682 -509.986328 + endloop + endfacet + facet normal 0.999832 0.018309 0.000035 + outer loop + vertex -209.992935 8.652818 -530.000000 + vertex -209.998764 8.971121 -530.000000 + vertex -210.000015 9.001518 -510.000000 + endloop + endfacet + facet normal 0.000000 0.164584 -0.986363 + outer loop + vertex -209.993942 8.669682 -490.013672 + vertex -230.000000 8.656513 -490.015869 + vertex -230.000000 8.669682 -490.013672 + endloop + endfacet + facet normal 0.000020 0.134400 -0.990927 + outer loop + vertex -209.993942 8.669682 -490.013672 + vertex -230.000000 8.251955 -490.070740 + vertex -230.000000 8.656513 -490.015869 + endloop + endfacet + facet normal 0.000020 0.134397 -0.990927 + outer loop + vertex -209.993942 8.669682 -490.013672 + vertex -209.969269 8.256785 -490.069672 + vertex -230.000000 8.251955 -490.070740 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex -209.969269 8.256785 -490.069672 + vertex -209.969269 8.317658 -470.000000 + vertex -209.969269 8.256785 -470.000000 + endloop + endfacet + facet normal 0.789137 0.614218 0.000000 + outer loop + vertex -208.534515 4.077466 -530.000000 + vertex -208.534515 4.077466 -470.000000 + vertex -208.105408 3.526156 -470.000000 + endloop + endfacet + facet normal 0.789137 0.614217 0.000000 + outer loop + vertex -208.050629 3.455776 -530.000000 + vertex -208.534515 4.077466 -530.000000 + vertex -208.105408 3.526156 -470.000000 + endloop + endfacet + facet normal 0.000027 0.041171 0.999152 + outer loop + vertex -210.000015 9.001518 -510.000000 + vertex -230.000000 9.008161 -509.999725 + vertex -230.000000 8.683032 -509.986328 + endloop + endfacet + facet normal 0.000027 0.041166 0.999152 + outer loop + vertex -209.993942 8.669682 -509.986328 + vertex -210.000015 9.001518 -510.000000 + vertex -230.000000 8.683032 -509.986328 + endloop + endfacet + facet normal 0.998219 0.059651 0.000000 + outer loop + vertex -209.969269 8.256785 -530.000000 + vertex -209.993942 8.669682 -509.986328 + vertex -209.969269 8.256785 -509.930359 + endloop + endfacet + facet normal 0.998219 0.059652 0.000000 + outer loop + vertex -209.969269 8.256785 -530.000000 + vertex -209.992935 8.652818 -530.000000 + vertex -209.993942 8.669682 -509.986328 + endloop + endfacet + facet normal 0.000000 0.215698 -0.976460 + outer loop + vertex -209.969269 8.256785 -490.069672 + vertex -209.946274 8.018058 -490.122406 + vertex -230.000000 8.018058 -490.122406 + endloop + endfacet + facet normal 0.000000 0.215693 -0.976461 + outer loop + vertex -209.969269 8.256785 -490.069672 + vertex -230.000000 8.018058 -490.122406 + vertex -230.000000 8.251955 -490.070740 + endloop + endfacet + facet normal 0.995394 0.095871 0.000000 + outer loop + vertex -209.969269 8.256785 -490.069672 + vertex -209.969269 8.256785 -470.000000 + vertex -209.947220 8.027859 -470.000000 + endloop + endfacet + facet normal 0.995393 0.095879 0.000000 + outer loop + vertex -209.946274 8.018058 -490.122406 + vertex -209.969269 8.256785 -490.069672 + vertex -209.947220 8.027859 -470.000000 + endloop + endfacet + facet normal 0.868007 0.496552 0.000000 + outer loop + vertex -209.062256 5.000000 -494.000000 + vertex -209.036621 4.955180 -470.000000 + vertex -208.534515 4.077466 -470.000000 + endloop + endfacet + facet normal 0.868011 0.496545 0.000000 + outer loop + vertex -208.534515 4.077466 -530.000000 + vertex -209.024704 4.934365 -530.000000 + vertex -209.062256 5.000000 -494.000000 + endloop + endfacet + facet normal 0.868009 0.496549 0.000000 + outer loop + vertex -208.534515 4.077466 -470.000000 + vertex -208.534515 4.077466 -530.000000 + vertex -209.062256 5.000000 -494.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -209.993942 8.669682 -509.986328 + vertex -230.000000 8.683032 -509.986328 + vertex -230.000000 8.669682 -509.986328 + endloop + endfacet + facet normal 0.000000 0.134332 0.990936 + outer loop + vertex -209.993942 8.669682 -509.986328 + vertex -230.000000 8.669682 -509.986328 + vertex -230.000000 8.265140 -509.931488 + endloop + endfacet + facet normal 0.000000 0.134324 0.990937 + outer loop + vertex -209.969269 8.256785 -509.930359 + vertex -209.993942 8.669682 -509.986328 + vertex -230.000000 8.265140 -509.931488 + endloop + endfacet + facet normal 0.986346 0.164684 0.000000 + outer loop + vertex -209.959244 8.196742 -530.000000 + vertex -209.969269 8.256785 -530.000000 + vertex -209.969269 8.256785 -509.930359 + endloop + endfacet + facet normal 0.000000 0.324658 -0.945832 + outer loop + vertex -209.946274 8.018058 -490.122406 + vertex -230.000000 7.405930 -490.332520 + vertex -230.000000 8.018058 -490.122406 + endloop + endfacet + facet normal 0.000000 0.324658 -0.945831 + outer loop + vertex -209.946274 8.018058 -490.122406 + vertex -209.855408 7.393218 -490.336884 + vertex -230.000000 7.405930 -490.332520 + endloop + endfacet + facet normal 0.989588 0.143932 -0.000024 + outer loop + vertex -209.946274 8.018058 -490.122406 + vertex -209.947220 8.027859 -470.000000 + vertex -209.860123 7.429034 -470.000000 + endloop + endfacet + facet normal 0.989590 0.143917 -0.000024 + outer loop + vertex -209.855408 7.393218 -490.336884 + vertex -209.946274 8.018058 -490.122406 + vertex -209.860123 7.429034 -470.000000 + endloop + endfacet + facet normal 0.879519 0.475863 -0.000051 + outer loop + vertex -209.062256 5.000000 -494.000000 + vertex -209.070984 5.018692 -470.000000 + vertex -209.036621 4.955180 -470.000000 + endloop + endfacet + facet normal 0.867837 0.496850 -0.000001 + outer loop + vertex -209.024704 4.934365 -530.000000 + vertex -209.036621 4.955180 -530.000000 + vertex -209.062256 5.000000 -505.999969 + endloop + endfacet + facet normal 0.867979 0.496601 0.000000 + outer loop + vertex -209.062256 5.000000 -494.000000 + vertex -209.024704 4.934365 -530.000000 + vertex -209.062256 5.000000 -505.999969 + endloop + endfacet + facet normal 0.000035 0.215706 0.976458 + outer loop + vertex -209.969269 8.256785 -509.930359 + vertex -230.000000 8.265140 -509.931488 + vertex -230.000000 8.031257 -509.879822 + endloop + endfacet + facet normal 0.000035 0.215701 0.976459 + outer loop + vertex -209.946274 8.018058 -509.877625 + vertex -209.969269 8.256785 -509.930359 + vertex -230.000000 8.031257 -509.879822 + endloop + endfacet + facet normal 0.995389 0.095925 0.000210 + outer loop + vertex -209.937180 7.967665 -530.000000 + vertex -209.969269 8.256785 -509.930359 + vertex -209.946274 8.018058 -509.877625 + endloop + endfacet + facet normal 0.995393 0.095874 0.000210 + outer loop + vertex -209.937180 7.967665 -530.000000 + vertex -209.959244 8.196742 -530.000000 + vertex -209.969269 8.256785 -509.930359 + endloop + endfacet + facet normal 0.000000 0.324687 -0.945821 + outer loop + vertex -209.855408 7.393218 -490.336884 + vertex -230.000000 7.393218 -490.336884 + vertex -230.000000 7.405930 -490.332520 + endloop + endfacet + facet normal 0.977491 0.210978 -0.000145 + outer loop + vertex -209.855408 7.393218 -490.336884 + vertex -209.860123 7.429034 -470.000000 + vertex -209.740112 6.873009 -470.000000 + endloop + endfacet + facet normal 0.977488 0.210993 -0.000145 + outer loop + vertex -209.730042 6.812207 -490.651337 + vertex -209.855408 7.393218 -490.336884 + vertex -209.740112 6.873009 -470.000000 + endloop + endfacet + facet normal 0.895750 0.444559 -0.000020 + outer loop + vertex -209.069092 5.013789 -493.668152 + vertex -209.077377 5.031574 -470.000000 + vertex -209.070984 5.018692 -470.000000 + endloop + endfacet + facet normal 0.895756 0.444545 -0.000020 + outer loop + vertex -209.070984 5.018692 -470.000000 + vertex -209.062256 5.000000 -494.000000 + vertex -209.069092 5.013789 -493.668152 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex -230.000000 5.000000 -505.746429 + vertex -230.000000 5.000000 -494.000000 + vertex -209.062256 5.000000 -494.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex -230.000000 5.000000 -505.746429 + vertex -209.062256 5.000000 -494.000000 + vertex -209.062256 5.000000 -505.999969 + endloop + endfacet + facet normal 0.895196 0.445673 0.000124 + outer loop + vertex -209.036621 4.955180 -530.000000 + vertex -209.043411 4.968819 -530.000000 + vertex -209.069046 5.013708 -506.330841 + endloop + endfacet + facet normal 0.894912 0.446242 0.000123 + outer loop + vertex -209.062256 5.000000 -505.999969 + vertex -209.036621 4.955180 -530.000000 + vertex -209.069046 5.013708 -506.330841 + endloop + endfacet + facet normal 0.000000 0.164214 0.986425 + outer loop + vertex -209.946274 8.018058 -509.877625 + vertex -230.000000 8.031257 -509.879822 + vertex -230.000000 8.018058 -509.877625 + endloop + endfacet + facet normal 0.989587 0.143939 0.000087 + outer loop + vertex -209.849976 7.368225 -530.000000 + vertex -209.946274 8.018058 -509.877625 + vertex -209.855408 7.393218 -509.663116 + endloop + endfacet + facet normal 0.989583 0.143960 0.000087 + outer loop + vertex -209.849976 7.368225 -530.000000 + vertex -209.937180 7.967665 -530.000000 + vertex -209.946274 8.018058 -509.877625 + endloop + endfacet + facet normal 0.000000 0.475975 -0.879459 + outer loop + vertex -209.855408 7.393218 -490.336884 + vertex -230.000000 6.824100 -490.644897 + vertex -230.000000 7.393218 -490.336884 + endloop + endfacet + facet normal 0.000000 0.475978 -0.879457 + outer loop + vertex -209.855408 7.393218 -490.336884 + vertex -209.730042 6.812207 -490.651337 + vertex -230.000000 6.824100 -490.644897 + endloop + endfacet + facet normal 0.962094 0.272718 -0.000334 + outer loop + vertex -209.730042 6.812207 -490.651337 + vertex -209.740112 6.873009 -470.000000 + vertex -209.734314 6.852553 -470.000000 + endloop + endfacet + facet normal 0.962137 0.272565 -0.000333 + outer loop + vertex -209.723984 6.790803 -490.667999 + vertex -209.730042 6.812207 -490.651337 + vertex -209.734314 6.852553 -470.000000 + endloop + endfacet + facet normal 0.000000 0.999138 -0.041519 + outer loop + vertex -230.000000 5.000000 -494.000000 + vertex -230.000000 5.013498 -493.675171 + vertex -209.069092 5.013789 -493.668152 + endloop + endfacet + facet normal 0.000000 0.999138 -0.041518 + outer loop + vertex -230.000000 5.000000 -494.000000 + vertex -209.069092 5.013789 -493.668152 + vertex -209.062256 5.000000 -494.000000 + endloop + endfacet + facet normal 0.897659 0.440691 -0.000017 + outer loop + vertex -209.089096 5.054554 -493.341614 + vertex -209.096329 5.070177 -470.000000 + vertex -209.077377 5.031574 -470.000000 + endloop + endfacet + facet normal 0.897682 0.440644 -0.000017 + outer loop + vertex -209.077377 5.031574 -470.000000 + vertex -209.069092 5.013789 -493.668152 + vertex -209.089096 5.054554 -493.341614 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex -230.000000 5.000000 -505.999969 + vertex -230.000000 5.000000 -505.746429 + vertex -209.062256 5.000000 -505.999969 + endloop + endfacet + facet normal 0.000000 0.999143 0.041395 + outer loop + vertex -230.000000 5.000000 -505.999969 + vertex -209.062256 5.000000 -505.999969 + vertex -209.069046 5.013708 -506.330841 + endloop + endfacet + facet normal 0.000000 0.999143 0.041395 + outer loop + vertex -230.000000 5.013418 -506.323853 + vertex -230.000000 5.000000 -505.999969 + vertex -209.069046 5.013708 -506.330841 + endloop + endfacet + facet normal 0.897255 0.441512 0.000134 + outer loop + vertex -209.043411 4.968819 -530.000000 + vertex -209.062851 5.008325 -530.000000 + vertex -209.089096 5.054554 -506.658386 + endloop + endfacet + facet normal 0.897258 0.441506 0.000134 + outer loop + vertex -209.069046 5.013708 -506.330841 + vertex -209.043411 4.968819 -530.000000 + vertex -209.089096 5.054554 -506.658386 + endloop + endfacet + facet normal 0.000000 0.323938 0.946078 + outer loop + vertex -209.946274 8.018058 -509.877625 + vertex -230.000000 8.018058 -509.877625 + vertex -230.000000 8.005402 -509.873291 + endloop + endfacet + facet normal 0.977241 0.212134 0.000000 + outer loop + vertex -209.729294 6.812279 -530.000000 + vertex -209.855408 7.393218 -509.663116 + vertex -209.729507 6.813230 -509.346771 + endloop + endfacet + facet normal 0.977241 0.212134 0.000000 + outer loop + vertex -209.729294 6.812279 -530.000000 + vertex -209.849976 7.368225 -530.000000 + vertex -209.855408 7.393218 -509.663116 + endloop + endfacet + facet normal -0.000001 0.324715 0.945812 + outer loop + vertex -209.946274 8.018058 -509.877625 + vertex -230.000000 8.005402 -509.873291 + vertex -230.000000 7.393218 -509.663116 + endloop + endfacet + facet normal 0.000000 0.324700 0.945817 + outer loop + vertex -209.855408 7.393218 -509.663116 + vertex -209.946274 8.018058 -509.877625 + vertex -230.000000 7.393218 -509.663116 + endloop + endfacet + facet normal 0.000000 0.476128 -0.879376 + outer loop + vertex -209.730042 6.812207 -490.651337 + vertex -230.000000 6.812207 -490.651337 + vertex -230.000000 6.824100 -490.644897 + endloop + endfacet + facet normal 0.000000 0.614417 -0.788981 + outer loop + vertex -209.730042 6.812207 -490.651337 + vertex -230.000000 6.791241 -490.667664 + vertex -230.000000 6.812207 -490.651337 + endloop + endfacet + facet normal 0.000000 0.614290 -0.789080 + outer loop + vertex -209.730042 6.812207 -490.651337 + vertex -209.723984 6.790803 -490.667999 + vertex -230.000000 6.791241 -490.667664 + endloop + endfacet + facet normal 0.986376 0.164504 0.000002 + outer loop + vertex -209.723984 6.790803 -490.667999 + vertex -209.734314 6.852553 -470.000000 + vertex -209.724014 6.790796 -470.000000 + endloop + endfacet + facet normal 0.000014 0.996588 -0.082537 + outer loop + vertex -230.000000 5.013498 -493.675171 + vertex -230.000000 5.014650 -493.661255 + vertex -209.069092 5.013789 -493.668152 + endloop + endfacet + facet normal 0.000000 0.992297 -0.123879 + outer loop + vertex -230.000000 5.014650 -493.661255 + vertex -230.000000 5.054554 -493.341614 + vertex -209.089096 5.054554 -493.341614 + endloop + endfacet + facet normal 0.000000 0.992297 -0.123879 + outer loop + vertex -230.000000 5.014650 -493.661255 + vertex -209.089096 5.054554 -493.341614 + vertex -209.069092 5.013789 -493.668152 + endloop + endfacet + facet normal 0.900589 0.434671 -0.000012 + outer loop + vertex -209.121750 5.122224 -493.018738 + vertex -209.127365 5.134480 -470.000000 + vertex -209.096329 5.070177 -470.000000 + endloop + endfacet + facet normal 0.900603 0.434642 -0.000012 + outer loop + vertex -209.096329 5.070177 -470.000000 + vertex -209.089096 5.054554 -493.341614 + vertex -209.121750 5.122224 -493.018738 + endloop + endfacet + facet normal 0.000014 0.996591 0.082503 + outer loop + vertex -230.000000 5.014570 -506.337769 + vertex -230.000000 5.013418 -506.323853 + vertex -209.069046 5.013708 -506.330841 + endloop + endfacet + facet normal 0.000000 0.992314 0.123747 + outer loop + vertex -230.000000 5.014570 -506.337769 + vertex -209.069046 5.013708 -506.330841 + vertex -209.089096 5.054554 -506.658386 + endloop + endfacet + facet normal 0.000000 0.992313 0.123751 + outer loop + vertex -230.000000 5.054554 -506.658386 + vertex -230.000000 5.014570 -506.337769 + vertex -209.089096 5.054554 -506.658386 + endloop + endfacet + facet normal 0.900351 0.435165 0.000150 + outer loop + vertex -209.062851 5.008325 -530.000000 + vertex -209.094666 5.074149 -530.000000 + vertex -209.122101 5.122957 -506.984100 + endloop + endfacet + facet normal 0.900359 0.435148 0.000151 + outer loop + vertex -209.089096 5.054554 -506.658386 + vertex -209.062851 5.008325 -530.000000 + vertex -209.122101 5.122957 -506.984100 + endloop + endfacet + facet normal 0.977310 0.211814 0.000000 + outer loop + vertex -209.724609 6.790630 -530.000000 + vertex -209.729507 6.813230 -509.346771 + vertex -209.724609 6.790630 -509.334442 + endloop + endfacet + facet normal 0.977380 0.211493 0.000000 + outer loop + vertex -209.724609 6.790630 -530.000000 + vertex -209.729294 6.812279 -530.000000 + vertex -209.729507 6.813230 -509.346771 + endloop + endfacet + facet normal -0.000002 0.478835 0.877905 + outer loop + vertex -209.855408 7.393218 -509.663116 + vertex -230.000000 7.381397 -509.656708 + vertex -230.000000 6.813209 -509.346802 + endloop + endfacet + facet normal -0.000002 0.478838 0.877903 + outer loop + vertex -209.729507 6.813230 -509.346771 + vertex -209.855408 7.393218 -509.663116 + vertex -230.000000 6.813209 -509.346802 + endloop + endfacet + facet normal 0.000000 0.476614 0.879112 + outer loop + vertex -209.855408 7.393218 -509.663116 + vertex -230.000000 7.393218 -509.663116 + vertex -230.000000 7.381397 -509.656708 + endloop + endfacet + facet normal 0.000000 0.613867 -0.789409 + outer loop + vertex -209.723984 6.790803 -490.667999 + vertex -230.000000 6.780567 -490.675964 + vertex -230.000000 6.791241 -490.667664 + endloop + endfacet + facet normal 0.962247 0.272179 0.000002 + outer loop + vertex -209.723984 6.790803 -490.667999 + vertex -209.724014 6.790796 -470.000000 + vertex -209.588669 6.312304 -470.000000 + endloop + endfacet + facet normal 0.962250 0.272168 0.000001 + outer loop + vertex -209.582581 6.290874 -491.057098 + vertex -209.723984 6.790803 -490.667999 + vertex -209.588669 6.312304 -470.000000 + endloop + endfacet + facet normal 0.000000 0.978735 -0.205128 + outer loop + vertex -230.000000 5.054554 -493.341614 + vertex -230.000000 5.120798 -493.025543 + vertex -209.121750 5.122224 -493.018738 + endloop + endfacet + facet normal 0.000000 0.978735 -0.205127 + outer loop + vertex -230.000000 5.054554 -493.341614 + vertex -209.121750 5.122224 -493.018738 + vertex -209.089096 5.054554 -493.341614 + endloop + endfacet + facet normal 0.904900 0.425625 -0.000006 + outer loop + vertex -209.166199 5.216731 -492.701202 + vertex -209.169693 5.224472 -470.000000 + vertex -209.127365 5.134480 -470.000000 + endloop + endfacet + facet normal 0.904903 0.425618 -0.000006 + outer loop + vertex -209.127365 5.134480 -470.000000 + vertex -209.121750 5.122224 -493.018738 + vertex -209.166199 5.216731 -492.701202 + endloop + endfacet + facet normal 0.000000 0.978652 0.205524 + outer loop + vertex -230.000000 5.054554 -506.658386 + vertex -209.089096 5.054554 -506.658386 + vertex -209.122101 5.122957 -506.984100 + endloop + endfacet + facet normal 0.000000 0.978652 0.205525 + outer loop + vertex -230.000000 5.121515 -506.977234 + vertex -230.000000 5.054554 -506.658386 + vertex -209.122101 5.122957 -506.984100 + endloop + endfacet + facet normal 0.904666 0.426122 0.000174 + outer loop + vertex -209.094666 5.074149 -530.000000 + vertex -209.137100 5.164239 -530.000000 + vertex -209.166199 5.216731 -507.298828 + endloop + endfacet + facet normal 0.904707 0.426033 0.000175 + outer loop + vertex -209.122101 5.122957 -506.984100 + vertex -209.094666 5.074149 -530.000000 + vertex -209.166199 5.216731 -507.298828 + endloop + endfacet + facet normal -0.000002 0.478229 0.878235 + outer loop + vertex -209.729507 6.813230 -509.346771 + vertex -230.000000 6.813209 -509.346802 + vertex -230.000000 6.791072 -509.334747 + endloop + endfacet + facet normal -0.000003 0.478911 0.877863 + outer loop + vertex -209.724609 6.790630 -509.334442 + vertex -209.729507 6.813230 -509.346771 + vertex -230.000000 6.791072 -509.334747 + endloop + endfacet + facet normal 0.945831 0.324658 0.000000 + outer loop + vertex -209.704285 6.731418 -530.000000 + vertex -209.724609 6.790630 -530.000000 + vertex -209.724609 6.790630 -509.334442 + endloop + endfacet + facet normal 0.000000 0.614203 -0.789148 + outer loop + vertex -209.723984 6.790803 -490.667999 + vertex -230.000000 6.290874 -491.057098 + vertex -230.000000 6.780567 -490.675964 + endloop + endfacet + facet normal 0.000000 0.614201 -0.789149 + outer loop + vertex -209.723984 6.790803 -490.667999 + vertex -209.582581 6.290874 -491.057098 + vertex -230.000000 6.290874 -491.057098 + endloop + endfacet + facet normal 0.945358 0.326033 -0.000058 + outer loop + vertex -209.582581 6.290874 -491.057098 + vertex -209.588669 6.312304 -470.000000 + vertex -209.441284 5.884950 -470.000000 + endloop + endfacet + facet normal 0.945358 0.326035 -0.000058 + outer loop + vertex -209.428299 5.843437 -491.543152 + vertex -209.582581 6.290874 -491.057098 + vertex -209.441284 5.884950 -470.000000 + endloop + endfacet + facet normal 0.000014 0.969380 -0.245566 + outer loop + vertex -230.000000 5.120798 -493.025543 + vertex -230.000000 5.124215 -493.012054 + vertex -209.121750 5.122224 -493.018738 + endloop + endfacet + facet normal 0.000000 0.958452 -0.285254 + outer loop + vertex -230.000000 5.124215 -493.012054 + vertex -230.000000 5.216731 -492.701202 + vertex -209.166199 5.216731 -492.701202 + endloop + endfacet + facet normal 0.000000 0.958450 -0.285260 + outer loop + vertex -230.000000 5.124215 -493.012054 + vertex -209.166199 5.216731 -492.701202 + vertex -209.121750 5.122224 -493.018738 + endloop + endfacet + facet normal 0.914017 0.405675 0.000002 + outer loop + vertex -209.240967 5.385180 -492.317169 + vertex -209.241013 5.385160 -470.000000 + vertex -209.169693 5.224472 -470.000000 + endloop + endfacet + facet normal 0.914011 0.405688 0.000002 + outer loop + vertex -209.169693 5.224472 -470.000000 + vertex -209.166199 5.216731 -492.701202 + vertex -209.240967 5.385180 -492.317169 + endloop + endfacet + facet normal 0.000014 0.969372 0.245598 + outer loop + vertex -230.000000 5.124933 -506.990723 + vertex -230.000000 5.121515 -506.977234 + vertex -209.122101 5.122957 -506.984100 + endloop + endfacet + facet normal 0.000000 0.958365 0.285547 + outer loop + vertex -230.000000 5.124933 -506.990723 + vertex -209.122101 5.122957 -506.984100 + vertex -209.166199 5.216731 -507.298828 + endloop + endfacet + facet normal 0.000000 0.958367 0.285539 + outer loop + vertex -230.000000 5.216731 -507.298828 + vertex -230.000000 5.124933 -506.990723 + vertex -209.166199 5.216731 -507.298828 + endloop + endfacet + facet normal 0.913835 0.406086 0.000233 + outer loop + vertex -209.137100 5.164239 -530.000000 + vertex -209.208939 5.325900 -530.000000 + vertex -209.240967 5.385180 -507.682800 + endloop + endfacet + facet normal 0.913813 0.406135 0.000232 + outer loop + vertex -209.166199 5.216731 -507.298828 + vertex -209.137100 5.164239 -530.000000 + vertex -209.240967 5.385180 -507.682800 + endloop + endfacet + facet normal 0.000002 0.616742 0.787165 + outer loop + vertex -209.724609 6.790630 -509.334442 + vertex -230.000000 6.791072 -509.334747 + vertex -230.000000 6.301621 -508.951263 + endloop + endfacet + facet normal 0.000002 0.616725 0.787179 + outer loop + vertex -209.582581 6.290874 -508.942902 + vertex -209.724609 6.790630 -509.334442 + vertex -230.000000 6.301621 -508.951263 + endloop + endfacet + facet normal 0.961875 0.273488 0.000162 + outer loop + vertex -209.567978 6.252017 -530.000000 + vertex -209.724609 6.790630 -509.334442 + vertex -209.582581 6.290874 -508.942902 + endloop + endfacet + facet normal 0.961875 0.273488 0.000162 + outer loop + vertex -209.567978 6.252017 -530.000000 + vertex -209.704285 6.731418 -530.000000 + vertex -209.724609 6.790630 -509.334442 + endloop + endfacet + facet normal 0.000000 0.735724 -0.677281 + outer loop + vertex -230.000000 5.852729 -491.533051 + vertex -230.000000 6.290874 -491.057098 + vertex -209.582581 6.290874 -491.057098 + endloop + endfacet + facet normal 0.000000 0.735729 -0.677276 + outer loop + vertex -230.000000 5.852729 -491.533051 + vertex -209.582581 6.290874 -491.057098 + vertex -209.428299 5.843437 -491.543152 + endloop + endfacet + facet normal 0.928606 0.371068 -0.000155 + outer loop + vertex -209.428299 5.843437 -491.543152 + vertex -209.441284 5.884950 -470.000000 + vertex -209.303787 5.540861 -470.000000 + endloop + endfacet + facet normal 0.928599 0.371084 -0.000155 + outer loop + vertex -209.303787 5.540861 -470.000000 + vertex -209.283997 5.482105 -492.096222 + vertex -209.428299 5.843437 -491.543152 + endloop + endfacet + facet normal 0.000000 0.915772 -0.401698 + outer loop + vertex -230.000000 5.216731 -492.701202 + vertex -230.000000 5.381650 -492.325226 + vertex -209.240967 5.385180 -492.317169 + endloop + endfacet + facet normal 0.000000 0.915776 -0.401689 + outer loop + vertex -230.000000 5.216731 -492.701202 + vertex -209.240967 5.385180 -492.317169 + vertex -209.166199 5.216731 -492.701202 + endloop + endfacet + facet normal 0.945806 0.324732 0.000002 + outer loop + vertex -209.240967 5.385180 -492.317169 + vertex -209.262894 5.448890 -470.000000 + vertex -209.241013 5.385160 -470.000000 + endloop + endfacet + facet normal 0.000000 0.915829 0.401568 + outer loop + vertex -230.000000 5.222311 -507.311554 + vertex -230.000000 5.216731 -507.298828 + vertex -209.166199 5.216731 -507.298828 + endloop + endfacet + facet normal 0.000000 0.915753 0.401743 + outer loop + vertex -230.000000 5.222311 -507.311554 + vertex -209.166199 5.216731 -507.298828 + vertex -209.240967 5.385180 -507.682800 + endloop + endfacet + facet normal 0.000000 0.915754 0.401740 + outer loop + vertex -230.000000 5.387211 -507.687439 + vertex -230.000000 5.222311 -507.311554 + vertex -209.240967 5.385180 -507.682800 + endloop + endfacet + facet normal 0.879448 0.475995 -0.000002 + outer loop + vertex -209.208939 5.325900 -530.000000 + vertex -209.241013 5.385160 -530.000000 + vertex -209.240967 5.385180 -507.682800 + endloop + endfacet + facet normal 0.000000 0.614064 0.789256 + outer loop + vertex -209.582581 6.290874 -508.942902 + vertex -230.000000 6.301621 -508.951263 + vertex -230.000000 6.290874 -508.942902 + endloop + endfacet + facet normal 0.945359 0.326030 0.000054 + outer loop + vertex -209.420135 5.823334 -530.000000 + vertex -209.582581 6.290874 -508.942902 + vertex -209.428299 5.843437 -508.456818 + endloop + endfacet + facet normal 0.945359 0.326031 0.000054 + outer loop + vertex -209.420135 5.823334 -530.000000 + vertex -209.567978 6.252017 -530.000000 + vertex -209.582581 6.290874 -508.942902 + endloop + endfacet + facet normal 0.000000 0.735970 -0.677014 + outer loop + vertex -230.000000 5.843437 -491.543152 + vertex -230.000000 5.852729 -491.533051 + vertex -209.428299 5.843437 -491.543152 + endloop + endfacet + facet normal 0.000000 0.837170 -0.546943 + outer loop + vertex -230.000000 5.489660 -492.084656 + vertex -230.000000 5.843437 -491.543152 + vertex -209.428299 5.843437 -491.543152 + endloop + endfacet + facet normal 0.000000 0.837171 -0.546942 + outer loop + vertex -230.000000 5.489660 -492.084656 + vertex -209.428299 5.843437 -491.543152 + vertex -209.283997 5.482105 -492.096222 + endloop + endfacet + facet normal 0.913746 0.406286 -0.000262 + outer loop + vertex -209.283997 5.482105 -492.096222 + vertex -209.303787 5.540861 -470.000000 + vertex -209.262894 5.448890 -470.000000 + endloop + endfacet + facet normal 0.913757 0.406260 -0.000262 + outer loop + vertex -209.262894 5.448890 -470.000000 + vertex -209.240967 5.385180 -492.317169 + vertex -209.283997 5.482105 -492.096222 + endloop + endfacet + facet normal 0.000000 0.915993 -0.401194 + outer loop + vertex -230.000000 5.381650 -492.325226 + vertex -230.000000 5.387211 -492.312531 + vertex -209.240967 5.385180 -492.317169 + endloop + endfacet + facet normal 0.000000 0.915801 0.401631 + outer loop + vertex -230.000000 5.387211 -507.687439 + vertex -209.240967 5.385180 -507.682800 + vertex -209.283997 5.482105 -507.903809 + endloop + endfacet + facet normal 0.000000 0.915796 0.401644 + outer loop + vertex -230.000000 5.482105 -507.903809 + vertex -230.000000 5.387211 -507.687439 + vertex -209.283997 5.482105 -507.903809 + endloop + endfacet + facet normal 0.914001 0.405712 -0.000002 + outer loop + vertex -209.241013 5.385160 -530.000000 + vertex -209.282104 5.477733 -530.000000 + vertex -209.283997 5.482105 -507.903809 + endloop + endfacet + facet normal 0.913981 0.405757 -0.000002 + outer loop + vertex -209.240967 5.385180 -507.682800 + vertex -209.241013 5.385160 -530.000000 + vertex -209.283997 5.482105 -507.903809 + endloop + endfacet + facet normal 0.000000 0.735383 0.677651 + outer loop + vertex -230.000000 6.290874 -508.942902 + vertex -230.000000 6.281650 -508.932892 + vertex -209.582581 6.290874 -508.942902 + endloop + endfacet + facet normal 0.928670 0.370906 0.000006 + outer loop + vertex -209.282104 5.477733 -530.000000 + vertex -209.420135 5.823334 -530.000000 + vertex -209.428299 5.843437 -508.456818 + endloop + endfacet + facet normal 0.928678 0.370888 0.000006 + outer loop + vertex -209.283997 5.482105 -507.903809 + vertex -209.282104 5.477733 -530.000000 + vertex -209.428299 5.843437 -508.456818 + endloop + endfacet + facet normal 0.000000 0.735751 0.677253 + outer loop + vertex -230.000000 5.843437 -508.456818 + vertex -209.428299 5.843437 -508.456818 + vertex -209.582581 6.290874 -508.942902 + endloop + endfacet + facet normal 0.000000 0.735758 0.677244 + outer loop + vertex -230.000000 6.281650 -508.932892 + vertex -230.000000 5.843437 -508.456818 + vertex -209.582581 6.290874 -508.942902 + endloop + endfacet + facet normal 0.000000 0.837202 -0.546894 + outer loop + vertex -230.000000 5.482105 -492.096222 + vertex -230.000000 5.489660 -492.084656 + vertex -209.283997 5.482105 -492.096222 + endloop + endfacet + facet normal 0.000000 0.915754 -0.401739 + outer loop + vertex -230.000000 5.387211 -492.312531 + vertex -230.000000 5.482105 -492.096222 + vertex -209.283997 5.482105 -492.096222 + endloop + endfacet + facet normal 0.000000 0.915761 -0.401724 + outer loop + vertex -230.000000 5.387211 -492.312531 + vertex -209.283997 5.482105 -492.096222 + vertex -209.240967 5.385180 -492.317169 + endloop + endfacet + facet normal 0.000000 0.837143 0.546984 + outer loop + vertex -230.000000 5.482105 -507.903809 + vertex -209.283997 5.482105 -507.903809 + vertex -209.428299 5.843437 -508.456818 + endloop + endfacet + facet normal 0.000000 0.837148 0.546977 + outer loop + vertex -230.000000 5.835933 -508.445343 + vertex -230.000000 5.482105 -507.903809 + vertex -209.428299 5.843437 -508.456818 + endloop + endfacet + facet normal 0.000000 0.836924 0.547319 + outer loop + vertex -230.000000 5.843437 -508.456818 + vertex -230.000000 5.835933 -508.445343 + vertex -209.428299 5.843437 -508.456818 + endloop + endfacet +endsolid Mesh diff --git a/apps/cpu/Multiphase/backup/Final.stl b/apps/cpu/Multiphase/backup/Final.stl new file mode 100644 index 0000000000000000000000000000000000000000..a164dcafa1f68e70277d5d2c41d853c7416e4cff Binary files /dev/null and b/apps/cpu/Multiphase/backup/Final.stl differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusing.FCStd b/apps/cpu/Multiphase/backup/FlowFocusing.FCStd new file mode 100644 index 0000000000000000000000000000000000000000..80e088eaddb292386f6349b11f0cbefa75824501 Binary files /dev/null and b/apps/cpu/Multiphase/backup/FlowFocusing.FCStd differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusing.FCStd1 b/apps/cpu/Multiphase/backup/FlowFocusing.FCStd1 new file mode 100644 index 0000000000000000000000000000000000000000..9d5186df8e258a78afc0f27af756cf28d259af14 Binary files /dev/null and b/apps/cpu/Multiphase/backup/FlowFocusing.FCStd1 differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusing.ast b/apps/cpu/Multiphase/backup/FlowFocusing.ast new file mode 100644 index 0000000000000000000000000000000000000000..062fb6d037177063808c135f8bb8a3ef48f430db --- /dev/null +++ b/apps/cpu/Multiphase/backup/FlowFocusing.ast @@ -0,0 +1,3194 @@ +solid Mesh + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 -5.325651 1.935894 + vertex 165.500000 -5.500000 0.500000 + vertex 165.500000 -5.325651 -0.935894 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 -5.325651 1.935894 + vertex 165.500000 -5.325651 -0.935894 + vertex 165.500000 -4.812736 -2.288339 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 -5.325651 1.935894 + vertex 165.500000 -4.812736 -2.288339 + vertex 165.500000 -3.991065 -3.478736 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 -5.325651 1.935894 + vertex 165.500000 -3.991065 -3.478736 + vertex 165.500000 -2.908388 -4.437903 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 -5.325651 1.935894 + vertex 165.500000 -2.908388 -4.437903 + vertex 165.500000 -1.627629 -5.110097 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 3.908388 -4.437903 + vertex 165.500000 1.223220 -5.456253 + vertex 165.500000 2.627629 -5.110097 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 -1.627629 6.110097 + vertex 165.500000 -2.908388 5.437903 + vertex 165.500000 -3.991065 4.478736 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 -1.627629 6.110097 + vertex 165.500000 -3.991065 4.478736 + vertex 165.500000 -4.812736 3.288339 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 -1.627629 6.110097 + vertex 165.500000 -4.812736 3.288339 + vertex 165.500000 -5.325651 1.935894 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 6.325651 -0.935894 + vertex 165.500000 3.908388 -4.437903 + vertex 165.500000 4.991065 -3.478736 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 6.325651 -0.935894 + vertex 165.500000 4.991065 -3.478736 + vertex 165.500000 5.812736 -2.288339 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 6.325651 1.935894 + vertex 165.500000 6.325651 -0.935894 + vertex 165.500000 6.500000 0.500000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 2.627629 6.110097 + vertex 165.500000 1.223220 6.456253 + vertex 165.500000 -0.223220 6.456253 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 2.627629 6.110097 + vertex 165.500000 -0.223220 6.456253 + vertex 165.500000 -1.627629 6.110097 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 2.627629 6.110097 + vertex 165.500000 -1.627629 -5.110097 + vertex 165.500000 -0.223220 -5.456253 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 2.627629 6.110097 + vertex 165.500000 -0.223220 -5.456253 + vertex 165.500000 1.223220 -5.456253 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 2.627629 6.110097 + vertex 165.500000 1.223220 -5.456253 + vertex 165.500000 3.908388 -4.437903 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 2.627629 6.110097 + vertex 165.500000 -5.325651 1.935894 + vertex 165.500000 -1.627629 -5.110097 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 2.627629 6.110097 + vertex 165.500000 3.908388 -4.437903 + vertex 165.500000 6.325651 -0.935894 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 2.627629 6.110097 + vertex 165.500000 -1.627629 6.110097 + vertex 165.500000 -5.325651 1.935894 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 2.627629 6.110097 + vertex 165.500000 6.325651 -0.935894 + vertex 165.500000 6.325651 1.935894 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 4.991065 4.478736 + vertex 165.500000 6.325651 1.935894 + vertex 165.500000 5.812736 3.288339 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 4.991065 4.478736 + vertex 165.500000 3.908388 5.437903 + vertex 165.500000 2.627629 6.110097 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 165.500000 4.991065 4.478736 + vertex 165.500000 2.627629 6.110097 + vertex 165.500000 6.325651 1.935894 + endloop + endfacet + facet normal -0.000107 -0.772860 -0.634577 + outer loop + vertex 165.500000 -3.991065 -3.478736 + vertex 50.729084 -4.406632 -2.953253 + vertex 50.899483 -3.842341 -3.640540 + endloop + endfacet + facet normal 0.000185 -0.667672 -0.744456 + outer loop + vertex 165.500000 -3.991065 -3.478736 + vertex 50.899483 -3.842341 -3.640540 + vertex 51.079292 -3.144950 -4.265956 + endloop + endfacet + facet normal 0.000379 -0.822984 -0.568065 + outer loop + vertex 165.500000 -3.991065 -3.478736 + vertex 165.500000 -4.812736 -2.288339 + vertex 50.729084 -4.406632 -2.953253 + endloop + endfacet + facet normal -0.000154 -0.538308 -0.842748 + outer loop + vertex 165.500000 -2.908388 -4.437903 + vertex 51.079292 -3.144950 -4.265956 + vertex 51.254513 -2.292002 -4.810812 + endloop + endfacet + facet normal 0.000000 0.993822 0.110987 + outer loop + vertex 165.500000 6.500000 0.500000 + vertex 50.332397 6.500000 0.500000 + vertex 50.391338 6.352184 1.823611 + endloop + endfacet + facet normal 0.000246 -0.663123 -0.748511 + outer loop + vertex 165.500000 -2.908388 -4.437903 + vertex 165.500000 -3.991065 -3.478736 + vertex 51.079292 -3.144950 -4.265956 + endloop + endfacet + facet normal -0.000102 0.944707 0.327915 + outer loop + vertex 165.500000 6.325651 1.935894 + vertex 50.391338 6.352184 1.823611 + vertex 50.556267 5.913767 3.086720 + endloop + endfacet + facet normal -0.000216 -0.379672 -0.925121 + outer loop + vertex 165.500000 -1.627629 -5.110097 + vertex 51.254513 -2.292002 -4.810812 + vertex 51.404663 -1.244035 -5.240935 + endloop + endfacet + facet normal 0.000111 0.992709 0.120537 + outer loop + vertex 165.500000 6.325651 1.935894 + vertex 165.500000 6.500000 0.500000 + vertex 50.391338 6.352184 1.823611 + endloop + endfacet + facet normal 0.000383 -0.464723 -0.885456 + outer loop + vertex 165.500000 -1.627629 -5.110097 + vertex 165.500000 -2.908388 -4.437903 + vertex 51.254513 -2.292002 -4.810812 + endloop + endfacet + facet normal -0.000188 0.847029 0.531547 + outer loop + vertex 165.500000 5.812736 3.288339 + vertex 50.556267 5.913767 3.086720 + vertex 50.799007 5.184052 4.249620 + endloop + endfacet + facet normal 0.000200 0.935016 0.354605 + outer loop + vertex 165.500000 5.812736 3.288339 + vertex 165.500000 6.325651 1.935894 + vertex 50.556267 5.913767 3.086720 + endloop + endfacet + facet normal 0.000158 -0.223303 -0.974749 + outer loop + vertex 165.500000 -0.223220 -5.456253 + vertex 51.404663 -1.244035 -5.240935 + vertex 51.473011 -0.428928 -5.427655 + endloop + endfacet + facet normal -0.000110 -0.077642 -0.996981 + outer loop + vertex 165.500000 -0.223220 -5.456253 + vertex 51.473011 -0.428928 -5.427655 + vertex 51.500000 0.500000 -5.500000 + endloop + endfacet + facet normal 0.000309 -0.239316 -0.970942 + outer loop + vertex 165.500000 -0.223220 -5.456253 + vertex 165.500000 -1.627629 -5.110097 + vertex 51.404663 -1.244035 -5.240935 + endloop + endfacet + facet normal -0.000252 0.699064 0.715059 + outer loop + vertex 165.500000 4.991065 4.478736 + vertex 50.799007 5.184052 4.249620 + vertex 51.079708 4.143171 5.267316 + endloop + endfacet + facet normal 0.000250 0.822984 0.568065 + outer loop + vertex 165.500000 4.991065 4.478736 + vertex 165.500000 5.812736 3.288339 + vertex 50.799007 5.184052 4.249620 + endloop + endfacet + facet normal -0.000351 0.115384 -0.993321 + outer loop + vertex 165.500000 1.223220 -5.456253 + vertex 51.500000 0.500000 -5.500000 + vertex 51.440762 1.875535 -5.340197 + endloop + endfacet + facet normal -0.000250 0.505199 0.863003 + outer loop + vertex 165.500000 3.908388 5.437903 + vertex 51.079708 4.143171 5.267316 + vertex 51.322906 2.873937 6.010392 + endloop + endfacet + facet normal 0.000384 0.000000 -1.000000 + outer loop + vertex 165.500000 1.223220 -5.456253 + vertex 165.500000 -0.223220 -5.456253 + vertex 51.500000 0.500000 -5.500000 + endloop + endfacet + facet normal 0.000245 0.663123 0.748511 + outer loop + vertex 165.500000 3.908388 5.437903 + vertex 165.500000 4.991065 4.478736 + vertex 51.079708 4.143171 5.267316 + endloop + endfacet + facet normal -0.000226 0.323714 -0.946155 + outer loop + vertex 165.500000 2.627629 -5.110097 + vertex 51.440762 1.875535 -5.340197 + vertex 51.304974 2.990543 -4.958681 + endloop + endfacet + facet normal -0.000167 0.307643 0.951502 + outer loop + vertex 165.500000 2.627629 6.110097 + vertex 51.322906 2.873937 6.010392 + vertex 51.446964 1.801675 6.357102 + endloop + endfacet + facet normal 0.000229 0.464723 0.885456 + outer loop + vertex 165.500000 2.627629 6.110097 + vertex 165.500000 3.908388 5.437903 + vertex 51.322906 2.873937 6.010392 + endloop + endfacet + facet normal 0.000381 0.239316 -0.970942 + outer loop + vertex 165.500000 2.627629 -5.110097 + vertex 165.500000 1.223220 -5.456253 + vertex 51.440762 1.875535 -5.340197 + endloop + endfacet + facet normal 0.000011 0.492470 -0.870329 + outer loop + vertex 165.500000 3.908388 -4.437903 + vertex 51.304974 2.990543 -4.958681 + vertex 51.135273 3.896791 -4.445888 + endloop + endfacet + facet normal -0.000010 0.629979 -0.776612 + outer loop + vertex 165.500000 3.908388 -4.437903 + vertex 51.135273 3.896791 -4.445888 + vertex 50.955387 4.638966 -3.843842 + endloop + endfacet + facet normal -0.000311 0.109112 0.994029 + outer loop + vertex 165.500000 1.223220 6.456253 + vertex 51.446964 1.801675 6.357102 + vertex 51.500000 0.500000 6.500000 + endloop + endfacet + facet normal 0.000370 0.239316 0.970942 + outer loop + vertex 165.500000 1.223220 6.456253 + vertex 165.500000 2.627629 6.110097 + vertex 51.446964 1.801675 6.357102 + endloop + endfacet + facet normal 0.000303 0.464723 -0.885456 + outer loop + vertex 165.500000 3.908388 -4.437903 + vertex 165.500000 2.627629 -5.110097 + vertex 51.304974 2.990543 -4.958681 + endloop + endfacet + facet normal -0.000351 -0.115384 0.993321 + outer loop + vertex 165.500000 -0.223220 6.456253 + vertex 51.500000 0.500000 6.500000 + vertex 51.440762 -0.875535 6.340197 + endloop + endfacet + facet normal -0.000146 0.742297 -0.670071 + outer loop + vertex 165.500000 4.991065 -3.478736 + vertex 50.955387 4.638966 -3.843842 + vertex 50.780647 5.243602 -3.173995 + endloop + endfacet + facet normal 0.000384 -0.000000 1.000000 + outer loop + vertex 165.500000 -0.223220 6.456253 + vertex 165.500000 1.223220 6.456253 + vertex 51.500000 0.500000 6.500000 + endloop + endfacet + facet normal 0.000347 0.663123 -0.748511 + outer loop + vertex 165.500000 4.991065 -3.478736 + vertex 165.500000 3.908388 -4.437903 + vertex 50.955387 4.638966 -3.843842 + endloop + endfacet + facet normal 0.000381 -0.239316 0.970942 + outer loop + vertex 165.500000 -1.627629 6.110097 + vertex 165.500000 -0.223220 6.456253 + vertex 51.440762 -0.875535 6.340197 + endloop + endfacet + facet normal -0.000226 -0.323713 0.946155 + outer loop + vertex 165.500000 -1.627629 6.110097 + vertex 51.440762 -0.875535 6.340197 + vertex 51.304974 -1.990543 5.958681 + endloop + endfacet + facet normal 0.000138 0.833077 -0.553157 + outer loop + vertex 165.500000 5.812736 -2.288339 + vertex 50.780647 5.243602 -3.173995 + vertex 50.622238 5.726650 -2.446545 + endloop + endfacet + facet normal -0.000088 0.903881 -0.427784 + outer loop + vertex 165.500000 5.812736 -2.288339 + vertex 50.622238 5.726650 -2.446545 + vertex 50.490826 6.092421 -1.673668 + endloop + endfacet + facet normal 0.000303 0.822984 -0.568065 + outer loop + vertex 165.500000 5.812736 -2.288339 + vertex 165.500000 4.991065 -3.478736 + vertex 50.780647 5.243602 -3.173995 + endloop + endfacet + facet normal -0.000040 0.955261 -0.295765 + outer loop + vertex 165.500000 6.325651 -0.935894 + vertex 50.490826 6.092421 -1.673668 + vertex 50.395226 6.342282 -0.866653 + endloop + endfacet + facet normal 0.000039 0.985167 -0.171597 + outer loop + vertex 165.500000 6.325651 -0.935894 + vertex 50.395226 6.342282 -0.866653 + vertex 50.348400 6.460290 -0.189163 + endloop + endfacet + facet normal 0.000303 -0.464723 0.885456 + outer loop + vertex 165.500000 -2.908388 5.437903 + vertex 165.500000 -1.627629 6.110097 + vertex 51.304974 -1.990543 5.958681 + endloop + endfacet + facet normal 0.000011 -0.492470 0.870329 + outer loop + vertex 165.500000 -2.908388 5.437903 + vertex 51.304974 -1.990543 5.958681 + vertex 51.135273 -2.896791 5.445888 + endloop + endfacet + facet normal 0.000379 0.935016 -0.354605 + outer loop + vertex 165.500000 6.325651 -0.935894 + vertex 165.500000 5.812736 -2.288339 + vertex 50.490826 6.092421 -1.673668 + endloop + endfacet + facet normal -0.000010 -0.629979 0.776612 + outer loop + vertex 165.500000 -2.908388 5.437903 + vertex 51.135273 -2.896791 5.445888 + vertex 50.955387 -3.638966 4.843842 + endloop + endfacet + facet normal 0.000000 0.998344 -0.057525 + outer loop + vertex 165.500000 6.500000 0.500000 + vertex 50.348400 6.460290 -0.189163 + vertex 50.332397 6.500000 0.500000 + endloop + endfacet + facet normal 0.000379 0.992709 -0.120537 + outer loop + vertex 165.500000 6.500000 0.500000 + vertex 165.500000 6.325651 -0.935894 + vertex 50.348400 6.460290 -0.189163 + endloop + endfacet + facet normal 0.000347 -0.663123 0.748511 + outer loop + vertex 165.500000 -3.991065 4.478736 + vertex 165.500000 -2.908388 5.437903 + vertex 50.955387 -3.638966 4.843842 + endloop + endfacet + facet normal -0.000146 -0.742263 0.670108 + outer loop + vertex 165.500000 -3.991065 4.478736 + vertex 50.955387 -3.638966 4.843842 + vertex 50.780762 -4.243235 4.174469 + endloop + endfacet + facet normal 0.000302 -0.822984 0.568065 + outer loop + vertex 165.500000 -4.812736 3.288339 + vertex 165.500000 -3.991065 4.478736 + vertex 50.780762 -4.243235 4.174469 + endloop + endfacet + facet normal 0.000142 -0.832783 0.553599 + outer loop + vertex 165.500000 -4.812736 3.288339 + vertex 50.780762 -4.243235 4.174469 + vertex 50.623219 -4.723814 3.451571 + endloop + endfacet + facet normal -0.000089 -0.903265 0.429084 + outer loop + vertex 165.500000 -4.812736 3.288339 + vertex 50.623219 -4.723814 3.451571 + vertex 50.492382 -5.088249 2.684370 + endloop + endfacet + facet normal -0.000032 -0.954624 0.297812 + outer loop + vertex 165.500000 -5.325651 1.935894 + vertex 50.492382 -5.088249 2.684370 + vertex 50.396503 -5.339019 1.880529 + endloop + endfacet + facet normal 0.000037 -0.986889 0.161399 + outer loop + vertex 165.500000 -5.325651 1.935894 + vertex 50.396503 -5.339019 1.880529 + vertex 50.342648 -5.474597 1.051531 + endloop + endfacet + facet normal 0.000378 -0.935016 0.354605 + outer loop + vertex 165.500000 -5.325651 1.935894 + vertex 165.500000 -4.812736 3.288339 + vertex 50.492382 -5.088249 2.684370 + endloop + endfacet + facet normal -0.000115 -0.999759 0.021950 + outer loop + vertex 165.500000 -5.500000 0.500000 + vertex 50.342648 -5.474597 1.051531 + vertex 50.335209 -5.493046 0.211204 + endloop + endfacet + facet normal 0.000236 -0.993023 -0.117918 + outer loop + vertex 165.500000 -5.500000 0.500000 + vertex 50.335209 -5.493046 0.211204 + vertex 50.374840 -5.393991 -0.622882 + endloop + endfacet + facet normal 0.000358 -0.992709 0.120537 + outer loop + vertex 165.500000 -5.500000 0.500000 + vertex 165.500000 -5.325651 1.935894 + vertex 50.342648 -5.474597 1.051531 + endloop + endfacet + facet normal -0.000121 -0.966795 -0.255552 + outer loop + vertex 165.500000 -5.325651 -0.935894 + vertex 50.374840 -5.393991 -0.622882 + vertex 50.458221 -5.179053 -1.436066 + endloop + endfacet + facet normal 0.000262 -0.992709 -0.120537 + outer loop + vertex 165.500000 -5.325651 -0.935894 + vertex 165.500000 -5.500000 0.500000 + vertex 50.374840 -5.393991 -0.622882 + endloop + endfacet + facet normal 0.000055 -0.921408 -0.388597 + outer loop + vertex 165.500000 -4.812736 -2.288339 + vertex 50.458221 -5.179053 -1.436066 + vertex 50.578938 -4.850290 -2.215583 + endloop + endfacet + facet normal -0.000046 -0.856947 -0.515404 + outer loop + vertex 165.500000 -4.812736 -2.288339 + vertex 50.578938 -4.850290 -2.215583 + vertex 50.729084 -4.406632 -2.953253 + endloop + endfacet + facet normal 0.000350 -0.935016 -0.354605 + outer loop + vertex 165.500000 -4.812736 -2.288339 + vertex 165.500000 -5.325651 -0.935894 + vertex 50.458221 -5.179053 -1.436066 + endloop + endfacet + facet normal 0.997451 0.071339 -0.001616 + outer loop + vertex 51.440762 1.875535 -5.340197 + vertex 51.500000 0.500000 -29.500000 + vertex 51.337143 2.777037 -29.500000 + endloop + endfacet + facet normal 0.999074 0.043026 0.000000 + outer loop + vertex 51.440762 1.875535 -5.340197 + vertex 51.500000 0.500000 -5.500000 + vertex 51.500000 0.500000 -29.500000 + endloop + endfacet + facet normal 0.999171 0.040710 0.000000 + outer loop + vertex 51.500000 0.500000 30.500000 + vertex 51.500000 0.500000 6.500000 + vertex 51.446964 1.801675 6.357102 + endloop + endfacet + facet normal 0.992676 0.120805 0.000250 + outer loop + vertex 51.304974 2.990543 -4.958681 + vertex 51.440762 1.875535 -5.340197 + vertex 51.337143 2.777037 -29.500000 + endloop + endfacet + facet normal 0.977146 0.212565 -0.001627 + outer loop + vertex 51.135273 3.896791 -4.445888 + vertex 51.337143 2.777037 -29.500000 + vertex 50.851887 5.007721 -29.500000 + endloop + endfacet + facet normal 0.982883 0.184229 -0.000314 + outer loop + vertex 51.135273 3.896791 -4.445888 + vertex 51.304974 2.990543 -4.958681 + vertex 51.337143 2.777037 -29.500000 + endloop + endfacet + facet normal 0.971762 0.235962 -0.000529 + outer loop + vertex 50.955387 4.638966 -3.843842 + vertex 51.135273 3.896791 -4.445888 + vertex 50.851887 5.007721 -29.500000 + endloop + endfacet + facet normal 0.982114 0.188285 0.000174 + outer loop + vertex 51.337143 2.777037 30.500000 + vertex 51.322906 2.873937 6.010392 + vertex 51.079708 4.143171 5.267316 + endloop + endfacet + facet normal 0.993378 0.114891 -0.000123 + outer loop + vertex 51.337143 2.777037 30.500000 + vertex 51.446964 1.801675 6.357102 + vertex 51.322906 2.873937 6.010392 + endloop + endfacet + facet normal 0.997451 0.071339 0.001655 + outer loop + vertex 51.337143 2.777037 30.500000 + vertex 51.500000 0.500000 30.500000 + vertex 51.446964 1.801675 6.357102 + endloop + endfacet + facet normal 0.960719 0.277522 0.000113 + outer loop + vertex 50.780647 5.243602 -3.173995 + vertex 50.955387 4.638966 -3.843842 + vertex 50.851887 5.007721 -29.500000 + endloop + endfacet + facet normal 0.950111 0.311913 -0.000224 + outer loop + vertex 50.622238 5.726650 -2.446545 + vertex 50.780647 5.243602 -3.173995 + vertex 50.851887 5.007721 -29.500000 + endloop + endfacet + facet normal 0.940392 0.340090 -0.001055 + outer loop + vertex 50.490826 6.092421 -1.673668 + vertex 50.622238 5.726650 -2.446545 + vertex 50.851887 5.007721 -29.500000 + endloop + endfacet + facet normal 0.936949 0.349464 -0.001465 + outer loop + vertex 50.490826 6.092421 -1.673668 + vertex 50.851887 5.007721 -29.500000 + vertex 50.054111 7.146640 -29.500000 + endloop + endfacet + facet normal 0.932892 0.360154 -0.000996 + outer loop + vertex 50.395226 6.342282 -0.866653 + vertex 50.490826 6.092421 -1.673668 + vertex 50.054111 7.146640 -29.500000 + endloop + endfacet + facet normal 0.928288 0.371862 -0.000613 + outer loop + vertex 50.348400 6.460290 -0.189163 + vertex 50.395226 6.342282 -0.866653 + vertex 50.054111 7.146640 -29.500000 + endloop + endfacet + facet normal 0.925109 0.379701 -0.000397 + outer loop + vertex 50.332397 6.500000 0.500000 + vertex 50.348400 6.460290 -0.189163 + vertex 50.054111 7.146640 -29.500000 + endloop + endfacet + facet normal 0.948776 0.315948 0.000211 + outer loop + vertex 50.851887 5.007721 30.500000 + vertex 50.799007 5.184052 4.249620 + vertex 50.556267 5.913767 3.086720 + endloop + endfacet + facet normal 0.965556 0.260195 -0.000197 + outer loop + vertex 50.851887 5.007721 30.500000 + vertex 51.079708 4.143171 5.267316 + vertex 50.799007 5.184052 4.249620 + endloop + endfacet + facet normal 0.977146 0.212565 0.001539 + outer loop + vertex 50.851887 5.007721 30.500000 + vertex 51.337143 2.777037 30.500000 + vertex 51.079708 4.143171 5.267316 + endloop + endfacet + facet normal 0.877677 0.479248 0.002189 + outer loop + vertex 48.960056 9.150253 -29.500000 + vertex 50.332397 6.500000 0.500000 + vertex 50.054111 7.146640 -29.500000 + endloop + endfacet + facet normal 0.936949 0.349464 0.001446 + outer loop + vertex 50.054111 7.146640 30.500000 + vertex 50.851887 5.007721 30.500000 + vertex 50.556267 5.913767 3.086720 + endloop + endfacet + facet normal 0.927238 0.374473 0.000530 + outer loop + vertex 50.054111 7.146640 30.500000 + vertex 50.391338 6.352184 1.823611 + vertex 50.332397 6.500000 0.500000 + endloop + endfacet + facet normal 0.934857 0.355022 0.001158 + outer loop + vertex 50.054111 7.146640 30.500000 + vertex 50.556267 5.913767 3.086720 + vertex 50.391338 6.352184 1.823611 + endloop + endfacet + facet normal 0.888010 0.459825 0.000000 + outer loop + vertex 48.960056 9.150253 30.500000 + vertex 50.332397 6.500000 0.500000 + vertex 48.960056 9.150253 -29.500000 + endloop + endfacet + facet normal 0.877677 0.479248 -0.002189 + outer loop + vertex 48.960056 9.150253 30.500000 + vertex 50.054111 7.146640 30.500000 + vertex 50.332397 6.500000 0.500000 + endloop + endfacet + facet normal 0.800541 0.599278 0.000000 + outer loop + vertex 47.591991 10.977772 30.500000 + vertex 48.960056 9.150253 30.500000 + vertex 48.960056 9.150253 -29.500000 + endloop + endfacet + facet normal 0.800541 0.599278 0.000000 + outer loop + vertex 47.591991 10.977772 30.500000 + vertex 48.960056 9.150253 -29.500000 + vertex 47.591991 10.977772 -29.500000 + endloop + endfacet + facet normal 0.707107 0.707106 0.000000 + outer loop + vertex 45.977772 12.591993 30.500000 + vertex 47.591991 10.977772 -29.500000 + vertex 45.977772 12.591993 -29.500000 + endloop + endfacet + facet normal 0.707107 0.707106 0.000000 + outer loop + vertex 45.977772 12.591993 30.500000 + vertex 47.591991 10.977772 30.500000 + vertex 47.591991 10.977772 -29.500000 + endloop + endfacet + facet normal 0.599278 0.800541 0.000000 + outer loop + vertex 44.150253 13.960056 30.500000 + vertex 45.977772 12.591993 30.500000 + vertex 45.977772 12.591993 -29.500000 + endloop + endfacet + facet normal 0.599278 0.800541 0.000000 + outer loop + vertex 44.150253 13.960056 30.500000 + vertex 45.977772 12.591993 -29.500000 + vertex 44.150253 13.960056 -29.500000 + endloop + endfacet + facet normal 0.479249 0.877679 0.000000 + outer loop + vertex 42.146641 15.054111 30.500000 + vertex 44.150253 13.960056 -29.500000 + vertex 42.146641 15.054111 -29.500000 + endloop + endfacet + facet normal 0.479249 0.877679 0.000000 + outer loop + vertex 42.146641 15.054111 30.500000 + vertex 44.150253 13.960056 30.500000 + vertex 44.150253 13.960056 -29.500000 + endloop + endfacet + facet normal 0.349464 0.936950 0.000000 + outer loop + vertex 40.007721 15.851888 30.500000 + vertex 42.146641 15.054111 -29.500000 + vertex 40.007721 15.851888 -29.500000 + endloop + endfacet + facet normal 0.349464 0.936950 0.000000 + outer loop + vertex 40.007721 15.851888 30.500000 + vertex 42.146641 15.054111 30.500000 + vertex 42.146641 15.054111 -29.500000 + endloop + endfacet + facet normal 0.212565 0.977147 0.000000 + outer loop + vertex 37.777039 16.337143 30.500000 + vertex 40.007721 15.851888 -29.500000 + vertex 37.777039 16.337143 -29.500000 + endloop + endfacet + facet normal 0.212565 0.977147 0.000000 + outer loop + vertex 37.777039 16.337143 30.500000 + vertex 40.007721 15.851888 30.500000 + vertex 40.007721 15.851888 -29.500000 + endloop + endfacet + facet normal 0.071339 0.997452 0.000000 + outer loop + vertex 35.500000 16.500000 30.500000 + vertex 37.777039 16.337143 -29.500000 + vertex 35.500000 16.500000 -29.500000 + endloop + endfacet + facet normal 0.071339 0.997452 0.000000 + outer loop + vertex 35.500000 16.500000 30.500000 + vertex 37.777039 16.337143 30.500000 + vertex 37.777039 16.337143 -29.500000 + endloop + endfacet + facet normal -0.071339 0.997452 0.000000 + outer loop + vertex 33.222961 16.337143 30.500000 + vertex 35.500000 16.500000 -29.500000 + vertex 33.222961 16.337143 -29.500000 + endloop + endfacet + facet normal -0.071339 0.997452 0.000000 + outer loop + vertex 33.222961 16.337143 30.500000 + vertex 35.500000 16.500000 30.500000 + vertex 35.500000 16.500000 -29.500000 + endloop + endfacet + facet normal -0.212565 0.977147 0.000000 + outer loop + vertex 30.992279 15.851888 30.500000 + vertex 33.222961 16.337143 -29.500000 + vertex 30.992279 15.851888 -29.500000 + endloop + endfacet + facet normal -0.212565 0.977147 0.000000 + outer loop + vertex 30.992279 15.851888 30.500000 + vertex 33.222961 16.337143 30.500000 + vertex 33.222961 16.337143 -29.500000 + endloop + endfacet + facet normal -0.349464 0.936950 0.000000 + outer loop + vertex 28.853359 15.054111 30.500000 + vertex 30.992279 15.851888 -29.500000 + vertex 28.853359 15.054111 -29.500000 + endloop + endfacet + facet normal -0.479249 0.877679 0.000000 + outer loop + vertex 28.853359 15.054111 30.500000 + vertex 28.853359 15.054111 -29.500000 + vertex 26.849747 13.960056 -29.500000 + endloop + endfacet + facet normal -0.349464 0.936950 0.000000 + outer loop + vertex 28.853359 15.054111 30.500000 + vertex 30.992279 15.851888 30.500000 + vertex 30.992279 15.851888 -29.500000 + endloop + endfacet + facet normal -0.479249 0.877679 0.000000 + outer loop + vertex 26.849747 13.960056 30.500000 + vertex 28.853359 15.054111 30.500000 + vertex 26.849747 13.960056 -29.500000 + endloop + endfacet + facet normal -0.599278 0.800541 0.000000 + outer loop + vertex 25.022228 12.591993 30.500000 + vertex 26.849747 13.960056 -29.500000 + vertex 25.022228 12.591993 -29.500000 + endloop + endfacet + facet normal -0.599278 0.800541 0.000000 + outer loop + vertex 25.022228 12.591993 30.500000 + vertex 26.849747 13.960056 30.500000 + vertex 26.849747 13.960056 -29.500000 + endloop + endfacet + facet normal -0.707107 0.707107 0.000000 + outer loop + vertex 23.408007 10.977772 30.500000 + vertex 25.022228 12.591993 -29.500000 + vertex 23.408007 10.977772 -29.500000 + endloop + endfacet + facet normal -0.707107 0.707107 0.000000 + outer loop + vertex 23.408007 10.977772 30.500000 + vertex 25.022228 12.591993 30.500000 + vertex 25.022228 12.591993 -29.500000 + endloop + endfacet + facet normal -0.800539 0.599276 0.002413 + outer loop + vertex 21.643593 8.500000 0.500000 + vertex 23.408007 10.977772 -29.500000 + vertex 22.039944 9.150253 -29.500000 + endloop + endfacet + facet normal -0.814576 0.580057 0.000000 + outer loop + vertex 21.643593 8.500000 0.500000 + vertex 23.408007 10.977772 30.500000 + vertex 23.408007 10.977772 -29.500000 + endloop + endfacet + facet normal -0.864717 0.502259 -0.000538 + outer loop + vertex 21.589144 8.404941 -0.729599 + vertex 21.643593 8.500000 0.500000 + vertex 22.039944 9.150253 -29.500000 + endloop + endfacet + facet normal -0.877678 0.479248 -0.001475 + outer loop + vertex 21.434671 8.126698 -1.915257 + vertex 22.039944 9.150253 -29.500000 + vertex 20.945889 7.146640 -29.500000 + endloop + endfacet + facet normal -0.872464 0.488677 -0.001011 + outer loop + vertex 21.434671 8.126698 -1.915257 + vertex 21.589144 8.404941 -0.729599 + vertex 22.039944 9.150253 -29.500000 + endloop + endfacet + facet normal -0.886204 0.463295 -0.000757 + outer loop + vertex 21.186325 7.649735 -3.089051 + vertex 21.434671 8.126698 -1.915257 + vertex 20.945889 7.146640 -29.500000 + endloop + endfacet + facet normal -0.866438 0.499284 0.000625 + outer loop + vertex 22.039944 9.150253 30.500000 + vertex 21.643593 8.500000 0.500000 + vertex 21.547388 8.331002 2.135666 + endloop + endfacet + facet normal -0.878497 0.477746 0.001457 + outer loop + vertex 22.039944 9.150253 30.500000 + vertex 21.547388 8.331002 2.135666 + vertex 21.283375 7.840816 3.680002 + endloop + endfacet + facet normal -0.800539 0.599276 -0.002413 + outer loop + vertex 22.039944 9.150253 30.500000 + vertex 23.408007 10.977772 30.500000 + vertex 21.643593 8.500000 0.500000 + endloop + endfacet + facet normal -0.904627 0.426204 0.000117 + outer loop + vertex 20.875492 6.990284 -4.177202 + vertex 21.186325 7.649735 -3.089051 + vertex 20.945889 7.146640 -29.500000 + endloop + endfacet + facet normal -0.936949 0.349464 -0.001673 + outer loop + vertex 20.525652 6.136390 -5.177245 + vertex 20.945889 7.146640 -29.500000 + vertex 20.148113 5.007721 -29.500000 + endloop + endfacet + facet normal -0.925255 0.379346 -0.000230 + outer loop + vertex 20.525652 6.136390 -5.177245 + vertex 20.875492 6.990284 -4.177202 + vertex 20.945889 7.146640 -29.500000 + endloop + endfacet + facet normal -0.897180 0.441664 0.000142 + outer loop + vertex 20.945889 7.146640 30.500000 + vertex 21.283375 7.840816 3.680002 + vertex 21.008848 7.282812 4.741870 + endloop + endfacet + facet normal -0.916945 0.399014 -0.000132 + outer loop + vertex 20.945889 7.146640 30.500000 + vertex 21.008848 7.282812 4.741870 + vertex 20.661827 6.485701 5.807673 + endloop + endfacet + facet normal -0.877678 0.479248 0.001360 + outer loop + vertex 20.945889 7.146640 30.500000 + vertex 22.039944 9.150253 30.500000 + vertex 21.283375 7.840816 3.680002 + endloop + endfacet + facet normal -0.947762 0.318978 -0.000091 + outer loop + vertex 20.164255 5.062339 -6.071534 + vertex 20.525652 6.136390 -5.177245 + vertex 20.148113 5.007721 -29.500000 + endloop + endfacet + facet normal -0.968710 0.248196 0.000089 + outer loop + vertex 19.860142 3.875627 -6.752940 + vertex 20.164255 5.062339 -6.071534 + vertex 20.148113 5.007721 -29.500000 + endloop + endfacet + facet normal -0.977145 0.212565 -0.001791 + outer loop + vertex 19.860142 3.875627 -6.752940 + vertex 20.148113 5.007721 -29.500000 + vertex 19.662857 2.777037 -29.500000 + endloop + endfacet + facet normal -0.936949 0.349464 0.001425 + outer loop + vertex 20.148113 5.007721 30.500000 + vertex 20.945889 7.146640 30.500000 + vertex 20.661827 6.485701 5.807673 + endloop + endfacet + facet normal -0.939211 0.343340 0.001011 + outer loop + vertex 20.148113 5.007721 30.500000 + vertex 20.661827 6.485701 5.807673 + vertex 20.290781 5.467865 6.770592 + endloop + endfacet + facet normal -0.962769 0.270325 -0.000546 + outer loop + vertex 20.148113 5.007721 30.500000 + vertex 20.290781 5.467865 6.770592 + vertex 19.930262 4.185544 7.600476 + endloop + endfacet + facet normal -0.984117 0.177521 -0.000038 + outer loop + vertex 19.666361 2.801282 -7.161860 + vertex 19.860142 3.875627 -6.752940 + vertex 19.662857 2.777037 -29.500000 + endloop + endfacet + facet normal -0.994642 0.103380 0.000044 + outer loop + vertex 19.531559 1.504439 -7.436693 + vertex 19.666361 2.801282 -7.161860 + vertex 19.662857 2.777037 -29.500000 + endloop + endfacet + facet normal -0.997450 0.071339 -0.001821 + outer loop + vertex 19.531559 1.504439 -7.436693 + vertex 19.662857 2.777037 -29.500000 + vertex 19.500000 0.500000 -29.500000 + endloop + endfacet + facet normal -0.977145 0.212565 0.001664 + outer loop + vertex 19.662857 2.777037 30.500000 + vertex 20.148113 5.007721 30.500000 + vertex 19.930262 4.185544 7.600476 + endloop + endfacet + facet normal -0.982769 0.184837 -0.000107 + outer loop + vertex 19.662857 2.777037 30.500000 + vertex 19.930262 4.185544 7.600476 + vertex 19.655348 2.724181 8.184596 + endloop + endfacet + facet normal -0.995239 0.097467 0.000104 + outer loop + vertex 19.524847 1.391352 8.450188 + vertex 19.662857 2.777037 30.500000 + vertex 19.655348 2.724181 8.184596 + endloop + endfacet + facet normal -0.999889 0.014895 0.000752 + outer loop + vertex 19.508701 -0.027632 -7.482581 + vertex 19.531559 1.504439 -7.436693 + vertex 19.500000 0.500000 -29.500000 + endloop + endfacet + facet normal -0.997451 -0.071339 -0.001315 + outer loop + vertex 19.662857 -1.777037 -29.500000 + vertex 19.508701 -0.027632 -7.482581 + vertex 19.500000 0.500000 -29.500000 + endloop + endfacet + facet normal -0.997029 -0.077021 -0.000861 + outer loop + vertex 19.616875 -1.430375 -7.263611 + vertex 19.508701 -0.027632 -7.482581 + vertex 19.662857 -1.777037 -29.500000 + endloop + endfacet + facet normal -0.997451 0.071339 0.001760 + outer loop + vertex 19.500000 0.500000 30.500000 + vertex 19.662857 2.777037 30.500000 + vertex 19.524847 1.391352 8.450188 + endloop + endfacet + facet normal -0.999940 0.010913 -0.000686 + outer loop + vertex 19.500000 0.500000 30.500000 + vertex 19.524847 1.391352 8.450188 + vertex 19.509182 -0.041983 8.481620 + endloop + endfacet + facet normal -0.985730 -0.168334 0.000586 + outer loop + vertex 19.877827 -2.956544 -6.714728 + vertex 19.616875 -1.430375 -7.263611 + vertex 19.662857 -1.777037 -29.500000 + endloop + endfacet + facet normal -0.977145 -0.212565 -0.001785 + outer loop + vertex 19.877827 -2.956544 -6.714728 + vertex 19.662857 -1.777037 -29.500000 + vertex 20.148113 -4.007721 -29.500000 + endloop + endfacet + facet normal -0.997198 -0.074802 0.001065 + outer loop + vertex 19.662857 -1.777037 30.500000 + vertex 19.509182 -0.041983 8.481620 + vertex 19.606678 -1.344529 8.284453 + endloop + endfacet + facet normal -0.988853 -0.148894 -0.000398 + outer loop + vertex 19.662857 -1.777037 30.500000 + vertex 19.606678 -1.344529 8.284453 + vertex 19.768930 -2.421203 7.947588 + endloop + endfacet + facet normal -0.997451 -0.071339 0.001340 + outer loop + vertex 19.662857 -1.777037 30.500000 + vertex 19.500000 0.500000 30.500000 + vertex 19.509182 -0.041983 8.481620 + endloop + endfacet + facet normal -0.967217 -0.253952 0.000242 + outer loop + vertex 20.196081 -4.167983 -5.996918 + vertex 19.877827 -2.956544 -6.714728 + vertex 20.148113 -4.007721 -29.500000 + endloop + endfacet + facet normal -0.946432 -0.322902 -0.000270 + outer loop + vertex 20.531864 -5.152869 -5.160837 + vertex 20.196081 -4.167983 -5.996918 + vertex 20.148113 -4.007721 -29.500000 + endloop + endfacet + facet normal -0.936948 -0.349464 -0.001669 + outer loop + vertex 20.531864 -5.152869 -5.160837 + vertex 20.148113 -4.007721 -29.500000 + vertex 20.945889 -6.146640 -29.500000 + endloop + endfacet + facet normal -0.925574 -0.378566 -0.000288 + outer loop + vertex 20.856667 -5.947697 -4.235737 + vertex 20.531864 -5.152869 -5.160837 + vertex 20.945889 -6.146640 -29.500000 + endloop + endfacet + facet normal -0.975386 -0.220501 0.000888 + outer loop + vertex 20.148113 -4.007721 30.500000 + vertex 19.768930 -2.421203 7.947588 + vertex 20.038578 -3.616358 7.359708 + endloop + endfacet + facet normal -0.956607 -0.291382 -0.000400 + outer loop + vertex 20.148113 -4.007721 30.500000 + vertex 20.038578 -3.616358 7.359708 + vertex 20.372141 -4.710361 6.570597 + endloop + endfacet + facet normal -0.977146 -0.212565 0.001476 + outer loop + vertex 20.148113 -4.007721 30.500000 + vertex 19.662857 -1.777037 30.500000 + vertex 19.768930 -2.421203 7.947588 + endloop + endfacet + facet normal -0.906353 -0.422522 0.000126 + outer loop + vertex 21.149296 -6.575117 -3.233994 + vertex 20.856667 -5.947697 -4.235737 + vertex 20.945889 -6.146640 -29.500000 + endloop + endfacet + facet normal -0.877678 -0.479248 -0.001469 + outer loop + vertex 21.390741 -7.045117 -2.159174 + vertex 20.945889 -6.146640 -29.500000 + vertex 22.039944 -8.150253 -29.500000 + endloop + endfacet + facet normal -0.888948 -0.458008 -0.000587 + outer loop + vertex 21.390741 -7.045117 -2.159174 + vertex 21.149296 -6.575117 -3.233994 + vertex 20.945889 -6.146640 -29.500000 + endloop + endfacet + facet normal -0.874730 -0.484610 -0.001182 + outer loop + vertex 21.560614 -7.354522 -1.018713 + vertex 21.390741 -7.045117 -2.159174 + vertex 22.039944 -8.150253 -29.500000 + endloop + endfacet + facet normal -0.866417 -0.499321 -0.000631 + outer loop + vertex 21.639618 -7.493109 0.168034 + vertex 21.560614 -7.354522 -1.018713 + vertex 22.039944 -8.150253 -29.500000 + endloop + endfacet + facet normal -0.935060 -0.354488 0.001143 + outer loop + vertex 20.945889 -6.146640 30.500000 + vertex 20.372141 -4.710361 6.570597 + vertex 20.706879 -5.596193 5.680389 + endloop + endfacet + facet normal -0.915154 -0.403104 -0.000127 + outer loop + vertex 20.945889 -6.146640 30.500000 + vertex 20.706879 -5.596193 5.680389 + vertex 21.018789 -6.304007 4.707789 + endloop + endfacet + facet normal -0.896713 -0.442613 0.000166 + outer loop + vertex 20.945889 -6.146640 30.500000 + vertex 21.018789 -6.304007 4.707789 + vertex 21.287531 -6.848857 3.661376 + endloop + endfacet + facet normal -0.936949 -0.349464 0.001490 + outer loop + vertex 20.945889 -6.146640 30.500000 + vertex 20.148113 -4.007721 30.500000 + vertex 20.372141 -4.710361 6.570597 + endloop + endfacet + facet normal -0.800539 -0.599276 0.002472 + outer loop + vertex 23.408007 -9.977772 -29.500000 + vertex 21.639618 -7.493109 0.168034 + vertex 22.039944 -8.150253 -29.500000 + endloop + endfacet + facet normal -0.879958 -0.475049 0.001634 + outer loop + vertex 22.039944 -8.150253 30.500000 + vertex 21.287531 -6.848857 3.661376 + vertex 21.493242 -7.233742 2.546763 + endloop + endfacet + facet normal -0.869705 -0.493571 0.000827 + outer loop + vertex 22.039944 -8.150253 30.500000 + vertex 21.493242 -7.233742 2.546763 + vertex 21.616100 -7.452191 1.373303 + endloop + endfacet + facet normal -0.861961 -0.506974 0.000393 + outer loop + vertex 22.039944 -8.150253 30.500000 + vertex 21.616100 -7.452191 1.373303 + vertex 21.639618 -7.493109 0.168034 + endloop + endfacet + facet normal -0.877678 -0.479248 0.001367 + outer loop + vertex 22.039944 -8.150253 30.500000 + vertex 20.945889 -6.146640 30.500000 + vertex 21.287531 -6.848857 3.661376 + endloop + endfacet + facet normal -0.707107 -0.707107 -0.000000 + outer loop + vertex 23.408007 -9.977772 30.500000 + vertex 23.408007 -9.977772 -29.500000 + vertex 25.022228 -11.591993 -29.500000 + endloop + endfacet + facet normal -0.814720 -0.579854 -0.000000 + outer loop + vertex 23.408007 -9.977772 30.500000 + vertex 21.639618 -7.493109 0.168034 + vertex 23.408007 -9.977772 -29.500000 + endloop + endfacet + facet normal -0.800539 -0.599276 -0.002418 + outer loop + vertex 23.408007 -9.977772 30.500000 + vertex 22.039944 -8.150253 30.500000 + vertex 21.639618 -7.493109 0.168034 + endloop + endfacet + facet normal -0.707107 -0.707107 -0.000000 + outer loop + vertex 25.022228 -11.591993 30.500000 + vertex 23.408007 -9.977772 30.500000 + vertex 25.022228 -11.591993 -29.500000 + endloop + endfacet + facet normal -0.599278 -0.800541 -0.000000 + outer loop + vertex 26.849747 -12.960056 30.500000 + vertex 25.022228 -11.591993 -29.500000 + vertex 26.849747 -12.960056 -29.500000 + endloop + endfacet + facet normal -0.479249 -0.877679 -0.000000 + outer loop + vertex 26.849747 -12.960056 30.500000 + vertex 26.849747 -12.960056 -29.500000 + vertex 28.853359 -14.054111 -29.500000 + endloop + endfacet + facet normal -0.599278 -0.800541 0.000000 + outer loop + vertex 26.849747 -12.960056 30.500000 + vertex 25.022228 -11.591993 30.500000 + vertex 25.022228 -11.591993 -29.500000 + endloop + endfacet + facet normal -0.479249 -0.877679 -0.000000 + outer loop + vertex 28.853359 -14.054111 30.500000 + vertex 26.849747 -12.960056 30.500000 + vertex 28.853359 -14.054111 -29.500000 + endloop + endfacet + facet normal -0.349464 -0.936950 0.000000 + outer loop + vertex 30.992279 -14.851888 30.500000 + vertex 28.853359 -14.054111 30.500000 + vertex 28.853359 -14.054111 -29.500000 + endloop + endfacet + facet normal -0.349464 -0.936950 -0.000000 + outer loop + vertex 30.992279 -14.851888 30.500000 + vertex 28.853359 -14.054111 -29.500000 + vertex 30.992279 -14.851888 -29.500000 + endloop + endfacet + facet normal -0.212565 -0.977147 -0.000000 + outer loop + vertex 30.992279 -14.851888 30.500000 + vertex 30.992279 -14.851888 -29.500000 + vertex 33.222961 -15.337143 -29.500000 + endloop + endfacet + facet normal -0.212565 -0.977147 -0.000000 + outer loop + vertex 33.222961 -15.337143 30.500000 + vertex 30.992279 -14.851888 30.500000 + vertex 33.222961 -15.337143 -29.500000 + endloop + endfacet + facet normal -0.071339 -0.997452 0.000000 + outer loop + vertex 35.500000 -15.500000 30.500000 + vertex 33.222961 -15.337143 30.500000 + vertex 33.222961 -15.337143 -29.500000 + endloop + endfacet + facet normal -0.071339 -0.997452 -0.000000 + outer loop + vertex 35.500000 -15.500000 30.500000 + vertex 33.222961 -15.337143 -29.500000 + vertex 35.500000 -15.500000 -29.500000 + endloop + endfacet + facet normal 0.071339 -0.997452 0.000000 + outer loop + vertex 35.500000 -15.500000 30.500000 + vertex 35.500000 -15.500000 -29.500000 + vertex 37.777039 -15.337143 -29.500000 + endloop + endfacet + facet normal 0.071339 -0.997452 0.000000 + outer loop + vertex 37.777039 -15.337143 30.500000 + vertex 35.500000 -15.500000 30.500000 + vertex 37.777039 -15.337143 -29.500000 + endloop + endfacet + facet normal 0.212565 -0.977147 0.000000 + outer loop + vertex 40.007721 -14.851888 30.500000 + vertex 37.777039 -15.337143 30.500000 + vertex 37.777039 -15.337143 -29.500000 + endloop + endfacet + facet normal 0.212565 -0.977147 0.000000 + outer loop + vertex 40.007721 -14.851888 30.500000 + vertex 37.777039 -15.337143 -29.500000 + vertex 40.007721 -14.851888 -29.500000 + endloop + endfacet + facet normal 0.349464 -0.936950 0.000000 + outer loop + vertex 40.007721 -14.851888 30.500000 + vertex 40.007721 -14.851888 -29.500000 + vertex 42.146641 -14.054111 -29.500000 + endloop + endfacet + facet normal 0.349464 -0.936950 0.000000 + outer loop + vertex 42.146641 -14.054111 30.500000 + vertex 40.007721 -14.851888 30.500000 + vertex 42.146641 -14.054111 -29.500000 + endloop + endfacet + facet normal 0.479249 -0.877679 0.000000 + outer loop + vertex 44.150253 -12.960056 30.500000 + vertex 42.146641 -14.054111 30.500000 + vertex 42.146641 -14.054111 -29.500000 + endloop + endfacet + facet normal 0.479249 -0.877679 0.000000 + outer loop + vertex 44.150253 -12.960056 30.500000 + vertex 42.146641 -14.054111 -29.500000 + vertex 44.150253 -12.960056 -29.500000 + endloop + endfacet + facet normal 0.599278 -0.800541 0.000000 + outer loop + vertex 44.150253 -12.960056 30.500000 + vertex 44.150253 -12.960056 -29.500000 + vertex 45.977772 -11.591993 -29.500000 + endloop + endfacet + facet normal 0.599278 -0.800541 0.000000 + outer loop + vertex 45.977772 -11.591993 30.500000 + vertex 44.150253 -12.960056 30.500000 + vertex 45.977772 -11.591993 -29.500000 + endloop + endfacet + facet normal 0.707107 -0.707106 0.000000 + outer loop + vertex 47.591991 -9.977772 30.500000 + vertex 45.977772 -11.591993 30.500000 + vertex 45.977772 -11.591993 -29.500000 + endloop + endfacet + facet normal 0.707107 -0.707106 0.000000 + outer loop + vertex 47.591991 -9.977772 30.500000 + vertex 45.977772 -11.591993 -29.500000 + vertex 47.591991 -9.977772 -29.500000 + endloop + endfacet + facet normal 0.800541 -0.599278 0.000000 + outer loop + vertex 47.591991 -9.977772 30.500000 + vertex 47.591991 -9.977772 -29.500000 + vertex 48.960056 -8.150253 -29.500000 + endloop + endfacet + facet normal 0.800541 -0.599278 0.000000 + outer loop + vertex 48.960056 -8.150253 30.500000 + vertex 47.591991 -9.977772 30.500000 + vertex 48.960056 -8.150253 -29.500000 + endloop + endfacet + facet normal 0.888117 -0.459617 0.000000 + outer loop + vertex 50.335209 -5.493046 0.211204 + vertex 48.960056 -8.150253 30.500000 + vertex 48.960056 -8.150253 -29.500000 + endloop + endfacet + facet normal 0.877677 -0.479248 0.002239 + outer loop + vertex 50.335209 -5.493046 0.211204 + vertex 48.960056 -8.150253 -29.500000 + vertex 50.054111 -6.146640 -29.500000 + endloop + endfacet + facet normal 0.926941 -0.375206 -0.000516 + outer loop + vertex 50.374840 -5.393991 -0.622882 + vertex 50.335209 -5.493046 0.211204 + vertex 50.054111 -6.146640 -29.500000 + endloop + endfacet + facet normal 0.931224 -0.364446 -0.000844 + outer loop + vertex 50.458221 -5.179053 -1.436066 + vertex 50.374840 -5.393991 -0.622882 + vertex 50.054111 -6.146640 -29.500000 + endloop + endfacet + facet normal 0.937556 -0.347830 -0.001508 + outer loop + vertex 50.578938 -4.850290 -2.215583 + vertex 50.458221 -5.179053 -1.436066 + vertex 50.054111 -6.146640 -29.500000 + endloop + endfacet + facet normal 0.936949 -0.349464 -0.001419 + outer loop + vertex 50.578938 -4.850290 -2.215583 + vertex 50.054111 -6.146640 -29.500000 + vertex 50.851887 -4.007721 -29.500000 + endloop + endfacet + facet normal 0.947000 -0.321234 -0.000446 + outer loop + vertex 50.729084 -4.406632 -2.953253 + vertex 50.578938 -4.850290 -2.215583 + vertex 50.851887 -4.007721 -29.500000 + endloop + endfacet + facet normal 0.932978 -0.359933 0.001005 + outer loop + vertex 50.054111 -6.146640 30.500000 + vertex 50.396503 -5.339019 1.880529 + vertex 50.492382 -5.088249 2.684370 + endloop + endfacet + facet normal 0.928104 -0.372320 0.000597 + outer loop + vertex 50.054111 -6.146640 30.500000 + vertex 50.342648 -5.474597 1.051531 + vertex 50.396503 -5.339019 1.880529 + endloop + endfacet + facet normal 0.923121 -0.384509 0.000270 + outer loop + vertex 50.054111 -6.146640 30.500000 + vertex 50.335209 -5.493046 0.211204 + vertex 50.342648 -5.474597 1.051531 + endloop + endfacet + facet normal 0.877677 -0.479248 -0.002196 + outer loop + vertex 50.054111 -6.146640 30.500000 + vertex 48.960056 -8.150253 30.500000 + vertex 50.335209 -5.493046 0.211204 + endloop + endfacet + facet normal 0.957335 -0.288981 0.000086 + outer loop + vertex 50.899483 -3.842341 -3.640540 + vertex 50.729084 -4.406632 -2.953253 + vertex 50.851887 -4.007721 -29.500000 + endloop + endfacet + facet normal 0.968292 -0.249822 -0.000185 + outer loop + vertex 51.079292 -3.144950 -4.265956 + vertex 50.899483 -3.842341 -3.640540 + vertex 50.851887 -4.007721 -29.500000 + endloop + endfacet + facet normal 0.977146 -0.212565 -0.001538 + outer loop + vertex 51.079292 -3.144950 -4.265956 + vertex 50.851887 -4.007721 -29.500000 + vertex 51.337143 -1.777037 -29.500000 + endloop + endfacet + facet normal 0.979427 -0.201798 -0.000931 + outer loop + vertex 51.254513 -2.292002 -4.810812 + vertex 51.079292 -3.144950 -4.265956 + vertex 51.337143 -1.777037 -29.500000 + endloop + endfacet + facet normal 0.971762 -0.235962 0.000529 + outer loop + vertex 50.851887 -4.007721 30.500000 + vertex 50.955387 -3.638966 4.843842 + vertex 51.135273 -2.896791 5.445888 + endloop + endfacet + facet normal 0.960723 -0.277510 -0.000113 + outer loop + vertex 50.851887 -4.007721 30.500000 + vertex 50.780762 -4.243235 4.174469 + vertex 50.955387 -3.638966 4.843842 + endloop + endfacet + facet normal 0.950144 -0.311811 0.000222 + outer loop + vertex 50.851887 -4.007721 30.500000 + vertex 50.623219 -4.723814 3.451571 + vertex 50.780762 -4.243235 4.174469 + endloop + endfacet + facet normal 0.940481 -0.339846 0.001046 + outer loop + vertex 50.851887 -4.007721 30.500000 + vertex 50.492382 -5.088249 2.684370 + vertex 50.623219 -4.723814 3.451571 + endloop + endfacet + facet normal 0.936949 -0.349464 0.001466 + outer loop + vertex 50.851887 -4.007721 30.500000 + vertex 50.054111 -6.146640 30.500000 + vertex 50.492382 -5.088249 2.684370 + endloop + endfacet + facet normal 0.989912 -0.141685 0.000358 + outer loop + vertex 51.404663 -1.244035 -5.240935 + vertex 51.254513 -2.292002 -4.810812 + vertex 51.337143 -1.777037 -29.500000 + endloop + endfacet + facet normal 0.997451 -0.071339 -0.001635 + outer loop + vertex 51.473011 -0.428928 -5.427655 + vertex 51.337143 -1.777037 -29.500000 + vertex 51.500000 0.500000 -29.500000 + endloop + endfacet + facet normal 0.996485 -0.083770 -0.000933 + outer loop + vertex 51.473011 -0.428928 -5.427655 + vertex 51.404663 -1.244035 -5.240935 + vertex 51.337143 -1.777037 -29.500000 + endloop + endfacet + facet normal 0.992676 -0.120805 -0.000250 + outer loop + vertex 51.337143 -1.777037 30.500000 + vertex 51.304974 -1.990543 5.958681 + vertex 51.440762 -0.875535 6.340197 + endloop + endfacet + facet normal 0.982883 -0.184229 0.000314 + outer loop + vertex 51.337143 -1.777037 30.500000 + vertex 51.135273 -2.896791 5.445888 + vertex 51.304974 -1.990543 5.958681 + endloop + endfacet + facet normal 0.977146 -0.212565 0.001627 + outer loop + vertex 51.337143 -1.777037 30.500000 + vertex 50.851887 -4.007721 30.500000 + vertex 51.135273 -2.896791 5.445888 + endloop + endfacet + facet normal 0.999578 -0.029042 0.000000 + outer loop + vertex 51.500000 0.500000 -5.500000 + vertex 51.473011 -0.428928 -5.427655 + vertex 51.500000 0.500000 -29.500000 + endloop + endfacet + facet normal 0.999074 -0.043026 0.000000 + outer loop + vertex 51.500000 0.500000 30.500000 + vertex 51.440762 -0.875535 6.340197 + vertex 51.500000 0.500000 6.500000 + endloop + endfacet + facet normal 0.997451 -0.071339 0.001616 + outer loop + vertex 51.500000 0.500000 30.500000 + vertex 51.337143 -1.777037 30.500000 + vertex 51.440762 -0.875535 6.340197 + endloop + endfacet + facet normal -0.000000 -0.000000 -1.000000 + outer loop + vertex 37.777039 16.337143 -29.500000 + vertex 40.007721 15.851888 -29.500000 + vertex 35.500000 16.500000 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 51.500000 0.500000 -29.500000 + vertex 50.054111 7.146640 -29.500000 + vertex 51.337143 2.777037 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 51.337143 2.777037 -29.500000 + vertex 50.054111 7.146640 -29.500000 + vertex 50.851887 5.007721 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 22.039944 -8.150253 -29.500000 + vertex 20.945889 -6.146640 -29.500000 + vertex 23.408007 -9.977772 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 23.408007 -9.977772 -29.500000 + vertex 20.945889 -6.146640 -29.500000 + vertex 25.022228 -11.591993 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 25.022228 -11.591993 -29.500000 + vertex 20.945889 -6.146640 -29.500000 + vertex 26.849747 -12.960056 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 26.849747 -12.960056 -29.500000 + vertex 30.992279 -14.851888 -29.500000 + vertex 28.853359 -14.054111 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 20.945889 -6.146640 -29.500000 + vertex 30.992279 -14.851888 -29.500000 + vertex 26.849747 -12.960056 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 50.054111 7.146640 -29.500000 + vertex 47.591991 10.977772 -29.500000 + vertex 48.960056 9.150253 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 51.500000 0.500000 -29.500000 + vertex 47.591991 10.977772 -29.500000 + vertex 50.054111 7.146640 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 51.337143 -1.777037 -29.500000 + vertex 47.591991 10.977772 -29.500000 + vertex 51.500000 0.500000 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 28.853359 15.054111 -29.500000 + vertex 45.977772 12.591993 -29.500000 + vertex 51.337143 -1.777037 -29.500000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 35.500000 16.500000 -29.500000 + vertex 45.977772 12.591993 -29.500000 + vertex 28.853359 15.054111 -29.500000 + endloop + endfacet + facet normal -0.000000 -0.000000 -1.000000 + outer loop + vertex 44.150253 13.960056 -29.500000 + vertex 45.977772 12.591993 -29.500000 + vertex 42.146641 15.054111 -29.500000 + endloop + endfacet + facet normal -0.000000 -0.000000 -1.000000 + outer loop + vertex 42.146641 15.054111 -29.500000 + vertex 45.977772 12.591993 -29.500000 + vertex 40.007721 15.851888 -29.500000 + endloop + endfacet + facet normal -0.000000 -0.000000 -1.000000 + outer loop + vertex 40.007721 15.851888 -29.500000 + vertex 45.977772 12.591993 -29.500000 + vertex 35.500000 16.500000 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 51.337143 -1.777037 -29.500000 + vertex 45.977772 12.591993 -29.500000 + vertex 47.591991 10.977772 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 30.992279 -14.851888 -29.500000 + vertex 35.500000 -15.500000 -29.500000 + vertex 33.222961 -15.337143 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 20.945889 -6.146640 -29.500000 + vertex 35.500000 -15.500000 -29.500000 + vertex 30.992279 -14.851888 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 19.662857 -1.777037 -29.500000 + vertex 19.500000 0.500000 -29.500000 + vertex 20.148113 -4.007721 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 20.148113 -4.007721 -29.500000 + vertex 19.500000 0.500000 -29.500000 + vertex 20.945889 -6.146640 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 20.945889 -6.146640 -29.500000 + vertex 37.777039 -15.337143 -29.500000 + vertex 35.500000 -15.500000 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 19.500000 0.500000 -29.500000 + vertex 19.662857 2.777037 -29.500000 + vertex 20.945889 -6.146640 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 37.777039 -15.337143 -29.500000 + vertex 42.146641 -14.054111 -29.500000 + vertex 40.007721 -14.851888 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 20.945889 -6.146640 -29.500000 + vertex 42.146641 -14.054111 -29.500000 + vertex 37.777039 -15.337143 -29.500000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 20.148113 5.007721 -29.500000 + vertex 20.945889 7.146640 -29.500000 + vertex 19.662857 2.777037 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 42.146641 -14.054111 -29.500000 + vertex 45.977772 -11.591993 -29.500000 + vertex 44.150253 -12.960056 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 42.146641 -14.054111 -29.500000 + vertex 47.591991 -9.977772 -29.500000 + vertex 45.977772 -11.591993 -29.500000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 23.408007 10.977772 -29.500000 + vertex 25.022228 12.591993 -29.500000 + vertex 22.039944 9.150253 -29.500000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 22.039944 9.150253 -29.500000 + vertex 25.022228 12.591993 -29.500000 + vertex 20.945889 7.146640 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 47.591991 -9.977772 -29.500000 + vertex 50.054111 -6.146640 -29.500000 + vertex 48.960056 -8.150253 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 19.662857 2.777037 -29.500000 + vertex 50.054111 -6.146640 -29.500000 + vertex 20.945889 -6.146640 -29.500000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 20.945889 7.146640 -29.500000 + vertex 50.054111 -6.146640 -29.500000 + vertex 19.662857 2.777037 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 20.945889 -6.146640 -29.500000 + vertex 50.054111 -6.146640 -29.500000 + vertex 42.146641 -14.054111 -29.500000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 25.022228 12.591993 -29.500000 + vertex 50.054111 -6.146640 -29.500000 + vertex 20.945889 7.146640 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 42.146641 -14.054111 -29.500000 + vertex 50.054111 -6.146640 -29.500000 + vertex 47.591991 -9.977772 -29.500000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 26.849747 13.960056 -29.500000 + vertex 28.853359 15.054111 -29.500000 + vertex 25.022228 12.591993 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 50.054111 -6.146640 -29.500000 + vertex 51.337143 -1.777037 -29.500000 + vertex 50.851887 -4.007721 -29.500000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 28.853359 15.054111 -29.500000 + vertex 51.337143 -1.777037 -29.500000 + vertex 25.022228 12.591993 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 25.022228 12.591993 -29.500000 + vertex 51.337143 -1.777037 -29.500000 + vertex 50.054111 -6.146640 -29.500000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 30.992279 15.851888 -29.500000 + vertex 33.222961 16.337143 -29.500000 + vertex 28.853359 15.054111 -29.500000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 33.222961 16.337143 -29.500000 + vertex 35.500000 16.500000 -29.500000 + vertex 28.853359 15.054111 -29.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 40.007721 15.851888 30.500000 + vertex 35.500000 16.500000 30.500000 + vertex 28.853359 15.054111 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 40.007721 15.851888 30.500000 + vertex 37.777039 16.337143 30.500000 + vertex 35.500000 16.500000 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 40.007721 15.851888 30.500000 + vertex 51.337143 -1.777037 30.500000 + vertex 51.500000 0.500000 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 50.054111 7.146640 30.500000 + vertex 51.337143 2.777037 30.500000 + vertex 50.851887 5.007721 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 20.945889 -6.146640 30.500000 + vertex 22.039944 -8.150253 30.500000 + vertex 23.408007 -9.977772 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 20.945889 -6.146640 30.500000 + vertex 23.408007 -9.977772 30.500000 + vertex 25.022228 -11.591993 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 20.945889 -6.146640 30.500000 + vertex 25.022228 -11.591993 30.500000 + vertex 26.849747 -12.960056 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 47.591991 10.977772 30.500000 + vertex 50.054111 7.146640 30.500000 + vertex 48.960056 9.150253 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 30.992279 -14.851888 30.500000 + vertex 26.849747 -12.960056 30.500000 + vertex 28.853359 -14.054111 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 45.977772 12.591993 30.500000 + vertex 51.500000 0.500000 30.500000 + vertex 51.337143 2.777037 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 30.992279 -14.851888 30.500000 + vertex 20.945889 -6.146640 30.500000 + vertex 26.849747 -12.960056 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 45.977772 12.591993 30.500000 + vertex 44.150253 13.960056 30.500000 + vertex 42.146641 15.054111 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 45.977772 12.591993 30.500000 + vertex 42.146641 15.054111 30.500000 + vertex 40.007721 15.851888 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 45.977772 12.591993 30.500000 + vertex 40.007721 15.851888 30.500000 + vertex 51.500000 0.500000 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 45.977772 12.591993 30.500000 + vertex 51.337143 2.777037 30.500000 + vertex 50.054111 7.146640 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 45.977772 12.591993 30.500000 + vertex 50.054111 7.146640 30.500000 + vertex 47.591991 10.977772 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 35.500000 -15.500000 30.500000 + vertex 30.992279 -14.851888 30.500000 + vertex 33.222961 -15.337143 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 35.500000 -15.500000 30.500000 + vertex 20.945889 -6.146640 30.500000 + vertex 30.992279 -14.851888 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 19.500000 0.500000 30.500000 + vertex 19.662857 -1.777037 30.500000 + vertex 20.148113 -4.007721 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 19.500000 0.500000 30.500000 + vertex 20.148113 -4.007721 30.500000 + vertex 20.945889 -6.146640 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 37.777039 -15.337143 30.500000 + vertex 20.945889 -6.146640 30.500000 + vertex 35.500000 -15.500000 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 19.662857 2.777037 30.500000 + vertex 19.500000 0.500000 30.500000 + vertex 20.945889 -6.146640 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 42.146641 -14.054111 30.500000 + vertex 37.777039 -15.337143 30.500000 + vertex 40.007721 -14.851888 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 42.146641 -14.054111 30.500000 + vertex 20.945889 -6.146640 30.500000 + vertex 37.777039 -15.337143 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 20.945889 7.146640 30.500000 + vertex 20.148113 5.007721 30.500000 + vertex 19.662857 2.777037 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 45.977772 -11.591993 30.500000 + vertex 42.146641 -14.054111 30.500000 + vertex 44.150253 -12.960056 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 47.591991 -9.977772 30.500000 + vertex 42.146641 -14.054111 30.500000 + vertex 45.977772 -11.591993 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 25.022228 12.591993 30.500000 + vertex 23.408007 10.977772 30.500000 + vertex 22.039944 9.150253 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 25.022228 12.591993 30.500000 + vertex 22.039944 9.150253 30.500000 + vertex 20.945889 7.146640 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 50.054111 -6.146640 30.500000 + vertex 47.591991 -9.977772 30.500000 + vertex 48.960056 -8.150253 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 50.054111 -6.146640 30.500000 + vertex 19.662857 2.777037 30.500000 + vertex 20.945889 -6.146640 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 50.054111 -6.146640 30.500000 + vertex 20.945889 7.146640 30.500000 + vertex 19.662857 2.777037 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 50.054111 -6.146640 30.500000 + vertex 20.945889 -6.146640 30.500000 + vertex 42.146641 -14.054111 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 50.054111 -6.146640 30.500000 + vertex 25.022228 12.591993 30.500000 + vertex 20.945889 7.146640 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 50.054111 -6.146640 30.500000 + vertex 42.146641 -14.054111 30.500000 + vertex 47.591991 -9.977772 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 28.853359 15.054111 30.500000 + vertex 26.849747 13.960056 30.500000 + vertex 25.022228 12.591993 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 51.337143 -1.777037 30.500000 + vertex 50.054111 -6.146640 30.500000 + vertex 50.851887 -4.007721 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 51.337143 -1.777037 30.500000 + vertex 28.853359 15.054111 30.500000 + vertex 25.022228 12.591993 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 51.337143 -1.777037 30.500000 + vertex 25.022228 12.591993 30.500000 + vertex 50.054111 -6.146640 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 33.222961 16.337143 30.500000 + vertex 30.992279 15.851888 30.500000 + vertex 28.853359 15.054111 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 35.500000 16.500000 30.500000 + vertex 33.222961 16.337143 30.500000 + vertex 28.853359 15.054111 30.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 40.007721 15.851888 30.500000 + vertex 28.853359 15.054111 30.500000 + vertex 51.337143 -1.777037 30.500000 + endloop + endfacet + facet normal 0.000661 -0.983098 0.183081 + outer loop + vertex 21.616100 -7.452191 1.373303 + vertex 21.493242 -7.233742 2.546763 + vertex 0.500000 -7.289563 2.322828 + endloop + endfacet + facet normal -0.000747 -0.988280 0.152649 + outer loop + vertex 21.616100 -7.452191 1.373303 + vertex 0.500000 -7.289563 2.322828 + vertex 0.500000 -7.476526 1.112394 + endloop + endfacet + facet normal -0.000784 -1.000000 0.000000 + outer loop + vertex 21.639618 -7.493109 0.168034 + vertex 0.500000 -7.476526 1.112394 + vertex 0.500000 -7.476526 -0.112394 + endloop + endfacet + facet normal 0.000732 -0.999423 0.033944 + outer loop + vertex 21.639618 -7.493109 0.168034 + vertex 21.616100 -7.452191 1.373303 + vertex 0.500000 -7.476526 1.112394 + endloop + endfacet + facet normal 0.000000 0.997066 0.076549 + outer loop + vertex 21.643593 8.500000 0.500000 + vertex 0.500000 8.500000 0.500000 + vertex 0.500000 8.406243 1.721194 + endloop + endfacet + facet normal -0.000844 -0.988280 -0.152649 + outer loop + vertex 21.560614 -7.354522 -1.018713 + vertex 0.500000 -7.476526 -0.112394 + vertex 0.500000 -7.289563 -1.322828 + endloop + endfacet + facet normal 0.000760 -0.993244 -0.116041 + outer loop + vertex 21.560614 -7.354522 -1.018713 + vertex 21.639618 -7.493109 0.168034 + vertex 0.500000 -7.476526 -0.112394 + endloop + endfacet + facet normal -0.001006 0.973695 0.227853 + outer loop + vertex 21.547388 8.331002 2.135666 + vertex 0.500000 8.406243 1.721194 + vertex 0.500000 8.127172 2.913765 + endloop + endfacet + facet normal 0.001530 0.994694 0.102862 + outer loop + vertex 21.547388 8.331002 2.135666 + vertex 21.643593 8.500000 0.500000 + vertex 0.500000 8.406243 1.721194 + endloop + endfacet + facet normal -0.000923 -0.953396 -0.301720 + outer loop + vertex 21.390741 -7.045117 -2.159174 + vertex 0.500000 -7.289563 -1.322828 + vertex 0.500000 -6.920020 -2.490537 + endloop + endfacet + facet normal 0.000806 -0.965082 -0.261945 + outer loop + vertex 21.390741 -7.045117 -2.159174 + vertex 21.560614 -7.354522 -1.018713 + vertex 0.500000 -7.289563 -1.322828 + endloop + endfacet + facet normal -0.001003 0.927502 0.373817 + outer loop + vertex 21.283375 7.840816 3.680002 + vertex 0.500000 8.127172 2.913765 + vertex 0.500000 7.669324 4.049759 + endloop + endfacet + facet normal 0.001966 0.953040 0.302839 + outer loop + vertex 21.283375 7.840816 3.680002 + vertex 21.547388 8.331002 2.135666 + vertex 0.500000 8.127172 2.913765 + endloop + endfacet + facet normal -0.001007 -0.896165 -0.443720 + outer loop + vertex 21.149296 -6.575117 -3.233994 + vertex 0.500000 -6.920020 -2.490537 + vertex 0.500000 -6.376557 -3.588150 + endloop + endfacet + facet normal 0.000871 -0.916158 -0.400816 + outer loop + vertex 21.149296 -6.575117 -3.233994 + vertex 21.390741 -7.045117 -2.159174 + vertex 0.500000 -6.920020 -2.490537 + endloop + endfacet + facet normal -0.001046 0.859569 0.511018 + outer loop + vertex 21.008848 7.282812 4.741870 + vertex 0.500000 7.669324 4.049759 + vertex 0.500000 7.043435 5.102549 + endloop + endfacet + facet normal 0.000976 0.885114 0.465374 + outer loop + vertex 21.008848 7.282812 4.741870 + vertex 21.283375 7.840816 3.680002 + vertex 0.500000 7.669324 4.049759 + endloop + endfacet + facet normal -0.001071 -0.817929 -0.575318 + outer loop + vertex 20.856667 -5.947697 -4.235737 + vertex 0.500000 -6.376557 -3.588150 + vertex 0.500000 -5.671914 -4.589940 + endloop + endfacet + facet normal 0.000959 -0.847365 -0.531009 + outer loop + vertex 20.856667 -5.947697 -4.235737 + vertex 21.149296 -6.575117 -3.233994 + vertex 0.500000 -6.376557 -3.588150 + endloop + endfacet + facet normal 0.001193 0.800620 0.599171 + outer loop + vertex 20.661827 6.485701 5.807673 + vertex 21.008848 7.282812 4.741870 + vertex 0.500000 7.043435 5.102549 + endloop + endfacet + facet normal -0.000910 0.771489 0.636242 + outer loop + vertex 20.661827 6.485701 5.807673 + vertex 0.500000 7.043435 5.102549 + vertex 0.500000 6.264173 6.047460 + endloop + endfacet + facet normal -0.001093 -0.720521 -0.693432 + outer loop + vertex 20.531864 -5.152869 -5.160837 + vertex 0.500000 -5.671914 -4.589940 + vertex 0.500000 -4.822606 -5.472426 + endloop + endfacet + facet normal 0.001070 -0.758306 -0.651898 + outer loop + vertex 20.531864 -5.152869 -5.160837 + vertex 20.856667 -5.947697 -4.235737 + vertex 0.500000 -5.671914 -4.589940 + endloop + endfacet + facet normal 0.001093 0.687027 0.726631 + outer loop + vertex 20.290781 5.467865 6.770592 + vertex 20.661827 6.485701 5.807673 + vertex 0.500000 6.264173 6.047460 + endloop + endfacet + facet normal -0.000508 0.665326 0.746553 + outer loop + vertex 20.290781 5.467865 6.770592 + vertex 0.500000 6.264173 6.047460 + vertex 0.500000 5.349803 6.862343 + endloop + endfacet + facet normal -0.001029 -0.606225 -0.795292 + outer loop + vertex 20.196081 -4.167983 -5.996918 + vertex 0.500000 -4.822606 -5.472426 + vertex 0.500000 -3.848540 -6.214923 + endloop + endfacet + facet normal 0.001195 -0.646929 -0.762549 + outer loop + vertex 20.196081 -4.167983 -5.996918 + vertex 20.531864 -5.152869 -5.160837 + vertex 0.500000 -4.822606 -5.472426 + endloop + endfacet + facet normal 0.000652 0.543190 0.839610 + outer loop + vertex 19.930262 4.185544 7.600476 + vertex 20.290781 5.467865 6.770592 + vertex 0.500000 5.349803 6.862343 + endloop + endfacet + facet normal -0.000669 -0.477720 -0.878512 + outer loop + vertex 19.877827 -2.956544 -6.714728 + vertex 0.500000 -3.848540 -6.214923 + vertex 0.500000 -2.772549 -6.800029 + endloop + endfacet + facet normal 0.000684 0.543568 0.839365 + outer loop + vertex 19.930262 4.185544 7.600476 + vertex 0.500000 5.349803 6.862343 + vertex 0.500000 4.321759 7.528098 + endloop + endfacet + facet normal -0.000531 0.409068 0.912504 + outer loop + vertex 19.930262 4.185544 7.600476 + vertex 0.500000 4.321759 7.528098 + vertex 0.500000 3.204135 8.029120 + endloop + endfacet + facet normal 0.001260 -0.509515 -0.860461 + outer loop + vertex 19.877827 -2.956544 -6.714728 + vertex 20.196081 -4.167983 -5.996918 + vertex 0.500000 -3.848540 -6.214923 + endloop + endfacet + facet normal 0.001755 0.370872 0.928682 + outer loop + vertex 19.655348 2.724181 8.184596 + vertex 19.930262 4.185544 7.600476 + vertex 0.500000 3.204135 8.029120 + endloop + endfacet + facet normal -0.001187 0.264981 0.964253 + outer loop + vertex 19.655348 2.724181 8.184596 + vertex 0.500000 3.204135 8.029120 + vertex 0.500000 2.023129 8.353666 + endloop + endfacet + facet normal 0.000909 -0.338017 -0.941140 + outer loop + vertex 19.616875 -1.430375 -7.263611 + vertex 0.500000 -2.772549 -6.800029 + vertex 0.500000 -1.619852 -7.214028 + endloop + endfacet + facet normal -0.000659 -0.190391 -0.981708 + outer loop + vertex 19.616875 -1.430375 -7.263611 + vertex 0.500000 -1.619852 -7.214028 + vertex 0.500000 -0.417467 -7.447217 + endloop + endfacet + facet normal 0.000930 -0.338285 -0.941043 + outer loop + vertex 19.616875 -1.430375 -7.263611 + vertex 19.877827 -2.956544 -6.714728 + vertex 0.500000 -2.772549 -6.800029 + endloop + endfacet + facet normal 0.001509 0.195285 0.980745 + outer loop + vertex 19.524847 1.391352 8.450188 + vertex 19.655348 2.724181 8.184596 + vertex 0.500000 2.023129 8.353666 + endloop + endfacet + facet normal -0.001232 0.114683 0.993401 + outer loop + vertex 19.524847 1.391352 8.450188 + vertex 0.500000 2.023129 8.353666 + vertex 0.500000 0.806422 8.494129 + endloop + endfacet + facet normal -0.001074 -0.038303 -0.999266 + outer loop + vertex 19.508701 -0.027632 -7.482581 + vertex 0.500000 -0.417467 -7.447217 + vertex 0.500000 0.806422 -7.494130 + endloop + endfacet + facet normal 0.001323 -0.154134 -0.988049 + outer loop + vertex 19.508701 -0.027632 -7.482581 + vertex 19.616875 -1.430375 -7.263611 + vertex 0.500000 -0.417467 -7.447217 + endloop + endfacet + facet normal 0.001636 0.021906 0.999759 + outer loop + vertex 19.509182 -0.041983 8.481620 + vertex 19.524847 1.391352 8.450188 + vertex 0.500000 0.806422 8.494129 + endloop + endfacet + facet normal -0.001052 -0.038302 0.999266 + outer loop + vertex 19.509182 -0.041983 8.481620 + vertex 0.500000 0.806422 8.494129 + vertex 0.500000 -0.417467 8.447217 + endloop + endfacet + facet normal 0.001920 0.029909 -0.999551 + outer loop + vertex 19.531559 1.504439 -7.436693 + vertex 19.508701 -0.027632 -7.482581 + vertex 0.500000 0.806422 -7.494130 + endloop + endfacet + facet normal -0.001208 0.114683 -0.993401 + outer loop + vertex 19.531559 1.504439 -7.436693 + vertex 0.500000 0.806422 -7.494130 + vertex 0.500000 2.023129 -7.353667 + endloop + endfacet + facet normal 0.001165 -0.149580 0.988749 + outer loop + vertex 19.606678 -1.344529 8.284453 + vertex 19.509182 -0.041983 8.481620 + vertex 0.500000 -0.417467 8.447217 + endloop + endfacet + facet normal -0.000875 -0.190391 0.981708 + outer loop + vertex 19.606678 -1.344529 8.284453 + vertex 0.500000 -0.417467 8.447217 + vertex 0.500000 -1.619852 8.214028 + endloop + endfacet + facet normal 0.001379 0.207183 -0.978301 + outer loop + vertex 19.666361 2.801282 -7.161860 + vertex 19.531559 1.504439 -7.436693 + vertex 0.500000 2.023129 -7.353667 + endloop + endfacet + facet normal -0.001109 0.264982 -0.964253 + outer loop + vertex 19.666361 2.801282 -7.161860 + vertex 0.500000 2.023129 -7.353667 + vertex 0.500000 3.204135 -7.029120 + endloop + endfacet + facet normal 0.000783 -0.298494 0.954411 + outer loop + vertex 19.768930 -2.421203 7.947588 + vertex 19.606678 -1.344529 8.284453 + vertex 0.500000 -1.619852 8.214028 + endloop + endfacet + facet normal -0.001044 -0.338017 0.941139 + outer loop + vertex 19.768930 -2.421203 7.947588 + vertex 0.500000 -1.619852 8.214028 + vertex 0.500000 -2.772549 7.800029 + endloop + endfacet + facet normal 0.001001 0.355568 -0.934650 + outer loop + vertex 19.860142 3.875627 -6.752940 + vertex 19.666361 2.801282 -7.161860 + vertex 0.500000 3.204135 -7.029120 + endloop + endfacet + facet normal -0.001171 0.409068 -0.912503 + outer loop + vertex 19.860142 3.875627 -6.752940 + vertex 0.500000 3.204135 -7.029120 + vertex 0.500000 4.321759 -6.528098 + endloop + endfacet + facet normal 0.001172 -0.441166 0.897425 + outer loop + vertex 20.038578 -3.616358 7.359708 + vertex 19.768930 -2.421203 7.947588 + vertex 0.500000 -2.772549 7.800029 + endloop + endfacet + facet normal -0.000833 -0.477720 0.878512 + outer loop + vertex 20.038578 -3.616358 7.359708 + vertex 0.500000 -2.772549 7.800029 + vertex 0.500000 -3.848540 7.214923 + endloop + endfacet + facet normal 0.001395 0.497678 -0.867361 + outer loop + vertex 20.164255 5.062339 -6.071534 + vertex 19.860142 3.875627 -6.752940 + vertex 0.500000 4.321759 -6.528098 + endloop + endfacet + facet normal -0.000983 0.543567 -0.839365 + outer loop + vertex 20.164255 5.062339 -6.071534 + vertex 0.500000 4.321759 -6.528098 + vertex 0.500000 5.349803 -5.862343 + endloop + endfacet + facet normal 0.000939 -0.584814 0.811167 + outer loop + vertex 20.372141 -4.710361 6.570597 + vertex 20.038578 -3.616358 7.359708 + vertex 0.500000 -3.848540 7.214923 + endloop + endfacet + facet normal -0.000505 -0.606225 0.795293 + outer loop + vertex 20.372141 -4.710361 6.570597 + vertex 0.500000 -3.848540 7.214923 + vertex 0.500000 -4.822606 6.472426 + endloop + endfacet + facet normal 0.001173 0.639633 -0.768680 + outer loop + vertex 20.525652 6.136390 -5.177245 + vertex 20.164255 5.062339 -6.071534 + vertex 0.500000 5.349803 -5.862343 + endloop + endfacet + facet normal -0.000593 0.665326 -0.746553 + outer loop + vertex 20.525652 6.136390 -5.177245 + vertex 0.500000 5.349803 -5.862343 + vertex 0.500000 6.264173 -5.047460 + endloop + endfacet + facet normal 0.000518 -0.708749 0.705460 + outer loop + vertex 20.706879 -5.596193 5.680389 + vertex 20.372141 -4.710361 6.570597 + vertex 0.500000 -4.822606 6.472426 + endloop + endfacet + facet normal -0.000404 -0.720521 0.693432 + outer loop + vertex 20.706879 -5.596193 5.680389 + vertex 0.500000 -4.822606 6.472426 + vertex 0.500000 -5.671914 5.589940 + endloop + endfacet + facet normal 0.000643 0.760379 -0.649480 + outer loop + vertex 20.875492 6.990284 -4.177202 + vertex 20.525652 6.136390 -5.177245 + vertex 0.500000 6.264173 -5.047460 + endloop + endfacet + facet normal -0.000319 0.771489 -0.636243 + outer loop + vertex 20.875492 6.990284 -4.177202 + vertex 0.500000 6.264173 -5.047460 + vertex 0.500000 7.043435 -4.102549 + endloop + endfacet + facet normal 0.000395 -0.808490 0.588510 + outer loop + vertex 21.018789 -6.304007 4.707789 + vertex 20.706879 -5.596193 5.680389 + vertex 0.500000 -5.671914 5.589940 + endloop + endfacet + facet normal -0.000463 -0.817929 0.575319 + outer loop + vertex 21.018789 -6.304007 4.707789 + vertex 0.500000 -5.671914 5.589940 + vertex 0.500000 -6.376557 4.588150 + endloop + endfacet + facet normal 0.000332 0.855168 -0.518351 + outer loop + vertex 21.186325 7.649735 -3.089051 + vertex 20.875492 6.990284 -4.177202 + vertex 0.500000 7.043435 -4.102549 + endloop + endfacet + facet normal -0.000157 0.859570 -0.511019 + outer loop + vertex 21.186325 7.649735 -3.089051 + vertex 0.500000 7.043435 -4.102549 + vertex 0.500000 7.669324 -3.049759 + endloop + endfacet + facet normal 0.000168 0.927502 -0.373817 + outer loop + vertex 21.186325 7.649735 -3.089051 + vertex 0.500000 7.669324 -3.049759 + vertex 0.500000 8.127172 -1.913765 + endloop + endfacet + facet normal 0.000443 -0.886922 0.461919 + outer loop + vertex 21.287531 -6.848857 3.661376 + vertex 21.018789 -6.304007 4.707789 + vertex 0.500000 -6.376557 4.588150 + endloop + endfacet + facet normal -0.000579 -0.896165 0.443720 + outer loop + vertex 21.287531 -6.848857 3.661376 + vertex 0.500000 -6.376557 4.588150 + vertex 0.500000 -6.920020 3.490537 + endloop + endfacet + facet normal -0.000006 0.926437 -0.376450 + outer loop + vertex 21.434671 8.126698 -1.915257 + vertex 21.186325 7.649735 -3.089051 + vertex 0.500000 8.127172 -1.913765 + endloop + endfacet + facet normal 0.000006 0.973696 -0.227853 + outer loop + vertex 21.434671 8.126698 -1.915257 + vertex 0.500000 8.127172 -1.913765 + vertex 0.500000 8.406243 -0.721194 + endloop + endfacet + facet normal -0.000683 -0.953396 0.301720 + outer loop + vertex 21.493242 -7.233742 2.546763 + vertex 0.500000 -6.920020 3.490537 + vertex 0.500000 -7.289563 2.322828 + endloop + endfacet + facet normal 0.000553 -0.945201 0.326487 + outer loop + vertex 21.493242 -7.233742 2.546763 + vertex 21.287531 -6.848857 3.661376 + vertex 0.500000 -6.920020 3.490537 + endloop + endfacet + facet normal -0.000031 0.973553 -0.228463 + outer loop + vertex 21.589144 8.404941 -0.729599 + vertex 21.434671 8.126698 -1.915257 + vertex 0.500000 8.406243 -0.721194 + endloop + endfacet + facet normal 0.000031 0.997066 -0.076549 + outer loop + vertex 21.589144 8.404941 -0.729599 + vertex 0.500000 8.406243 -0.721194 + vertex 0.500000 8.500000 0.500000 + endloop + endfacet + facet normal 0.000000 0.997025 -0.077079 + outer loop + vertex 21.643593 8.500000 0.500000 + vertex 21.589144 8.404941 -0.729599 + vertex 0.500000 8.500000 0.500000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 8.406243 1.721194 + vertex 0.500000 7.669324 4.049759 + vertex 0.500000 8.127172 2.913765 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 8.406243 -0.721194 + vertex 0.500000 4.321759 7.528098 + vertex 0.500000 8.406243 1.721194 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.500000 0.806422 8.494129 + vertex 0.500000 4.321759 7.528098 + vertex 0.500000 -4.822606 6.472426 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex 0.500000 3.204135 8.029120 + vertex 0.500000 4.321759 7.528098 + vertex 0.500000 2.023129 8.353666 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 -5.671914 -4.589940 + vertex 0.500000 -3.848540 -6.214923 + vertex 0.500000 -4.822606 -5.472426 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex 0.500000 2.023129 8.353666 + vertex 0.500000 4.321759 7.528098 + vertex 0.500000 0.806422 8.494129 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 0.806422 -7.494130 + vertex 0.500000 4.321759 7.528098 + vertex 0.500000 5.349803 -5.862343 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 -4.822606 6.472426 + vertex 0.500000 4.321759 7.528098 + vertex 0.500000 0.806422 -7.494130 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 5.349803 -5.862343 + vertex 0.500000 4.321759 7.528098 + vertex 0.500000 7.669324 -3.049759 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 7.669324 -3.049759 + vertex 0.500000 4.321759 7.528098 + vertex 0.500000 8.406243 -0.721194 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 4.321759 7.528098 + vertex 0.500000 7.043435 5.102549 + vertex 0.500000 8.406243 1.721194 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 8.406243 1.721194 + vertex 0.500000 7.043435 5.102549 + vertex 0.500000 7.669324 4.049759 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 -5.671914 -4.589940 + vertex 0.500000 -2.772549 -6.800029 + vertex 0.500000 -3.848540 -6.214923 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 -6.376557 -3.588150 + vertex 0.500000 -6.920020 -2.490537 + vertex 0.500000 -5.671914 -4.589940 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex 0.500000 5.349803 6.862343 + vertex 0.500000 6.264173 6.047460 + vertex 0.500000 4.321759 7.528098 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 4.321759 7.528098 + vertex 0.500000 6.264173 6.047460 + vertex 0.500000 7.043435 5.102549 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 -2.772549 -6.800029 + vertex 0.500000 -0.417467 -7.447217 + vertex 0.500000 -1.619852 -7.214028 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 -5.671914 -4.589940 + vertex 0.500000 -0.417467 -7.447217 + vertex 0.500000 -2.772549 -6.800029 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 -7.289563 -1.322828 + vertex 0.500000 -7.476526 -0.112394 + vertex 0.500000 -6.920020 -2.490537 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 -6.920020 -2.490537 + vertex 0.500000 -7.476526 -0.112394 + vertex 0.500000 -5.671914 -4.589940 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 -0.417467 -7.447217 + vertex 0.500000 -7.476526 1.112394 + vertex 0.500000 0.806422 -7.494130 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 -5.671914 -4.589940 + vertex 0.500000 -7.476526 1.112394 + vertex 0.500000 -0.417467 -7.447217 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 -7.476526 -0.112394 + vertex 0.500000 -7.476526 1.112394 + vertex 0.500000 -5.671914 -4.589940 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.500000 -7.289563 2.322828 + vertex 0.500000 -6.920020 3.490537 + vertex 0.500000 -7.476526 1.112394 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 -7.476526 1.112394 + vertex 0.500000 -6.920020 3.490537 + vertex 0.500000 0.806422 -7.494130 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 0.806422 -7.494130 + vertex 0.500000 4.321759 -6.528098 + vertex 0.500000 2.023129 -7.353667 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 2.023129 -7.353667 + vertex 0.500000 4.321759 -6.528098 + vertex 0.500000 3.204135 -7.029120 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 0.806422 -7.494130 + vertex 0.500000 5.349803 -5.862343 + vertex 0.500000 4.321759 -6.528098 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.500000 -6.376557 4.588150 + vertex 0.500000 -5.671914 5.589940 + vertex 0.500000 -6.920020 3.490537 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 -6.920020 3.490537 + vertex 0.500000 -4.822606 6.472426 + vertex 0.500000 0.806422 -7.494130 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.500000 -5.671914 5.589940 + vertex 0.500000 -4.822606 6.472426 + vertex 0.500000 -6.920020 3.490537 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 5.349803 -5.862343 + vertex 0.500000 7.669324 -3.049759 + vertex 0.500000 6.264173 -5.047460 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 6.264173 -5.047460 + vertex 0.500000 7.669324 -3.049759 + vertex 0.500000 7.043435 -4.102549 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.500000 -3.848540 7.214923 + vertex 0.500000 -2.772549 7.800029 + vertex 0.500000 -4.822606 6.472426 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.500000 -2.772549 7.800029 + vertex 0.500000 -1.619852 8.214028 + vertex 0.500000 -4.822606 6.472426 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 7.669324 -3.049759 + vertex 0.500000 8.406243 -0.721194 + vertex 0.500000 8.127172 -1.913765 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.500000 -0.417467 8.447217 + vertex 0.500000 0.806422 8.494129 + vertex 0.500000 -1.619852 8.214028 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.500000 -1.619852 8.214028 + vertex 0.500000 0.806422 8.494129 + vertex 0.500000 -4.822606 6.472426 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 8.406243 -0.721194 + vertex 0.500000 8.406243 1.721194 + vertex 0.500000 8.500000 0.500000 + endloop + endfacet +endsolid Mesh diff --git a/apps/cpu/Multiphase/backup/FlowFocusing.stl b/apps/cpu/Multiphase/backup/FlowFocusing.stl new file mode 100644 index 0000000000000000000000000000000000000000..da02cc8b14f6358e7878ab6d19bd66f9fdf408ef Binary files /dev/null and b/apps/cpu/Multiphase/backup/FlowFocusing.stl differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusingS.ast b/apps/cpu/Multiphase/backup/FlowFocusingS.ast new file mode 100644 index 0000000000000000000000000000000000000000..147c1ff7a665b9bf91d4257b93c1af7c9bad65a2 --- /dev/null +++ b/apps/cpu/Multiphase/backup/FlowFocusingS.ast @@ -0,0 +1,3082 @@ +solid Mesh + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 10.594930 28.182674 + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 10.898214 29.576851 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 10.898214 29.576851 + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 11.000000 31.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -3.154150 40.096321 + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 7.548607 23.442505 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 7.548607 23.442505 + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 9.412536 25.593592 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 9.412536 25.593592 + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 10.594930 28.182674 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -0.423148 40.898216 + vertex -34.000000 2.423148 40.898216 + vertex -34.000000 -3.154150 40.096321 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 1.000000 41.000000 + vertex -34.000000 2.423148 40.898216 + vertex -34.000000 -0.423148 40.898216 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -3.154150 40.096321 + vertex -34.000000 2.423148 40.898216 + vertex -34.000000 10.898214 32.423149 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -6.557496 24.451393 + vertex -34.000000 -7.412535 25.593592 + vertex -34.000000 -5.548607 23.442505 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 10.096320 35.154152 + vertex -34.000000 10.594930 33.817326 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex -34.000000 3.817326 40.594929 + vertex -34.000000 5.154150 40.096321 + vertex -34.000000 2.423148 40.898216 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -8.096320 26.845850 + vertex -34.000000 -8.594930 28.182674 + vertex -34.000000 -7.412535 25.593592 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -7.412535 25.593592 + vertex -34.000000 -8.594930 28.182674 + vertex -34.000000 -5.548607 23.442505 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 10.096320 35.154152 + vertex -34.000000 8.557496 37.548607 + vertex -34.000000 9.412536 36.406406 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -3.154150 21.903681 + vertex -34.000000 -0.423148 21.101786 + vertex -34.000000 -1.817326 21.405069 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex -34.000000 6.406408 39.412537 + vertex -34.000000 7.548607 38.557495 + vertex -34.000000 5.154150 40.096321 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 2.423148 40.898216 + vertex -34.000000 7.548607 38.557495 + vertex -34.000000 10.898214 32.423149 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex -34.000000 5.154150 40.096321 + vertex -34.000000 7.548607 38.557495 + vertex -34.000000 2.423148 40.898216 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 7.548607 38.557495 + vertex -34.000000 10.096320 35.154152 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 10.096320 35.154152 + vertex -34.000000 7.548607 38.557495 + vertex -34.000000 8.557496 37.548607 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -8.898214 29.576851 + vertex -34.000000 -9.000000 31.000000 + vertex -34.000000 -8.594930 28.182674 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -5.548607 23.442505 + vertex -34.000000 2.423148 21.101786 + vertex -34.000000 -4.406408 22.587465 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -4.406408 22.587465 + vertex -34.000000 2.423148 21.101786 + vertex -34.000000 -3.154150 21.903681 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -0.423148 21.101786 + vertex -34.000000 2.423148 21.101786 + vertex -34.000000 1.000000 21.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -3.154150 21.903681 + vertex -34.000000 2.423148 21.101786 + vertex -34.000000 -0.423148 21.101786 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -8.898214 32.423149 + vertex -34.000000 -8.594930 33.817326 + vertex -34.000000 -9.000000 31.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -9.000000 31.000000 + vertex -34.000000 -8.594930 33.817326 + vertex -34.000000 -8.594930 28.182674 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 2.423148 21.101786 + vertex -34.000000 6.406408 22.587465 + vertex -34.000000 3.817326 21.405069 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 3.817326 21.405069 + vertex -34.000000 6.406408 22.587465 + vertex -34.000000 5.154150 21.903681 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -8.096320 35.154152 + vertex -34.000000 -7.412535 36.406406 + vertex -34.000000 -8.594930 33.817326 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -8.594930 28.182674 + vertex -34.000000 -7.412535 36.406406 + vertex -34.000000 -5.548607 23.442505 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -5.548607 23.442505 + vertex -34.000000 -7.412535 36.406406 + vertex -34.000000 2.423148 21.101786 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -8.594930 33.817326 + vertex -34.000000 -7.412535 36.406406 + vertex -34.000000 -8.594930 28.182674 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 2.423148 21.101786 + vertex -34.000000 -7.412535 36.406406 + vertex -34.000000 6.406408 22.587465 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -6.557496 37.548607 + vertex -34.000000 -5.548607 38.557495 + vertex -34.000000 -7.412535 36.406406 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 7.548607 23.442505 + vertex -34.000000 9.412536 25.593592 + vertex -34.000000 8.557496 24.451393 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -4.406408 39.412537 + vertex -34.000000 -3.154150 40.096321 + vertex -34.000000 -5.548607 38.557495 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 6.406408 22.587465 + vertex -34.000000 -3.154150 40.096321 + vertex -34.000000 7.548607 23.442505 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -7.412535 36.406406 + vertex -34.000000 -3.154150 40.096321 + vertex -34.000000 6.406408 22.587465 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -5.548607 38.557495 + vertex -34.000000 -3.154150 40.096321 + vertex -34.000000 -7.412535 36.406406 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 9.412536 25.593592 + vertex -34.000000 10.594930 28.182674 + vertex -34.000000 10.096320 26.845850 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -1.817326 40.594929 + vertex -34.000000 -0.423148 40.898216 + vertex -34.000000 -3.154150 40.096321 + endloop + endfacet + facet normal -0.000919 0.936949 -0.349464 + outer loop + vertex -6.470624 10.390941 27.563398 + vertex -34.000000 10.096320 26.845850 + vertex -34.000000 10.594930 28.182674 + endloop + endfacet + facet normal -0.000773 -0.936950 0.349464 + outer loop + vertex -6.375164 -8.466096 34.223824 + vertex -34.000000 -8.096320 35.154152 + vertex -34.000000 -8.594930 33.817326 + endloop + endfacet + facet normal 0.001442 -0.913852 0.406044 + outer loop + vertex -6.375164 -8.466096 34.223824 + vertex -7.218598 -7.743835 35.852356 + vertex -34.000000 -8.096320 35.154152 + endloop + endfacet + facet normal 0.000657 0.958118 -0.286375 + outer loop + vertex -6.012733 10.737638 28.724386 + vertex -6.470624 10.390941 27.563398 + vertex -34.000000 10.594930 28.182674 + endloop + endfacet + facet normal -0.000868 0.977146 -0.212565 + outer loop + vertex -6.012733 10.737638 28.724386 + vertex -34.000000 10.594930 28.182674 + vertex -34.000000 10.898214 29.576851 + endloop + endfacet + facet normal -0.000896 -0.977146 0.212565 + outer loop + vertex -5.941191 -8.788762 33.044537 + vertex -34.000000 -8.594930 33.817326 + vertex -34.000000 -8.898214 32.423149 + endloop + endfacet + facet normal 0.000612 -0.964490 0.264120 + outer loop + vertex -5.941191 -8.788762 33.044537 + vertex -6.375164 -8.466096 34.223824 + vertex -34.000000 -8.594930 33.817326 + endloop + endfacet + facet normal 0.000376 0.984892 -0.173172 + outer loop + vertex -5.737499 10.930061 29.819368 + vertex -6.012733 10.737638 28.724386 + vertex -34.000000 10.898214 29.576851 + endloop + endfacet + facet normal -0.000512 0.997452 -0.071339 + outer loop + vertex -5.737499 10.930061 29.819368 + vertex -34.000000 10.898214 29.576851 + vertex -34.000000 11.000000 31.000000 + endloop + endfacet + facet normal 0.000000 0.998250 -0.059135 + outer loop + vertex -5.633250 11.000000 31.000000 + vertex -5.737499 10.930061 29.819368 + vertex -34.000000 11.000000 31.000000 + endloop + endfacet + facet normal -0.000873 -0.997452 0.071339 + outer loop + vertex -5.659541 -8.982511 31.591177 + vertex -34.000000 -8.898214 32.423149 + vertex -34.000000 -9.000000 31.000000 + endloop + endfacet + facet normal -0.000307 0.997452 0.071339 + outer loop + vertex -5.757563 10.916418 32.290215 + vertex -34.000000 11.000000 31.000000 + vertex -34.000000 10.898214 32.423149 + endloop + endfacet + facet normal 0.000936 -0.991207 0.132320 + outer loop + vertex -5.659541 -8.982511 31.591177 + vertex -5.941191 -8.788762 33.044537 + vertex -34.000000 -8.898214 32.423149 + endloop + endfacet + facet normal 0.000000 0.997908 0.064646 + outer loop + vertex -5.757563 10.916418 32.290215 + vertex -5.633250 11.000000 31.000000 + vertex -34.000000 11.000000 31.000000 + endloop + endfacet + facet normal -0.000887 -0.997452 -0.071339 + outer loop + vertex -5.681127 -8.968077 30.201591 + vertex -34.000000 -9.000000 31.000000 + vertex -34.000000 -8.898214 29.576851 + endloop + endfacet + facet normal 0.000834 -0.999946 -0.010400 + outer loop + vertex -5.681127 -8.968077 30.201591 + vertex -5.659541 -8.982511 31.591177 + vertex -34.000000 -9.000000 31.000000 + endloop + endfacet + facet normal -0.000681 0.977147 0.212565 + outer loop + vertex -6.080200 10.688693 33.475727 + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 10.594930 33.817326 + endloop + endfacet + facet normal 0.000255 0.982033 0.188708 + outer loop + vertex -6.080200 10.688693 33.475727 + vertex -5.757563 10.916418 32.290215 + vertex -34.000000 10.898214 32.423149 + endloop + endfacet + facet normal -0.000863 -0.977147 -0.212565 + outer loop + vertex -5.919753 -8.803929 29.029472 + vertex -34.000000 -8.898214 29.576851 + vertex -34.000000 -8.594930 28.182674 + endloop + endfacet + facet normal 0.000619 -0.990318 -0.138813 + outer loop + vertex -5.919753 -8.803929 29.029472 + vertex -5.681127 -8.968077 30.201591 + vertex -34.000000 -8.898214 29.576851 + endloop + endfacet + facet normal 0.000499 0.953166 0.302446 + outer loop + vertex -6.528029 10.344987 34.559666 + vertex -6.080200 10.688693 33.475727 + vertex -34.000000 10.594930 33.817326 + endloop + endfacet + facet normal -0.000919 0.936949 0.349463 + outer loop + vertex -6.528029 10.344987 34.559666 + vertex -34.000000 10.594930 33.817326 + vertex -34.000000 10.096320 35.154152 + endloop + endfacet + facet normal -0.000511 -0.936950 -0.349464 + outer loop + vertex -6.298790 -8.525107 27.954950 + vertex -34.000000 -8.594930 28.182674 + vertex -34.000000 -8.096320 26.845850 + endloop + endfacet + facet normal 0.000374 -0.967912 -0.251290 + outer loop + vertex -6.298790 -8.525107 27.954950 + vertex -5.919753 -8.803929 29.029472 + vertex -34.000000 -8.594930 28.182674 + endloop + endfacet + facet normal 0.000978 0.905646 0.424035 + outer loop + vertex -7.240622 9.723082 35.889565 + vertex -6.528029 10.344987 34.559666 + vertex -34.000000 10.096320 35.154152 + endloop + endfacet + facet normal -0.000929 0.877678 0.479250 + outer loop + vertex -7.240622 9.723082 35.889565 + vertex -34.000000 10.096320 35.154152 + vertex -34.000000 9.412536 36.406406 + endloop + endfacet + facet normal -0.000508 -0.877679 -0.479249 + outer loop + vertex -6.938873 -7.998572 26.638153 + vertex -34.000000 -8.096320 26.845850 + vertex -34.000000 -7.412535 25.593592 + endloop + endfacet + facet normal 0.000502 -0.928437 -0.371490 + outer loop + vertex -6.938873 -7.998572 26.638153 + vertex -6.298790 -8.525107 27.954950 + vertex -34.000000 -8.096320 26.845850 + endloop + endfacet + facet normal 0.001581 0.818925 0.573899 + outer loop + vertex -8.299619 8.584002 37.517891 + vertex -7.240622 9.723082 35.889565 + vertex -34.000000 9.412536 36.406406 + endloop + endfacet + facet normal -0.000109 0.800542 0.599277 + outer loop + vertex -8.299619 8.584002 37.517891 + vertex -34.000000 9.412536 36.406406 + vertex -34.000000 8.557496 37.548607 + endloop + endfacet + facet normal 0.000116 0.707107 0.707107 + outer loop + vertex -8.299619 8.584002 37.517891 + vertex -34.000000 8.557496 37.548607 + vertex -34.000000 7.548607 38.557495 + endloop + endfacet + facet normal -0.000754 -0.800541 -0.599278 + outer loop + vertex -7.758467 -7.203003 25.280670 + vertex -34.000000 -7.412535 25.593592 + vertex -34.000000 -6.557496 24.451393 + endloop + endfacet + facet normal 0.000853 -0.862528 -0.506009 + outer loop + vertex -7.758467 -7.203003 25.280670 + vertex -6.938873 -7.998572 26.638153 + vertex -34.000000 -7.412535 25.593592 + endloop + endfacet + facet normal -0.000997 -0.707106 -0.707106 + outer loop + vertex -8.734071 -6.017682 23.875946 + vertex -34.000000 -6.557496 24.451393 + vertex -34.000000 -5.548607 23.442505 + endloop + endfacet + facet normal 0.001184 0.693748 0.720217 + outer loop + vertex -9.250660 7.238907 38.815117 + vertex -8.299619 8.584002 37.517891 + vertex -34.000000 7.548607 38.557495 + endloop + endfacet + facet normal 0.001614 -0.763715 -0.645552 + outer loop + vertex -8.734071 -6.017682 23.875946 + vertex -7.758467 -7.203003 25.280670 + vertex -34.000000 -6.557496 24.451393 + endloop + endfacet + facet normal -0.000834 0.599278 0.800540 + outer loop + vertex -9.250660 7.238907 38.815117 + vertex -34.000000 7.548607 38.557495 + vertex -34.000000 6.406408 39.412537 + endloop + endfacet + facet normal 0.001572 -0.631668 -0.775238 + outer loop + vertex -9.627810 -4.572220 22.696363 + vertex -8.734071 -6.017682 23.875946 + vertex -34.000000 -5.548607 23.442505 + endloop + endfacet + facet normal -0.000500 -0.599278 -0.800541 + outer loop + vertex -9.627810 -4.572220 22.696363 + vertex -34.000000 -5.548607 23.442505 + vertex -34.000000 -4.406408 22.587465 + endloop + endfacet + facet normal 0.001037 0.562496 0.826800 + outer loop + vertex -9.915038 5.986175 39.668221 + vertex -9.250660 7.238907 38.815117 + vertex -34.000000 6.406408 39.412537 + endloop + endfacet + facet normal -0.000955 0.479249 0.877679 + outer loop + vertex -9.915038 5.986175 39.668221 + vertex -34.000000 6.406408 39.412537 + vertex -34.000000 5.154150 40.096321 + endloop + endfacet + facet normal 0.000575 -0.488490 -0.872569 + outer loop + vertex -10.252209 -3.169867 21.910873 + vertex -9.627810 -4.572220 22.696363 + vertex -34.000000 -4.406408 22.587465 + endloop + endfacet + facet normal -0.000051 -0.479249 -0.877679 + outer loop + vertex -10.252209 -3.169867 21.910873 + vertex -34.000000 -4.406408 22.587465 + vertex -34.000000 -3.154150 21.903681 + endloop + endfacet + facet normal 0.001741 0.417216 0.908806 + outer loop + vertex -10.527491 4.334210 40.427780 + vertex -9.915038 5.986175 39.668221 + vertex -34.000000 5.154150 40.096321 + endloop + endfacet + facet normal 0.000052 -0.349465 -0.936949 + outer loop + vertex -10.252209 -3.169867 21.910873 + vertex -34.000000 -3.154150 21.903681 + vertex -34.000000 -1.817326 21.405069 + endloop + endfacet + facet normal -0.001023 0.349463 0.936950 + outer loop + vertex -10.527491 4.334210 40.427780 + vertex -34.000000 5.154150 40.096321 + vertex -34.000000 3.817326 40.594929 + endloop + endfacet + facet normal -0.000469 -0.212565 -0.977147 + outer loop + vertex -10.703868 -1.649430 21.357359 + vertex -34.000000 -1.817326 21.405069 + vertex -34.000000 -0.423148 21.101786 + endloop + endfacet + facet normal 0.001080 0.262953 0.964808 + outer loop + vertex -10.846192 2.915130 40.814899 + vertex -10.527491 4.334210 40.427780 + vertex -34.000000 3.817326 40.594929 + endloop + endfacet + facet normal 0.000540 -0.341944 -0.939720 + outer loop + vertex -10.703868 -1.649430 21.357359 + vertex -10.252209 -3.169867 21.910873 + vertex -34.000000 -1.817326 21.405069 + endloop + endfacet + facet normal -0.001001 0.212567 0.977146 + outer loop + vertex -10.846192 2.915130 40.814899 + vertex -34.000000 3.817326 40.594929 + vertex -34.000000 2.423148 40.898216 + endloop + endfacet + facet normal 0.000954 -0.186630 -0.982430 + outer loop + vertex -10.951837 -0.074060 21.057848 + vertex -10.703868 -1.649430 21.357359 + vertex -34.000000 -0.423148 21.101786 + endloop + endfacet + facet normal -0.000821 -0.071339 -0.997452 + outer loop + vertex -10.951837 -0.074060 21.057848 + vertex -34.000000 -0.423148 21.101786 + vertex -34.000000 1.000000 21.000000 + endloop + endfacet + facet normal 0.001328 0.105907 0.994375 + outer loop + vertex -10.998376 1.197410 40.998051 + vertex -10.846192 2.915130 40.814899 + vertex -34.000000 2.423148 40.898216 + endloop + endfacet + facet normal -0.000528 0.071338 0.997452 + outer loop + vertex -10.998376 1.197410 40.998051 + vertex -34.000000 2.423148 40.898216 + vertex -34.000000 1.000000 41.000000 + endloop + endfacet + facet normal 0.001303 -0.025876 -0.999664 + outer loop + vertex -10.987032 1.557723 21.015564 + vertex -10.951837 -0.074060 21.057848 + vertex -34.000000 1.000000 21.000000 + endloop + endfacet + facet normal -0.001054 0.071339 -0.997451 + outer loop + vertex -10.987032 1.557723 21.015564 + vertex -34.000000 1.000000 21.000000 + vertex -34.000000 2.423148 21.101786 + endloop + endfacet + facet normal 0.000652 -0.066086 0.997814 + outer loop + vertex -10.903988 -0.514951 40.884579 + vertex -10.998376 1.197410 40.998051 + vertex -34.000000 1.000000 41.000000 + endloop + endfacet + facet normal 0.000305 -0.071338 0.997452 + outer loop + vertex -10.903988 -0.514951 40.884579 + vertex -34.000000 1.000000 41.000000 + vertex -34.000000 -0.423148 40.898216 + endloop + endfacet + facet normal 0.001446 0.137151 -0.990549 + outer loop + vertex -10.800443 3.179347 21.240366 + vertex -10.987032 1.557723 21.015564 + vertex -34.000000 2.423148 21.101786 + endloop + endfacet + facet normal -0.001092 0.212565 -0.977146 + outer loop + vertex -10.800443 3.179347 21.240366 + vertex -34.000000 2.423148 21.101786 + vertex -34.000000 3.817326 21.405069 + endloop + endfacet + facet normal -0.000259 -0.210447 0.977605 + outer loop + vertex -10.695628 -1.685570 40.632637 + vertex -10.903988 -0.514951 40.884579 + vertex -34.000000 -0.423148 40.898216 + endloop + endfacet + facet normal -0.000379 -0.212567 0.977146 + outer loop + vertex -10.695628 -1.685570 40.632637 + vertex -34.000000 -0.423148 40.898216 + vertex -34.000000 -1.817326 40.594929 + endloop + endfacet + facet normal 0.001252 0.292401 -0.956295 + outer loop + vertex -10.429211 4.656930 21.692644 + vertex -10.800443 3.179347 21.240366 + vertex -34.000000 3.817326 21.405069 + endloop + endfacet + facet normal -0.001017 0.349465 -0.936949 + outer loop + vertex -10.429211 4.656930 21.692644 + vertex -34.000000 3.817326 21.405069 + vertex -34.000000 5.154150 21.903681 + endloop + endfacet + facet normal 0.000342 -0.330589 0.943775 + outer loop + vertex -10.343766 -2.913946 40.202229 + vertex -10.695628 -1.685570 40.632637 + vertex -34.000000 -1.817326 40.594929 + endloop + endfacet + facet normal -0.000646 -0.349463 0.936950 + outer loop + vertex -10.343766 -2.913946 40.202229 + vertex -34.000000 -1.817326 40.594929 + vertex -34.000000 -3.154150 40.096321 + endloop + endfacet + facet normal 0.000892 0.426229 -0.904615 + outer loop + vertex -9.974246 5.854475 22.257341 + vertex -10.429211 4.656930 21.692644 + vertex -34.000000 5.154150 21.903681 + endloop + endfacet + facet normal -0.001050 0.479249 -0.877679 + outer loop + vertex -9.974246 5.854475 22.257341 + vertex -34.000000 5.154150 21.903681 + vertex -34.000000 6.406408 22.587465 + endloop + endfacet + facet normal 0.000565 -0.449518 0.893271 + outer loop + vertex -9.880333 -4.061458 39.624477 + vertex -10.343766 -2.913946 40.202229 + vertex -34.000000 -3.154150 40.096321 + endloop + endfacet + facet normal -0.000858 -0.479249 0.877679 + outer loop + vertex -9.880333 -4.061458 39.624477 + vertex -34.000000 -3.154150 40.096321 + vertex -34.000000 -4.406408 39.412537 + endloop + endfacet + facet normal 0.001231 0.552229 -0.833691 + outer loop + vertex -9.295414 7.164775 23.126274 + vertex -9.974246 5.854475 22.257341 + vertex -34.000000 6.406408 22.587465 + endloop + endfacet + facet normal -0.000936 0.599277 -0.800541 + outer loop + vertex -9.295414 7.164775 23.126274 + vertex -34.000000 6.406408 22.587465 + vertex -34.000000 7.548607 23.442505 + endloop + endfacet + facet normal 0.000947 -0.570730 0.821137 + outer loop + vertex -9.197071 -5.326117 38.744690 + vertex -9.880333 -4.061458 39.624477 + vertex -34.000000 -4.406408 39.412537 + endloop + endfacet + facet normal -0.000666 -0.599279 0.800540 + outer loop + vertex -9.197071 -5.326117 38.744690 + vertex -34.000000 -4.406408 39.412537 + vertex -34.000000 -5.548607 38.557495 + endloop + endfacet + facet normal 0.001325 0.685290 -0.728269 + outer loop + vertex -8.372675 8.493528 24.378290 + vertex -9.295414 7.164775 23.126274 + vertex -34.000000 7.548607 23.442505 + endloop + endfacet + facet normal 0.000902 -0.700754 0.713403 + outer loop + vertex -8.256754 -6.636262 37.456585 + vertex -9.197071 -5.326117 38.744690 + vertex -34.000000 -5.548607 38.557495 + endloop + endfacet + facet normal -0.000252 0.707107 -0.707107 + outer loop + vertex -8.372675 8.493528 24.378290 + vertex -34.000000 7.548607 23.442505 + vertex -34.000000 8.557496 24.451393 + endloop + endfacet + facet normal 0.000364 -0.707107 0.707107 + outer loop + vertex -8.256754 -6.636262 37.456585 + vertex -34.000000 -5.548607 38.557495 + vertex -34.000000 -6.557496 37.548607 + endloop + endfacet + facet normal 0.000289 0.800541 -0.599278 + outer loop + vertex -8.372675 8.493528 24.378290 + vertex -34.000000 8.557496 24.451393 + vertex -34.000000 9.412536 25.593592 + endloop + endfacet + facet normal -0.000307 -0.800542 0.599277 + outer loop + vertex -8.256754 -6.636262 37.456585 + vertex -34.000000 -6.557496 37.548607 + vertex -34.000000 -7.412535 36.406406 + endloop + endfacet + facet normal 0.001198 0.809614 -0.586961 + outer loop + vertex -7.338007 9.630043 25.948034 + vertex -8.372675 8.493528 24.378290 + vertex -34.000000 9.412536 25.593592 + endloop + endfacet + facet normal -0.000789 0.877679 -0.479249 + outer loop + vertex -7.338007 9.630043 25.948034 + vertex -34.000000 9.412536 25.593592 + vertex -34.000000 10.096320 26.845850 + endloop + endfacet + facet normal -0.000943 -0.877678 0.479250 + outer loop + vertex -7.218598 -7.743835 35.852356 + vertex -34.000000 -7.412535 36.406406 + vertex -34.000000 -8.096320 35.154152 + endloop + endfacet + facet normal 0.001594 -0.822439 0.568851 + outer loop + vertex -7.218598 -7.743835 35.852356 + vertex -8.256754 -6.636262 37.456585 + vertex -34.000000 -7.412535 36.406406 + endloop + endfacet + facet normal 0.001445 0.904362 -0.426764 + outer loop + vertex -6.470624 10.390941 27.563398 + vertex -7.338007 9.630043 25.948034 + vertex -34.000000 10.096320 26.845850 + endloop + endfacet + facet normal 0.995973 0.089639 -0.001845 + outer loop + vertex 12.906315 2.496555 23.141226 + vertex 13.000000 1.000000 1.000000 + vertex 12.807155 3.142683 1.000000 + endloop + endfacet + facet normal 0.998046 0.062478 0.000000 + outer loop + vertex 12.906315 2.496555 23.141226 + vertex 13.000000 1.000000 23.000000 + vertex 13.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.998997 0.044772 0.000000 + outer loop + vertex 13.000000 1.000000 61.000000 + vertex 13.000000 1.000000 39.000000 + vertex 12.951891 2.073451 38.927654 + endloop + endfacet + facet normal 0.984363 0.176153 0.000732 + outer loop + vertex 12.685336 3.730003 23.480221 + vertex 12.906315 2.496555 23.141226 + vertex 12.807155 3.142683 1.000000 + endloop + endfacet + facet normal 0.963961 0.266036 -0.001727 + outer loop + vertex 12.234818 5.216498 1.000000 + vertex 12.685336 3.730003 23.480221 + vertex 12.807155 3.142683 1.000000 + endloop + endfacet + facet normal 0.962709 0.270535 -0.001404 + outer loop + vertex 12.401385 4.742783 23.929527 + vertex 12.685336 3.730003 23.480221 + vertex 12.234818 5.216498 1.000000 + endloop + endfacet + facet normal 0.995972 0.089639 0.002189 + outer loop + vertex 12.807155 3.142683 61.000000 + vertex 13.000000 1.000000 61.000000 + vertex 12.951891 2.073451 38.927654 + endloop + endfacet + facet normal 0.991662 0.128868 0.000260 + outer loop + vertex 12.807155 3.142683 61.000000 + vertex 12.951891 2.073451 38.927654 + vertex 12.829484 3.015767 38.741879 + endloop + endfacet + facet normal 0.973905 0.226955 -0.000317 + outer loop + vertex 12.501177 4.423876 38.230289 + vertex 12.807155 3.142683 61.000000 + vertex 12.829484 3.015767 38.741879 + endloop + endfacet + facet normal 0.933649 0.358189 0.000618 + outer loop + vertex 11.975570 5.851481 24.638937 + vertex 12.401385 4.742783 23.929527 + vertex 12.234818 5.216498 1.000000 + endloop + endfacet + facet normal 0.900968 0.433883 -0.001774 + outer loop + vertex 11.301386 7.154791 1.000000 + vertex 11.975570 5.851481 24.638937 + vertex 12.234818 5.216498 1.000000 + endloop + endfacet + facet normal 0.894453 0.447161 -0.000856 + outer loop + vertex 11.475355 6.853796 25.547195 + vertex 11.975570 5.851481 24.638937 + vertex 11.301386 7.154791 1.000000 + endloop + endfacet + facet normal 0.938377 0.345613 -0.001054 + outer loop + vertex 12.234818 5.216498 61.000000 + vertex 12.501177 4.423876 38.230289 + vertex 11.968547 5.867337 37.348938 + endloop + endfacet + facet normal 0.963961 0.266036 0.002016 + outer loop + vertex 12.234818 5.216498 61.000000 + vertex 12.807155 3.142683 61.000000 + vertex 12.501177 4.423876 38.230289 + endloop + endfacet + facet normal 0.853562 0.520991 0.000339 + outer loop + vertex 10.990158 7.648063 26.549915 + vertex 11.475355 6.853796 25.547195 + vertex 11.301386 7.154791 1.000000 + endloop + endfacet + facet normal 0.809016 0.587785 -0.001708 + outer loop + vertex 10.553408 8.261708 27.643276 + vertex 11.301386 7.154791 1.000000 + vertex 10.036858 8.895265 1.000000 + endloop + endfacet + facet normal 0.813608 0.581412 -0.001314 + outer loop + vertex 10.553408 8.261708 27.643276 + vertex 10.990158 7.648063 26.549915 + vertex 11.301386 7.154791 1.000000 + endloop + endfacet + facet normal 0.845588 0.533836 -0.000276 + outer loop + vertex 11.301386 7.154791 61.000000 + vertex 11.405221 6.977572 36.316826 + vertex 10.866963 7.829570 35.166172 + endloop + endfacet + facet normal 0.891587 0.452849 0.000499 + outer loop + vertex 11.301386 7.154791 61.000000 + vertex 11.968547 5.867337 37.348938 + vertex 11.405221 6.977572 36.316826 + endloop + endfacet + facet normal 0.900967 0.433883 0.001796 + outer loop + vertex 11.301386 7.154791 61.000000 + vertex 12.234818 5.216498 61.000000 + vertex 11.968547 5.867337 37.348938 + endloop + endfacet + facet normal 0.781345 0.624100 -0.000308 + outer loop + vertex 10.203491 8.700374 28.831072 + vertex 10.553408 8.261708 27.643276 + vertex 10.036858 8.895265 1.000000 + endloop + endfacet + facet normal 0.759111 0.650961 0.000013 + outer loop + vertex 10.013048 8.922435 29.888680 + vertex 10.203491 8.700374 28.831072 + vertex 10.036858 8.895265 1.000000 + endloop + endfacet + facet normal 0.748174 0.663503 -0.000007 + outer loop + vertex 9.944272 9.000000 31.000000 + vertex 10.013048 8.922435 29.888680 + vertex 10.036858 8.895265 1.000000 + endloop + endfacet + facet normal 0.691063 0.722795 -0.000391 + outer loop + vertex 8.481877 10.381978 1.000000 + vertex 9.944272 9.000000 31.000000 + vertex 10.036858 8.895265 1.000000 + endloop + endfacet + facet normal 0.750689 0.660656 -0.000010 + outer loop + vertex 10.036858 8.895265 61.000000 + vertex 10.070409 8.856697 32.507420 + vertex 9.944272 9.000000 31.000000 + endloop + endfacet + facet normal 0.769816 0.638266 0.000043 + outer loop + vertex 10.036858 8.895265 61.000000 + vertex 10.402563 8.455991 33.899689 + vertex 10.070409 8.856697 32.507420 + endloop + endfacet + facet normal 0.802209 0.597042 0.001148 + outer loop + vertex 10.036858 8.895265 61.000000 + vertex 10.866963 7.829570 35.166172 + vertex 10.402563 8.455991 33.899689 + endloop + endfacet + facet normal 0.809016 0.587785 0.001748 + outer loop + vertex 10.036858 8.895265 61.000000 + vertex 11.301386 7.154791 61.000000 + vertex 10.866963 7.829570 35.166172 + endloop + endfacet + facet normal 0.691063 0.722795 0.000391 + outer loop + vertex 8.481877 10.381978 61.000000 + vertex 10.036858 8.895265 61.000000 + vertex 9.944272 9.000000 31.000000 + endloop + endfacet + facet normal 0.550897 0.834573 0.000000 + outer loop + vertex 8.481877 10.381978 61.000000 + vertex 8.481877 10.381978 1.000000 + vertex 6.686424 11.567146 1.000000 + endloop + endfacet + facet normal 0.686841 0.726808 0.000000 + outer loop + vertex 8.481877 10.381978 61.000000 + vertex 9.944272 9.000000 31.000000 + vertex 8.481877 10.381978 1.000000 + endloop + endfacet + facet normal 0.550897 0.834573 0.000000 + outer loop + vertex 6.686424 11.567146 61.000000 + vertex 8.481877 10.381978 61.000000 + vertex 6.686424 11.567146 1.000000 + endloop + endfacet + facet normal 0.393025 0.919528 0.000000 + outer loop + vertex 6.686424 11.567146 61.000000 + vertex 6.686424 11.567146 1.000000 + vertex 4.708204 12.412678 1.000000 + endloop + endfacet + facet normal 0.393025 0.919528 0.000000 + outer loop + vertex 4.708204 12.412678 61.000000 + vertex 6.686424 11.567146 61.000000 + vertex 4.708204 12.412678 1.000000 + endloop + endfacet + facet normal 0.222521 0.974928 0.000000 + outer loop + vertex 4.708204 12.412678 61.000000 + vertex 4.708204 12.412678 1.000000 + vertex 2.610799 12.891397 1.000000 + endloop + endfacet + facet normal 0.222521 0.974928 0.000000 + outer loop + vertex 2.610799 12.891397 61.000000 + vertex 4.708204 12.412678 61.000000 + vertex 2.610799 12.891397 1.000000 + endloop + endfacet + facet normal 0.044865 0.998993 0.000000 + outer loop + vertex 2.610799 12.891397 61.000000 + vertex 2.610799 12.891397 1.000000 + vertex 0.461622 12.987917 1.000000 + endloop + endfacet + facet normal -0.134233 0.990950 0.000000 + outer loop + vertex 0.461622 12.987917 61.000000 + vertex 0.461622 12.987917 1.000000 + vertex -1.670251 12.699135 1.000000 + endloop + endfacet + facet normal 0.044865 0.998993 0.000000 + outer loop + vertex 0.461622 12.987917 61.000000 + vertex 2.610799 12.891397 61.000000 + vertex 0.461622 12.987917 1.000000 + endloop + endfacet + facet normal -0.309017 0.951057 0.000000 + outer loop + vertex -1.670251 12.699135 61.000000 + vertex -1.670251 12.699135 1.000000 + vertex -3.716300 12.034333 1.000000 + endloop + endfacet + facet normal -0.134233 0.990950 0.000000 + outer loop + vertex -1.670251 12.699135 61.000000 + vertex 0.461622 12.987917 61.000000 + vertex -1.670251 12.699135 1.000000 + endloop + endfacet + facet normal -0.309017 0.951057 0.000000 + outer loop + vertex -3.716300 12.034333 61.000000 + vertex -1.670251 12.699135 61.000000 + vertex -3.716300 12.034333 1.000000 + endloop + endfacet + facet normal -0.473869 0.880596 0.000082 + outer loop + vertex -5.633250 11.000000 31.000000 + vertex -3.716300 12.034333 1.000000 + vertex -5.610764 11.014879 1.000000 + endloop + endfacet + facet normal -0.474858 0.880063 0.000000 + outer loop + vertex -5.633250 11.000000 31.000000 + vertex -3.716300 12.034333 61.000000 + vertex -3.716300 12.034333 1.000000 + endloop + endfacet + facet normal -0.557076 0.830461 -0.000006 + outer loop + vertex -5.737499 10.930061 29.819368 + vertex -5.633250 11.000000 31.000000 + vertex -5.610764 11.014879 1.000000 + endloop + endfacet + facet normal -0.572700 0.819765 -0.000106 + outer loop + vertex -6.012733 10.737638 28.724386 + vertex -5.737499 10.930061 29.819368 + vertex -5.610764 11.014879 1.000000 + endloop + endfacet + facet normal -0.623489 0.781830 -0.001818 + outer loop + vertex -6.470624 10.390941 27.563398 + vertex -5.610764 11.014879 1.000000 + vertex -7.292752 9.673538 1.000000 + endloop + endfacet + facet normal -0.602432 0.798170 -0.000753 + outer loop + vertex -6.470624 10.390941 27.563398 + vertex -6.012733 10.737638 28.724386 + vertex -5.610764 11.014879 1.000000 + endloop + endfacet + facet normal -0.557913 0.829899 0.000007 + outer loop + vertex -5.610764 11.014879 61.000000 + vertex -5.633250 11.000000 31.000000 + vertex -5.757563 10.916418 32.290215 + endloop + endfacet + facet normal -0.576298 0.817240 0.000144 + outer loop + vertex -5.610764 11.014879 61.000000 + vertex -5.757563 10.916418 32.290215 + vertex -6.080200 10.688693 33.475727 + endloop + endfacet + facet normal -0.607404 0.794393 0.000945 + outer loop + vertex -5.610764 11.014879 61.000000 + vertex -6.080200 10.688693 33.475727 + vertex -6.528029 10.344987 34.559666 + endloop + endfacet + facet normal -0.473869 0.880596 -0.000082 + outer loop + vertex -5.610764 11.014879 61.000000 + vertex -3.716300 12.034333 61.000000 + vertex -5.633250 11.000000 31.000000 + endloop + endfacet + facet normal -0.659575 0.751638 0.000114 + outer loop + vertex -7.338007 9.630043 25.948034 + vertex -6.470624 10.390941 27.563398 + vertex -7.292752 9.673538 1.000000 + endloop + endfacet + facet normal -0.753070 0.657938 -0.001578 + outer loop + vertex -8.372675 8.493528 24.378290 + vertex -7.292752 9.673538 1.000000 + vertex -8.708204 8.053423 1.000000 + endloop + endfacet + facet normal -0.739348 0.673324 -0.000167 + outer loop + vertex -8.372675 8.493528 24.378290 + vertex -7.338007 9.630043 25.948034 + vertex -7.292752 9.673538 1.000000 + endloop + endfacet + facet normal -0.657409 0.753534 0.000122 + outer loop + vertex -7.292752 9.673538 61.000000 + vertex -6.528029 10.344987 34.559666 + vertex -7.240622 9.723082 35.889565 + endloop + endfacet + facet normal -0.623489 0.781830 0.001822 + outer loop + vertex -7.292752 9.673538 61.000000 + vertex -5.610764 11.014879 61.000000 + vertex -6.528029 10.344987 34.559666 + endloop + endfacet + facet normal -0.732509 0.680757 -0.000178 + outer loop + vertex -8.299619 8.584002 37.517891 + vertex -7.292752 9.673538 61.000000 + vertex -7.240622 9.723082 35.889565 + endloop + endfacet + facet normal -0.858447 0.512898 -0.002183 + outer loop + vertex -9.295414 7.164775 23.126274 + vertex -8.708204 8.053423 1.000000 + vertex -9.811626 6.206605 1.000000 + endloop + endfacet + facet normal -0.821844 0.569712 0.001070 + outer loop + vertex -9.295414 7.164775 23.126274 + vertex -8.372675 8.493528 24.378290 + vertex -8.708204 8.053423 1.000000 + endloop + endfacet + facet normal -0.817061 0.576550 -0.001190 + outer loop + vertex -8.708204 8.053423 61.000000 + vertex -8.299619 8.584002 37.517891 + vertex -9.250660 7.238907 38.815117 + endloop + endfacet + facet normal -0.753070 0.657938 0.001763 + outer loop + vertex -8.708204 8.053423 61.000000 + vertex -7.292752 9.673538 61.000000 + vertex -8.299619 8.584002 37.517891 + endloop + endfacet + facet normal -0.888137 0.459578 0.000819 + outer loop + vertex -9.974246 5.854475 22.257341 + vertex -9.295414 7.164775 23.126274 + vertex -9.811626 6.206605 1.000000 + endloop + endfacet + facet normal -0.936234 0.351374 -0.001628 + outer loop + vertex -10.429211 4.656930 21.692644 + vertex -9.811626 6.206605 1.000000 + vertex -10.567554 4.192442 1.000000 + endloop + endfacet + facet normal -0.934612 0.355666 -0.001258 + outer loop + vertex -10.429211 4.656930 21.692644 + vertex -9.974246 5.854475 22.257341 + vertex -9.811626 6.206605 1.000000 + endloop + endfacet + facet normal -0.883604 0.468235 -0.000555 + outer loop + vertex -9.811626 6.206605 61.000000 + vertex -9.250660 7.238907 38.815117 + vertex -9.915038 5.986175 39.668221 + endloop + endfacet + facet normal -0.858447 0.512898 0.002159 + outer loop + vertex -9.811626 6.206605 61.000000 + vertex -8.708204 8.053423 61.000000 + vertex -9.250660 7.238907 38.815117 + endloop + endfacet + facet normal -0.969932 0.243376 0.001022 + outer loop + vertex -10.800443 3.179347 21.240366 + vertex -10.429211 4.656930 21.692644 + vertex -10.567554 4.192442 1.000000 + endloop + endfacet + facet normal -0.983927 0.178556 -0.002384 + outer loop + vertex -10.951692 2.075672 1.000000 + vertex -10.800443 3.179347 21.240366 + vertex -10.567554 4.192442 1.000000 + endloop + endfacet + facet normal -0.937549 0.347852 0.000571 + outer loop + vertex -10.567554 4.192442 61.000000 + vertex -9.915038 5.986175 39.668221 + vertex -10.527491 4.334210 40.427780 + endloop + endfacet + facet normal -0.936235 0.351375 0.000908 + outer loop + vertex -10.567554 4.192442 61.000000 + vertex -9.811626 6.206605 61.000000 + vertex -9.915038 5.986175 39.668221 + endloop + endfacet + facet normal -0.975719 0.219024 -0.000391 + outer loop + vertex -10.846192 2.915130 40.814899 + vertex -10.567554 4.192442 61.000000 + vertex -10.527491 4.334210 40.427780 + endloop + endfacet + facet normal -0.993463 0.114145 0.001200 + outer loop + vertex -10.987032 1.557723 21.015564 + vertex -10.800443 3.179347 21.240366 + vertex -10.951692 2.075672 1.000000 + endloop + endfacet + facet normal -0.999999 0.000000 -0.001766 + outer loop + vertex -10.951692 -0.075672 1.000000 + vertex -10.987032 1.557723 21.015564 + vertex -10.951692 2.075672 1.000000 + endloop + endfacet + facet normal -0.996112 0.088087 -0.001543 + outer loop + vertex -10.951692 2.075672 61.000000 + vertex -10.846192 2.915130 40.814899 + vertex -10.998376 1.197410 40.998051 + endloop + endfacet + facet normal -0.983927 0.178556 0.002283 + outer loop + vertex -10.951692 2.075672 61.000000 + vertex -10.567554 4.192442 61.000000 + vertex -10.846192 2.915130 40.814899 + endloop + endfacet + facet normal -0.999767 -0.021564 -0.000005 + outer loop + vertex -10.951837 -0.074060 21.057848 + vertex -10.987032 1.557723 21.015564 + vertex -10.951692 -0.075672 1.000000 + endloop + endfacet + facet normal -0.987838 -0.155488 0.000005 + outer loop + vertex -10.703868 -1.649430 21.357359 + vertex -10.951837 -0.074060 21.057848 + vertex -10.951692 -0.075672 1.000000 + endloop + endfacet + facet normal -0.983928 -0.178557 -0.001826 + outer loop + vertex -10.703868 -1.649430 21.357359 + vertex -10.951692 -0.075672 1.000000 + vertex -10.567554 -2.192442 1.000000 + endloop + endfacet + facet normal -0.999997 0.000000 0.002334 + outer loop + vertex -10.951692 -0.075672 61.000000 + vertex -10.951692 2.075672 61.000000 + vertex -10.998376 1.197410 40.998051 + endloop + endfacet + facet normal -0.998488 -0.054961 -0.001168 + outer loop + vertex -10.951692 -0.075672 61.000000 + vertex -10.998376 1.197410 40.998051 + vertex -10.903988 -0.514951 40.884579 + endloop + endfacet + facet normal -0.984469 -0.175549 0.001499 + outer loop + vertex -10.695628 -1.685570 40.632637 + vertex -10.951692 -0.075672 61.000000 + vertex -10.903988 -0.514951 40.884579 + endloop + endfacet + facet normal -0.958714 -0.284370 0.001166 + outer loop + vertex -10.252209 -3.169867 21.910873 + vertex -10.703868 -1.649430 21.357359 + vertex -10.567554 -2.192442 1.000000 + endloop + endfacet + facet normal -0.936232 -0.351374 -0.002305 + outer loop + vertex -9.811626 -4.206605 1.000000 + vertex -10.252209 -3.169867 21.910873 + vertex -10.567554 -2.192442 1.000000 + endloop + endfacet + facet normal -0.983928 -0.178557 0.001743 + outer loop + vertex -10.567554 -2.192442 61.000000 + vertex -10.951692 -0.075672 61.000000 + vertex -10.695628 -1.685570 40.632637 + endloop + endfacet + facet normal -0.961412 -0.275111 -0.000801 + outer loop + vertex -10.567554 -2.192442 61.000000 + vertex -10.695628 -1.685570 40.632637 + vertex -10.343766 -2.913946 40.202229 + endloop + endfacet + facet normal -0.913724 -0.406335 0.000894 + outer loop + vertex -9.627810 -4.572220 22.696363 + vertex -10.252209 -3.169867 21.910873 + vertex -9.811626 -4.206605 1.000000 + endloop + endfacet + facet normal -0.858448 -0.512899 -0.001370 + outer loop + vertex -8.708204 -6.053423 1.000000 + vertex -9.627810 -4.572220 22.696363 + vertex -9.811626 -4.206605 1.000000 + endloop + endfacet + facet normal -0.927161 -0.374662 0.000436 + outer loop + vertex -9.811626 -4.206605 61.000000 + vertex -10.343766 -2.913946 40.202229 + vertex -9.880333 -4.061458 39.624477 + endloop + endfacet + facet normal -0.936233 -0.351374 0.002116 + outer loop + vertex -9.811626 -4.206605 61.000000 + vertex -10.567554 -2.192442 61.000000 + vertex -10.343766 -2.913946 40.202229 + endloop + endfacet + facet normal -0.879920 -0.475121 -0.000398 + outer loop + vertex -9.197071 -5.326117 38.744690 + vertex -9.811626 -4.206605 61.000000 + vertex -9.880333 -4.061458 39.624477 + endloop + endfacet + facet normal -0.850496 -0.525982 -0.000140 + outer loop + vertex -8.734071 -6.017682 23.875946 + vertex -9.627810 -4.572220 22.696363 + vertex -8.708204 -6.053423 1.000000 + endloop + endfacet + facet normal -0.772173 -0.635412 0.000120 + outer loop + vertex -7.758467 -7.203003 25.280670 + vertex -8.734071 -6.017682 23.875946 + vertex -8.708204 -6.053423 1.000000 + endloop + endfacet + facet normal -0.753070 -0.657938 -0.001694 + outer loop + vertex -7.758467 -7.203003 25.280670 + vertex -8.708204 -6.053423 1.000000 + vertex -7.292752 -7.673538 1.000000 + endloop + endfacet + facet normal -0.812957 -0.582322 -0.001173 + outer loop + vertex -8.708204 -6.053423 61.000000 + vertex -9.197071 -5.326117 38.744690 + vertex -8.256754 -6.636262 37.456585 + endloop + endfacet + facet normal -0.858447 -0.512898 0.002095 + outer loop + vertex -8.708204 -6.053423 61.000000 + vertex -9.811626 -4.206605 61.000000 + vertex -9.197071 -5.326117 38.744690 + endloop + endfacet + facet normal -0.696962 -0.717107 0.000529 + outer loop + vertex -6.938873 -7.998572 26.638153 + vertex -7.758467 -7.203003 25.280670 + vertex -7.292752 -7.673538 1.000000 + endloop + endfacet + facet normal -0.623489 -0.781830 -0.001709 + outer loop + vertex -6.298790 -8.525107 27.954950 + vertex -7.292752 -7.673538 1.000000 + vertex -5.610764 -9.014879 1.000000 + endloop + endfacet + facet normal -0.633988 -0.773343 -0.001053 + outer loop + vertex -6.298790 -8.525107 27.954950 + vertex -6.938873 -7.998572 26.638153 + vertex -7.292752 -7.673538 1.000000 + endloop + endfacet + facet normal -0.729775 -0.683688 -0.000241 + outer loop + vertex -7.292752 -7.673538 61.000000 + vertex -8.256754 -6.636262 37.456585 + vertex -7.218598 -7.743835 35.852356 + endloop + endfacet + facet normal -0.650207 -0.759757 0.000207 + outer loop + vertex -7.292752 -7.673538 61.000000 + vertex -7.218598 -7.743835 35.852356 + vertex -6.375164 -8.466096 34.223824 + endloop + endfacet + facet normal -0.753070 -0.657938 0.001848 + outer loop + vertex -7.292752 -7.673538 61.000000 + vertex -8.708204 -6.053423 61.000000 + vertex -8.256754 -6.636262 37.456585 + endloop + endfacet + facet normal -0.591715 -0.806147 -0.000456 + outer loop + vertex -5.919753 -8.803929 29.029472 + vertex -6.298790 -8.525107 27.954950 + vertex -5.610764 -9.014879 1.000000 + endloop + endfacet + facet normal -0.566597 -0.823995 -0.000045 + outer loop + vertex -5.681127 -8.968077 30.201591 + vertex -5.919753 -8.803929 29.029472 + vertex -5.610764 -9.014879 1.000000 + endloop + endfacet + facet normal -0.492774 -0.870156 -0.001384 + outer loop + vertex -3.716300 -10.034333 1.000000 + vertex -5.659541 -8.982511 31.591177 + vertex -5.681127 -8.968077 30.201591 + endloop + endfacet + facet normal -0.473869 -0.880595 0.000270 + outer loop + vertex -3.716300 -10.034333 1.000000 + vertex -5.681127 -8.968077 30.201591 + vertex -5.610764 -9.014879 1.000000 + endloop + endfacet + facet normal -0.595712 -0.803198 0.000545 + outer loop + vertex -5.610764 -9.014879 61.000000 + vertex -6.375164 -8.466096 34.223824 + vertex -5.941191 -8.788762 33.044537 + endloop + endfacet + facet normal -0.566640 -0.823965 0.000033 + outer loop + vertex -5.610764 -9.014879 61.000000 + vertex -5.941191 -8.788762 33.044537 + vertex -5.659541 -8.982511 31.591177 + endloop + endfacet + facet normal -0.623489 -0.781830 0.001775 + outer loop + vertex -5.610764 -9.014879 61.000000 + vertex -7.292752 -7.673538 61.000000 + vertex -6.375164 -8.466096 34.223824 + endloop + endfacet + facet normal -0.476015 -0.879437 -0.000000 + outer loop + vertex -3.716300 -10.034333 61.000000 + vertex -5.659541 -8.982511 31.591177 + vertex -3.716300 -10.034333 1.000000 + endloop + endfacet + facet normal -0.473869 -0.880596 -0.000183 + outer loop + vertex -3.716300 -10.034333 61.000000 + vertex -5.610764 -9.014879 61.000000 + vertex -5.659541 -8.982511 31.591177 + endloop + endfacet + facet normal -0.309017 -0.951057 -0.000000 + outer loop + vertex -1.670251 -10.699135 61.000000 + vertex -3.716300 -10.034333 1.000000 + vertex -1.670251 -10.699135 1.000000 + endloop + endfacet + facet normal -0.309017 -0.951057 0.000000 + outer loop + vertex -1.670251 -10.699135 61.000000 + vertex -3.716300 -10.034333 61.000000 + vertex -3.716300 -10.034333 1.000000 + endloop + endfacet + facet normal -0.134233 -0.990950 -0.000000 + outer loop + vertex 0.461622 -10.987917 61.000000 + vertex -1.670251 -10.699135 1.000000 + vertex 0.461622 -10.987917 1.000000 + endloop + endfacet + facet normal -0.134233 -0.990950 0.000000 + outer loop + vertex 0.461622 -10.987917 61.000000 + vertex -1.670251 -10.699135 61.000000 + vertex -1.670251 -10.699135 1.000000 + endloop + endfacet + facet normal 0.044865 -0.998993 0.000000 + outer loop + vertex 2.610799 -10.891397 61.000000 + vertex 0.461622 -10.987917 1.000000 + vertex 2.610799 -10.891397 1.000000 + endloop + endfacet + facet normal 0.044865 -0.998993 0.000000 + outer loop + vertex 2.610799 -10.891397 61.000000 + vertex 0.461622 -10.987917 61.000000 + vertex 0.461622 -10.987917 1.000000 + endloop + endfacet + facet normal 0.222521 -0.974928 0.000000 + outer loop + vertex 4.708204 -10.412678 61.000000 + vertex 2.610799 -10.891397 1.000000 + vertex 4.708204 -10.412678 1.000000 + endloop + endfacet + facet normal 0.222521 -0.974928 0.000000 + outer loop + vertex 4.708204 -10.412678 61.000000 + vertex 2.610799 -10.891397 61.000000 + vertex 2.610799 -10.891397 1.000000 + endloop + endfacet + facet normal 0.393025 -0.919528 0.000000 + outer loop + vertex 6.686424 -9.567146 61.000000 + vertex 4.708204 -10.412678 1.000000 + vertex 6.686424 -9.567146 1.000000 + endloop + endfacet + facet normal 0.393025 -0.919528 0.000000 + outer loop + vertex 6.686424 -9.567146 61.000000 + vertex 4.708204 -10.412678 61.000000 + vertex 4.708204 -10.412678 1.000000 + endloop + endfacet + facet normal 0.550897 -0.834573 0.000000 + outer loop + vertex 8.481877 -8.381978 61.000000 + vertex 6.686424 -9.567146 1.000000 + vertex 8.481877 -8.381978 1.000000 + endloop + endfacet + facet normal 0.550897 -0.834573 0.000000 + outer loop + vertex 8.481877 -8.381978 61.000000 + vertex 6.686424 -9.567146 61.000000 + vertex 6.686424 -9.567146 1.000000 + endloop + endfacet + facet normal 0.691063 -0.722795 -0.000345 + outer loop + vertex 9.957149 -6.985579 30.519876 + vertex 8.481877 -8.381978 1.000000 + vertex 10.036858 -6.895265 1.000000 + endloop + endfacet + facet normal 0.687426 -0.726254 0.000000 + outer loop + vertex 9.957149 -6.985579 30.519876 + vertex 8.481877 -8.381978 61.000000 + vertex 8.481877 -8.381978 1.000000 + endloop + endfacet + facet normal 0.708120 -0.706089 0.001925 + outer loop + vertex 9.987243 -6.951696 31.877798 + vertex 8.481877 -8.381978 61.000000 + vertex 9.957149 -6.985579 30.519876 + endloop + endfacet + facet normal 0.753489 -0.657461 0.000023 + outer loop + vertex 10.123698 -6.794750 29.199480 + vertex 9.957149 -6.985579 30.519876 + vertex 10.036858 -6.895265 1.000000 + endloop + endfacet + facet normal 0.773520 -0.633772 -0.000123 + outer loop + vertex 10.441307 -6.406870 27.977043 + vertex 10.123698 -6.794750 29.199480 + vertex 10.036858 -6.895265 1.000000 + endloop + endfacet + facet normal 0.803340 -0.595519 -0.001263 + outer loop + vertex 10.859378 -5.840517 26.851828 + vertex 10.441307 -6.406870 27.977043 + vertex 10.036858 -6.895265 1.000000 + endloop + endfacet + facet normal 0.809016 -0.587784 -0.001759 + outer loop + vertex 10.859378 -5.840517 26.851828 + vertex 10.036858 -6.895265 1.000000 + vertex 11.301386 -5.154791 1.000000 + endloop + endfacet + facet normal 0.691063 -0.722795 0.000223 + outer loop + vertex 10.036858 -6.895265 61.000000 + vertex 8.481877 -8.381978 61.000000 + vertex 9.987243 -6.951696 31.877798 + endloop + endfacet + facet normal 0.781345 -0.624099 0.000308 + outer loop + vertex 10.036858 -6.895265 61.000000 + vertex 10.203491 -6.700374 33.168926 + vertex 10.553408 -6.261708 34.356724 + endloop + endfacet + facet normal 0.758090 -0.652150 -0.000028 + outer loop + vertex 10.036858 -6.895265 61.000000 + vertex 9.987243 -6.951696 31.877798 + vertex 10.203491 -6.700374 33.168926 + endloop + endfacet + facet normal 0.842107 -0.539311 0.000093 + outer loop + vertex 11.336069 -5.096366 25.819815 + vertex 10.859378 -5.840517 26.851828 + vertex 11.301386 -5.154791 1.000000 + endloop + endfacet + facet normal 0.883041 -0.469295 -0.000129 + outer loop + vertex 11.837209 -4.153146 24.880760 + vertex 11.336069 -5.096366 25.819815 + vertex 11.301386 -5.154791 1.000000 + endloop + endfacet + facet normal 0.900967 -0.433883 -0.002017 + outer loop + vertex 11.837209 -4.153146 24.880760 + vertex 11.301386 -5.154791 1.000000 + vertex 12.234818 -3.216498 1.000000 + endloop + endfacet + facet normal 0.853562 -0.520991 -0.000339 + outer loop + vertex 11.301386 -5.154791 61.000000 + vertex 10.990158 -5.648063 35.450085 + vertex 11.475355 -4.853796 36.452805 + endloop + endfacet + facet normal 0.813608 -0.581412 0.001314 + outer loop + vertex 11.301386 -5.154791 61.000000 + vertex 10.553408 -6.261708 34.356724 + vertex 10.990158 -5.648063 35.450085 + endloop + endfacet + facet normal 0.809016 -0.587785 0.001708 + outer loop + vertex 11.301386 -5.154791 61.000000 + vertex 10.036858 -6.895265 61.000000 + vertex 10.553408 -6.261708 34.356724 + endloop + endfacet + facet normal 0.894453 -0.447161 0.000856 + outer loop + vertex 11.975570 -3.851482 37.361065 + vertex 11.301386 -5.154791 61.000000 + vertex 11.475355 -4.853796 36.452805 + endloop + endfacet + facet normal 0.920709 -0.390251 0.000023 + outer loop + vertex 12.239279 -3.204594 24.194017 + vertex 11.837209 -4.153146 24.880760 + vertex 12.234818 -3.216498 1.000000 + endloop + endfacet + facet normal 0.951728 -0.306942 -0.000025 + outer loop + vertex 12.578117 -2.153920 23.647940 + vertex 12.239279 -3.204594 24.194017 + vertex 12.234818 -3.216498 1.000000 + endloop + endfacet + facet normal 0.963961 -0.266036 -0.002130 + outer loop + vertex 12.578117 -2.153920 23.647940 + vertex 12.234818 -3.216498 1.000000 + vertex 12.807155 -1.142683 1.000000 + endloop + endfacet + facet normal 0.933649 -0.358189 -0.000618 + outer loop + vertex 12.234818 -3.216498 61.000000 + vertex 11.975570 -3.851482 37.361065 + vertex 12.401385 -2.742783 38.070473 + endloop + endfacet + facet normal 0.900968 -0.433883 0.001774 + outer loop + vertex 12.234818 -3.216498 61.000000 + vertex 11.301386 -5.154791 61.000000 + vertex 11.975570 -3.851482 37.361065 + endloop + endfacet + facet normal 0.962709 -0.270535 0.001404 + outer loop + vertex 12.685336 -1.730003 38.519779 + vertex 12.234818 -3.216498 61.000000 + vertex 12.401385 -2.742783 38.070473 + endloop + endfacet + facet normal 0.977880 -0.209164 0.000550 + outer loop + vertex 12.854566 -0.862602 23.219851 + vertex 12.578117 -2.153920 23.647940 + vertex 12.807155 -1.142683 1.000000 + endloop + endfacet + facet normal 0.992916 -0.118816 -0.000621 + outer loop + vertex 12.959556 0.015602 23.060797 + vertex 12.854566 -0.862602 23.219851 + vertex 12.807155 -1.142683 1.000000 + endloop + endfacet + facet normal 0.995972 -0.089639 -0.002174 + outer loop + vertex 12.959556 0.015602 23.060797 + vertex 12.807155 -1.142683 1.000000 + vertex 13.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.984363 -0.176153 -0.000732 + outer loop + vertex 12.807155 -1.142683 61.000000 + vertex 12.685336 -1.730003 38.519779 + vertex 12.906315 -0.496555 38.858772 + endloop + endfacet + facet normal 0.963961 -0.266036 0.001727 + outer loop + vertex 12.807155 -1.142683 61.000000 + vertex 12.234818 -3.216498 61.000000 + vertex 12.685336 -1.730003 38.519779 + endloop + endfacet + facet normal 0.999157 -0.041051 0.000000 + outer loop + vertex 13.000000 1.000000 23.000000 + vertex 12.959556 0.015602 23.060797 + vertex 13.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.998046 -0.062478 0.000000 + outer loop + vertex 13.000000 1.000000 61.000000 + vertex 12.906315 -0.496555 38.858772 + vertex 13.000000 1.000000 39.000000 + endloop + endfacet + facet normal 0.995973 -0.089639 0.001845 + outer loop + vertex 13.000000 1.000000 61.000000 + vertex 12.807155 -1.142683 61.000000 + vertex 12.906315 -0.496555 38.858772 + endloop + endfacet + facet normal -0.000014 -0.989717 -0.143040 + outer loop + vertex 131.000000 -6.799423 29.219833 + vertex 9.957149 -6.985579 30.519876 + vertex 10.123698 -6.794750 29.199480 + endloop + endfacet + facet normal 0.000014 -0.953169 -0.302437 + outer loop + vertex 131.000000 -6.799423 29.219833 + vertex 10.123698 -6.794750 29.199480 + vertex 10.441307 -6.406870 27.977043 + endloop + endfacet + facet normal 0.000326 -0.993712 -0.111965 + outer loop + vertex 131.000000 -6.799423 29.219833 + vertex 131.000000 -7.000000 31.000000 + vertex 9.957149 -6.985579 30.519876 + endloop + endfacet + facet normal 0.000000 0.995512 0.094638 + outer loop + vertex 131.000000 9.000000 31.000000 + vertex 9.944272 9.000000 31.000000 + vertex 10.070409 8.856697 32.507420 + endloop + endfacet + facet normal -0.000196 -0.893205 -0.449649 + outer loop + vertex 131.000000 -6.207751 27.528931 + vertex 10.441307 -6.406870 27.977043 + vertex 10.859378 -5.840517 26.851828 + endloop + endfacet + facet normal -0.000169 0.960980 0.276618 + outer loop + vertex 131.000000 8.799423 32.780167 + vertex 10.070409 8.856697 32.507420 + vertex 10.402563 8.455991 33.899689 + endloop + endfacet + facet normal 0.000331 -0.943883 -0.330279 + outer loop + vertex 131.000000 -6.207751 27.528931 + vertex 131.000000 -6.799423 29.219833 + vertex 10.441307 -6.406870 27.977043 + endloop + endfacet + facet normal 0.000218 0.993712 0.111965 + outer loop + vertex 131.000000 8.799423 32.780167 + vertex 131.000000 9.000000 31.000000 + vertex 10.070409 8.856697 32.507420 + endloop + endfacet + facet normal -0.000133 -0.811094 -0.584915 + outer loop + vertex 131.000000 -5.254652 26.012081 + vertex 10.859378 -5.840517 26.851828 + vertex 11.336069 -5.096366 25.819815 + endloop + endfacet + facet normal 0.000410 -0.846724 -0.532032 + outer loop + vertex 131.000000 -5.254652 26.012081 + vertex 131.000000 -6.207751 27.528931 + vertex 10.859378 -5.840517 26.851828 + endloop + endfacet + facet normal -0.000256 0.896312 0.443423 + outer loop + vertex 131.000000 8.207751 34.471069 + vertex 10.402563 8.455991 33.899689 + vertex 10.866963 7.829570 35.166172 + endloop + endfacet + facet normal 0.000378 0.943883 0.330279 + outer loop + vertex 131.000000 8.207751 34.471069 + vertex 131.000000 8.799423 32.780167 + vertex 10.402563 8.455991 33.899689 + endloop + endfacet + facet normal 0.000173 -0.705586 -0.708624 + outer loop + vertex 131.000000 -3.987918 24.745348 + vertex 11.336069 -5.096366 25.819815 + vertex 11.837209 -4.153146 24.880760 + endloop + endfacet + facet normal -0.000107 -0.586402 -0.810021 + outer loop + vertex 131.000000 -3.987918 24.745348 + vertex 11.837209 -4.153146 24.880760 + vertex 12.239279 -3.204594 24.194017 + endloop + endfacet + facet normal -0.000225 0.803620 0.595143 + outer loop + vertex 131.000000 7.254652 35.987919 + vertex 10.866963 7.829570 35.166172 + vertex 11.405221 6.977572 36.316826 + endloop + endfacet + facet normal 0.000201 -0.707107 -0.707107 + outer loop + vertex 131.000000 -3.987918 24.745348 + vertex 131.000000 -5.254652 26.012081 + vertex 11.336069 -5.096366 25.819815 + endloop + endfacet + facet normal 0.000413 0.846724 0.532032 + outer loop + vertex 131.000000 7.254652 35.987919 + vertex 131.000000 8.207751 34.471069 + vertex 10.866963 7.829570 35.166172 + endloop + endfacet + facet normal -0.000154 -0.461132 -0.887331 + outer loop + vertex 131.000000 -2.471070 23.792250 + vertex 12.239279 -3.204594 24.194017 + vertex 12.578117 -2.153920 23.647940 + endloop + endfacet + facet normal -0.000110 0.680839 0.732433 + outer loop + vertex 131.000000 5.987918 37.254650 + vertex 11.405221 6.977572 36.316826 + vertex 11.968547 5.867337 37.348938 + endloop + endfacet + facet normal 0.000422 -0.532032 -0.846724 + outer loop + vertex 131.000000 -2.471070 23.792250 + vertex 131.000000 -3.987918 24.745348 + vertex 12.239279 -3.204594 24.194017 + endloop + endfacet + facet normal 0.000306 0.707106 0.707107 + outer loop + vertex 131.000000 5.987918 37.254650 + vertex 131.000000 7.254652 35.987919 + vertex 11.405221 6.977572 36.316826 + endloop + endfacet + facet normal -0.000045 0.521109 0.853490 + outer loop + vertex 131.000000 4.471070 38.207752 + vertex 11.968547 5.867337 37.348938 + vertex 12.501177 4.423876 38.230289 + endloop + endfacet + facet normal 0.000043 0.341486 0.939887 + outer loop + vertex 131.000000 4.471070 38.207752 + vertex 12.501177 4.423876 38.230289 + vertex 12.829484 3.015767 38.741879 + endloop + endfacet + facet normal 0.000132 0.532033 0.846723 + outer loop + vertex 131.000000 4.471070 38.207752 + vertex 131.000000 5.987918 37.254650 + vertex 11.968547 5.867337 37.348938 + endloop + endfacet + facet normal 0.000065 -0.314685 -0.949196 + outer loop + vertex 131.000000 -0.780167 23.200577 + vertex 12.578117 -2.153920 23.647940 + vertex 12.854566 -0.862602 23.219851 + endloop + endfacet + facet normal -0.000036 -0.178209 -0.983993 + outer loop + vertex 131.000000 -0.780167 23.200577 + vertex 12.854566 -0.862602 23.219851 + vertex 12.959556 0.015602 23.060797 + endloop + endfacet + facet normal 0.000266 -0.330279 -0.943883 + outer loop + vertex 131.000000 -0.780167 23.200577 + vertex 131.000000 -2.471070 23.792250 + vertex 12.578117 -2.153920 23.647940 + endloop + endfacet + facet normal -0.000092 0.193413 0.981117 + outer loop + vertex 131.000000 2.780168 38.799423 + vertex 12.829484 3.015767 38.741879 + vertex 12.951891 2.073451 38.927654 + endloop + endfacet + facet normal 0.000199 0.330278 0.943884 + outer loop + vertex 131.000000 2.780168 38.799423 + vertex 131.000000 4.471070 38.207752 + vertex 12.829484 3.015767 38.741879 + endloop + endfacet + facet normal 0.000000 0.093950 -0.995577 + outer loop + vertex 131.000000 1.000000 23.000000 + vertex 13.000000 1.000000 23.000000 + vertex 12.906315 2.496555 23.141226 + endloop + endfacet + facet normal -0.000000 -0.061643 -0.998098 + outer loop + vertex 131.000000 1.000000 23.000000 + vertex 12.959556 0.015602 23.060797 + vertex 13.000000 1.000000 23.000000 + endloop + endfacet + facet normal 0.000422 -0.111965 -0.993712 + outer loop + vertex 131.000000 1.000000 23.000000 + vertex 131.000000 -0.780167 23.200577 + vertex 12.959556 0.015602 23.060797 + endloop + endfacet + facet normal 0.000409 0.111965 0.993712 + outer loop + vertex 131.000000 1.000000 39.000000 + vertex 131.000000 2.780168 38.799423 + vertex 12.951891 2.073451 38.927654 + endloop + endfacet + facet normal 0.000000 -0.093951 0.995577 + outer loop + vertex 131.000000 1.000000 39.000000 + vertex 13.000000 1.000000 39.000000 + vertex 12.906315 -0.496555 38.858772 + endloop + endfacet + facet normal 0.000000 0.067243 0.997737 + outer loop + vertex 131.000000 1.000000 39.000000 + vertex 12.951891 2.073451 38.927654 + vertex 13.000000 1.000000 39.000000 + endloop + endfacet + facet normal -0.000152 0.264984 -0.964253 + outer loop + vertex 131.000000 2.780168 23.200577 + vertex 12.906315 2.496555 23.141226 + vertex 12.685336 3.730003 23.480221 + endloop + endfacet + facet normal 0.000231 0.111965 -0.993712 + outer loop + vertex 131.000000 2.780168 23.200577 + vertex 131.000000 1.000000 23.000000 + vertex 12.906315 2.496555 23.141226 + endloop + endfacet + facet normal -0.000152 -0.264982 0.964253 + outer loop + vertex 131.000000 -0.780167 38.799423 + vertex 12.906315 -0.496555 38.858772 + vertex 12.685336 -1.730003 38.519779 + endloop + endfacet + facet normal -0.000129 0.405492 -0.914099 + outer loop + vertex 131.000000 4.471070 23.792250 + vertex 12.685336 3.730003 23.480221 + vertex 12.401385 4.742783 23.929527 + endloop + endfacet + facet normal 0.000231 -0.111965 0.993712 + outer loop + vertex 131.000000 -0.780167 38.799423 + vertex 131.000000 1.000000 39.000000 + vertex 12.906315 -0.496555 38.858772 + endloop + endfacet + facet normal 0.000421 0.330279 -0.943883 + outer loop + vertex 131.000000 4.471070 23.792250 + vertex 131.000000 2.780168 23.200577 + vertex 12.685336 3.730003 23.480221 + endloop + endfacet + facet normal -0.000129 -0.405492 0.914099 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 12.685336 -1.730003 38.519779 + vertex 12.401385 -2.742783 38.070473 + endloop + endfacet + facet normal 0.000421 -0.330278 0.943883 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 -0.780167 38.799423 + vertex 12.685336 -1.730003 38.519779 + endloop + endfacet + facet normal 0.000135 0.539006 -0.842302 + outer loop + vertex 131.000000 5.987918 24.745348 + vertex 12.401385 4.742783 23.929527 + vertex 11.975570 5.851481 24.638937 + endloop + endfacet + facet normal -0.000107 0.671454 -0.741046 + outer loop + vertex 131.000000 5.987918 24.745348 + vertex 11.975570 5.851481 24.638937 + vertex 11.475355 6.853796 25.547195 + endloop + endfacet + facet normal 0.000239 0.532032 -0.846724 + outer loop + vertex 131.000000 5.987918 24.745348 + vertex 131.000000 4.471070 23.792250 + vertex 12.401385 4.742783 23.929527 + endloop + endfacet + facet normal -0.000213 0.783825 -0.620981 + outer loop + vertex 131.000000 7.254652 26.012081 + vertex 11.475355 6.853796 25.547195 + vertex 10.990158 7.648063 26.549915 + endloop + endfacet + facet normal 0.000239 -0.532033 0.846723 + outer loop + vertex 131.000000 -3.987918 37.254650 + vertex 131.000000 -2.471070 38.207752 + vertex 12.401385 -2.742783 38.070473 + endloop + endfacet + facet normal 0.000135 -0.539005 0.842303 + outer loop + vertex 131.000000 -3.987918 37.254650 + vertex 12.401385 -2.742783 38.070473 + vertex 11.975570 -3.851482 37.361065 + endloop + endfacet + facet normal -0.000107 -0.671455 0.741046 + outer loop + vertex 131.000000 -3.987918 37.254650 + vertex 11.975570 -3.851482 37.361065 + vertex 11.475355 -4.853796 36.452805 + endloop + endfacet + facet normal 0.000379 0.707107 -0.707107 + outer loop + vertex 131.000000 7.254652 26.012081 + vertex 131.000000 5.987918 24.745348 + vertex 11.475355 6.853796 25.547195 + endloop + endfacet + facet normal -0.000213 -0.783825 0.620981 + outer loop + vertex 131.000000 -5.254652 35.987919 + vertex 11.475355 -4.853796 36.452805 + vertex 10.990158 -5.648063 35.450085 + endloop + endfacet + facet normal -0.000074 0.872030 -0.489453 + outer loop + vertex 131.000000 8.207751 27.528931 + vertex 10.990158 7.648063 26.549915 + vertex 10.553408 8.261708 27.643276 + endloop + endfacet + facet normal 0.000091 0.938081 -0.346416 + outer loop + vertex 131.000000 8.207751 27.528931 + vertex 10.553408 8.261708 27.643276 + vertex 10.203491 8.700374 28.831072 + endloop + endfacet + facet normal 0.000379 -0.707106 0.707107 + outer loop + vertex 131.000000 -5.254652 35.987919 + vertex 131.000000 -3.987918 37.254650 + vertex 11.475355 -4.853796 36.452805 + endloop + endfacet + facet normal 0.000391 0.846724 -0.532032 + outer loop + vertex 131.000000 8.207751 27.528931 + vertex 131.000000 7.254652 26.012081 + vertex 10.990158 7.648063 26.549915 + endloop + endfacet + facet normal -0.000074 -0.872030 0.489453 + outer loop + vertex 131.000000 -6.207751 34.471069 + vertex 10.990158 -5.648063 35.450085 + vertex 10.553408 -6.261708 34.356724 + endloop + endfacet + facet normal 0.000091 -0.938081 0.346416 + outer loop + vertex 131.000000 -6.207751 34.471069 + vertex 10.553408 -6.261708 34.356724 + vertex 10.203491 -6.700374 33.168926 + endloop + endfacet + facet normal 0.000391 -0.846724 0.532032 + outer loop + vertex 131.000000 -6.207751 34.471069 + vertex 131.000000 -5.254652 35.987919 + vertex 10.990158 -5.648063 35.450085 + endloop + endfacet + facet normal -0.000141 0.978655 -0.205509 + outer loop + vertex 131.000000 8.799423 29.219833 + vertex 10.203491 8.700374 28.831072 + vertex 10.013048 8.922435 29.888680 + endloop + endfacet + facet normal 0.000289 0.943883 -0.330279 + outer loop + vertex 131.000000 8.799423 29.219833 + vertex 131.000000 8.207751 27.528931 + vertex 10.203491 8.700374 28.831072 + endloop + endfacet + facet normal 0.000391 0.993712 -0.111965 + outer loop + vertex 131.000000 9.000000 31.000000 + vertex 131.000000 8.799423 29.219833 + vertex 10.013048 8.922435 29.888680 + endloop + endfacet + facet normal 0.000000 0.997573 -0.069626 + outer loop + vertex 131.000000 9.000000 31.000000 + vertex 10.013048 8.922435 29.888680 + vertex 9.944272 9.000000 31.000000 + endloop + endfacet + facet normal -0.000190 -0.981571 0.191098 + outer loop + vertex 131.000000 -6.799423 32.780167 + vertex 10.203491 -6.700374 33.168926 + vertex 9.987243 -6.951696 31.877798 + endloop + endfacet + facet normal 0.000289 -0.943883 0.330279 + outer loop + vertex 131.000000 -6.799423 32.780167 + vertex 131.000000 -6.207751 34.471069 + vertex 10.203491 -6.700374 33.168926 + endloop + endfacet + facet normal -0.000218 -0.999689 0.024950 + outer loop + vertex 131.000000 -7.000000 31.000000 + vertex 9.987243 -6.951696 31.877798 + vertex 9.957149 -6.985579 30.519876 + endloop + endfacet + facet normal 0.000416 -0.993712 0.111965 + outer loop + vertex 131.000000 -7.000000 31.000000 + vertex 131.000000 -6.799423 32.780167 + vertex 9.987243 -6.951696 31.877798 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 10.036858 -6.895265 1.000000 + vertex 8.481877 10.381978 1.000000 + vertex 12.234818 5.216498 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 12.234818 5.216498 1.000000 + vertex 8.481877 10.381978 1.000000 + vertex 11.301386 7.154791 1.000000 + endloop + endfacet + facet normal -0.000000 -0.000000 -1.000000 + outer loop + vertex 6.686424 11.567146 1.000000 + vertex 8.481877 10.381978 1.000000 + vertex 4.708204 12.412678 1.000000 + endloop + endfacet + facet normal -0.000000 -0.000000 -1.000000 + outer loop + vertex 4.708204 12.412678 1.000000 + vertex 8.481877 10.381978 1.000000 + vertex 2.610799 12.891397 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -10.951692 -0.075672 1.000000 + vertex 8.481877 10.381978 1.000000 + vertex -9.811626 -4.206605 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -8.708204 -6.053423 1.000000 + vertex -3.716300 -10.034333 1.000000 + vertex -7.292752 -7.673538 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -9.811626 6.206605 1.000000 + vertex 8.481877 10.381978 1.000000 + vertex -10.951692 -0.075672 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -7.292752 -7.673538 1.000000 + vertex -3.716300 -10.034333 1.000000 + vertex -5.610764 -9.014879 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -9.811626 -4.206605 1.000000 + vertex 8.481877 10.381978 1.000000 + vertex 10.036858 -6.895265 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 2.610799 12.891397 1.000000 + vertex 8.481877 10.381978 1.000000 + vertex -9.811626 6.206605 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 8.481877 10.381978 1.000000 + vertex 10.036858 8.895265 1.000000 + vertex 11.301386 7.154791 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -10.567554 -2.192442 1.000000 + vertex -10.951692 -0.075672 1.000000 + vertex -9.811626 -4.206605 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -3.716300 -10.034333 1.000000 + vertex 0.461622 -10.987917 1.000000 + vertex -1.670251 -10.699135 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -8.708204 -6.053423 1.000000 + vertex 0.461622 -10.987917 1.000000 + vertex -3.716300 -10.034333 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 0.461622 -10.987917 1.000000 + vertex 4.708204 -10.412678 1.000000 + vertex 2.610799 -10.891397 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -10.567554 4.192442 1.000000 + vertex -9.811626 6.206605 1.000000 + vertex -10.951692 2.075672 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -10.951692 2.075672 1.000000 + vertex -9.811626 6.206605 1.000000 + vertex -10.951692 -0.075672 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -8.708204 8.053423 1.000000 + vertex -7.292752 9.673538 1.000000 + vertex -9.811626 6.206605 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -9.811626 -4.206605 1.000000 + vertex 10.036858 -6.895265 1.000000 + vertex -8.708204 -6.053423 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 4.708204 -10.412678 1.000000 + vertex 10.036858 -6.895265 1.000000 + vertex 6.686424 -9.567146 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 6.686424 -9.567146 1.000000 + vertex 10.036858 -6.895265 1.000000 + vertex 8.481877 -8.381978 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -8.708204 -6.053423 1.000000 + vertex 10.036858 -6.895265 1.000000 + vertex 0.461622 -10.987917 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 0.461622 -10.987917 1.000000 + vertex 10.036858 -6.895265 1.000000 + vertex 4.708204 -10.412678 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 10.036858 -6.895265 1.000000 + vertex 12.234818 -3.216498 1.000000 + vertex 11.301386 -5.154791 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -1.670251 12.699135 1.000000 + vertex 0.461622 12.987917 1.000000 + vertex -3.716300 12.034333 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -3.716300 12.034333 1.000000 + vertex 0.461622 12.987917 1.000000 + vertex -5.610764 11.014879 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -5.610764 11.014879 1.000000 + vertex 2.610799 12.891397 1.000000 + vertex -7.292752 9.673538 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -7.292752 9.673538 1.000000 + vertex 2.610799 12.891397 1.000000 + vertex -9.811626 6.206605 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 0.461622 12.987917 1.000000 + vertex 2.610799 12.891397 1.000000 + vertex -5.610764 11.014879 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 12.807155 -1.142683 1.000000 + vertex 12.807155 3.142683 1.000000 + vertex 13.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 12.234818 -3.216498 1.000000 + vertex 12.234818 5.216498 1.000000 + vertex 12.807155 -1.142683 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 10.036858 -6.895265 1.000000 + vertex 12.234818 5.216498 1.000000 + vertex 12.234818 -3.216498 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 12.807155 -1.142683 1.000000 + vertex 12.234818 5.216498 1.000000 + vertex 12.807155 3.142683 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.481877 10.381978 61.000000 + vertex 12.234818 5.216498 61.000000 + vertex 11.301386 7.154791 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.481877 10.381978 61.000000 + vertex 6.686424 11.567146 61.000000 + vertex 4.708204 12.412678 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.481877 10.381978 61.000000 + vertex 4.708204 12.412678 61.000000 + vertex 2.610799 12.891397 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.481877 10.381978 61.000000 + vertex 2.610799 12.891397 61.000000 + vertex -5.610764 11.014879 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.481877 10.381978 61.000000 + vertex -5.610764 11.014879 61.000000 + vertex 12.234818 5.216498 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -3.716300 -10.034333 61.000000 + vertex -8.708204 -6.053423 61.000000 + vertex -7.292752 -7.673538 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 10.036858 8.895265 61.000000 + vertex 8.481877 10.381978 61.000000 + vertex 11.301386 7.154791 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -3.716300 -10.034333 61.000000 + vertex -7.292752 -7.673538 61.000000 + vertex -5.610764 -9.014879 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -10.951692 -0.075672 61.000000 + vertex -10.567554 -2.192442 61.000000 + vertex -9.811626 -4.206605 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.461622 -10.987917 61.000000 + vertex -3.716300 -10.034333 61.000000 + vertex -1.670251 -10.699135 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.461622 -10.987917 61.000000 + vertex -8.708204 -6.053423 61.000000 + vertex -3.716300 -10.034333 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 4.708204 -10.412678 61.000000 + vertex 0.461622 -10.987917 61.000000 + vertex 2.610799 -10.891397 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -9.811626 6.206605 61.000000 + vertex -10.567554 4.192442 61.000000 + vertex -10.951692 2.075672 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -9.811626 6.206605 61.000000 + vertex -10.951692 2.075672 61.000000 + vertex -10.951692 -0.075672 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -7.292752 9.673538 61.000000 + vertex -8.708204 8.053423 61.000000 + vertex -9.811626 6.206605 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 10.036858 -6.895265 61.000000 + vertex -9.811626 -4.206605 61.000000 + vertex -8.708204 -6.053423 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 10.036858 -6.895265 61.000000 + vertex 4.708204 -10.412678 61.000000 + vertex 6.686424 -9.567146 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 10.036858 -6.895265 61.000000 + vertex 6.686424 -9.567146 61.000000 + vertex 8.481877 -8.381978 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 10.036858 -6.895265 61.000000 + vertex -8.708204 -6.053423 61.000000 + vertex 0.461622 -10.987917 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 10.036858 -6.895265 61.000000 + vertex 0.461622 -10.987917 61.000000 + vertex 4.708204 -10.412678 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 -3.216498 61.000000 + vertex 10.036858 -6.895265 61.000000 + vertex 11.301386 -5.154791 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.461622 12.987917 61.000000 + vertex -1.670251 12.699135 61.000000 + vertex -3.716300 12.034333 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.461622 12.987917 61.000000 + vertex -3.716300 12.034333 61.000000 + vertex -5.610764 11.014879 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 2.610799 12.891397 61.000000 + vertex 0.461622 12.987917 61.000000 + vertex -5.610764 11.014879 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.807155 3.142683 61.000000 + vertex 12.807155 -1.142683 61.000000 + vertex 13.000000 1.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 61.000000 + vertex -5.610764 11.014879 61.000000 + vertex -7.292752 9.673538 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 61.000000 + vertex 12.234818 -3.216498 61.000000 + vertex 12.807155 -1.142683 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 61.000000 + vertex -10.951692 -0.075672 61.000000 + vertex -9.811626 -4.206605 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 61.000000 + vertex -7.292752 9.673538 61.000000 + vertex -9.811626 6.206605 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 61.000000 + vertex -9.811626 6.206605 61.000000 + vertex -10.951692 -0.075672 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 61.000000 + vertex -9.811626 -4.206605 61.000000 + vertex 10.036858 -6.895265 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 61.000000 + vertex 10.036858 -6.895265 61.000000 + vertex 12.234818 -3.216498 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 61.000000 + vertex 12.807155 -1.142683 61.000000 + vertex 12.807155 3.142683 61.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -2.471070 23.792250 + vertex 131.000000 -5.254652 26.012081 + vertex 131.000000 -3.987918 24.745348 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 1.000000 23.000000 + vertex 131.000000 -2.471070 23.792250 + vertex 131.000000 -0.780167 23.200577 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 2.780168 23.200577 + vertex 131.000000 -2.471070 23.792250 + vertex 131.000000 1.000000 23.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 24.745348 + vertex 131.000000 2.780168 23.200577 + vertex 131.000000 4.471070 23.792250 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 24.745348 + vertex 131.000000 -5.254652 26.012081 + vertex 131.000000 -2.471070 23.792250 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 24.745348 + vertex 131.000000 -2.471070 23.792250 + vertex 131.000000 2.780168 23.200577 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -5.254652 35.987919 + vertex 131.000000 -6.207751 34.471069 + vertex 131.000000 -6.799423 32.780167 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 7.254652 26.012081 + vertex 131.000000 -6.799423 29.219833 + vertex 131.000000 -6.207751 27.528931 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 7.254652 26.012081 + vertex 131.000000 -6.207751 27.528931 + vertex 131.000000 -5.254652 26.012081 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 7.254652 26.012081 + vertex 131.000000 -5.254652 26.012081 + vertex 131.000000 5.987918 24.745348 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 -3.987918 37.254650 + vertex 131.000000 -5.254652 35.987919 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 -6.799423 32.780167 + vertex 131.000000 -7.000000 31.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 -7.000000 31.000000 + vertex 131.000000 -6.799423 29.219833 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 7.254652 26.012081 + vertex 131.000000 8.207751 27.528931 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 -6.799423 29.219833 + vertex 131.000000 7.254652 26.012081 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 -5.254652 35.987919 + vertex 131.000000 -6.799423 32.780167 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 8.799423 32.780167 + vertex 131.000000 8.207751 27.528931 + vertex 131.000000 8.799423 29.219833 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 8.799423 32.780167 + vertex 131.000000 8.799423 29.219833 + vertex 131.000000 9.000000 31.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 2.780168 38.799423 + vertex 131.000000 1.000000 39.000000 + vertex 131.000000 -0.780167 38.799423 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 8.207751 34.471069 + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 8.207751 27.528931 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 8.207751 34.471069 + vertex 131.000000 8.207751 27.528931 + vertex 131.000000 8.799423 32.780167 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 37.254650 + vertex 131.000000 8.207751 34.471069 + vertex 131.000000 7.254652 35.987919 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 37.254650 + vertex 131.000000 4.471070 38.207752 + vertex 131.000000 2.780168 38.799423 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 37.254650 + vertex 131.000000 -0.780167 38.799423 + vertex 131.000000 -2.471070 38.207752 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 37.254650 + vertex 131.000000 2.780168 38.799423 + vertex 131.000000 -0.780167 38.799423 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 37.254650 + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 8.207751 34.471069 + endloop + endfacet +endsolid Mesh diff --git a/apps/cpu/Multiphase/backup/FlowFocusingS.stl b/apps/cpu/Multiphase/backup/FlowFocusingS.stl new file mode 100644 index 0000000000000000000000000000000000000000..b84a5e8ff64c351fb616a33ae55c5f4477705f4a Binary files /dev/null and b/apps/cpu/Multiphase/backup/FlowFocusingS.stl differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusingS2.ast b/apps/cpu/Multiphase/backup/FlowFocusingS2.ast new file mode 100644 index 0000000000000000000000000000000000000000..1b356112100b7d690d87a99b62b13c8dc58cc6be --- /dev/null +++ b/apps/cpu/Multiphase/backup/FlowFocusingS2.ast @@ -0,0 +1,422 @@ +solid Mesh + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 1.000000 16.000000 1.000000 + vertex 51.000000 1.000000 1.000000 + vertex 1.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 1.000000 16.000000 1.000000 + vertex 51.000000 16.000000 1.000000 + vertex 51.000000 1.000000 1.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 1.000000 16.000000 26.000000 + vertex 1.000000 16.000000 1.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 1.000000 1.000000 26.000000 + vertex 1.000000 16.000000 26.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 11.000000 16.000000 26.000000 + vertex 1.000000 16.000000 1.000000 + vertex 1.000000 16.000000 26.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 16.000000 16.000000 26.000000 + vertex 1.000000 16.000000 1.000000 + vertex 11.000000 16.000000 26.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 51.000000 16.000000 1.000000 + vertex 1.000000 16.000000 1.000000 + vertex 16.000000 16.000000 26.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 51.000000 16.000000 26.000000 + vertex 51.000000 16.000000 1.000000 + vertex 16.000000 16.000000 26.000000 + endloop + endfacet + facet normal 1.000000 -0.000000 0.000000 + outer loop + vertex 51.000000 1.000000 26.000000 + vertex 51.000000 16.000000 1.000000 + vertex 51.000000 16.000000 26.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 51.000000 1.000000 26.000000 + vertex 51.000000 1.000000 1.000000 + vertex 51.000000 16.000000 1.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 11.000000 1.000000 26.000000 + vertex 1.000000 1.000000 26.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 16.000000 1.000000 26.000000 + vertex 11.000000 1.000000 26.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 51.000000 1.000000 1.000000 + vertex 16.000000 1.000000 26.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 51.000000 1.000000 1.000000 + vertex 51.000000 1.000000 26.000000 + vertex 16.000000 1.000000 26.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -24.000000 1.000000 26.000000 + vertex 1.000000 16.000000 26.000000 + vertex 1.000000 1.000000 26.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -24.000000 16.000000 26.000000 + vertex 1.000000 16.000000 26.000000 + vertex -24.000000 1.000000 26.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 51.000000 16.000000 26.000000 + vertex 16.000000 16.000000 76.000000 + vertex 51.000000 16.000000 76.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 51.000000 16.000000 26.000000 + vertex 16.000000 16.000000 26.000000 + vertex 16.000000 16.000000 76.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 16.000000 16.000000 26.000000 + vertex 11.000000 16.000000 76.000000 + vertex 16.000000 16.000000 76.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 16.000000 16.000000 26.000000 + vertex 11.000000 16.000000 26.000000 + vertex 11.000000 16.000000 76.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 1.000000 16.000000 26.000000 + vertex 1.000000 16.000000 76.000000 + vertex 11.000000 16.000000 76.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 11.000000 16.000000 26.000000 + vertex 1.000000 16.000000 26.000000 + vertex 11.000000 16.000000 76.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 51.000000 1.000000 26.000000 + vertex 181.000000 16.000000 26.000000 + vertex 181.000000 1.000000 26.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 51.000000 16.000000 26.000000 + vertex 181.000000 16.000000 26.000000 + vertex 51.000000 1.000000 26.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 16.000000 1.000000 76.000000 + vertex 51.000000 1.000000 26.000000 + vertex 51.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 16.000000 1.000000 26.000000 + vertex 51.000000 1.000000 26.000000 + vertex 16.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 11.000000 1.000000 76.000000 + vertex 16.000000 1.000000 26.000000 + vertex 16.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 11.000000 1.000000 26.000000 + vertex 16.000000 1.000000 26.000000 + vertex 11.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 1.000000 1.000000 76.000000 + vertex 1.000000 1.000000 26.000000 + vertex 11.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 1.000000 1.000000 26.000000 + vertex 11.000000 1.000000 26.000000 + vertex 11.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 1.000000 16.000000 26.000000 + vertex -24.000000 16.000000 76.000000 + vertex 1.000000 16.000000 76.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 1.000000 16.000000 26.000000 + vertex -24.000000 16.000000 26.000000 + vertex -24.000000 16.000000 76.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -24.000000 1.000000 76.000000 + vertex 1.000000 1.000000 26.000000 + vertex 1.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -24.000000 1.000000 26.000000 + vertex 1.000000 1.000000 26.000000 + vertex -24.000000 1.000000 76.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -24.000000 1.000000 26.000000 + vertex -24.000000 1.000000 76.000000 + vertex -24.000000 16.000000 26.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -24.000000 1.000000 76.000000 + vertex -24.000000 16.000000 76.000000 + vertex -24.000000 16.000000 26.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 181.000000 16.000000 26.000000 + vertex 51.000000 16.000000 76.000000 + vertex 181.000000 16.000000 76.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 181.000000 16.000000 26.000000 + vertex 51.000000 16.000000 26.000000 + vertex 51.000000 16.000000 76.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 1.000000 16.000000 101.000000 + vertex 11.000000 16.000000 76.000000 + vertex 1.000000 16.000000 76.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 1.000000 16.000000 101.000000 + vertex 16.000000 16.000000 76.000000 + vertex 11.000000 16.000000 76.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 51.000000 16.000000 101.000000 + vertex 51.000000 16.000000 76.000000 + vertex 16.000000 16.000000 76.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 51.000000 16.000000 101.000000 + vertex 16.000000 16.000000 76.000000 + vertex 1.000000 16.000000 101.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 181.000000 1.000000 76.000000 + vertex 181.000000 1.000000 26.000000 + vertex 181.000000 16.000000 26.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 181.000000 16.000000 76.000000 + vertex 181.000000 1.000000 76.000000 + vertex 181.000000 16.000000 26.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 51.000000 1.000000 76.000000 + vertex 181.000000 1.000000 26.000000 + vertex 181.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 51.000000 1.000000 26.000000 + vertex 181.000000 1.000000 26.000000 + vertex 51.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 11.000000 1.000000 76.000000 + vertex 1.000000 1.000000 101.000000 + vertex 1.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 16.000000 1.000000 76.000000 + vertex 1.000000 1.000000 101.000000 + vertex 11.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 51.000000 1.000000 76.000000 + vertex 51.000000 1.000000 101.000000 + vertex 16.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 16.000000 1.000000 76.000000 + vertex 51.000000 1.000000 101.000000 + vertex 1.000000 1.000000 101.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 1.000000 16.000000 76.000000 + vertex -24.000000 1.000000 76.000000 + vertex 1.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 1.000000 16.000000 76.000000 + vertex -24.000000 16.000000 76.000000 + vertex -24.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 181.000000 16.000000 76.000000 + vertex 51.000000 1.000000 76.000000 + vertex 181.000000 1.000000 76.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 181.000000 16.000000 76.000000 + vertex 51.000000 16.000000 76.000000 + vertex 51.000000 1.000000 76.000000 + endloop + endfacet + facet normal 1.000000 -0.000000 0.000000 + outer loop + vertex 51.000000 1.000000 101.000000 + vertex 51.000000 16.000000 76.000000 + vertex 51.000000 16.000000 101.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 51.000000 1.000000 101.000000 + vertex 51.000000 1.000000 76.000000 + vertex 51.000000 16.000000 76.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 51.000000 1.000000 101.000000 + vertex 1.000000 16.000000 101.000000 + vertex 1.000000 1.000000 101.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 51.000000 16.000000 101.000000 + vertex 1.000000 16.000000 101.000000 + vertex 51.000000 1.000000 101.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 16.000000 76.000000 + vertex 1.000000 1.000000 101.000000 + vertex 1.000000 16.000000 101.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 1.000000 76.000000 + vertex 1.000000 1.000000 101.000000 + vertex 1.000000 16.000000 76.000000 + endloop + endfacet +endsolid Mesh diff --git a/apps/cpu/Multiphase/backup/FlowFocusingS2.stl b/apps/cpu/Multiphase/backup/FlowFocusingS2.stl new file mode 100644 index 0000000000000000000000000000000000000000..f44acdfeb1595248f244f916f71c95cc1290a5b2 Binary files /dev/null and b/apps/cpu/Multiphase/backup/FlowFocusingS2.stl differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusingS2_Small.ast b/apps/cpu/Multiphase/backup/FlowFocusingS2_Small.ast new file mode 100644 index 0000000000000000000000000000000000000000..0bbb5c2eae41623c5564009a4d59e434c3ff08d9 --- /dev/null +++ b/apps/cpu/Multiphase/backup/FlowFocusingS2_Small.ast @@ -0,0 +1,366 @@ +solid Mesh + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 0.500000 9.500000 0.500000 + vertex 15.500000 0.500000 0.500000 + vertex 0.500000 0.500000 0.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 0.500000 9.500000 0.500000 + vertex 15.500000 9.500000 0.500000 + vertex 15.500000 0.500000 0.500000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 0.500000 0.500000 + vertex 0.500000 9.500000 25.500000 + vertex 0.500000 9.500000 0.500000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 0.500000 0.500000 + vertex 0.500000 0.500000 25.500000 + vertex 0.500000 9.500000 25.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 10.500000 9.500000 25.500000 + vertex 0.500000 9.500000 0.500000 + vertex 0.500000 9.500000 25.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 10.500000 9.500000 25.500000 + vertex 15.500000 9.500000 0.500000 + vertex 0.500000 9.500000 0.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 15.500000 9.500000 25.500000 + vertex 15.500000 9.500000 0.500000 + vertex 10.500000 9.500000 25.500000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 15.500000 9.500000 25.500000 + vertex 15.500000 0.500000 0.500000 + vertex 15.500000 9.500000 0.500000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 15.500000 0.500000 25.500000 + vertex 15.500000 0.500000 0.500000 + vertex 15.500000 9.500000 25.500000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 0.500000 0.500000 0.500000 + vertex 10.500000 0.500000 25.500000 + vertex 0.500000 0.500000 25.500000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 15.500000 0.500000 0.500000 + vertex 10.500000 0.500000 25.500000 + vertex 0.500000 0.500000 0.500000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 15.500000 0.500000 0.500000 + vertex 15.500000 0.500000 25.500000 + vertex 10.500000 0.500000 25.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -24.500000 0.500000 25.500000 + vertex 0.500000 9.500000 25.500000 + vertex 0.500000 0.500000 25.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -24.500000 9.500000 25.500000 + vertex 0.500000 9.500000 25.500000 + vertex -24.500000 0.500000 25.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 15.500000 9.500000 25.500000 + vertex 10.500000 9.500000 40.500000 + vertex 15.500000 9.500000 40.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 15.500000 9.500000 25.500000 + vertex 10.500000 9.500000 25.500000 + vertex 10.500000 9.500000 40.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 0.500000 9.500000 25.500000 + vertex 0.500000 9.500000 40.500000 + vertex 10.500000 9.500000 40.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 10.500000 9.500000 25.500000 + vertex 0.500000 9.500000 25.500000 + vertex 10.500000 9.500000 40.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 15.500000 0.500000 25.500000 + vertex 180.500000 9.500000 25.500000 + vertex 180.500000 0.500000 25.500000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 15.500000 9.500000 25.500000 + vertex 180.500000 9.500000 25.500000 + vertex 15.500000 0.500000 25.500000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 10.500000 0.500000 40.500000 + vertex 15.500000 0.500000 25.500000 + vertex 15.500000 0.500000 40.500000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 10.500000 0.500000 25.500000 + vertex 15.500000 0.500000 25.500000 + vertex 10.500000 0.500000 40.500000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 0.500000 0.500000 40.500000 + vertex 0.500000 0.500000 25.500000 + vertex 10.500000 0.500000 40.500000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 0.500000 0.500000 25.500000 + vertex 10.500000 0.500000 25.500000 + vertex 10.500000 0.500000 40.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 0.500000 9.500000 40.500000 + vertex -24.500000 9.500000 25.500000 + vertex -24.500000 9.500000 40.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 0.500000 9.500000 25.500000 + vertex -24.500000 9.500000 25.500000 + vertex 0.500000 9.500000 40.500000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -24.500000 0.500000 25.500000 + vertex 0.500000 0.500000 40.500000 + vertex -24.500000 0.500000 40.500000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -24.500000 0.500000 25.500000 + vertex 0.500000 0.500000 25.500000 + vertex 0.500000 0.500000 40.500000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -24.500000 0.500000 25.500000 + vertex -24.500000 0.500000 40.500000 + vertex -24.500000 9.500000 25.500000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -24.500000 0.500000 40.500000 + vertex -24.500000 9.500000 40.500000 + vertex -24.500000 9.500000 25.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 180.500000 9.500000 40.500000 + vertex 15.500000 9.500000 25.500000 + vertex 15.500000 9.500000 40.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 180.500000 9.500000 25.500000 + vertex 15.500000 9.500000 25.500000 + vertex 180.500000 9.500000 40.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 0.500000 9.500000 65.500000 + vertex 10.500000 9.500000 40.500000 + vertex 0.500000 9.500000 40.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 15.500000 9.500000 65.500000 + vertex 15.500000 9.500000 40.500000 + vertex 10.500000 9.500000 40.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 15.500000 9.500000 65.500000 + vertex 10.500000 9.500000 40.500000 + vertex 0.500000 9.500000 65.500000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.500000 0.500000 40.500000 + vertex 180.500000 0.500000 25.500000 + vertex 180.500000 9.500000 25.500000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.500000 9.500000 40.500000 + vertex 180.500000 0.500000 40.500000 + vertex 180.500000 9.500000 25.500000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 15.500000 0.500000 25.500000 + vertex 180.500000 0.500000 40.500000 + vertex 15.500000 0.500000 40.500000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 15.500000 0.500000 25.500000 + vertex 180.500000 0.500000 25.500000 + vertex 180.500000 0.500000 40.500000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 10.500000 0.500000 40.500000 + vertex 0.500000 0.500000 65.500000 + vertex 0.500000 0.500000 40.500000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 15.500000 0.500000 40.500000 + vertex 15.500000 0.500000 65.500000 + vertex 10.500000 0.500000 40.500000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 10.500000 0.500000 40.500000 + vertex 15.500000 0.500000 65.500000 + vertex 0.500000 0.500000 65.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.500000 9.500000 40.500000 + vertex -24.500000 0.500000 40.500000 + vertex 0.500000 0.500000 40.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.500000 9.500000 40.500000 + vertex -24.500000 9.500000 40.500000 + vertex -24.500000 0.500000 40.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 180.500000 9.500000 40.500000 + vertex 15.500000 0.500000 40.500000 + vertex 180.500000 0.500000 40.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 180.500000 9.500000 40.500000 + vertex 15.500000 9.500000 40.500000 + vertex 15.500000 0.500000 40.500000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 15.500000 0.500000 65.500000 + vertex 15.500000 9.500000 40.500000 + vertex 15.500000 9.500000 65.500000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 15.500000 0.500000 65.500000 + vertex 15.500000 0.500000 40.500000 + vertex 15.500000 9.500000 40.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 15.500000 0.500000 65.500000 + vertex 0.500000 9.500000 65.500000 + vertex 0.500000 0.500000 65.500000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 15.500000 9.500000 65.500000 + vertex 0.500000 9.500000 65.500000 + vertex 15.500000 0.500000 65.500000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 9.500000 40.500000 + vertex 0.500000 0.500000 65.500000 + vertex 0.500000 9.500000 65.500000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.500000 0.500000 40.500000 + vertex 0.500000 0.500000 65.500000 + vertex 0.500000 9.500000 40.500000 + endloop + endfacet +endsolid Mesh diff --git a/apps/cpu/Multiphase/backup/FlowFocusingS2_Small.stl b/apps/cpu/Multiphase/backup/FlowFocusingS2_Small.stl new file mode 100644 index 0000000000000000000000000000000000000000..012423f0625912bb76dcae9c5040a1dcad1d2bda Binary files /dev/null and b/apps/cpu/Multiphase/backup/FlowFocusingS2_Small.stl differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSL.ast b/apps/cpu/Multiphase/backup/FlowFocusingSL.ast new file mode 100644 index 0000000000000000000000000000000000000000..0ee1706e4e8935e56b2b2e07f82cd308448016f8 --- /dev/null +++ b/apps/cpu/Multiphase/backup/FlowFocusingSL.ast @@ -0,0 +1,3082 @@ +solid Mesh + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 10.036858 -6.895265 -29.000000 + vertex 8.481877 10.381978 -29.000000 + vertex 12.234818 5.216498 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 12.234818 5.216498 -29.000000 + vertex 8.481877 10.381978 -29.000000 + vertex 11.301386 7.154791 -29.000000 + endloop + endfacet + facet normal -0.000000 -0.000000 -1.000000 + outer loop + vertex 6.686424 11.567146 -29.000000 + vertex 8.481877 10.381978 -29.000000 + vertex 4.708204 12.412678 -29.000000 + endloop + endfacet + facet normal -0.000000 -0.000000 -1.000000 + outer loop + vertex 4.708204 12.412678 -29.000000 + vertex 8.481877 10.381978 -29.000000 + vertex 2.610799 12.891397 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -10.951692 -0.075672 -29.000000 + vertex 8.481877 10.381978 -29.000000 + vertex -9.811626 -4.206605 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -8.708204 -6.053423 -29.000000 + vertex -3.716300 -10.034333 -29.000000 + vertex -7.292752 -7.673538 -29.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -9.811626 6.206605 -29.000000 + vertex 8.481877 10.381978 -29.000000 + vertex -10.951692 -0.075672 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -7.292752 -7.673538 -29.000000 + vertex -3.716300 -10.034333 -29.000000 + vertex -5.610764 -9.014879 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -9.811626 -4.206605 -29.000000 + vertex 8.481877 10.381978 -29.000000 + vertex 10.036858 -6.895265 -29.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 2.610799 12.891397 -29.000000 + vertex 8.481877 10.381978 -29.000000 + vertex -9.811626 6.206605 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 8.481877 10.381978 -29.000000 + vertex 10.036858 8.895265 -29.000000 + vertex 11.301386 7.154791 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -10.567554 -2.192442 -29.000000 + vertex -10.951692 -0.075672 -29.000000 + vertex -9.811626 -4.206605 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -3.716300 -10.034333 -29.000000 + vertex 0.461622 -10.987917 -29.000000 + vertex -1.670251 -10.699135 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -8.708204 -6.053423 -29.000000 + vertex 0.461622 -10.987917 -29.000000 + vertex -3.716300 -10.034333 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 0.461622 -10.987917 -29.000000 + vertex 4.708204 -10.412678 -29.000000 + vertex 2.610799 -10.891397 -29.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -10.567554 4.192442 -29.000000 + vertex -9.811626 6.206605 -29.000000 + vertex -10.951692 2.075672 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -10.951692 2.075672 -29.000000 + vertex -9.811626 6.206605 -29.000000 + vertex -10.951692 -0.075672 -29.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -8.708204 8.053423 -29.000000 + vertex -7.292752 9.673538 -29.000000 + vertex -9.811626 6.206605 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -9.811626 -4.206605 -29.000000 + vertex 10.036858 -6.895265 -29.000000 + vertex -8.708204 -6.053423 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 4.708204 -10.412678 -29.000000 + vertex 10.036858 -6.895265 -29.000000 + vertex 6.686424 -9.567146 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 6.686424 -9.567146 -29.000000 + vertex 10.036858 -6.895265 -29.000000 + vertex 8.481877 -8.381978 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -8.708204 -6.053423 -29.000000 + vertex 10.036858 -6.895265 -29.000000 + vertex 0.461622 -10.987917 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 0.461622 -10.987917 -29.000000 + vertex 10.036858 -6.895265 -29.000000 + vertex 4.708204 -10.412678 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 10.036858 -6.895265 -29.000000 + vertex 12.234818 -3.216498 -29.000000 + vertex 11.301386 -5.154791 -29.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -1.670251 12.699135 -29.000000 + vertex 0.461622 12.987917 -29.000000 + vertex -3.716300 12.034333 -29.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -3.716300 12.034333 -29.000000 + vertex 0.461622 12.987917 -29.000000 + vertex -5.610764 11.014879 -29.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -5.610764 11.014879 -29.000000 + vertex 2.610799 12.891397 -29.000000 + vertex -7.292752 9.673538 -29.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -7.292752 9.673538 -29.000000 + vertex 2.610799 12.891397 -29.000000 + vertex -9.811626 6.206605 -29.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 0.461622 12.987917 -29.000000 + vertex 2.610799 12.891397 -29.000000 + vertex -5.610764 11.014879 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 12.807155 -1.142683 -29.000000 + vertex 12.807155 3.142683 -29.000000 + vertex 13.000000 1.000000 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 12.234818 -3.216498 -29.000000 + vertex 12.234818 5.216498 -29.000000 + vertex 12.807155 -1.142683 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 10.036858 -6.895265 -29.000000 + vertex 12.234818 5.216498 -29.000000 + vertex 12.234818 -3.216498 -29.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 12.807155 -1.142683 -29.000000 + vertex 12.234818 5.216498 -29.000000 + vertex 12.807155 3.142683 -29.000000 + endloop + endfacet + facet normal 0.995974 0.089639 -0.000783 + outer loop + vertex 12.906315 2.496555 23.141226 + vertex 13.000000 1.000000 -29.000000 + vertex 12.807155 3.142683 -29.000000 + endloop + endfacet + facet normal 0.998046 0.062478 0.000000 + outer loop + vertex 12.906315 2.496555 23.141226 + vertex 13.000000 1.000000 23.000000 + vertex 13.000000 1.000000 -29.000000 + endloop + endfacet + facet normal 0.998997 0.044772 0.000000 + outer loop + vertex 13.000000 1.000000 91.000000 + vertex 13.000000 1.000000 39.000000 + vertex 12.951891 2.073451 38.927654 + endloop + endfacet + facet normal 0.984343 0.176264 0.000312 + outer loop + vertex 12.685336 3.730003 23.480221 + vertex 12.906315 2.496555 23.141226 + vertex 12.807155 3.142683 -29.000000 + endloop + endfacet + facet normal 0.963963 0.266037 -0.000740 + outer loop + vertex 12.234818 5.216498 -29.000000 + vertex 12.685336 3.730003 23.480221 + vertex 12.807155 3.142683 -29.000000 + endloop + endfacet + facet normal 0.962801 0.270210 -0.000612 + outer loop + vertex 12.401385 4.742783 23.929527 + vertex 12.685336 3.730003 23.480221 + vertex 12.234818 5.216498 -29.000000 + endloop + endfacet + facet normal 0.995974 0.089639 0.000928 + outer loop + vertex 12.807155 3.142683 91.000000 + vertex 13.000000 1.000000 91.000000 + vertex 12.951891 2.073451 38.927654 + endloop + endfacet + facet normal 0.973891 0.227018 -0.000135 + outer loop + vertex 12.807155 3.142683 91.000000 + vertex 12.829484 3.015767 38.741879 + vertex 12.501177 4.423876 38.230289 + endloop + endfacet + facet normal 0.991665 0.128839 0.000111 + outer loop + vertex 12.807155 3.142683 91.000000 + vertex 12.951891 2.073451 38.927654 + vertex 12.829484 3.015767 38.741879 + endloop + endfacet + facet normal 0.933574 0.358383 0.000270 + outer loop + vertex 11.975570 5.851481 24.638937 + vertex 12.401385 4.742783 23.929527 + vertex 12.234818 5.216498 -29.000000 + endloop + endfacet + facet normal 0.900969 0.433883 -0.000782 + outer loop + vertex 11.301386 7.154791 -29.000000 + vertex 11.975570 5.851481 24.638937 + vertex 12.234818 5.216498 -29.000000 + endloop + endfacet + facet normal 0.963963 0.266037 0.000870 + outer loop + vertex 12.234818 5.216498 91.000000 + vertex 12.807155 3.142683 91.000000 + vertex 12.501177 4.423876 38.230289 + endloop + endfacet + facet normal 0.938259 0.345932 -0.000460 + outer loop + vertex 12.234818 5.216498 91.000000 + vertex 12.501177 4.423876 38.230289 + vertex 11.968547 5.867337 37.348938 + endloop + endfacet + facet normal 0.894623 0.446821 -0.000388 + outer loop + vertex 11.475355 6.853796 25.547195 + vertex 11.975570 5.851481 24.638937 + vertex 11.301386 7.154791 -29.000000 + endloop + endfacet + facet normal 0.853458 0.521161 0.000154 + outer loop + vertex 10.990158 7.648063 26.549915 + vertex 11.475355 6.853796 25.547195 + vertex 11.301386 7.154791 -29.000000 + endloop + endfacet + facet normal 0.809017 0.587785 -0.000803 + outer loop + vertex 10.553408 8.261708 27.643276 + vertex 11.301386 7.154791 -29.000000 + vertex 10.036858 8.895265 -29.000000 + endloop + endfacet + facet normal 0.814217 0.580561 -0.000593 + outer loop + vertex 10.553408 8.261708 27.643276 + vertex 10.990158 7.648063 26.549915 + vertex 11.301386 7.154791 -29.000000 + endloop + endfacet + facet normal 0.845496 0.533982 -0.000125 + outer loop + vertex 11.301386 7.154791 91.000000 + vertex 11.405221 6.977572 36.316826 + vertex 10.866963 7.829570 35.166172 + endloop + endfacet + facet normal 0.891689 0.452648 0.000226 + outer loop + vertex 11.301386 7.154791 91.000000 + vertex 11.968547 5.867337 37.348938 + vertex 11.405221 6.977572 36.316826 + endloop + endfacet + facet normal 0.900969 0.433883 0.000792 + outer loop + vertex 11.301386 7.154791 91.000000 + vertex 12.234818 5.216498 91.000000 + vertex 11.968547 5.867337 37.348938 + endloop + endfacet + facet normal 0.781554 0.623838 -0.000150 + outer loop + vertex 10.203491 8.700374 28.831072 + vertex 10.553408 8.261708 27.643276 + vertex 10.036858 8.895265 -29.000000 + endloop + endfacet + facet normal 0.759095 0.650980 0.000007 + outer loop + vertex 10.013048 8.922435 29.888680 + vertex 10.203491 8.700374 28.831072 + vertex 10.036858 8.895265 -29.000000 + endloop + endfacet + facet normal 0.748201 0.663472 -0.000004 + outer loop + vertex 9.944272 9.000000 31.000000 + vertex 10.013048 8.922435 29.888680 + vertex 10.036858 8.895265 -29.000000 + endloop + endfacet + facet normal 0.691063 0.722795 -0.000195 + outer loop + vertex 8.481877 10.381978 -29.000000 + vertex 9.944272 9.000000 31.000000 + vertex 10.036858 8.895265 -29.000000 + endloop + endfacet + facet normal 0.809017 0.587785 0.000809 + outer loop + vertex 10.036858 8.895265 91.000000 + vertex 11.301386 7.154791 91.000000 + vertex 10.866963 7.829570 35.166172 + endloop + endfacet + facet normal 0.750661 0.660687 -0.000005 + outer loop + vertex 10.036858 8.895265 91.000000 + vertex 10.070409 8.856697 32.507420 + vertex 9.944272 9.000000 31.000000 + endloop + endfacet + facet normal 0.769853 0.638221 0.000021 + outer loop + vertex 10.036858 8.895265 91.000000 + vertex 10.402563 8.455991 33.899689 + vertex 10.070409 8.856697 32.507420 + endloop + endfacet + facet normal 0.802784 0.596269 0.000554 + outer loop + vertex 10.036858 8.895265 91.000000 + vertex 10.866963 7.829570 35.166172 + vertex 10.402563 8.455991 33.899689 + endloop + endfacet + facet normal 0.691063 0.722795 0.000195 + outer loop + vertex 8.481877 10.381978 91.000000 + vertex 10.036858 8.895265 91.000000 + vertex 9.944272 9.000000 31.000000 + endloop + endfacet + facet normal 0.686841 0.726808 0.000000 + outer loop + vertex 8.481877 10.381978 91.000000 + vertex 9.944272 9.000000 31.000000 + vertex 8.481877 10.381978 -29.000000 + endloop + endfacet + facet normal 0.550897 0.834573 0.000000 + outer loop + vertex 8.481877 10.381978 91.000000 + vertex 8.481877 10.381978 -29.000000 + vertex 6.686424 11.567146 -29.000000 + endloop + endfacet + facet normal 0.550897 0.834573 0.000000 + outer loop + vertex 6.686424 11.567146 91.000000 + vertex 8.481877 10.381978 91.000000 + vertex 6.686424 11.567146 -29.000000 + endloop + endfacet + facet normal 0.393025 0.919528 0.000000 + outer loop + vertex 6.686424 11.567146 91.000000 + vertex 6.686424 11.567146 -29.000000 + vertex 4.708204 12.412678 -29.000000 + endloop + endfacet + facet normal 0.393025 0.919528 0.000000 + outer loop + vertex 4.708204 12.412678 91.000000 + vertex 6.686424 11.567146 91.000000 + vertex 4.708204 12.412678 -29.000000 + endloop + endfacet + facet normal 0.222521 0.974928 0.000000 + outer loop + vertex 4.708204 12.412678 91.000000 + vertex 4.708204 12.412678 -29.000000 + vertex 2.610799 12.891397 -29.000000 + endloop + endfacet + facet normal 0.222521 0.974928 0.000000 + outer loop + vertex 2.610799 12.891397 91.000000 + vertex 4.708204 12.412678 91.000000 + vertex 2.610799 12.891397 -29.000000 + endloop + endfacet + facet normal 0.044865 0.998993 0.000000 + outer loop + vertex 2.610799 12.891397 91.000000 + vertex 2.610799 12.891397 -29.000000 + vertex 0.461622 12.987917 -29.000000 + endloop + endfacet + facet normal -0.134233 0.990950 0.000000 + outer loop + vertex 0.461622 12.987917 91.000000 + vertex 0.461622 12.987917 -29.000000 + vertex -1.670251 12.699135 -29.000000 + endloop + endfacet + facet normal 0.044865 0.998993 0.000000 + outer loop + vertex 0.461622 12.987917 91.000000 + vertex 2.610799 12.891397 91.000000 + vertex 0.461622 12.987917 -29.000000 + endloop + endfacet + facet normal -0.309017 0.951057 0.000000 + outer loop + vertex -1.670251 12.699135 91.000000 + vertex -1.670251 12.699135 -29.000000 + vertex -3.716300 12.034333 -29.000000 + endloop + endfacet + facet normal -0.134233 0.990950 0.000000 + outer loop + vertex -1.670251 12.699135 91.000000 + vertex 0.461622 12.987917 91.000000 + vertex -1.670251 12.699135 -29.000000 + endloop + endfacet + facet normal -0.309017 0.951057 0.000000 + outer loop + vertex -3.716300 12.034333 91.000000 + vertex -1.670251 12.699135 91.000000 + vertex -3.716300 12.034333 -29.000000 + endloop + endfacet + facet normal -0.473869 0.880596 0.000041 + outer loop + vertex -5.633250 11.000000 31.000000 + vertex -3.716300 12.034333 -29.000000 + vertex -5.610764 11.014879 -29.000000 + endloop + endfacet + facet normal -0.474858 0.880063 0.000000 + outer loop + vertex -5.633250 11.000000 31.000000 + vertex -3.716300 12.034333 91.000000 + vertex -3.716300 12.034333 -29.000000 + endloop + endfacet + facet normal -0.557098 0.830446 -0.000003 + outer loop + vertex -5.737499 10.930061 29.819370 + vertex -5.633250 11.000000 31.000000 + vertex -5.610764 11.014879 -29.000000 + endloop + endfacet + facet normal -0.572844 0.819664 -0.000052 + outer loop + vertex -6.012732 10.737638 28.724388 + vertex -5.737499 10.930061 29.819370 + vertex -5.610764 11.014879 -29.000000 + endloop + endfacet + facet normal -0.623490 0.781831 -0.000854 + outer loop + vertex -6.470624 10.390942 27.563400 + vertex -5.610764 11.014879 -29.000000 + vertex -7.292752 9.673538 -29.000000 + endloop + endfacet + facet normal -0.603052 0.797702 -0.000368 + outer loop + vertex -6.470624 10.390942 27.563400 + vertex -6.012732 10.737638 28.724388 + vertex -5.610764 11.014879 -29.000000 + endloop + endfacet + facet normal -0.557937 0.829883 0.000003 + outer loop + vertex -5.610764 11.014879 91.000000 + vertex -5.633250 11.000000 31.000000 + vertex -5.757563 10.916418 32.290215 + endloop + endfacet + facet normal -0.576477 0.817113 0.000071 + outer loop + vertex -5.610764 11.014879 91.000000 + vertex -5.757563 10.916418 32.290215 + vertex -6.080200 10.688693 33.475727 + endloop + endfacet + facet normal -0.608142 0.793828 0.000462 + outer loop + vertex -5.610764 11.014879 91.000000 + vertex -6.080200 10.688693 33.475727 + vertex -6.528029 10.344987 34.559666 + endloop + endfacet + facet normal -0.473869 0.880596 -0.000041 + outer loop + vertex -5.610764 11.014879 91.000000 + vertex -3.716300 12.034333 91.000000 + vertex -5.633250 11.000000 31.000000 + endloop + endfacet + facet normal -0.659510 0.751695 0.000052 + outer loop + vertex -7.338006 9.630043 25.948034 + vertex -6.470624 10.390942 27.563400 + vertex -7.292752 9.673538 -29.000000 + endloop + endfacet + facet normal -0.753071 0.657939 -0.000691 + outer loop + vertex -8.372674 8.493528 24.378292 + vertex -7.292752 9.673538 -29.000000 + vertex -8.708204 8.053423 -29.000000 + endloop + endfacet + facet normal -0.739411 0.673255 -0.000076 + outer loop + vertex -8.372674 8.493528 24.378292 + vertex -7.338006 9.630043 25.948034 + vertex -7.292752 9.673538 -29.000000 + endloop + endfacet + facet normal -0.657479 0.753473 0.000055 + outer loop + vertex -7.292752 9.673538 91.000000 + vertex -6.528029 10.344987 34.559666 + vertex -7.240622 9.723082 35.889565 + endloop + endfacet + facet normal -0.623490 0.781831 0.000853 + outer loop + vertex -7.292752 9.673538 91.000000 + vertex -5.610764 11.014879 91.000000 + vertex -6.528029 10.344987 34.559666 + endloop + endfacet + facet normal -0.732440 0.680831 -0.000081 + outer loop + vertex -8.299619 8.584002 37.517891 + vertex -7.292752 9.673538 91.000000 + vertex -7.240622 9.723082 35.889565 + endloop + endfacet + facet normal -0.858449 0.512899 -0.000927 + outer loop + vertex -9.295414 7.164775 23.126276 + vertex -8.708204 8.053423 -29.000000 + vertex -9.811626 6.206605 -29.000000 + endloop + endfacet + facet normal -0.821576 0.570099 0.000464 + outer loop + vertex -9.295414 7.164775 23.126276 + vertex -8.372674 8.493528 24.378292 + vertex -8.708204 8.053423 -29.000000 + endloop + endfacet + facet normal -0.816755 0.576984 -0.000516 + outer loop + vertex -8.708204 8.053423 91.000000 + vertex -8.299619 8.584002 37.517891 + vertex -9.250660 7.238907 38.815117 + endloop + endfacet + facet normal -0.753071 0.657939 0.000774 + outer loop + vertex -8.708204 8.053423 91.000000 + vertex -7.292752 9.673538 91.000000 + vertex -8.299619 8.584002 37.517891 + endloop + endfacet + facet normal -0.888008 0.459827 0.000342 + outer loop + vertex -9.974246 5.854475 22.257341 + vertex -9.295414 7.164775 23.126276 + vertex -9.811626 6.206605 -29.000000 + endloop + endfacet + facet normal -0.936235 0.351375 -0.000665 + outer loop + vertex -10.429211 4.656930 21.692644 + vertex -9.811626 6.206605 -29.000000 + vertex -10.567554 4.192442 -29.000000 + endloop + endfacet + facet normal -0.934728 0.355364 -0.000524 + outer loop + vertex -10.429211 4.656930 21.692644 + vertex -9.974246 5.854475 22.257341 + vertex -9.811626 6.206605 -29.000000 + endloop + endfacet + facet normal -0.883513 0.468407 -0.000232 + outer loop + vertex -9.811626 6.206605 91.000000 + vertex -9.250660 7.238907 38.815117 + vertex -9.915038 5.986175 39.668221 + endloop + endfacet + facet normal -0.858448 0.512899 0.000918 + outer loop + vertex -9.811626 6.206605 91.000000 + vertex -8.708204 8.053423 91.000000 + vertex -9.250660 7.238907 38.815117 + endloop + endfacet + facet normal -0.983929 0.178557 -0.000960 + outer loop + vertex -10.800443 3.179347 21.240366 + vertex -10.567554 4.192442 -29.000000 + vertex -10.951692 2.075672 -29.000000 + endloop + endfacet + facet normal -0.969888 0.243550 0.000415 + outer loop + vertex -10.800443 3.179347 21.240366 + vertex -10.429211 4.656930 21.692644 + vertex -10.567554 4.192442 -29.000000 + endloop + endfacet + facet normal -0.937600 0.347714 0.000232 + outer loop + vertex -10.567554 4.192442 91.000000 + vertex -9.915038 5.986175 39.668221 + vertex -10.527491 4.334210 40.427780 + endloop + endfacet + facet normal -0.936235 0.351375 0.000377 + outer loop + vertex -10.567554 4.192442 91.000000 + vertex -9.811626 6.206605 91.000000 + vertex -9.915038 5.986175 39.668221 + endloop + endfacet + facet normal -0.975706 0.219084 -0.000159 + outer loop + vertex -10.846192 2.915130 40.814899 + vertex -10.567554 4.192442 91.000000 + vertex -10.527491 4.334210 40.427780 + endloop + endfacet + facet normal -0.993453 0.114243 0.000481 + outer loop + vertex -10.987032 1.557722 21.015564 + vertex -10.800443 3.179347 21.240366 + vertex -10.951692 2.075672 -29.000000 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000707 + outer loop + vertex -10.951692 -0.075672 -29.000000 + vertex -10.987032 1.557722 21.015564 + vertex -10.951692 2.075672 -29.000000 + endloop + endfacet + facet normal -0.996104 0.088185 -0.000619 + outer loop + vertex -10.951692 2.075672 91.000000 + vertex -10.846192 2.915130 40.814899 + vertex -10.998376 1.197410 40.998051 + endloop + endfacet + facet normal -0.983929 0.178557 0.000918 + outer loop + vertex -10.951692 2.075672 91.000000 + vertex -10.567554 4.192442 91.000000 + vertex -10.846192 2.915130 40.814899 + endloop + endfacet + facet normal -0.999767 -0.021564 -0.000002 + outer loop + vertex -10.951837 -0.074060 21.057848 + vertex -10.987032 1.557722 21.015564 + vertex -10.951692 -0.075672 -29.000000 + endloop + endfacet + facet normal -0.987838 -0.155489 0.000002 + outer loop + vertex -10.703868 -1.649430 21.357359 + vertex -10.951837 -0.074060 21.057848 + vertex -10.951692 -0.075672 -29.000000 + endloop + endfacet + facet normal -0.983929 -0.178557 -0.000738 + outer loop + vertex -10.703868 -1.649430 21.357359 + vertex -10.951692 -0.075672 -29.000000 + vertex -10.567554 -2.192442 -29.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000934 + outer loop + vertex -10.951692 -0.075672 91.000000 + vertex -10.951692 2.075672 91.000000 + vertex -10.998376 1.197410 40.998051 + endloop + endfacet + facet normal -0.998486 -0.055007 -0.000468 + outer loop + vertex -10.951692 -0.075672 91.000000 + vertex -10.998376 1.197410 40.998051 + vertex -10.903988 -0.514951 40.884579 + endloop + endfacet + facet normal -0.984504 -0.175362 0.000600 + outer loop + vertex -10.695628 -1.685570 40.632637 + vertex -10.951692 -0.075672 91.000000 + vertex -10.903988 -0.514951 40.884579 + endloop + endfacet + facet normal -0.958646 -0.284602 0.000474 + outer loop + vertex -10.252209 -3.169867 21.910873 + vertex -10.703868 -1.649430 21.357359 + vertex -10.567554 -2.192442 -29.000000 + endloop + endfacet + facet normal -0.936234 -0.351375 -0.000947 + outer loop + vertex -10.252209 -3.169867 21.910873 + vertex -10.567554 -2.192442 -29.000000 + vertex -9.811626 -4.206605 -29.000000 + endloop + endfacet + facet normal -0.983929 -0.178557 0.000705 + outer loop + vertex -10.567554 -2.192442 91.000000 + vertex -10.951692 -0.075672 91.000000 + vertex -10.695628 -1.685570 40.632637 + endloop + endfacet + facet normal -0.961368 -0.275265 -0.000326 + outer loop + vertex -10.567554 -2.192442 91.000000 + vertex -10.695628 -1.685570 40.632637 + vertex -10.343766 -2.913946 40.202229 + endloop + endfacet + facet normal -0.913616 -0.406579 0.000373 + outer loop + vertex -9.627810 -4.572220 22.696365 + vertex -10.252209 -3.169867 21.910873 + vertex -9.811626 -4.206605 -29.000000 + endloop + endfacet + facet normal -0.858449 -0.512899 -0.000575 + outer loop + vertex -8.708204 -6.053423 -29.000000 + vertex -9.627810 -4.572220 22.696365 + vertex -9.811626 -4.206605 -29.000000 + endloop + endfacet + facet normal -0.927206 -0.374552 0.000182 + outer loop + vertex -9.811626 -4.206605 91.000000 + vertex -10.343766 -2.913946 40.202229 + vertex -9.880333 -4.061458 39.624477 + endloop + endfacet + facet normal -0.879853 -0.475247 -0.000166 + outer loop + vertex -9.811626 -4.206605 91.000000 + vertex -9.880333 -4.061458 39.624477 + vertex -9.197070 -5.326117 38.744690 + endloop + endfacet + facet normal -0.936234 -0.351375 0.000866 + outer loop + vertex -9.811626 -4.206605 91.000000 + vertex -10.567554 -2.192442 91.000000 + vertex -10.343766 -2.913946 40.202229 + endloop + endfacet + facet normal -0.753071 -0.657939 -0.000758 + outer loop + vertex -7.758466 -7.203003 25.280670 + vertex -8.708204 -6.053423 -29.000000 + vertex -7.292752 -7.673538 -29.000000 + endloop + endfacet + facet normal -0.858449 -0.512899 0.000892 + outer loop + vertex -8.708204 -6.053423 91.000000 + vertex -9.811626 -4.206605 91.000000 + vertex -9.197070 -5.326117 38.744690 + endloop + endfacet + facet normal -0.696717 -0.717346 0.000241 + outer loop + vertex -6.938873 -7.998572 26.638153 + vertex -7.758466 -7.203003 25.280670 + vertex -7.292752 -7.673538 -29.000000 + endloop + endfacet + facet normal -0.623490 -0.781831 -0.000809 + outer loop + vertex -6.298790 -8.525107 27.954950 + vertex -7.292752 -7.673538 -29.000000 + vertex -5.610764 -9.014879 -29.000000 + endloop + endfacet + facet normal -0.634695 -0.772762 -0.000478 + outer loop + vertex -6.298790 -8.525107 27.954950 + vertex -6.938873 -7.998572 26.638153 + vertex -7.292752 -7.673538 -29.000000 + endloop + endfacet + facet normal -0.650332 -0.759650 0.000094 + outer loop + vertex -7.292752 -7.673538 91.000000 + vertex -7.218597 -7.743835 35.852356 + vertex -6.375163 -8.466096 34.223824 + endloop + endfacet + facet normal -0.753071 -0.657939 0.000812 + outer loop + vertex -7.292752 -7.673538 91.000000 + vertex -8.708204 -6.053423 91.000000 + vertex -8.256754 -6.636262 37.456585 + endloop + endfacet + facet normal -0.592141 -0.805834 -0.000224 + outer loop + vertex -5.919753 -8.803928 29.029472 + vertex -6.298790 -8.525107 27.954950 + vertex -5.610764 -9.014879 -29.000000 + endloop + endfacet + facet normal -0.566671 -0.823944 -0.000022 + outer loop + vertex -5.681127 -8.968076 30.201591 + vertex -5.919753 -8.803928 29.029472 + vertex -5.610764 -9.014879 -29.000000 + endloop + endfacet + facet normal -0.555733 -0.831361 -0.000003 + outer loop + vertex -5.659541 -8.982511 31.591177 + vertex -5.681127 -8.968076 30.201591 + vertex -5.610764 -9.014879 -29.000000 + endloop + endfacet + facet normal -0.473869 -0.880596 0.000089 + outer loop + vertex -3.716300 -10.034333 -29.000000 + vertex -5.659541 -8.982511 31.591177 + vertex -5.610764 -9.014879 -29.000000 + endloop + endfacet + facet normal -0.596199 -0.802837 0.000267 + outer loop + vertex -5.610764 -9.014879 91.000000 + vertex -6.375163 -8.466096 34.223824 + vertex -5.941191 -8.788762 33.044537 + endloop + endfacet + facet normal -0.566698 -0.823926 0.000016 + outer loop + vertex -5.610764 -9.014879 91.000000 + vertex -5.941191 -8.788762 33.044537 + vertex -5.659541 -8.982511 31.591177 + endloop + endfacet + facet normal -0.623490 -0.781831 0.000837 + outer loop + vertex -5.610764 -9.014879 91.000000 + vertex -7.292752 -7.673538 91.000000 + vertex -6.375163 -8.466096 34.223824 + endloop + endfacet + facet normal -0.473869 -0.880596 -0.000091 + outer loop + vertex -3.716300 -10.034333 91.000000 + vertex -5.610764 -9.014879 91.000000 + vertex -5.659541 -8.982511 31.591177 + endloop + endfacet + facet normal -0.476015 -0.879437 -0.000000 + outer loop + vertex -3.716300 -10.034333 91.000000 + vertex -5.659541 -8.982511 31.591177 + vertex -3.716300 -10.034333 -29.000000 + endloop + endfacet + facet normal -0.309017 -0.951057 -0.000000 + outer loop + vertex -1.670251 -10.699135 91.000000 + vertex -3.716300 -10.034333 -29.000000 + vertex -1.670251 -10.699135 -29.000000 + endloop + endfacet + facet normal -0.309017 -0.951057 0.000000 + outer loop + vertex -1.670251 -10.699135 91.000000 + vertex -3.716300 -10.034333 91.000000 + vertex -3.716300 -10.034333 -29.000000 + endloop + endfacet + facet normal -0.134233 -0.990950 -0.000000 + outer loop + vertex 0.461622 -10.987917 91.000000 + vertex -1.670251 -10.699135 -29.000000 + vertex 0.461622 -10.987917 -29.000000 + endloop + endfacet + facet normal -0.134233 -0.990950 0.000000 + outer loop + vertex 0.461622 -10.987917 91.000000 + vertex -1.670251 -10.699135 91.000000 + vertex -1.670251 -10.699135 -29.000000 + endloop + endfacet + facet normal 0.044865 -0.998993 0.000000 + outer loop + vertex 2.610799 -10.891397 91.000000 + vertex 0.461622 -10.987917 -29.000000 + vertex 2.610799 -10.891397 -29.000000 + endloop + endfacet + facet normal 0.044865 -0.998993 0.000000 + outer loop + vertex 2.610799 -10.891397 91.000000 + vertex 0.461622 -10.987917 91.000000 + vertex 0.461622 -10.987917 -29.000000 + endloop + endfacet + facet normal 0.222521 -0.974928 0.000000 + outer loop + vertex 4.708204 -10.412678 91.000000 + vertex 2.610799 -10.891397 -29.000000 + vertex 4.708204 -10.412678 -29.000000 + endloop + endfacet + facet normal 0.222521 -0.974928 0.000000 + outer loop + vertex 4.708204 -10.412678 91.000000 + vertex 2.610799 -10.891397 91.000000 + vertex 2.610799 -10.891397 -29.000000 + endloop + endfacet + facet normal 0.393025 -0.919528 0.000000 + outer loop + vertex 6.686424 -9.567146 91.000000 + vertex 4.708204 -10.412678 -29.000000 + vertex 6.686424 -9.567146 -29.000000 + endloop + endfacet + facet normal 0.393025 -0.919528 0.000000 + outer loop + vertex 6.686424 -9.567146 91.000000 + vertex 4.708204 -10.412678 91.000000 + vertex 4.708204 -10.412678 -29.000000 + endloop + endfacet + facet normal 0.550897 -0.834573 0.000000 + outer loop + vertex 8.481877 -8.381978 91.000000 + vertex 6.686424 -9.567146 -29.000000 + vertex 8.481877 -8.381978 -29.000000 + endloop + endfacet + facet normal 0.550897 -0.834573 0.000000 + outer loop + vertex 8.481877 -8.381978 91.000000 + vertex 6.686424 -9.567146 91.000000 + vertex 6.686424 -9.567146 -29.000000 + endloop + endfacet + facet normal 0.687426 -0.726254 0.000000 + outer loop + vertex 9.957150 -6.985579 30.519876 + vertex 8.481877 -8.381978 91.000000 + vertex 8.481877 -8.381978 -29.000000 + endloop + endfacet + facet normal 0.691063 -0.722795 -0.000171 + outer loop + vertex 9.957150 -6.985579 30.519876 + vertex 8.481877 -8.381978 -29.000000 + vertex 10.036858 -6.895265 -29.000000 + endloop + endfacet + facet normal 0.753451 -0.657504 0.000011 + outer loop + vertex 10.123698 -6.794750 29.199480 + vertex 9.957150 -6.985579 30.519876 + vertex 10.036858 -6.895265 -29.000000 + endloop + endfacet + facet normal 0.773617 -0.633653 -0.000060 + outer loop + vertex 10.441307 -6.406870 27.977041 + vertex 10.123698 -6.794750 29.199480 + vertex 10.036858 -6.895265 -29.000000 + endloop + endfacet + facet normal 0.803962 -0.594680 -0.000609 + outer loop + vertex 10.859378 -5.840517 26.851830 + vertex 10.441307 -6.406870 27.977041 + vertex 10.036858 -6.895265 -29.000000 + endloop + endfacet + facet normal 0.809017 -0.587785 -0.000814 + outer loop + vertex 10.859378 -5.840517 26.851830 + vertex 10.036858 -6.895265 -29.000000 + vertex 11.301386 -5.154791 -29.000000 + endloop + endfacet + facet normal 0.691063 -0.722795 0.000169 + outer loop + vertex 10.036858 -6.895265 91.000000 + vertex 8.481877 -8.381978 91.000000 + vertex 9.957150 -6.985579 30.519876 + endloop + endfacet + facet normal 0.781554 -0.623838 0.000150 + outer loop + vertex 10.036858 -6.895265 91.000000 + vertex 10.203491 -6.700374 33.168926 + vertex 10.553408 -6.261708 34.356724 + endloop + endfacet + facet normal 0.758054 -0.652192 -0.000014 + outer loop + vertex 10.036858 -6.895265 91.000000 + vertex 9.987243 -6.951696 31.877798 + vertex 10.203491 -6.700374 33.168926 + endloop + endfacet + facet normal 0.747557 -0.664197 0.000007 + outer loop + vertex 10.036858 -6.895265 91.000000 + vertex 9.957150 -6.985579 30.519876 + vertex 9.987243 -6.951696 31.877798 + endloop + endfacet + facet normal 0.842075 -0.539361 0.000042 + outer loop + vertex 11.336068 -5.096367 25.819815 + vertex 10.859378 -5.840517 26.851830 + vertex 11.301386 -5.154791 -29.000000 + endloop + endfacet + facet normal 0.883071 -0.469240 -0.000059 + outer loop + vertex 11.837208 -4.153147 24.880762 + vertex 11.336068 -5.096367 25.819815 + vertex 11.301386 -5.154791 -29.000000 + endloop + endfacet + facet normal 0.900969 -0.433883 -0.000894 + outer loop + vertex 11.837208 -4.153147 24.880762 + vertex 11.301386 -5.154791 -29.000000 + vertex 12.234818 -3.216498 -29.000000 + endloop + endfacet + facet normal 0.853458 -0.521161 -0.000154 + outer loop + vertex 11.301386 -5.154791 91.000000 + vertex 10.990158 -5.648063 35.450085 + vertex 11.475355 -4.853796 36.452805 + endloop + endfacet + facet normal 0.814216 -0.580561 0.000593 + outer loop + vertex 11.301386 -5.154791 91.000000 + vertex 10.553408 -6.261708 34.356724 + vertex 10.990158 -5.648063 35.450085 + endloop + endfacet + facet normal 0.809017 -0.587785 0.000803 + outer loop + vertex 11.301386 -5.154791 91.000000 + vertex 10.036858 -6.895265 91.000000 + vertex 10.553408 -6.261708 34.356724 + endloop + endfacet + facet normal 0.894623 -0.446821 0.000388 + outer loop + vertex 11.975570 -3.851482 37.361065 + vertex 11.301386 -5.154791 91.000000 + vertex 11.475355 -4.853796 36.452805 + endloop + endfacet + facet normal 0.920705 -0.390260 0.000010 + outer loop + vertex 12.239279 -3.204595 24.194019 + vertex 11.837208 -4.153147 24.880762 + vertex 12.234818 -3.216498 -29.000000 + endloop + endfacet + facet normal 0.951731 -0.306935 -0.000011 + outer loop + vertex 12.578116 -2.153921 23.647940 + vertex 12.239279 -3.204595 24.194019 + vertex 12.234818 -3.216498 -29.000000 + endloop + endfacet + facet normal 0.963963 -0.266037 -0.000916 + outer loop + vertex 12.578116 -2.153921 23.647940 + vertex 12.234818 -3.216498 -29.000000 + vertex 12.807155 -1.142683 -29.000000 + endloop + endfacet + facet normal 0.933574 -0.358383 -0.000270 + outer loop + vertex 12.234818 -3.216498 91.000000 + vertex 11.975570 -3.851482 37.361065 + vertex 12.401385 -2.742783 38.070473 + endloop + endfacet + facet normal 0.900969 -0.433883 0.000782 + outer loop + vertex 12.234818 -3.216498 91.000000 + vertex 11.301386 -5.154791 91.000000 + vertex 11.975570 -3.851482 37.361065 + endloop + endfacet + facet normal 0.962801 -0.270210 0.000612 + outer loop + vertex 12.685336 -1.730003 38.519779 + vertex 12.234818 -3.216498 91.000000 + vertex 12.401385 -2.742783 38.070473 + endloop + endfacet + facet normal 0.977859 -0.209265 0.000235 + outer loop + vertex 12.854565 -0.862604 23.219852 + vertex 12.578116 -2.153921 23.647940 + vertex 12.807155 -1.142683 -29.000000 + endloop + endfacet + facet normal 0.992924 -0.118753 -0.000265 + outer loop + vertex 12.959555 0.015601 23.060797 + vertex 12.854565 -0.862604 23.219852 + vertex 12.807155 -1.142683 -29.000000 + endloop + endfacet + facet normal 0.995974 -0.089639 -0.000921 + outer loop + vertex 12.959555 0.015601 23.060797 + vertex 12.807155 -1.142683 -29.000000 + vertex 13.000000 1.000000 -29.000000 + endloop + endfacet + facet normal 0.984343 -0.176264 -0.000312 + outer loop + vertex 12.807155 -1.142683 91.000000 + vertex 12.685336 -1.730003 38.519779 + vertex 12.906315 -0.496555 38.858772 + endloop + endfacet + facet normal 0.963963 -0.266037 0.000740 + outer loop + vertex 12.807155 -1.142683 91.000000 + vertex 12.234818 -3.216498 91.000000 + vertex 12.685336 -1.730003 38.519779 + endloop + endfacet + facet normal 0.999157 -0.041052 0.000000 + outer loop + vertex 13.000000 1.000000 23.000000 + vertex 12.959555 0.015601 23.060797 + vertex 13.000000 1.000000 -29.000000 + endloop + endfacet + facet normal 0.998046 -0.062478 0.000000 + outer loop + vertex 13.000000 1.000000 91.000000 + vertex 12.906315 -0.496555 38.858772 + vertex 13.000000 1.000000 39.000000 + endloop + endfacet + facet normal 0.995974 -0.089639 0.000783 + outer loop + vertex 13.000000 1.000000 91.000000 + vertex 12.807155 -1.142683 91.000000 + vertex 12.906315 -0.496555 38.858772 + endloop + endfacet + facet normal -0.812649 -0.582753 -0.000508 + outer loop + vertex -9.197070 -5.326117 38.744690 + vertex -8.256754 -6.636262 37.456585 + vertex -8.708204 -6.053423 91.000000 + endloop + endfacet + facet normal -0.729680 -0.683789 -0.000110 + outer loop + vertex -8.256754 -6.636262 37.456585 + vertex -7.218597 -7.743835 35.852356 + vertex -7.292752 -7.673538 91.000000 + endloop + endfacet + facet normal -0.772134 -0.635460 0.000052 + outer loop + vertex -7.758466 -7.203003 25.280670 + vertex -8.734071 -6.017682 23.875946 + vertex -8.708204 -6.053423 -29.000000 + endloop + endfacet + facet normal -0.850525 -0.525935 -0.000061 + outer loop + vertex -8.734071 -6.017682 23.875946 + vertex -9.627810 -4.572220 22.696365 + vertex -8.708204 -6.053423 -29.000000 + endloop + endfacet + facet normal -0.000014 -0.989717 -0.143040 + outer loop + vertex 131.000000 -6.799423 29.219833 + vertex 9.957150 -6.985579 30.519876 + vertex 10.123698 -6.794750 29.199480 + endloop + endfacet + facet normal 0.000014 -0.953169 -0.302437 + outer loop + vertex 131.000000 -6.799423 29.219833 + vertex 10.123698 -6.794750 29.199480 + vertex 10.441307 -6.406870 27.977041 + endloop + endfacet + facet normal 0.000326 -0.993712 -0.111965 + outer loop + vertex 131.000000 -6.799423 29.219833 + vertex 131.000000 -7.000000 31.000000 + vertex 9.957150 -6.985579 30.519876 + endloop + endfacet + facet normal 0.000000 0.995512 0.094638 + outer loop + vertex 131.000000 9.000000 31.000000 + vertex 9.944272 9.000000 31.000000 + vertex 10.070409 8.856697 32.507420 + endloop + endfacet + facet normal -0.000196 -0.893205 -0.449650 + outer loop + vertex 131.000000 -6.207751 27.528931 + vertex 10.441307 -6.406870 27.977041 + vertex 10.859378 -5.840517 26.851830 + endloop + endfacet + facet normal -0.000169 0.960980 0.276618 + outer loop + vertex 131.000000 8.799423 32.780167 + vertex 10.070409 8.856697 32.507420 + vertex 10.402563 8.455991 33.899689 + endloop + endfacet + facet normal 0.000331 -0.943883 -0.330279 + outer loop + vertex 131.000000 -6.207751 27.528931 + vertex 131.000000 -6.799423 29.219833 + vertex 10.441307 -6.406870 27.977041 + endloop + endfacet + facet normal 0.000218 0.993712 0.111965 + outer loop + vertex 131.000000 8.799423 32.780167 + vertex 131.000000 9.000000 31.000000 + vertex 10.070409 8.856697 32.507420 + endloop + endfacet + facet normal -0.000133 -0.811095 -0.584914 + outer loop + vertex 131.000000 -5.254652 26.012081 + vertex 10.859378 -5.840517 26.851830 + vertex 11.336068 -5.096367 25.819815 + endloop + endfacet + facet normal 0.000410 -0.846724 -0.532032 + outer loop + vertex 131.000000 -5.254652 26.012081 + vertex 131.000000 -6.207751 27.528931 + vertex 10.859378 -5.840517 26.851830 + endloop + endfacet + facet normal -0.000256 0.896312 0.443423 + outer loop + vertex 131.000000 8.207751 34.471069 + vertex 10.402563 8.455991 33.899689 + vertex 10.866963 7.829570 35.166172 + endloop + endfacet + facet normal 0.000378 0.943883 0.330279 + outer loop + vertex 131.000000 8.207751 34.471069 + vertex 131.000000 8.799423 32.780167 + vertex 10.402563 8.455991 33.899689 + endloop + endfacet + facet normal 0.000173 -0.705586 -0.708625 + outer loop + vertex 131.000000 -3.987918 24.745348 + vertex 11.336068 -5.096367 25.819815 + vertex 11.837208 -4.153147 24.880762 + endloop + endfacet + facet normal -0.000107 -0.586402 -0.810020 + outer loop + vertex 131.000000 -3.987918 24.745348 + vertex 11.837208 -4.153147 24.880762 + vertex 12.239279 -3.204595 24.194019 + endloop + endfacet + facet normal -0.000225 0.803620 0.595143 + outer loop + vertex 131.000000 7.254652 35.987919 + vertex 10.866963 7.829570 35.166172 + vertex 11.405221 6.977572 36.316826 + endloop + endfacet + facet normal 0.000201 -0.707107 -0.707107 + outer loop + vertex 131.000000 -3.987918 24.745348 + vertex 131.000000 -5.254652 26.012081 + vertex 11.336068 -5.096367 25.819815 + endloop + endfacet + facet normal 0.000413 0.846724 0.532032 + outer loop + vertex 131.000000 7.254652 35.987919 + vertex 131.000000 8.207751 34.471069 + vertex 10.866963 7.829570 35.166172 + endloop + endfacet + facet normal -0.000154 -0.461134 -0.887331 + outer loop + vertex 131.000000 -2.471070 23.792250 + vertex 12.239279 -3.204595 24.194019 + vertex 12.578116 -2.153921 23.647940 + endloop + endfacet + facet normal -0.000110 0.680839 0.732433 + outer loop + vertex 131.000000 5.987918 37.254650 + vertex 11.405221 6.977572 36.316826 + vertex 11.968547 5.867337 37.348938 + endloop + endfacet + facet normal 0.000422 -0.532032 -0.846724 + outer loop + vertex 131.000000 -2.471070 23.792250 + vertex 131.000000 -3.987918 24.745348 + vertex 12.239279 -3.204595 24.194019 + endloop + endfacet + facet normal 0.000306 0.707106 0.707107 + outer loop + vertex 131.000000 5.987918 37.254650 + vertex 131.000000 7.254652 35.987919 + vertex 11.405221 6.977572 36.316826 + endloop + endfacet + facet normal -0.000045 0.521109 0.853490 + outer loop + vertex 131.000000 4.471070 38.207752 + vertex 11.968547 5.867337 37.348938 + vertex 12.501177 4.423876 38.230289 + endloop + endfacet + facet normal 0.000043 0.341486 0.939887 + outer loop + vertex 131.000000 4.471070 38.207752 + vertex 12.501177 4.423876 38.230289 + vertex 12.829484 3.015767 38.741879 + endloop + endfacet + facet normal 0.000132 0.532033 0.846723 + outer loop + vertex 131.000000 4.471070 38.207752 + vertex 131.000000 5.987918 37.254650 + vertex 11.968547 5.867337 37.348938 + endloop + endfacet + facet normal 0.000065 -0.314684 -0.949197 + outer loop + vertex 131.000000 -0.780167 23.200577 + vertex 12.578116 -2.153921 23.647940 + vertex 12.854565 -0.862604 23.219852 + endloop + endfacet + facet normal -0.000036 -0.178211 -0.983992 + outer loop + vertex 131.000000 -0.780167 23.200577 + vertex 12.854565 -0.862604 23.219852 + vertex 12.959555 0.015601 23.060797 + endloop + endfacet + facet normal 0.000266 -0.330279 -0.943883 + outer loop + vertex 131.000000 -0.780167 23.200577 + vertex 131.000000 -2.471070 23.792250 + vertex 12.578116 -2.153921 23.647940 + endloop + endfacet + facet normal -0.000092 0.193413 0.981117 + outer loop + vertex 131.000000 2.780168 38.799423 + vertex 12.829484 3.015767 38.741879 + vertex 12.951891 2.073451 38.927654 + endloop + endfacet + facet normal 0.000199 0.330278 0.943884 + outer loop + vertex 131.000000 2.780168 38.799423 + vertex 131.000000 4.471070 38.207752 + vertex 12.829484 3.015767 38.741879 + endloop + endfacet + facet normal 0.000000 0.093950 -0.995577 + outer loop + vertex 131.000000 1.000000 23.000000 + vertex 13.000000 1.000000 23.000000 + vertex 12.906315 2.496555 23.141226 + endloop + endfacet + facet normal -0.000000 -0.061643 -0.998098 + outer loop + vertex 131.000000 1.000000 23.000000 + vertex 12.959555 0.015601 23.060797 + vertex 13.000000 1.000000 23.000000 + endloop + endfacet + facet normal 0.000422 -0.111965 -0.993712 + outer loop + vertex 131.000000 1.000000 23.000000 + vertex 131.000000 -0.780167 23.200577 + vertex 12.959555 0.015601 23.060797 + endloop + endfacet + facet normal 0.000409 0.111965 0.993712 + outer loop + vertex 131.000000 1.000000 39.000000 + vertex 131.000000 2.780168 38.799423 + vertex 12.951891 2.073451 38.927654 + endloop + endfacet + facet normal 0.000000 -0.093951 0.995577 + outer loop + vertex 131.000000 1.000000 39.000000 + vertex 13.000000 1.000000 39.000000 + vertex 12.906315 -0.496555 38.858772 + endloop + endfacet + facet normal 0.000000 0.067243 0.997737 + outer loop + vertex 131.000000 1.000000 39.000000 + vertex 12.951891 2.073451 38.927654 + vertex 13.000000 1.000000 39.000000 + endloop + endfacet + facet normal -0.000152 0.264984 -0.964253 + outer loop + vertex 131.000000 2.780168 23.200577 + vertex 12.906315 2.496555 23.141226 + vertex 12.685336 3.730003 23.480221 + endloop + endfacet + facet normal 0.000231 0.111965 -0.993712 + outer loop + vertex 131.000000 2.780168 23.200577 + vertex 131.000000 1.000000 23.000000 + vertex 12.906315 2.496555 23.141226 + endloop + endfacet + facet normal -0.000152 -0.264982 0.964253 + outer loop + vertex 131.000000 -0.780167 38.799423 + vertex 12.906315 -0.496555 38.858772 + vertex 12.685336 -1.730003 38.519779 + endloop + endfacet + facet normal -0.000129 0.405492 -0.914099 + outer loop + vertex 131.000000 4.471070 23.792250 + vertex 12.685336 3.730003 23.480221 + vertex 12.401385 4.742783 23.929527 + endloop + endfacet + facet normal 0.000231 -0.111965 0.993712 + outer loop + vertex 131.000000 -0.780167 38.799423 + vertex 131.000000 1.000000 39.000000 + vertex 12.906315 -0.496555 38.858772 + endloop + endfacet + facet normal 0.000421 0.330279 -0.943883 + outer loop + vertex 131.000000 4.471070 23.792250 + vertex 131.000000 2.780168 23.200577 + vertex 12.685336 3.730003 23.480221 + endloop + endfacet + facet normal -0.000129 -0.405492 0.914099 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 12.685336 -1.730003 38.519779 + vertex 12.401385 -2.742783 38.070473 + endloop + endfacet + facet normal 0.000421 -0.330278 0.943883 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 -0.780167 38.799423 + vertex 12.685336 -1.730003 38.519779 + endloop + endfacet + facet normal 0.000135 0.539006 -0.842302 + outer loop + vertex 131.000000 5.987918 24.745348 + vertex 12.401385 4.742783 23.929527 + vertex 11.975570 5.851481 24.638937 + endloop + endfacet + facet normal -0.000107 0.671454 -0.741046 + outer loop + vertex 131.000000 5.987918 24.745348 + vertex 11.975570 5.851481 24.638937 + vertex 11.475355 6.853796 25.547195 + endloop + endfacet + facet normal 0.000239 0.532032 -0.846724 + outer loop + vertex 131.000000 5.987918 24.745348 + vertex 131.000000 4.471070 23.792250 + vertex 12.401385 4.742783 23.929527 + endloop + endfacet + facet normal -0.000213 0.783825 -0.620981 + outer loop + vertex 131.000000 7.254652 26.012081 + vertex 11.475355 6.853796 25.547195 + vertex 10.990158 7.648063 26.549915 + endloop + endfacet + facet normal 0.000239 -0.532033 0.846723 + outer loop + vertex 131.000000 -3.987918 37.254650 + vertex 131.000000 -2.471070 38.207752 + vertex 12.401385 -2.742783 38.070473 + endloop + endfacet + facet normal 0.000135 -0.539005 0.842303 + outer loop + vertex 131.000000 -3.987918 37.254650 + vertex 12.401385 -2.742783 38.070473 + vertex 11.975570 -3.851482 37.361065 + endloop + endfacet + facet normal -0.000107 -0.671455 0.741046 + outer loop + vertex 131.000000 -3.987918 37.254650 + vertex 11.975570 -3.851482 37.361065 + vertex 11.475355 -4.853796 36.452805 + endloop + endfacet + facet normal 0.000379 0.707107 -0.707107 + outer loop + vertex 131.000000 7.254652 26.012081 + vertex 131.000000 5.987918 24.745348 + vertex 11.475355 6.853796 25.547195 + endloop + endfacet + facet normal -0.000213 -0.783825 0.620981 + outer loop + vertex 131.000000 -5.254652 35.987919 + vertex 11.475355 -4.853796 36.452805 + vertex 10.990158 -5.648063 35.450085 + endloop + endfacet + facet normal -0.000074 0.872030 -0.489453 + outer loop + vertex 131.000000 8.207751 27.528931 + vertex 10.990158 7.648063 26.549915 + vertex 10.553408 8.261708 27.643276 + endloop + endfacet + facet normal 0.000091 0.938081 -0.346416 + outer loop + vertex 131.000000 8.207751 27.528931 + vertex 10.553408 8.261708 27.643276 + vertex 10.203491 8.700374 28.831072 + endloop + endfacet + facet normal 0.000379 -0.707106 0.707107 + outer loop + vertex 131.000000 -5.254652 35.987919 + vertex 131.000000 -3.987918 37.254650 + vertex 11.475355 -4.853796 36.452805 + endloop + endfacet + facet normal 0.000391 0.846724 -0.532032 + outer loop + vertex 131.000000 8.207751 27.528931 + vertex 131.000000 7.254652 26.012081 + vertex 10.990158 7.648063 26.549915 + endloop + endfacet + facet normal -0.000074 -0.872030 0.489453 + outer loop + vertex 131.000000 -6.207751 34.471069 + vertex 10.990158 -5.648063 35.450085 + vertex 10.553408 -6.261708 34.356724 + endloop + endfacet + facet normal 0.000091 -0.938081 0.346416 + outer loop + vertex 131.000000 -6.207751 34.471069 + vertex 10.553408 -6.261708 34.356724 + vertex 10.203491 -6.700374 33.168926 + endloop + endfacet + facet normal 0.000391 -0.846724 0.532032 + outer loop + vertex 131.000000 -6.207751 34.471069 + vertex 131.000000 -5.254652 35.987919 + vertex 10.990158 -5.648063 35.450085 + endloop + endfacet + facet normal -0.000141 0.978655 -0.205509 + outer loop + vertex 131.000000 8.799423 29.219833 + vertex 10.203491 8.700374 28.831072 + vertex 10.013048 8.922435 29.888680 + endloop + endfacet + facet normal 0.000289 0.943883 -0.330279 + outer loop + vertex 131.000000 8.799423 29.219833 + vertex 131.000000 8.207751 27.528931 + vertex 10.203491 8.700374 28.831072 + endloop + endfacet + facet normal 0.000391 0.993712 -0.111965 + outer loop + vertex 131.000000 9.000000 31.000000 + vertex 131.000000 8.799423 29.219833 + vertex 10.013048 8.922435 29.888680 + endloop + endfacet + facet normal 0.000000 0.997573 -0.069626 + outer loop + vertex 131.000000 9.000000 31.000000 + vertex 10.013048 8.922435 29.888680 + vertex 9.944272 9.000000 31.000000 + endloop + endfacet + facet normal -0.000190 -0.981571 0.191098 + outer loop + vertex 131.000000 -6.799423 32.780167 + vertex 10.203491 -6.700374 33.168926 + vertex 9.987243 -6.951696 31.877798 + endloop + endfacet + facet normal 0.000289 -0.943883 0.330279 + outer loop + vertex 131.000000 -6.799423 32.780167 + vertex 131.000000 -6.207751 34.471069 + vertex 10.203491 -6.700374 33.168926 + endloop + endfacet + facet normal -0.000218 -0.999689 0.024950 + outer loop + vertex 131.000000 -7.000000 31.000000 + vertex 9.987243 -6.951696 31.877798 + vertex 9.957150 -6.985579 30.519876 + endloop + endfacet + facet normal 0.000416 -0.993712 0.111965 + outer loop + vertex 131.000000 -7.000000 31.000000 + vertex 131.000000 -6.799423 32.780167 + vertex 9.987243 -6.951696 31.877798 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.481877 10.381978 91.000000 + vertex 12.234818 5.216498 91.000000 + vertex 11.301386 7.154791 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.481877 10.381978 91.000000 + vertex 6.686424 11.567146 91.000000 + vertex 4.708204 12.412678 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.481877 10.381978 91.000000 + vertex 4.708204 12.412678 91.000000 + vertex 2.610799 12.891397 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.481877 10.381978 91.000000 + vertex 2.610799 12.891397 91.000000 + vertex -5.610764 11.014879 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.481877 10.381978 91.000000 + vertex -5.610764 11.014879 91.000000 + vertex 12.234818 5.216498 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -3.716300 -10.034333 91.000000 + vertex -8.708204 -6.053423 91.000000 + vertex -7.292752 -7.673538 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 10.036858 8.895265 91.000000 + vertex 8.481877 10.381978 91.000000 + vertex 11.301386 7.154791 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -3.716300 -10.034333 91.000000 + vertex -7.292752 -7.673538 91.000000 + vertex -5.610764 -9.014879 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -10.951692 -0.075672 91.000000 + vertex -10.567554 -2.192442 91.000000 + vertex -9.811626 -4.206605 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.461622 -10.987917 91.000000 + vertex -3.716300 -10.034333 91.000000 + vertex -1.670251 -10.699135 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.461622 -10.987917 91.000000 + vertex -8.708204 -6.053423 91.000000 + vertex -3.716300 -10.034333 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 4.708204 -10.412678 91.000000 + vertex 0.461622 -10.987917 91.000000 + vertex 2.610799 -10.891397 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -9.811626 6.206605 91.000000 + vertex -10.567554 4.192442 91.000000 + vertex -10.951692 2.075672 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -9.811626 6.206605 91.000000 + vertex -10.951692 2.075672 91.000000 + vertex -10.951692 -0.075672 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -7.292752 9.673538 91.000000 + vertex -8.708204 8.053423 91.000000 + vertex -9.811626 6.206605 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 10.036858 -6.895265 91.000000 + vertex -9.811626 -4.206605 91.000000 + vertex -8.708204 -6.053423 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 10.036858 -6.895265 91.000000 + vertex 4.708204 -10.412678 91.000000 + vertex 6.686424 -9.567146 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 10.036858 -6.895265 91.000000 + vertex 6.686424 -9.567146 91.000000 + vertex 8.481877 -8.381978 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 10.036858 -6.895265 91.000000 + vertex -8.708204 -6.053423 91.000000 + vertex 0.461622 -10.987917 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 10.036858 -6.895265 91.000000 + vertex 0.461622 -10.987917 91.000000 + vertex 4.708204 -10.412678 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 -3.216498 91.000000 + vertex 10.036858 -6.895265 91.000000 + vertex 11.301386 -5.154791 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.461622 12.987917 91.000000 + vertex -1.670251 12.699135 91.000000 + vertex -3.716300 12.034333 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.461622 12.987917 91.000000 + vertex -3.716300 12.034333 91.000000 + vertex -5.610764 11.014879 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 2.610799 12.891397 91.000000 + vertex 0.461622 12.987917 91.000000 + vertex -5.610764 11.014879 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.807155 3.142683 91.000000 + vertex 12.807155 -1.142683 91.000000 + vertex 13.000000 1.000000 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 91.000000 + vertex -5.610764 11.014879 91.000000 + vertex -7.292752 9.673538 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 91.000000 + vertex 12.234818 -3.216498 91.000000 + vertex 12.807155 -1.142683 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 91.000000 + vertex -10.951692 -0.075672 91.000000 + vertex -9.811626 -4.206605 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 91.000000 + vertex -7.292752 9.673538 91.000000 + vertex -9.811626 6.206605 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 91.000000 + vertex -9.811626 6.206605 91.000000 + vertex -10.951692 -0.075672 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 91.000000 + vertex -9.811626 -4.206605 91.000000 + vertex 10.036858 -6.895265 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 91.000000 + vertex 10.036858 -6.895265 91.000000 + vertex 12.234818 -3.216498 91.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.234818 5.216498 91.000000 + vertex 12.807155 -1.142683 91.000000 + vertex 12.807155 3.142683 91.000000 + endloop + endfacet + facet normal -0.000919 0.936949 -0.349464 + outer loop + vertex -6.470624 10.390942 27.563400 + vertex -34.000000 10.096320 26.845850 + vertex -34.000000 10.594930 28.182674 + endloop + endfacet + facet normal -0.000773 -0.936950 0.349464 + outer loop + vertex -6.375163 -8.466096 34.223824 + vertex -34.000000 -8.096320 35.154152 + vertex -34.000000 -8.594930 33.817326 + endloop + endfacet + facet normal 0.001442 -0.913852 0.406044 + outer loop + vertex -6.375163 -8.466096 34.223824 + vertex -7.218597 -7.743835 35.852356 + vertex -34.000000 -8.096320 35.154152 + endloop + endfacet + facet normal 0.000658 0.958118 -0.286374 + outer loop + vertex -6.012732 10.737638 28.724388 + vertex -6.470624 10.390942 27.563400 + vertex -34.000000 10.594930 28.182674 + endloop + endfacet + facet normal -0.000868 0.977146 -0.212565 + outer loop + vertex -6.012732 10.737638 28.724388 + vertex -34.000000 10.594930 28.182674 + vertex -34.000000 10.898214 29.576851 + endloop + endfacet + facet normal -0.000896 -0.977146 0.212565 + outer loop + vertex -5.941191 -8.788762 33.044537 + vertex -34.000000 -8.594930 33.817326 + vertex -34.000000 -8.898214 32.423149 + endloop + endfacet + facet normal 0.000612 -0.964490 0.264120 + outer loop + vertex -5.941191 -8.788762 33.044537 + vertex -6.375163 -8.466096 34.223824 + vertex -34.000000 -8.594930 33.817326 + endloop + endfacet + facet normal 0.000376 0.984892 -0.173172 + outer loop + vertex -5.737499 10.930061 29.819370 + vertex -6.012732 10.737638 28.724388 + vertex -34.000000 10.898214 29.576851 + endloop + endfacet + facet normal -0.000512 0.997452 -0.071339 + outer loop + vertex -5.737499 10.930061 29.819370 + vertex -34.000000 10.898214 29.576851 + vertex -34.000000 11.000000 31.000000 + endloop + endfacet + facet normal 0.000000 0.998250 -0.059135 + outer loop + vertex -5.633250 11.000000 31.000000 + vertex -5.737499 10.930061 29.819370 + vertex -34.000000 11.000000 31.000000 + endloop + endfacet + facet normal -0.000873 -0.997452 0.071339 + outer loop + vertex -5.659541 -8.982511 31.591177 + vertex -34.000000 -8.898214 32.423149 + vertex -34.000000 -9.000000 31.000000 + endloop + endfacet + facet normal -0.000307 0.997452 0.071339 + outer loop + vertex -5.757563 10.916418 32.290215 + vertex -34.000000 11.000000 31.000000 + vertex -34.000000 10.898214 32.423149 + endloop + endfacet + facet normal 0.000936 -0.991207 0.132320 + outer loop + vertex -5.659541 -8.982511 31.591177 + vertex -5.941191 -8.788762 33.044537 + vertex -34.000000 -8.898214 32.423149 + endloop + endfacet + facet normal 0.000000 0.997908 0.064646 + outer loop + vertex -5.757563 10.916418 32.290215 + vertex -5.633250 11.000000 31.000000 + vertex -34.000000 11.000000 31.000000 + endloop + endfacet + facet normal -0.000887 -0.997452 -0.071339 + outer loop + vertex -5.681127 -8.968076 30.201591 + vertex -34.000000 -9.000000 31.000000 + vertex -34.000000 -8.898214 29.576851 + endloop + endfacet + facet normal 0.000834 -0.999946 -0.010400 + outer loop + vertex -5.681127 -8.968076 30.201591 + vertex -5.659541 -8.982511 31.591177 + vertex -34.000000 -9.000000 31.000000 + endloop + endfacet + facet normal -0.000681 0.977147 0.212565 + outer loop + vertex -6.080200 10.688693 33.475727 + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 10.594930 33.817326 + endloop + endfacet + facet normal 0.000255 0.982033 0.188708 + outer loop + vertex -6.080200 10.688693 33.475727 + vertex -5.757563 10.916418 32.290215 + vertex -34.000000 10.898214 32.423149 + endloop + endfacet + facet normal -0.000863 -0.977147 -0.212565 + outer loop + vertex -5.919753 -8.803928 29.029472 + vertex -34.000000 -8.898214 29.576851 + vertex -34.000000 -8.594930 28.182674 + endloop + endfacet + facet normal 0.000619 -0.990318 -0.138813 + outer loop + vertex -5.919753 -8.803928 29.029472 + vertex -5.681127 -8.968076 30.201591 + vertex -34.000000 -8.898214 29.576851 + endloop + endfacet + facet normal 0.000499 0.953166 0.302446 + outer loop + vertex -6.528029 10.344987 34.559666 + vertex -6.080200 10.688693 33.475727 + vertex -34.000000 10.594930 33.817326 + endloop + endfacet + facet normal -0.000919 0.936949 0.349463 + outer loop + vertex -6.528029 10.344987 34.559666 + vertex -34.000000 10.594930 33.817326 + vertex -34.000000 10.096320 35.154152 + endloop + endfacet + facet normal -0.000511 -0.936950 -0.349464 + outer loop + vertex -6.298790 -8.525107 27.954950 + vertex -34.000000 -8.594930 28.182674 + vertex -34.000000 -8.096320 26.845850 + endloop + endfacet + facet normal 0.000374 -0.967912 -0.251289 + outer loop + vertex -6.298790 -8.525107 27.954950 + vertex -5.919753 -8.803928 29.029472 + vertex -34.000000 -8.594930 28.182674 + endloop + endfacet + facet normal 0.000978 0.905646 0.424035 + outer loop + vertex -7.240622 9.723082 35.889565 + vertex -6.528029 10.344987 34.559666 + vertex -34.000000 10.096320 35.154152 + endloop + endfacet + facet normal -0.000929 0.877678 0.479250 + outer loop + vertex -7.240622 9.723082 35.889565 + vertex -34.000000 10.096320 35.154152 + vertex -34.000000 9.412536 36.406406 + endloop + endfacet + facet normal -0.000508 -0.877679 -0.479249 + outer loop + vertex -6.938873 -7.998572 26.638153 + vertex -34.000000 -8.096320 26.845850 + vertex -34.000000 -7.412535 25.593592 + endloop + endfacet + facet normal 0.000502 -0.928437 -0.371490 + outer loop + vertex -6.938873 -7.998572 26.638153 + vertex -6.298790 -8.525107 27.954950 + vertex -34.000000 -8.096320 26.845850 + endloop + endfacet + facet normal 0.001581 0.818925 0.573899 + outer loop + vertex -8.299619 8.584002 37.517891 + vertex -7.240622 9.723082 35.889565 + vertex -34.000000 9.412536 36.406406 + endloop + endfacet + facet normal -0.000109 0.800542 0.599277 + outer loop + vertex -8.299619 8.584002 37.517891 + vertex -34.000000 9.412536 36.406406 + vertex -34.000000 8.557496 37.548607 + endloop + endfacet + facet normal 0.000116 0.707107 0.707107 + outer loop + vertex -8.299619 8.584002 37.517891 + vertex -34.000000 8.557496 37.548607 + vertex -34.000000 7.548607 38.557495 + endloop + endfacet + facet normal -0.000754 -0.800541 -0.599278 + outer loop + vertex -7.758466 -7.203003 25.280670 + vertex -34.000000 -7.412535 25.593592 + vertex -34.000000 -6.557496 24.451393 + endloop + endfacet + facet normal 0.000853 -0.862528 -0.506009 + outer loop + vertex -7.758466 -7.203003 25.280670 + vertex -6.938873 -7.998572 26.638153 + vertex -34.000000 -7.412535 25.593592 + endloop + endfacet + facet normal -0.000997 -0.707106 -0.707106 + outer loop + vertex -8.734071 -6.017682 23.875946 + vertex -34.000000 -6.557496 24.451393 + vertex -34.000000 -5.548607 23.442505 + endloop + endfacet + facet normal 0.001184 0.693748 0.720217 + outer loop + vertex -9.250660 7.238907 38.815117 + vertex -8.299619 8.584002 37.517891 + vertex -34.000000 7.548607 38.557495 + endloop + endfacet + facet normal 0.001614 -0.763715 -0.645552 + outer loop + vertex -8.734071 -6.017682 23.875946 + vertex -7.758466 -7.203003 25.280670 + vertex -34.000000 -6.557496 24.451393 + endloop + endfacet + facet normal -0.000834 0.599278 0.800540 + outer loop + vertex -9.250660 7.238907 38.815117 + vertex -34.000000 7.548607 38.557495 + vertex -34.000000 6.406408 39.412537 + endloop + endfacet + facet normal 0.001572 -0.631667 -0.775238 + outer loop + vertex -9.627810 -4.572220 22.696365 + vertex -8.734071 -6.017682 23.875946 + vertex -34.000000 -5.548607 23.442505 + endloop + endfacet + facet normal -0.000500 -0.599278 -0.800541 + outer loop + vertex -9.627810 -4.572220 22.696365 + vertex -34.000000 -5.548607 23.442505 + vertex -34.000000 -4.406408 22.587465 + endloop + endfacet + facet normal 0.001037 0.562496 0.826800 + outer loop + vertex -9.915038 5.986175 39.668221 + vertex -9.250660 7.238907 38.815117 + vertex -34.000000 6.406408 39.412537 + endloop + endfacet + facet normal -0.000955 0.479249 0.877679 + outer loop + vertex -9.915038 5.986175 39.668221 + vertex -34.000000 6.406408 39.412537 + vertex -34.000000 5.154150 40.096321 + endloop + endfacet + facet normal 0.000575 -0.488491 -0.872569 + outer loop + vertex -10.252209 -3.169867 21.910873 + vertex -9.627810 -4.572220 22.696365 + vertex -34.000000 -4.406408 22.587465 + endloop + endfacet + facet normal -0.000051 -0.479249 -0.877679 + outer loop + vertex -10.252209 -3.169867 21.910873 + vertex -34.000000 -4.406408 22.587465 + vertex -34.000000 -3.154150 21.903681 + endloop + endfacet + facet normal 0.001741 0.417216 0.908806 + outer loop + vertex -10.527491 4.334210 40.427780 + vertex -9.915038 5.986175 39.668221 + vertex -34.000000 5.154150 40.096321 + endloop + endfacet + facet normal 0.000052 -0.349465 -0.936949 + outer loop + vertex -10.252209 -3.169867 21.910873 + vertex -34.000000 -3.154150 21.903681 + vertex -34.000000 -1.817326 21.405069 + endloop + endfacet + facet normal -0.001023 0.349463 0.936950 + outer loop + vertex -10.527491 4.334210 40.427780 + vertex -34.000000 5.154150 40.096321 + vertex -34.000000 3.817326 40.594929 + endloop + endfacet + facet normal -0.000469 -0.212565 -0.977147 + outer loop + vertex -10.703868 -1.649430 21.357359 + vertex -34.000000 -1.817326 21.405069 + vertex -34.000000 -0.423148 21.101786 + endloop + endfacet + facet normal 0.001080 0.262953 0.964808 + outer loop + vertex -10.846192 2.915130 40.814899 + vertex -10.527491 4.334210 40.427780 + vertex -34.000000 3.817326 40.594929 + endloop + endfacet + facet normal 0.000540 -0.341944 -0.939720 + outer loop + vertex -10.703868 -1.649430 21.357359 + vertex -10.252209 -3.169867 21.910873 + vertex -34.000000 -1.817326 21.405069 + endloop + endfacet + facet normal -0.001001 0.212567 0.977146 + outer loop + vertex -10.846192 2.915130 40.814899 + vertex -34.000000 3.817326 40.594929 + vertex -34.000000 2.423148 40.898216 + endloop + endfacet + facet normal 0.000954 -0.186630 -0.982430 + outer loop + vertex -10.951837 -0.074060 21.057848 + vertex -10.703868 -1.649430 21.357359 + vertex -34.000000 -0.423148 21.101786 + endloop + endfacet + facet normal -0.000821 -0.071339 -0.997452 + outer loop + vertex -10.951837 -0.074060 21.057848 + vertex -34.000000 -0.423148 21.101786 + vertex -34.000000 1.000000 21.000000 + endloop + endfacet + facet normal 0.001328 0.105907 0.994375 + outer loop + vertex -10.998376 1.197410 40.998051 + vertex -10.846192 2.915130 40.814899 + vertex -34.000000 2.423148 40.898216 + endloop + endfacet + facet normal -0.000528 0.071338 0.997452 + outer loop + vertex -10.998376 1.197410 40.998051 + vertex -34.000000 2.423148 40.898216 + vertex -34.000000 1.000000 41.000000 + endloop + endfacet + facet normal 0.001303 -0.025876 -0.999664 + outer loop + vertex -10.987032 1.557722 21.015564 + vertex -10.951837 -0.074060 21.057848 + vertex -34.000000 1.000000 21.000000 + endloop + endfacet + facet normal -0.001054 0.071339 -0.997451 + outer loop + vertex -10.987032 1.557722 21.015564 + vertex -34.000000 1.000000 21.000000 + vertex -34.000000 2.423148 21.101786 + endloop + endfacet + facet normal 0.000652 -0.066086 0.997814 + outer loop + vertex -10.903988 -0.514951 40.884579 + vertex -10.998376 1.197410 40.998051 + vertex -34.000000 1.000000 41.000000 + endloop + endfacet + facet normal 0.000305 -0.071338 0.997452 + outer loop + vertex -10.903988 -0.514951 40.884579 + vertex -34.000000 1.000000 41.000000 + vertex -34.000000 -0.423148 40.898216 + endloop + endfacet + facet normal 0.001446 0.137151 -0.990549 + outer loop + vertex -10.800443 3.179347 21.240366 + vertex -10.987032 1.557722 21.015564 + vertex -34.000000 2.423148 21.101786 + endloop + endfacet + facet normal -0.001092 0.212565 -0.977146 + outer loop + vertex -10.800443 3.179347 21.240366 + vertex -34.000000 2.423148 21.101786 + vertex -34.000000 3.817326 21.405069 + endloop + endfacet + facet normal -0.000259 -0.210447 0.977605 + outer loop + vertex -10.695628 -1.685570 40.632637 + vertex -10.903988 -0.514951 40.884579 + vertex -34.000000 -0.423148 40.898216 + endloop + endfacet + facet normal -0.000379 -0.212567 0.977146 + outer loop + vertex -10.695628 -1.685570 40.632637 + vertex -34.000000 -0.423148 40.898216 + vertex -34.000000 -1.817326 40.594929 + endloop + endfacet + facet normal 0.001252 0.292401 -0.956295 + outer loop + vertex -10.429211 4.656930 21.692644 + vertex -10.800443 3.179347 21.240366 + vertex -34.000000 3.817326 21.405069 + endloop + endfacet + facet normal -0.001017 0.349465 -0.936949 + outer loop + vertex -10.429211 4.656930 21.692644 + vertex -34.000000 3.817326 21.405069 + vertex -34.000000 5.154150 21.903681 + endloop + endfacet + facet normal 0.000342 -0.330589 0.943775 + outer loop + vertex -10.343766 -2.913946 40.202229 + vertex -10.695628 -1.685570 40.632637 + vertex -34.000000 -1.817326 40.594929 + endloop + endfacet + facet normal -0.000646 -0.349463 0.936950 + outer loop + vertex -10.343766 -2.913946 40.202229 + vertex -34.000000 -1.817326 40.594929 + vertex -34.000000 -3.154150 40.096321 + endloop + endfacet + facet normal 0.000892 0.426229 -0.904615 + outer loop + vertex -9.974246 5.854475 22.257341 + vertex -10.429211 4.656930 21.692644 + vertex -34.000000 5.154150 21.903681 + endloop + endfacet + facet normal -0.001050 0.479249 -0.877679 + outer loop + vertex -9.974246 5.854475 22.257341 + vertex -34.000000 5.154150 21.903681 + vertex -34.000000 6.406408 22.587465 + endloop + endfacet + facet normal 0.000565 -0.449518 0.893271 + outer loop + vertex -9.880333 -4.061458 39.624477 + vertex -10.343766 -2.913946 40.202229 + vertex -34.000000 -3.154150 40.096321 + endloop + endfacet + facet normal -0.000858 -0.479249 0.877679 + outer loop + vertex -9.880333 -4.061458 39.624477 + vertex -34.000000 -3.154150 40.096321 + vertex -34.000000 -4.406408 39.412537 + endloop + endfacet + facet normal 0.001231 0.552230 -0.833691 + outer loop + vertex -9.295414 7.164775 23.126276 + vertex -9.974246 5.854475 22.257341 + vertex -34.000000 6.406408 22.587465 + endloop + endfacet + facet normal -0.000936 0.599277 -0.800541 + outer loop + vertex -9.295414 7.164775 23.126276 + vertex -34.000000 6.406408 22.587465 + vertex -34.000000 7.548607 23.442505 + endloop + endfacet + facet normal 0.000947 -0.570730 0.821137 + outer loop + vertex -9.197070 -5.326117 38.744690 + vertex -9.880333 -4.061458 39.624477 + vertex -34.000000 -4.406408 39.412537 + endloop + endfacet + facet normal -0.000666 -0.599279 0.800540 + outer loop + vertex -9.197070 -5.326117 38.744690 + vertex -34.000000 -4.406408 39.412537 + vertex -34.000000 -5.548607 38.557495 + endloop + endfacet + facet normal 0.001325 0.685290 -0.728269 + outer loop + vertex -8.372674 8.493528 24.378292 + vertex -9.295414 7.164775 23.126276 + vertex -34.000000 7.548607 23.442505 + endloop + endfacet + facet normal 0.000902 -0.700754 0.713403 + outer loop + vertex -8.256754 -6.636262 37.456585 + vertex -9.197070 -5.326117 38.744690 + vertex -34.000000 -5.548607 38.557495 + endloop + endfacet + facet normal -0.000252 0.707107 -0.707107 + outer loop + vertex -8.372674 8.493528 24.378292 + vertex -34.000000 7.548607 23.442505 + vertex -34.000000 8.557496 24.451393 + endloop + endfacet + facet normal 0.000364 -0.707107 0.707107 + outer loop + vertex -8.256754 -6.636262 37.456585 + vertex -34.000000 -5.548607 38.557495 + vertex -34.000000 -6.557496 37.548607 + endloop + endfacet + facet normal 0.000289 0.800541 -0.599278 + outer loop + vertex -8.372674 8.493528 24.378292 + vertex -34.000000 8.557496 24.451393 + vertex -34.000000 9.412536 25.593592 + endloop + endfacet + facet normal -0.000307 -0.800542 0.599277 + outer loop + vertex -8.256754 -6.636262 37.456585 + vertex -34.000000 -6.557496 37.548607 + vertex -34.000000 -7.412535 36.406406 + endloop + endfacet + facet normal 0.001198 0.809614 -0.586961 + outer loop + vertex -7.338006 9.630043 25.948034 + vertex -8.372674 8.493528 24.378292 + vertex -34.000000 9.412536 25.593592 + endloop + endfacet + facet normal -0.000789 0.877679 -0.479249 + outer loop + vertex -7.338006 9.630043 25.948034 + vertex -34.000000 9.412536 25.593592 + vertex -34.000000 10.096320 26.845850 + endloop + endfacet + facet normal -0.000943 -0.877678 0.479250 + outer loop + vertex -7.218597 -7.743835 35.852356 + vertex -34.000000 -7.412535 36.406406 + vertex -34.000000 -8.096320 35.154152 + endloop + endfacet + facet normal 0.001594 -0.822439 0.568851 + outer loop + vertex -7.218597 -7.743835 35.852356 + vertex -8.256754 -6.636262 37.456585 + vertex -34.000000 -7.412535 36.406406 + endloop + endfacet + facet normal 0.001445 0.904362 -0.426764 + outer loop + vertex -6.470624 10.390942 27.563400 + vertex -7.338006 9.630043 25.948034 + vertex -34.000000 10.096320 26.845850 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -2.471070 23.792250 + vertex 131.000000 -5.254652 26.012081 + vertex 131.000000 -3.987918 24.745348 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 1.000000 23.000000 + vertex 131.000000 -2.471070 23.792250 + vertex 131.000000 -0.780167 23.200577 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 2.780168 23.200577 + vertex 131.000000 -2.471070 23.792250 + vertex 131.000000 1.000000 23.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 24.745348 + vertex 131.000000 2.780168 23.200577 + vertex 131.000000 4.471070 23.792250 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 24.745348 + vertex 131.000000 -5.254652 26.012081 + vertex 131.000000 -2.471070 23.792250 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 24.745348 + vertex 131.000000 -2.471070 23.792250 + vertex 131.000000 2.780168 23.200577 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -5.254652 35.987919 + vertex 131.000000 -6.207751 34.471069 + vertex 131.000000 -6.799423 32.780167 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 7.254652 26.012081 + vertex 131.000000 -6.799423 29.219833 + vertex 131.000000 -6.207751 27.528931 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 7.254652 26.012081 + vertex 131.000000 -6.207751 27.528931 + vertex 131.000000 -5.254652 26.012081 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 7.254652 26.012081 + vertex 131.000000 -5.254652 26.012081 + vertex 131.000000 5.987918 24.745348 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 -3.987918 37.254650 + vertex 131.000000 -5.254652 35.987919 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 -6.799423 32.780167 + vertex 131.000000 -7.000000 31.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 -7.000000 31.000000 + vertex 131.000000 -6.799423 29.219833 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 7.254652 26.012081 + vertex 131.000000 8.207751 27.528931 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 -6.799423 29.219833 + vertex 131.000000 7.254652 26.012081 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 -5.254652 35.987919 + vertex 131.000000 -6.799423 32.780167 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 8.799423 32.780167 + vertex 131.000000 8.207751 27.528931 + vertex 131.000000 8.799423 29.219833 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 8.799423 32.780167 + vertex 131.000000 8.799423 29.219833 + vertex 131.000000 9.000000 31.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 2.780168 38.799423 + vertex 131.000000 1.000000 39.000000 + vertex 131.000000 -0.780167 38.799423 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 8.207751 34.471069 + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 8.207751 27.528931 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 8.207751 34.471069 + vertex 131.000000 8.207751 27.528931 + vertex 131.000000 8.799423 32.780167 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 37.254650 + vertex 131.000000 8.207751 34.471069 + vertex 131.000000 7.254652 35.987919 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 37.254650 + vertex 131.000000 4.471070 38.207752 + vertex 131.000000 2.780168 38.799423 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 37.254650 + vertex 131.000000 -0.780167 38.799423 + vertex 131.000000 -2.471070 38.207752 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 37.254650 + vertex 131.000000 2.780168 38.799423 + vertex 131.000000 -0.780167 38.799423 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.987918 37.254650 + vertex 131.000000 -2.471070 38.207752 + vertex 131.000000 8.207751 34.471069 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 10.594930 28.182674 + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 10.898214 29.576851 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 10.898214 29.576851 + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 11.000000 31.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -3.154150 40.096321 + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 7.548607 23.442505 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 7.548607 23.442505 + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 9.412536 25.593592 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 9.412536 25.593592 + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 10.594930 28.182674 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -0.423148 40.898216 + vertex -34.000000 2.423148 40.898216 + vertex -34.000000 -3.154150 40.096321 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 1.000000 41.000000 + vertex -34.000000 2.423148 40.898216 + vertex -34.000000 -0.423148 40.898216 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -3.154150 40.096321 + vertex -34.000000 2.423148 40.898216 + vertex -34.000000 10.898214 32.423149 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -6.557496 24.451393 + vertex -34.000000 -7.412535 25.593592 + vertex -34.000000 -5.548607 23.442505 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 10.096320 35.154152 + vertex -34.000000 10.594930 33.817326 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex -34.000000 3.817326 40.594929 + vertex -34.000000 5.154150 40.096321 + vertex -34.000000 2.423148 40.898216 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -8.096320 26.845850 + vertex -34.000000 -8.594930 28.182674 + vertex -34.000000 -7.412535 25.593592 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -7.412535 25.593592 + vertex -34.000000 -8.594930 28.182674 + vertex -34.000000 -5.548607 23.442505 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 10.096320 35.154152 + vertex -34.000000 8.557496 37.548607 + vertex -34.000000 9.412536 36.406406 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -3.154150 21.903681 + vertex -34.000000 -0.423148 21.101786 + vertex -34.000000 -1.817326 21.405069 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex -34.000000 6.406408 39.412537 + vertex -34.000000 7.548607 38.557495 + vertex -34.000000 5.154150 40.096321 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 2.423148 40.898216 + vertex -34.000000 7.548607 38.557495 + vertex -34.000000 10.898214 32.423149 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex -34.000000 5.154150 40.096321 + vertex -34.000000 7.548607 38.557495 + vertex -34.000000 2.423148 40.898216 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 10.898214 32.423149 + vertex -34.000000 7.548607 38.557495 + vertex -34.000000 10.096320 35.154152 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 10.096320 35.154152 + vertex -34.000000 7.548607 38.557495 + vertex -34.000000 8.557496 37.548607 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -8.898214 29.576851 + vertex -34.000000 -9.000000 31.000000 + vertex -34.000000 -8.594930 28.182674 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -5.548607 23.442505 + vertex -34.000000 2.423148 21.101786 + vertex -34.000000 -4.406408 22.587465 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -4.406408 22.587465 + vertex -34.000000 2.423148 21.101786 + vertex -34.000000 -3.154150 21.903681 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -0.423148 21.101786 + vertex -34.000000 2.423148 21.101786 + vertex -34.000000 1.000000 21.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -3.154150 21.903681 + vertex -34.000000 2.423148 21.101786 + vertex -34.000000 -0.423148 21.101786 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -8.898214 32.423149 + vertex -34.000000 -8.594930 33.817326 + vertex -34.000000 -9.000000 31.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -9.000000 31.000000 + vertex -34.000000 -8.594930 33.817326 + vertex -34.000000 -8.594930 28.182674 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 2.423148 21.101786 + vertex -34.000000 6.406408 22.587465 + vertex -34.000000 3.817326 21.405069 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 3.817326 21.405069 + vertex -34.000000 6.406408 22.587465 + vertex -34.000000 5.154150 21.903681 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -8.096320 35.154152 + vertex -34.000000 -7.412535 36.406406 + vertex -34.000000 -8.594930 33.817326 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -8.594930 28.182674 + vertex -34.000000 -7.412535 36.406406 + vertex -34.000000 -5.548607 23.442505 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -5.548607 23.442505 + vertex -34.000000 -7.412535 36.406406 + vertex -34.000000 2.423148 21.101786 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -8.594930 33.817326 + vertex -34.000000 -7.412535 36.406406 + vertex -34.000000 -8.594930 28.182674 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 2.423148 21.101786 + vertex -34.000000 -7.412535 36.406406 + vertex -34.000000 6.406408 22.587465 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -6.557496 37.548607 + vertex -34.000000 -5.548607 38.557495 + vertex -34.000000 -7.412535 36.406406 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 7.548607 23.442505 + vertex -34.000000 9.412536 25.593592 + vertex -34.000000 8.557496 24.451393 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -4.406408 39.412537 + vertex -34.000000 -3.154150 40.096321 + vertex -34.000000 -5.548607 38.557495 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 6.406408 22.587465 + vertex -34.000000 -3.154150 40.096321 + vertex -34.000000 7.548607 23.442505 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -7.412535 36.406406 + vertex -34.000000 -3.154150 40.096321 + vertex -34.000000 6.406408 22.587465 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -5.548607 38.557495 + vertex -34.000000 -3.154150 40.096321 + vertex -34.000000 -7.412535 36.406406 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 9.412536 25.593592 + vertex -34.000000 10.594930 28.182674 + vertex -34.000000 10.096320 26.845850 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -1.817326 40.594929 + vertex -34.000000 -0.423148 40.898216 + vertex -34.000000 -3.154150 40.096321 + endloop + endfacet +endsolid Mesh diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSL.stl b/apps/cpu/Multiphase/backup/FlowFocusingSL.stl new file mode 100644 index 0000000000000000000000000000000000000000..c7285063b119d316bc79153c093d3564d1245d41 Binary files /dev/null and b/apps/cpu/Multiphase/backup/FlowFocusingSL.stl differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSS.ast b/apps/cpu/Multiphase/backup/FlowFocusingSS.ast new file mode 100644 index 0000000000000000000000000000000000000000..83ef2d561accb5a3f994547945604c3674df82dd --- /dev/null +++ b/apps/cpu/Multiphase/backup/FlowFocusingSS.ast @@ -0,0 +1,3096 @@ +solid Mesh + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -4.825651 32.435894 + vertex 131.000000 -5.000000 31.000000 + vertex 131.000000 -4.825651 29.564106 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -4.825651 32.435894 + vertex 131.000000 -4.825651 29.564106 + vertex 131.000000 -4.312736 28.211660 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -4.825651 32.435894 + vertex 131.000000 -4.312736 28.211660 + vertex 131.000000 -3.491065 27.021263 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -4.825651 32.435894 + vertex 131.000000 -3.491065 27.021263 + vertex 131.000000 -2.408388 26.062098 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -4.825651 32.435894 + vertex 131.000000 -2.408388 26.062098 + vertex 131.000000 -1.127629 25.389902 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 4.408389 26.062098 + vertex 131.000000 1.723220 25.043747 + vertex 131.000000 3.127629 25.389902 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -1.127629 36.610096 + vertex 131.000000 -2.408388 35.937904 + vertex 131.000000 -3.491065 34.978737 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -1.127629 36.610096 + vertex 131.000000 -3.491065 34.978737 + vertex 131.000000 -4.312736 33.788338 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 -1.127629 36.610096 + vertex 131.000000 -4.312736 33.788338 + vertex 131.000000 -4.825651 32.435894 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 6.825651 29.564106 + vertex 131.000000 4.408389 26.062098 + vertex 131.000000 5.491065 27.021263 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 6.825651 29.564106 + vertex 131.000000 5.491065 27.021263 + vertex 131.000000 6.312736 28.211660 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 6.825651 32.435894 + vertex 131.000000 6.825651 29.564106 + vertex 131.000000 7.000000 31.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 3.127629 36.610096 + vertex 131.000000 1.723220 36.956253 + vertex 131.000000 0.276780 36.956253 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 3.127629 36.610096 + vertex 131.000000 0.276780 36.956253 + vertex 131.000000 -1.127629 36.610096 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 3.127629 36.610096 + vertex 131.000000 -1.127629 25.389902 + vertex 131.000000 0.276780 25.043747 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 3.127629 36.610096 + vertex 131.000000 0.276780 25.043747 + vertex 131.000000 1.723220 25.043747 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 3.127629 36.610096 + vertex 131.000000 1.723220 25.043747 + vertex 131.000000 4.408389 26.062098 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 3.127629 36.610096 + vertex 131.000000 -4.825651 32.435894 + vertex 131.000000 -1.127629 25.389902 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 3.127629 36.610096 + vertex 131.000000 4.408389 26.062098 + vertex 131.000000 6.825651 29.564106 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 3.127629 36.610096 + vertex 131.000000 -1.127629 36.610096 + vertex 131.000000 -4.825651 32.435894 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 3.127629 36.610096 + vertex 131.000000 6.825651 29.564106 + vertex 131.000000 6.825651 32.435894 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.491065 34.978737 + vertex 131.000000 6.825651 32.435894 + vertex 131.000000 6.312736 33.788338 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.491065 34.978737 + vertex 131.000000 4.408389 35.937904 + vertex 131.000000 3.127629 36.610096 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 131.000000 5.491065 34.978737 + vertex 131.000000 3.127629 36.610096 + vertex 131.000000 6.825651 32.435894 + endloop + endfacet + facet normal -0.000144 -0.728741 -0.684789 + outer loop + vertex 131.000000 -3.491065 27.021263 + vertex 12.045211 -3.690770 27.258787 + vertex 12.304571 -3.025752 26.551031 + endloop + endfacet + facet normal 0.000247 -0.822984 -0.568065 + outer loop + vertex 131.000000 -3.491065 27.021263 + vertex 131.000000 -4.312736 28.211660 + vertex 12.045211 -3.690770 27.258787 + endloop + endfacet + facet normal 0.000000 0.994252 0.107061 + outer loop + vertex 131.000000 7.000000 31.000000 + vertex 11.392304 7.000000 31.000000 + vertex 11.470512 6.862455 32.277348 + endloop + endfacet + facet normal -0.000139 -0.604250 -0.796794 + outer loop + vertex 131.000000 -2.408388 26.062098 + vertex 12.304571 -3.025752 26.551031 + vertex 12.565912 -2.198387 25.923552 + endloop + endfacet + facet normal 0.000366 -0.663122 -0.748511 + outer loop + vertex 131.000000 -2.408388 26.062098 + vertex 131.000000 -3.491065 27.021263 + vertex 12.304571 -3.025752 26.551031 + endloop + endfacet + facet normal 0.000037 -0.449324 -0.893369 + outer loop + vertex 131.000000 -1.127629 25.389902 + vertex 12.565912 -2.198387 25.923552 + vertex 12.802445 -1.168476 25.405563 + endloop + endfacet + facet normal -0.000126 0.949009 0.315249 + outer loop + vertex 131.000000 6.825651 32.435894 + vertex 11.470512 6.862455 32.277348 + vertex 11.685072 6.461616 33.484100 + endloop + endfacet + facet normal -0.000030 -0.280319 -0.959907 + outer loop + vertex 131.000000 -1.127629 25.389902 + vertex 12.802445 -1.168476 25.405563 + vertex 12.941537 -0.183087 25.117798 + endloop + endfacet + facet normal 0.000212 -0.464724 -0.885456 + outer loop + vertex 131.000000 -1.127629 25.389902 + vertex 131.000000 -2.408388 26.062098 + vertex 12.565912 -2.198387 25.923552 + endloop + endfacet + facet normal 0.000146 0.992709 0.120537 + outer loop + vertex 131.000000 6.825651 32.435894 + vertex 131.000000 7.000000 31.000000 + vertex 11.470512 6.862455 32.277348 + endloop + endfacet + facet normal -0.000134 0.876441 0.481510 + outer loop + vertex 131.000000 6.312736 33.788338 + vertex 11.685072 6.461616 33.484100 + vertex 11.896806 6.025896 34.277252 + endloop + endfacet + facet normal 0.000263 0.935016 0.354605 + outer loop + vertex 131.000000 6.312736 33.788338 + vertex 131.000000 6.825651 32.435894 + vertex 11.685072 6.461616 33.484100 + endloop + endfacet + facet normal -0.000238 -0.099067 -0.995081 + outer loop + vertex 131.000000 0.276780 25.043747 + vertex 12.941537 -0.183087 25.117798 + vertex 13.000000 1.000000 25.000000 + endloop + endfacet + facet normal 0.000323 -0.239315 -0.970942 + outer loop + vertex 131.000000 0.276780 25.043747 + vertex 131.000000 -1.127629 25.389902 + vertex 12.941537 -0.183087 25.117798 + endloop + endfacet + facet normal -0.000060 0.790299 0.612722 + outer loop + vertex 131.000000 5.491065 34.978737 + vertex 11.896806 6.025896 34.277252 + vertex 12.153856 5.426228 35.050739 + endloop + endfacet + facet normal 0.000077 0.676962 0.736018 + outer loop + vertex 131.000000 5.491065 34.978737 + vertex 12.153856 5.426228 35.050739 + vertex 12.425965 4.667058 35.748966 + endloop + endfacet + facet normal 0.000350 0.822984 0.568064 + outer loop + vertex 131.000000 5.491065 34.978737 + vertex 131.000000 6.312736 33.788338 + vertex 11.896806 6.025896 34.277252 + endloop + endfacet + facet normal -0.000320 0.112279 -0.993677 + outer loop + vertex 131.000000 1.723220 25.043747 + vertex 13.000000 1.000000 25.000000 + vertex 12.925056 2.339040 25.151327 + endloop + endfacet + facet normal 0.000371 0.000000 -1.000000 + outer loop + vertex 131.000000 1.723220 25.043747 + vertex 131.000000 0.276780 25.043747 + vertex 13.000000 1.000000 25.000000 + endloop + endfacet + facet normal -0.000189 0.315324 -0.948984 + outer loop + vertex 131.000000 3.127629 25.389902 + vertex 12.925056 2.339040 25.151327 + vertex 12.751836 3.427831 25.513140 + endloop + endfacet + facet normal -0.000181 0.534250 0.845326 + outer loop + vertex 131.000000 4.408389 35.937904 + vertex 12.425965 4.667058 35.748966 + vertex 12.688570 3.716124 36.350018 + endloop + endfacet + facet normal 0.000364 0.239315 -0.970942 + outer loop + vertex 131.000000 3.127629 25.389902 + vertex 131.000000 1.723220 25.043747 + vertex 12.925056 2.339040 25.151327 + endloop + endfacet + facet normal 0.000254 0.663123 0.748511 + outer loop + vertex 131.000000 4.408389 35.937904 + vertex 131.000000 5.491065 34.978737 + vertex 12.425965 4.667058 35.748966 + endloop + endfacet + facet normal -0.000294 0.354136 0.935194 + outer loop + vertex 131.000000 3.127629 36.610096 + vertex 12.688570 3.716124 36.350018 + vertex 12.904691 2.509416 36.807037 + endloop + endfacet + facet normal 0.000097 0.479567 -0.877505 + outer loop + vertex 131.000000 4.408389 26.062098 + vertex 12.751836 3.427831 25.513140 + vertex 12.535419 4.306674 25.993414 + endloop + endfacet + facet normal 0.000365 0.464722 0.885457 + outer loop + vertex 131.000000 3.127629 36.610096 + vertex 131.000000 4.408389 35.937904 + vertex 12.688570 3.716124 36.350018 + endloop + endfacet + facet normal -0.000068 0.613054 -0.790041 + outer loop + vertex 131.000000 4.408389 26.062098 + vertex 12.535419 4.306674 25.993414 + vertex 12.303495 5.028771 26.553764 + endloop + endfacet + facet normal 0.000257 0.464724 -0.885456 + outer loop + vertex 131.000000 4.408389 26.062098 + vertex 131.000000 3.127629 25.389902 + vertex 12.751836 3.427831 25.513140 + endloop + endfacet + facet normal -0.000094 0.722932 -0.690919 + outer loop + vertex 131.000000 5.491065 27.021263 + vertex 12.303495 5.028771 26.553764 + vertex 12.073238 5.624218 27.176832 + endloop + endfacet + facet normal 0.000365 0.663122 -0.748511 + outer loop + vertex 131.000000 5.491065 27.021263 + vertex 131.000000 4.408389 26.062098 + vertex 12.303495 5.028771 26.553764 + endloop + endfacet + facet normal 0.000041 0.192387 0.981319 + outer loop + vertex 131.000000 1.723220 36.956253 + vertex 12.904691 2.509416 36.807037 + vertex 12.973638 1.794989 36.947098 + endloop + endfacet + facet normal -0.000037 0.066396 0.997793 + outer loop + vertex 131.000000 1.723220 36.956253 + vertex 12.973638 1.794989 36.947098 + vertex 13.000000 1.000000 37.000000 + endloop + endfacet + facet normal 0.000366 0.239317 0.970942 + outer loop + vertex 131.000000 1.723220 36.956253 + vertex 131.000000 3.127629 36.610096 + vertex 12.904691 2.509416 36.807037 + endloop + endfacet + facet normal 0.000123 0.825977 -0.563703 + outer loop + vertex 131.000000 6.312736 28.211660 + vertex 12.073238 5.624218 27.176832 + vertex 11.792848 6.245421 28.087002 + endloop + endfacet + facet normal -0.000107 0.919104 -0.394015 + outer loop + vertex 131.000000 6.312736 28.211660 + vertex 11.792848 6.245421 28.087002 + vertex 11.545403 6.726647 29.209606 + endloop + endfacet + facet normal -0.000320 -0.112281 0.993676 + outer loop + vertex 131.000000 0.276780 36.956253 + vertex 13.000000 1.000000 37.000000 + vertex 12.925056 -0.339040 36.848671 + endloop + endfacet + facet normal 0.000178 0.822984 -0.568065 + outer loop + vertex 131.000000 6.312736 28.211660 + vertex 131.000000 5.491065 27.021263 + vertex 12.073238 5.624218 27.176832 + endloop + endfacet + facet normal 0.000371 -0.000000 1.000000 + outer loop + vertex 131.000000 0.276780 36.956253 + vertex 131.000000 1.723220 36.956253 + vertex 13.000000 1.000000 37.000000 + endloop + endfacet + facet normal -0.000138 0.974208 -0.225651 + outer loop + vertex 131.000000 6.825651 29.564106 + vertex 11.545403 6.726647 29.209606 + vertex 11.432029 6.930664 30.090483 + endloop + endfacet + facet normal 0.000277 0.935016 -0.354605 + outer loop + vertex 131.000000 6.825651 29.564106 + vertex 131.000000 6.312736 28.211660 + vertex 11.545403 6.726647 29.209606 + endloop + endfacet + facet normal 0.000363 -0.239317 0.970942 + outer loop + vertex 131.000000 -1.127629 36.610096 + vertex 131.000000 0.276780 36.956253 + vertex 12.925056 -0.339040 36.848671 + endloop + endfacet + facet normal -0.000188 -0.315321 0.948985 + outer loop + vertex 131.000000 -1.127629 36.610096 + vertex 12.925056 -0.339040 36.848671 + vertex 12.751836 -1.427831 36.486862 + endloop + endfacet + facet normal 0.000000 0.997107 -0.076013 + outer loop + vertex 131.000000 7.000000 31.000000 + vertex 11.432029 6.930664 30.090483 + vertex 11.392304 7.000000 31.000000 + endloop + endfacet + facet normal 0.000341 0.992709 -0.120537 + outer loop + vertex 131.000000 7.000000 31.000000 + vertex 131.000000 6.825651 29.564106 + vertex 11.432029 6.930664 30.090483 + endloop + endfacet + facet normal 0.000257 -0.464722 0.885457 + outer loop + vertex 131.000000 -2.408388 35.937904 + vertex 131.000000 -1.127629 36.610096 + vertex 12.751836 -1.427831 36.486862 + endloop + endfacet + facet normal 0.000097 -0.479567 0.877505 + outer loop + vertex 131.000000 -2.408388 35.937904 + vertex 12.751836 -1.427831 36.486862 + vertex 12.535419 -2.306674 36.006588 + endloop + endfacet + facet normal -0.000068 -0.613055 0.790040 + outer loop + vertex 131.000000 -2.408388 35.937904 + vertex 12.535419 -2.306674 36.006588 + vertex 12.303495 -3.028771 35.446236 + endloop + endfacet + facet normal -0.000094 -0.722931 0.690920 + outer loop + vertex 131.000000 -3.491065 34.978737 + vertex 12.303495 -3.028771 35.446236 + vertex 12.073238 -3.624218 34.823170 + endloop + endfacet + facet normal 0.000365 -0.663123 0.748511 + outer loop + vertex 131.000000 -3.491065 34.978737 + vertex 131.000000 -2.408388 35.937904 + vertex 12.303495 -3.028771 35.446236 + endloop + endfacet + facet normal 0.000123 -0.825978 0.563703 + outer loop + vertex 131.000000 -4.312736 33.788338 + vertex 12.073238 -3.624218 34.823170 + vertex 11.792848 -4.245421 33.912998 + endloop + endfacet + facet normal -0.000107 -0.919104 0.394015 + outer loop + vertex 131.000000 -4.312736 33.788338 + vertex 11.792848 -4.245421 33.912998 + vertex 11.545403 -4.726647 32.790394 + endloop + endfacet + facet normal 0.000178 -0.822984 0.568064 + outer loop + vertex 131.000000 -4.312736 33.788338 + vertex 131.000000 -3.491065 34.978737 + vertex 12.073238 -3.624218 34.823170 + endloop + endfacet + facet normal -0.000222 -0.979996 0.199016 + outer loop + vertex 131.000000 -4.825651 32.435894 + vertex 11.545403 -4.726647 32.790394 + vertex 11.408753 -4.971420 31.584927 + endloop + endfacet + facet normal 0.000277 -0.935016 0.354605 + outer loop + vertex 131.000000 -4.825651 32.435894 + vertex 131.000000 -4.312736 33.788338 + vertex 11.545403 -4.726647 32.790394 + endloop + endfacet + facet normal -0.000136 -0.999777 0.021114 + outer loop + vertex 131.000000 -5.000000 31.000000 + vertex 11.408753 -4.971420 31.584927 + vertex 11.397617 -4.990790 30.667681 + endloop + endfacet + facet normal 0.000352 -0.992709 0.120537 + outer loop + vertex 131.000000 -5.000000 31.000000 + vertex 131.000000 -4.825651 32.435894 + vertex 11.408753 -4.971420 31.584927 + endloop + endfacet + facet normal 0.000145 -0.991166 -0.132629 + outer loop + vertex 131.000000 -4.825651 29.564106 + vertex 11.397617 -4.990790 30.667681 + vertex 11.467756 -4.867373 29.745436 + endloop + endfacet + facet normal -0.000095 -0.958956 -0.283556 + outer loop + vertex 131.000000 -4.825651 29.564106 + vertex 11.467756 -4.867373 29.745436 + vertex 11.609928 -4.606196 28.862112 + endloop + endfacet + facet normal 0.000258 -0.992709 -0.120537 + outer loop + vertex 131.000000 -4.825651 29.564106 + vertex 131.000000 -5.000000 31.000000 + vertex 11.397617 -4.990790 30.667681 + endloop + endfacet + facet normal -0.000103 -0.904303 -0.426892 + outer loop + vertex 131.000000 -4.312736 28.211660 + vertex 11.609928 -4.606196 28.862112 + vertex 11.808237 -4.213636 28.030489 + endloop + endfacet + facet normal 0.000164 -0.827892 -0.560887 + outer loop + vertex 131.000000 -4.312736 28.211660 + vertex 11.808237 -4.213636 28.030489 + vertex 12.045211 -3.690770 27.258787 + endloop + endfacet + facet normal 0.000366 -0.935016 -0.354605 + outer loop + vertex 131.000000 -4.312736 28.211660 + vertex 131.000000 -4.825651 29.564106 + vertex 11.609928 -4.606196 28.862112 + endloop + endfacet + facet normal 0.997065 0.076549 -0.001150 + outer loop + vertex 12.925056 2.339040 25.151327 + vertex 13.000000 1.000000 1.000000 + vertex 12.859365 2.831791 1.000000 + endloop + endfacet + facet normal 0.998437 0.055881 0.000000 + outer loop + vertex 12.925056 2.339040 25.151327 + vertex 13.000000 1.000000 25.000000 + vertex 13.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.999451 0.033143 0.000000 + outer loop + vertex 13.000000 1.000000 61.000000 + vertex 13.000000 1.000000 37.000000 + vertex 12.973638 1.794989 36.947098 + endloop + endfacet + facet normal 0.973695 0.227853 -0.001269 + outer loop + vertex 12.751836 3.427831 25.513140 + vertex 12.859365 2.831791 1.000000 + vertex 12.440757 4.620647 1.000000 + endloop + endfacet + facet normal 0.987606 0.156951 0.000516 + outer loop + vertex 12.751836 3.427831 25.513140 + vertex 12.925056 2.339040 25.151327 + vertex 12.859365 2.831791 1.000000 + endloop + endfacet + facet normal 0.970908 0.239453 -0.000669 + outer loop + vertex 12.535419 4.306674 25.993414 + vertex 12.751836 3.427831 25.513140 + vertex 12.440757 4.620647 1.000000 + endloop + endfacet + facet normal 0.997065 0.076549 0.001437 + outer loop + vertex 12.859365 2.831791 61.000000 + vertex 13.000000 1.000000 61.000000 + vertex 12.973638 1.794989 36.947098 + endloop + endfacet + facet normal 0.984370 0.176110 -0.000502 + outer loop + vertex 12.859365 2.831791 61.000000 + vertex 12.904691 2.509416 36.807037 + vertex 12.688570 3.716124 36.350018 + endloop + endfacet + facet normal 0.995364 0.096174 0.000583 + outer loop + vertex 12.859365 2.831791 61.000000 + vertex 12.973638 1.794989 36.947098 + vertex 12.904691 2.509416 36.807037 + endloop + endfacet + facet normal 0.952150 0.305632 0.000233 + outer loop + vertex 12.303495 5.028771 26.553764 + vertex 12.535419 4.306674 25.993414 + vertex 12.440757 4.620647 1.000000 + endloop + endfacet + facet normal 0.927502 0.373817 -0.001309 + outer loop + vertex 12.073238 5.624218 27.176832 + vertex 12.440757 4.620647 1.000000 + vertex 11.753986 6.324638 1.000000 + endloop + endfacet + facet normal 0.932425 0.361364 -0.000763 + outer loop + vertex 12.073238 5.624218 27.176832 + vertex 12.303495 5.028771 26.553764 + vertex 12.440757 4.620647 1.000000 + endloop + endfacet + facet normal 0.941337 0.337467 0.000069 + outer loop + vertex 12.440757 4.620647 61.000000 + vertex 12.425965 4.667058 35.748966 + vertex 12.153856 5.426228 35.050739 + endloop + endfacet + facet normal 0.963933 0.266146 -0.000075 + outer loop + vertex 12.440757 4.620647 61.000000 + vertex 12.688570 3.716124 36.350018 + vertex 12.425965 4.667058 35.748966 + endloop + endfacet + facet normal 0.973694 0.227853 0.001428 + outer loop + vertex 12.440757 4.620647 61.000000 + vertex 12.859365 2.831791 61.000000 + vertex 12.688570 3.716124 36.350018 + endloop + endfacet + facet normal 0.911398 0.411527 -0.000104 + outer loop + vertex 11.792848 6.245421 28.087002 + vertex 12.073238 5.624218 27.176832 + vertex 11.753986 6.324638 1.000000 + endloop + endfacet + facet normal 0.889378 0.457173 0.000061 + outer loop + vertex 11.545403 6.726647 29.209606 + vertex 11.792848 6.245421 28.087002 + vertex 11.753986 6.324638 1.000000 + endloop + endfacet + facet normal 0.873203 0.487356 -0.000489 + outer loop + vertex 11.432029 6.930664 30.090483 + vertex 11.545403 6.726647 29.209606 + vertex 11.753986 6.324638 1.000000 + endloop + endfacet + facet normal 0.859569 0.511018 -0.001133 + outer loop + vertex 11.432029 6.930664 30.090483 + vertex 11.753986 6.324638 1.000000 + vertex 10.815152 7.903824 1.000000 + endloop + endfacet + facet normal 0.860696 0.509118 -0.001220 + outer loop + vertex 11.392304 7.000000 31.000000 + vertex 11.432029 6.930664 30.090483 + vertex 10.815152 7.903824 1.000000 + endloop + endfacet + facet normal 0.881462 0.472256 0.000143 + outer loop + vertex 11.753986 6.324638 61.000000 + vertex 11.685072 6.461616 33.484100 + vertex 11.470512 6.862455 32.277348 + endloop + endfacet + facet normal 0.899484 0.436954 -0.000078 + outer loop + vertex 11.753986 6.324638 61.000000 + vertex 11.896806 6.025896 34.277252 + vertex 11.685072 6.461616 33.484100 + endloop + endfacet + facet normal 0.918883 0.394529 0.000500 + outer loop + vertex 11.753986 6.324638 61.000000 + vertex 12.153856 5.426228 35.050739 + vertex 11.896806 6.025896 34.277252 + endloop + endfacet + facet normal 0.927501 0.373817 0.001350 + outer loop + vertex 11.753986 6.324638 61.000000 + vertex 12.440757 4.620647 61.000000 + vertex 12.153856 5.426228 35.050739 + endloop + endfacet + facet normal 0.842819 0.538197 0.000000 + outer loop + vertex 10.815152 7.903824 61.000000 + vertex 11.392304 7.000000 31.000000 + vertex 10.815152 7.903824 1.000000 + endloop + endfacet + facet normal 0.863566 0.504234 0.001422 + outer loop + vertex 10.815152 7.903824 61.000000 + vertex 11.470512 6.862455 32.277348 + vertex 11.392304 7.000000 31.000000 + endloop + endfacet + facet normal 0.859569 0.511018 0.001085 + outer loop + vertex 10.815152 7.903824 61.000000 + vertex 11.753986 6.324638 61.000000 + vertex 11.470512 6.862455 32.277348 + endloop + endfacet + facet normal 0.771489 0.636242 0.000000 + outer loop + vertex 9.646259 9.321190 61.000000 + vertex 10.815152 7.903824 61.000000 + vertex 10.815152 7.903824 1.000000 + endloop + endfacet + facet normal 0.771489 0.636242 0.000000 + outer loop + vertex 9.646259 9.321190 61.000000 + vertex 10.815152 7.903824 1.000000 + vertex 9.646259 9.321190 1.000000 + endloop + endfacet + facet normal 0.665326 0.746553 0.000000 + outer loop + vertex 8.274705 10.543514 61.000000 + vertex 9.646259 9.321190 1.000000 + vertex 8.274705 10.543514 1.000000 + endloop + endfacet + facet normal 0.665326 0.746553 0.000000 + outer loop + vertex 8.274705 10.543514 61.000000 + vertex 9.646259 9.321190 61.000000 + vertex 9.646259 9.321190 1.000000 + endloop + endfacet + facet normal 0.543567 0.839365 0.000000 + outer loop + vertex 8.274705 10.543514 61.000000 + vertex 8.274705 10.543514 1.000000 + vertex 6.732638 11.542147 1.000000 + endloop + endfacet + facet normal 0.543567 0.839365 0.000000 + outer loop + vertex 6.732638 11.542147 61.000000 + vertex 8.274705 10.543514 61.000000 + vertex 6.732638 11.542147 1.000000 + endloop + endfacet + facet normal 0.409069 0.912504 0.000000 + outer loop + vertex 5.056202 12.293680 61.000000 + vertex 6.732638 11.542147 1.000000 + vertex 5.056202 12.293680 1.000000 + endloop + endfacet + facet normal 0.409069 0.912504 0.000000 + outer loop + vertex 5.056202 12.293680 61.000000 + vertex 6.732638 11.542147 61.000000 + vertex 6.732638 11.542147 1.000000 + endloop + endfacet + facet normal 0.264982 0.964253 0.000000 + outer loop + vertex 3.284693 12.780499 61.000000 + vertex 5.056202 12.293680 1.000000 + vertex 3.284693 12.780499 1.000000 + endloop + endfacet + facet normal 0.264982 0.964253 0.000000 + outer loop + vertex 3.284693 12.780499 61.000000 + vertex 5.056202 12.293680 61.000000 + vertex 5.056202 12.293680 1.000000 + endloop + endfacet + facet normal 0.114683 0.993402 0.000000 + outer loop + vertex 1.459633 12.991194 61.000000 + vertex 3.284693 12.780499 1.000000 + vertex 1.459633 12.991194 1.000000 + endloop + endfacet + facet normal 0.114683 0.993402 0.000000 + outer loop + vertex 1.459633 12.991194 61.000000 + vertex 3.284693 12.780499 61.000000 + vertex 3.284693 12.780499 1.000000 + endloop + endfacet + facet normal -0.038303 0.999266 0.000000 + outer loop + vertex -0.376201 12.920825 61.000000 + vertex 1.459633 12.991194 1.000000 + vertex -0.376201 12.920825 1.000000 + endloop + endfacet + facet normal -0.038303 0.999266 0.000000 + outer loop + vertex -0.376201 12.920825 61.000000 + vertex 1.459633 12.991194 61.000000 + vertex 1.459633 12.991194 1.000000 + endloop + endfacet + facet normal -0.190391 0.981708 0.000000 + outer loop + vertex -2.179778 12.571042 61.000000 + vertex -0.376201 12.920825 1.000000 + vertex -2.179778 12.571042 1.000000 + endloop + endfacet + facet normal -0.190391 0.981708 0.000000 + outer loop + vertex -2.179778 12.571042 61.000000 + vertex -0.376201 12.920825 61.000000 + vertex -0.376201 12.920825 1.000000 + endloop + endfacet + facet normal -0.338017 0.941140 0.000000 + outer loop + vertex -3.908824 11.950044 61.000000 + vertex -2.179778 12.571042 1.000000 + vertex -3.908824 11.950044 1.000000 + endloop + endfacet + facet normal -0.338017 0.941140 0.000000 + outer loop + vertex -3.908824 11.950044 61.000000 + vertex -2.179778 12.571042 61.000000 + vertex -2.179778 12.571042 1.000000 + endloop + endfacet + facet normal -0.477720 0.878512 0.000000 + outer loop + vertex -5.522810 11.072385 61.000000 + vertex -3.908824 11.950044 1.000000 + vertex -5.522810 11.072385 1.000000 + endloop + endfacet + facet normal -0.477720 0.878512 0.000000 + outer loop + vertex -5.522810 11.072385 61.000000 + vertex -3.908824 11.950044 61.000000 + vertex -3.908824 11.950044 1.000000 + endloop + endfacet + facet normal -0.720521 0.693432 -0.000907 + outer loop + vertex -7.944272 9.000000 31.000000 + vertex -6.983908 9.958638 1.000000 + vertex -8.257870 8.634910 1.000000 + endloop + endfacet + facet normal -0.746770 0.665082 -0.000288 + outer loop + vertex -8.023660 8.910345 29.805666 + vertex -7.944272 9.000000 31.000000 + vertex -8.257870 8.634910 1.000000 + endloop + endfacet + facet normal -0.606225 0.795293 0.000000 + outer loop + vertex -6.983908 9.958638 61.000000 + vertex -5.522810 11.072385 1.000000 + vertex -6.983908 9.958638 1.000000 + endloop + endfacet + facet normal -0.606225 0.795293 0.000000 + outer loop + vertex -6.983908 9.958638 61.000000 + vertex -5.522810 11.072385 61.000000 + vertex -5.522810 11.072385 1.000000 + endloop + endfacet + facet normal -0.706471 0.707742 0.000000 + outer loop + vertex -6.983908 9.958638 61.000000 + vertex -6.983908 9.958638 1.000000 + vertex -7.944272 9.000000 31.000000 + endloop + endfacet + facet normal -0.761081 0.648657 -0.000014 + outer loop + vertex -8.241260 8.655006 28.676022 + vertex -8.023660 8.910345 29.805666 + vertex -8.257870 8.634910 1.000000 + endloop + endfacet + facet normal -0.784851 0.619684 0.000021 + outer loop + vertex -8.589377 8.214142 27.542231 + vertex -8.241260 8.655006 28.676022 + vertex -8.257870 8.634910 1.000000 + endloop + endfacet + facet normal -0.817929 0.575318 -0.001176 + outer loop + vertex -9.014555 7.611255 26.495411 + vertex -8.257870 8.634910 1.000000 + vertex -9.314836 7.132224 1.000000 + endloop + endfacet + facet normal -0.816364 0.577536 -0.001041 + outer loop + vertex -9.014555 7.611255 26.495411 + vertex -8.589377 8.214142 27.542231 + vertex -8.257870 8.634910 1.000000 + endloop + endfacet + facet normal -0.749474 0.662033 0.000222 + outer loop + vertex -8.257870 8.634910 61.000000 + vertex -7.944272 9.000000 31.000000 + vertex -8.070408 8.856698 32.507416 + endloop + endfacet + facet normal -0.770060 0.637972 -0.000100 + outer loop + vertex -8.257870 8.634910 61.000000 + vertex -8.070408 8.856698 32.507416 + vertex -8.402561 8.455994 33.899681 + endloop + endfacet + facet normal -0.802980 0.596006 0.000352 + outer loop + vertex -8.257870 8.634910 61.000000 + vertex -8.402561 8.455994 33.899681 + vertex -8.866960 7.829576 35.166161 + endloop + endfacet + facet normal -0.720521 0.693432 0.000907 + outer loop + vertex -8.257870 8.634910 61.000000 + vertex -6.983908 9.958638 61.000000 + vertex -7.944272 9.000000 31.000000 + endloop + endfacet + facet normal -0.854805 0.518950 0.000317 + outer loop + vertex -9.482093 6.841722 25.534264 + vertex -9.014555 7.611255 26.495411 + vertex -9.314836 7.132224 1.000000 + endloop + endfacet + facet normal -0.896165 0.443720 -0.001060 + outer loop + vertex -9.963696 5.878253 24.659445 + vertex -9.314836 7.132224 1.000000 + vertex -10.130030 5.485805 1.000000 + endloop + endfacet + facet normal -0.894187 0.447693 -0.000795 + outer loop + vertex -9.963696 5.878253 24.659445 + vertex -9.482093 6.841722 25.534264 + vertex -9.314836 7.132224 1.000000 + endloop + endfacet + facet normal -0.845571 0.533863 -0.000249 + outer loop + vertex -9.314836 7.132224 61.000000 + vertex -8.866960 7.829576 35.166161 + vertex -9.405215 6.977583 36.316814 + endloop + endfacet + facet normal -0.817928 0.575318 0.001350 + outer loop + vertex -9.314836 7.132224 61.000000 + vertex -8.257870 8.634910 61.000000 + vertex -8.866960 7.829576 35.166161 + endloop + endfacet + facet normal -0.891613 0.452798 0.000428 + outer loop + vertex -9.968540 5.867354 37.348927 + vertex -9.314836 7.132224 61.000000 + vertex -9.405215 6.977583 36.316814 + endloop + endfacet + facet normal -0.953395 0.301720 -0.001450 + outer loop + vertex -10.374597 4.823421 23.972807 + vertex -10.130030 5.485805 1.000000 + vertex -10.684345 3.734242 1.000000 + endloop + endfacet + facet normal -0.931917 0.362671 0.000536 + outer loop + vertex -10.374597 4.823421 23.972807 + vertex -9.963696 5.878253 24.659445 + vertex -10.130030 5.485805 1.000000 + endloop + endfacet + facet normal -0.960186 0.279362 -0.000299 + outer loop + vertex -10.651127 3.872498 23.533491 + vertex -10.374597 4.823421 23.972807 + vertex -10.684345 3.734242 1.000000 + endloop + endfacet + facet normal -0.938332 0.345735 -0.000829 + outer loop + vertex -10.130030 5.485805 61.000000 + vertex -9.968540 5.867354 37.348927 + vertex -10.501171 4.423895 38.230278 + endloop + endfacet + facet normal -0.896165 0.443720 0.001039 + outer loop + vertex -10.130030 5.485805 61.000000 + vertex -9.314836 7.132224 61.000000 + vertex -9.968540 5.867354 37.348927 + endloop + endfacet + facet normal -0.988279 0.152649 -0.001582 + outer loop + vertex -10.853421 2.869869 23.221594 + vertex -10.684345 3.734242 1.000000 + vertex -10.964789 1.918591 1.000000 + endloop + endfacet + facet normal -0.980261 0.197709 0.000232 + outer loop + vertex -10.853421 2.869869 23.221594 + vertex -10.651127 3.872498 23.533491 + vertex -10.684345 3.734242 1.000000 + endloop + endfacet + facet normal -0.993789 0.111277 0.000217 + outer loop + vertex -10.973373 1.798958 23.039995 + vertex -10.853421 2.869869 23.221594 + vertex -10.964789 1.918591 1.000000 + endloop + endfacet + facet normal -0.953395 0.301720 0.001469 + outer loop + vertex -10.684345 3.734242 61.000000 + vertex -10.130030 5.485805 61.000000 + vertex -10.501171 4.423895 38.230278 + endloop + endfacet + facet normal -0.973957 0.226732 -0.000968 + outer loop + vertex -10.684345 3.734242 61.000000 + vertex -10.501171 4.423895 38.230278 + vertex -10.829480 3.015787 38.741875 + endloop + endfacet + facet normal -0.999961 0.008863 -0.000341 + outer loop + vertex -10.985648 0.413291 23.021544 + vertex -10.973373 1.798958 23.039995 + vertex -10.964789 1.918591 1.000000 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000947 + outer loop + vertex -10.985648 0.413291 23.021544 + vertex -10.964789 1.918591 1.000000 + vertex -10.964789 0.081409 1.000000 + endloop + endfacet + facet normal -0.988279 0.152649 0.001517 + outer loop + vertex -10.964789 1.918591 61.000000 + vertex -10.684345 3.734242 61.000000 + vertex -10.829480 3.015787 38.741875 + endloop + endfacet + facet normal -0.994316 0.106462 -0.000797 + outer loop + vertex -10.964789 1.918591 61.000000 + vertex -10.829480 3.015787 38.741875 + vertex -10.987958 1.537464 38.981926 + endloop + endfacet + facet normal -0.994792 -0.101926 0.000594 + outer loop + vertex -10.855250 -0.858236 23.218807 + vertex -10.985648 0.413291 23.021544 + vertex -10.964789 0.081409 1.000000 + endloop + endfacet + facet normal -0.988279 -0.152649 -0.001583 + outer loop + vertex -10.855250 -0.858236 23.218807 + vertex -10.964789 0.081409 1.000000 + vertex -10.684345 -1.734242 1.000000 + endloop + endfacet + facet normal -0.999999 0.000000 0.001052 + outer loop + vertex -10.964789 0.081409 61.000000 + vertex -10.964789 1.918591 61.000000 + vertex -10.987958 1.537464 38.981926 + endloop + endfacet + facet normal -0.999972 -0.007519 0.000555 + outer loop + vertex -10.964789 0.081409 61.000000 + vertex -10.987958 1.537464 38.981926 + vertex -10.978530 0.282484 38.967758 + endloop + endfacet + facet normal -0.994802 -0.101828 -0.000309 + outer loop + vertex -10.964789 0.081409 61.000000 + vertex -10.978530 0.282484 38.967758 + vertex -10.875323 -0.725314 38.811741 + endloop + endfacet + facet normal -0.977250 -0.212090 0.000845 + outer loop + vertex -10.557199 -2.229729 23.680925 + vertex -10.855250 -0.858236 23.218807 + vertex -10.684345 -1.734242 1.000000 + endloop + endfacet + facet normal -0.953396 -0.301720 -0.001247 + outer loop + vertex -10.130030 -3.485805 1.000000 + vertex -10.557199 -2.229729 23.680925 + vertex -10.684345 -1.734242 1.000000 + endloop + endfacet + facet normal -0.948898 -0.315582 -0.000394 + outer loop + vertex -10.191252 -3.330807 24.273626 + vertex -10.557199 -2.229729 23.680925 + vertex -10.130030 -3.485805 1.000000 + endloop + endfacet + facet normal -0.981512 -0.191401 -0.000255 + outer loop + vertex -10.684345 -1.734242 61.000000 + vertex -10.875323 -0.725314 38.811741 + vertex -10.653047 -1.864698 38.469505 + endloop + endfacet + facet normal -0.988279 -0.152649 0.001565 + outer loop + vertex -10.684345 -1.734242 61.000000 + vertex -10.964789 0.081409 61.000000 + vertex -10.875323 -0.725314 38.811741 + endloop + endfacet + facet normal -0.959093 -0.283090 0.000307 + outer loop + vertex -10.341965 -2.919164 37.974251 + vertex -10.684345 -1.734242 61.000000 + vertex -10.653047 -1.864698 38.469505 + endloop + endfacet + facet normal -0.916637 -0.399720 0.000251 + outer loop + vertex -9.786845 -4.257754 24.970406 + vertex -10.191252 -3.330807 24.273626 + vertex -10.130030 -3.485805 1.000000 + endloop + endfacet + facet normal -0.896165 -0.443719 -0.001459 + outer loop + vertex -9.786845 -4.257754 24.970406 + vertex -10.130030 -3.485805 1.000000 + vertex -9.314836 -5.132224 1.000000 + endloop + endfacet + facet normal -0.927306 -0.374303 -0.000676 + outer loop + vertex -10.130030 -3.485805 61.000000 + vertex -10.341965 -2.919164 37.974251 + vertex -9.880194 -4.061757 37.195049 + endloop + endfacet + facet normal -0.953396 -0.301720 0.001350 + outer loop + vertex -10.130030 -3.485805 61.000000 + vertex -10.684345 -1.734242 61.000000 + vertex -10.341965 -2.919164 37.974251 + endloop + endfacet + facet normal -0.877659 -0.479286 0.000203 + outer loop + vertex -9.252076 -5.236581 25.989506 + vertex -9.786845 -4.257754 24.970406 + vertex -9.314836 -5.132224 1.000000 + endloop + endfacet + facet normal -0.817928 -0.575318 -0.001329 + outer loop + vertex -8.751478 -5.993474 27.115244 + vertex -9.314836 -5.132224 1.000000 + vertex -8.257870 -6.634909 1.000000 + endloop + endfacet + facet normal -0.833934 -0.551865 -0.000210 + outer loop + vertex -8.751478 -5.993474 27.115244 + vertex -9.252076 -5.236581 25.989506 + vertex -9.314836 -5.132224 1.000000 + endloop + endfacet + facet normal -0.885356 -0.464913 0.000121 + outer loop + vertex -9.314836 -5.132224 61.000000 + vertex -9.880194 -4.061757 37.195049 + vertex -9.345053 -5.081109 36.198086 + endloop + endfacet + facet normal -0.841635 -0.540048 -0.000088 + outer loop + vertex -9.314836 -5.132224 61.000000 + vertex -9.345053 -5.081109 36.198086 + vertex -8.837354 -5.872151 35.095551 + endloop + endfacet + facet normal -0.896165 -0.443719 0.001330 + outer loop + vertex -9.314836 -5.132224 61.000000 + vertex -10.130030 -3.485805 61.000000 + vertex -9.880194 -4.061757 37.195049 + endloop + endfacet + facet normal -0.795211 -0.606333 -0.000138 + outer loop + vertex -8.329084 -6.547727 28.348244 + vertex -8.751478 -5.993474 27.115244 + vertex -8.257870 -6.634909 1.000000 + endloop + endfacet + facet normal -0.765583 -0.643337 0.000057 + outer loop + vertex -8.039007 -6.892804 29.694763 + vertex -8.329084 -6.547727 28.348244 + vertex -8.257870 -6.634909 1.000000 + endloop + endfacet + facet normal -0.720521 -0.693432 -0.000901 + outer loop + vertex -7.945369 -6.998773 31.140100 + vertex -8.257870 -6.634909 1.000000 + vertex -6.983908 -7.958639 1.000000 + endloop + endfacet + facet normal -0.747545 -0.664211 -0.000268 + outer loop + vertex -7.945369 -6.998773 31.140100 + vertex -8.039007 -6.892804 29.694763 + vertex -8.257870 -6.634909 1.000000 + endloop + endfacet + facet normal -0.801571 -0.597900 0.000326 + outer loop + vertex -8.257870 -6.634909 61.000000 + vertex -8.837354 -5.872151 35.095551 + vertex -8.399053 -6.460416 33.888287 + endloop + endfacet + facet normal -0.770308 -0.637672 -0.000093 + outer loop + vertex -8.257870 -6.634909 61.000000 + vertex -8.399053 -6.460416 33.888287 + vertex -8.080567 -6.844954 32.567387 + endloop + endfacet + facet normal -0.750153 -0.661264 0.000207 + outer loop + vertex -8.257870 -6.634909 61.000000 + vertex -8.080567 -6.844954 32.567387 + vertex -7.945369 -6.998773 31.140100 + endloop + endfacet + facet normal -0.817928 -0.575318 0.001357 + outer loop + vertex -8.257870 -6.634909 61.000000 + vertex -9.314836 -5.132224 61.000000 + vertex -8.837354 -5.872151 35.095551 + endloop + endfacet + facet normal -0.720521 -0.693432 0.000909 + outer loop + vertex -6.983908 -7.958639 61.000000 + vertex -8.257870 -6.634909 61.000000 + vertex -7.945369 -6.998773 31.140100 + endloop + endfacet + facet normal -0.706519 -0.707694 -0.000000 + outer loop + vertex -6.983908 -7.958639 61.000000 + vertex -7.945369 -6.998773 31.140100 + vertex -6.983908 -7.958639 1.000000 + endloop + endfacet + facet normal -0.606225 -0.795293 -0.000000 + outer loop + vertex -5.522810 -9.072385 61.000000 + vertex -6.983908 -7.958639 1.000000 + vertex -5.522810 -9.072385 1.000000 + endloop + endfacet + facet normal -0.606225 -0.795293 0.000000 + outer loop + vertex -5.522810 -9.072385 61.000000 + vertex -6.983908 -7.958639 61.000000 + vertex -6.983908 -7.958639 1.000000 + endloop + endfacet + facet normal -0.477720 -0.878512 -0.000000 + outer loop + vertex -3.908824 -9.950044 61.000000 + vertex -5.522810 -9.072385 1.000000 + vertex -3.908824 -9.950044 1.000000 + endloop + endfacet + facet normal -0.477720 -0.878512 0.000000 + outer loop + vertex -3.908824 -9.950044 61.000000 + vertex -5.522810 -9.072385 61.000000 + vertex -5.522810 -9.072385 1.000000 + endloop + endfacet + facet normal -0.338017 -0.941140 -0.000000 + outer loop + vertex -2.179778 -10.571042 61.000000 + vertex -3.908824 -9.950044 1.000000 + vertex -2.179778 -10.571042 1.000000 + endloop + endfacet + facet normal -0.338017 -0.941140 0.000000 + outer loop + vertex -2.179778 -10.571042 61.000000 + vertex -3.908824 -9.950044 61.000000 + vertex -3.908824 -9.950044 1.000000 + endloop + endfacet + facet normal -0.190391 -0.981708 -0.000000 + outer loop + vertex -0.376201 -10.920825 61.000000 + vertex -2.179778 -10.571042 1.000000 + vertex -0.376201 -10.920825 1.000000 + endloop + endfacet + facet normal -0.190391 -0.981708 0.000000 + outer loop + vertex -0.376201 -10.920825 61.000000 + vertex -2.179778 -10.571042 61.000000 + vertex -2.179778 -10.571042 1.000000 + endloop + endfacet + facet normal -0.038303 -0.999266 -0.000000 + outer loop + vertex 1.459633 -10.991194 61.000000 + vertex -0.376201 -10.920825 1.000000 + vertex 1.459633 -10.991194 1.000000 + endloop + endfacet + facet normal -0.038303 -0.999266 0.000000 + outer loop + vertex 1.459633 -10.991194 61.000000 + vertex -0.376201 -10.920825 61.000000 + vertex -0.376201 -10.920825 1.000000 + endloop + endfacet + facet normal 0.114683 -0.993402 0.000000 + outer loop + vertex 3.284693 -10.780499 61.000000 + vertex 1.459633 -10.991194 61.000000 + vertex 1.459633 -10.991194 1.000000 + endloop + endfacet + facet normal 0.114683 -0.993402 0.000000 + outer loop + vertex 3.284693 -10.780499 61.000000 + vertex 1.459633 -10.991194 1.000000 + vertex 3.284693 -10.780499 1.000000 + endloop + endfacet + facet normal 0.264982 -0.964253 0.000000 + outer loop + vertex 5.056202 -10.293680 61.000000 + vertex 3.284693 -10.780499 61.000000 + vertex 3.284693 -10.780499 1.000000 + endloop + endfacet + facet normal 0.264982 -0.964253 0.000000 + outer loop + vertex 5.056202 -10.293680 61.000000 + vertex 3.284693 -10.780499 1.000000 + vertex 5.056202 -10.293680 1.000000 + endloop + endfacet + facet normal 0.409069 -0.912504 0.000000 + outer loop + vertex 6.732638 -9.542147 61.000000 + vertex 5.056202 -10.293680 61.000000 + vertex 5.056202 -10.293680 1.000000 + endloop + endfacet + facet normal 0.409069 -0.912504 0.000000 + outer loop + vertex 6.732638 -9.542147 61.000000 + vertex 5.056202 -10.293680 1.000000 + vertex 6.732638 -9.542147 1.000000 + endloop + endfacet + facet normal 0.543567 -0.839365 0.000000 + outer loop + vertex 8.274705 -8.543514 61.000000 + vertex 6.732638 -9.542147 61.000000 + vertex 6.732638 -9.542147 1.000000 + endloop + endfacet + facet normal 0.543567 -0.839365 0.000000 + outer loop + vertex 8.274705 -8.543514 61.000000 + vertex 6.732638 -9.542147 1.000000 + vertex 8.274705 -8.543514 1.000000 + endloop + endfacet + facet normal 0.665326 -0.746553 0.000000 + outer loop + vertex 9.646259 -7.321190 61.000000 + vertex 8.274705 -8.543514 61.000000 + vertex 8.274705 -8.543514 1.000000 + endloop + endfacet + facet normal 0.665326 -0.746553 0.000000 + outer loop + vertex 9.646259 -7.321190 61.000000 + vertex 8.274705 -8.543514 1.000000 + vertex 9.646259 -7.321190 1.000000 + endloop + endfacet + facet normal 0.864531 -0.502578 -0.001506 + outer loop + vertex 11.467756 -4.867373 29.745436 + vertex 11.397617 -4.990790 30.667681 + vertex 10.815152 -5.903824 1.000000 + endloop + endfacet + facet normal 0.859569 -0.511018 -0.001089 + outer loop + vertex 11.467756 -4.867373 29.745436 + vertex 10.815152 -5.903824 1.000000 + vertex 11.753986 -4.324638 1.000000 + endloop + endfacet + facet normal 0.877876 -0.478887 -0.000300 + outer loop + vertex 11.609928 -4.606196 28.862112 + vertex 11.467756 -4.867373 29.745436 + vertex 11.753986 -4.324638 1.000000 + endloop + endfacet + facet normal 0.852959 -0.521978 0.000667 + outer loop + vertex 10.815152 -5.903824 61.000000 + vertex 11.397617 -4.990790 30.667681 + vertex 11.408753 -4.971420 31.584927 + endloop + endfacet + facet normal 0.771489 -0.636242 0.000000 + outer loop + vertex 10.815152 -5.903824 61.000000 + vertex 9.646259 -7.321190 61.000000 + vertex 9.646259 -7.321190 1.000000 + endloop + endfacet + facet normal 0.843057 -0.537824 0.000000 + outer loop + vertex 10.815152 -5.903824 61.000000 + vertex 10.815152 -5.903824 1.000000 + vertex 11.397617 -4.990790 30.667681 + endloop + endfacet + facet normal 0.771489 -0.636242 0.000000 + outer loop + vertex 10.815152 -5.903824 61.000000 + vertex 9.646259 -7.321190 1.000000 + vertex 10.815152 -5.903824 1.000000 + endloop + endfacet + facet normal 0.892625 -0.450800 0.000060 + outer loop + vertex 11.808237 -4.213636 28.030489 + vertex 11.609928 -4.606196 28.862112 + vertex 11.753986 -4.324638 1.000000 + endloop + endfacet + facet normal 0.910747 -0.412964 -0.000132 + outer loop + vertex 12.045211 -3.690770 27.258787 + vertex 11.808237 -4.213636 28.030489 + vertex 11.753986 -4.324638 1.000000 + endloop + endfacet + facet normal 0.927502 -0.373817 -0.001263 + outer loop + vertex 12.045211 -3.690770 27.258787 + vertex 11.753986 -4.324638 1.000000 + vertex 12.440757 -2.620647 1.000000 + endloop + endfacet + facet normal 0.931361 -0.364096 -0.000809 + outer loop + vertex 12.304571 -3.025752 26.551031 + vertex 12.045211 -3.690770 27.258787 + vertex 12.440757 -2.620647 1.000000 + endloop + endfacet + facet normal 0.911398 -0.411527 0.000104 + outer loop + vertex 11.753986 -4.324638 61.000000 + vertex 11.792848 -4.245421 33.912998 + vertex 12.073238 -3.624218 34.823170 + endloop + endfacet + facet normal 0.889378 -0.457173 -0.000061 + outer loop + vertex 11.753986 -4.324638 61.000000 + vertex 11.545403 -4.726647 32.790394 + vertex 11.792848 -4.245421 33.912998 + endloop + endfacet + facet normal 0.872043 -0.489429 0.000527 + outer loop + vertex 11.753986 -4.324638 61.000000 + vertex 11.408753 -4.971420 31.584927 + vertex 11.545403 -4.726647 32.790394 + endloop + endfacet + facet normal 0.859569 -0.511018 0.001148 + outer loop + vertex 11.753986 -4.324638 61.000000 + vertex 10.815152 -5.903824 61.000000 + vertex 11.408753 -4.971420 31.584927 + endloop + endfacet + facet normal 0.953628 -0.300988 0.000311 + outer loop + vertex 12.565912 -2.198387 25.923552 + vertex 12.304571 -3.025752 26.551031 + vertex 12.440757 -2.620647 1.000000 + endloop + endfacet + facet normal 0.973695 -0.227854 -0.001029 + outer loop + vertex 12.859365 -0.831791 1.000000 + vertex 12.565912 -2.198387 25.923552 + vertex 12.440757 -2.620647 1.000000 + endloop + endfacet + facet normal 0.974536 -0.224228 -0.000820 + outer loop + vertex 12.802445 -1.168476 25.405563 + vertex 12.565912 -2.198387 25.923552 + vertex 12.859365 -0.831791 1.000000 + endloop + endfacet + facet normal 0.970908 -0.239453 0.000669 + outer loop + vertex 12.440757 -2.620647 61.000000 + vertex 12.535419 -2.306674 36.006588 + vertex 12.751836 -1.427831 36.486862 + endloop + endfacet + facet normal 0.952150 -0.305632 -0.000233 + outer loop + vertex 12.440757 -2.620647 61.000000 + vertex 12.303495 -3.028771 35.446236 + vertex 12.535419 -2.306674 36.006588 + endloop + endfacet + facet normal 0.932425 -0.361363 0.000763 + outer loop + vertex 12.440757 -2.620647 61.000000 + vertex 12.073238 -3.624218 34.823170 + vertex 12.303495 -3.028771 35.446236 + endloop + endfacet + facet normal 0.927502 -0.373817 0.001309 + outer loop + vertex 12.440757 -2.620647 61.000000 + vertex 11.753986 -4.324638 61.000000 + vertex 12.073238 -3.624218 34.823170 + endloop + endfacet + facet normal 0.997065 -0.076549 -0.001338 + outer loop + vertex 12.941537 -0.183087 25.117798 + vertex 12.859365 -0.831791 1.000000 + vertex 13.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.990200 -0.139659 0.000383 + outer loop + vertex 12.941537 -0.183087 25.117798 + vertex 12.802445 -1.168476 25.405563 + vertex 12.859365 -0.831791 1.000000 + endloop + endfacet + facet normal 0.998781 -0.049356 0.000000 + outer loop + vertex 13.000000 1.000000 25.000000 + vertex 12.941537 -0.183087 25.117798 + vertex 13.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.987606 -0.156951 -0.000516 + outer loop + vertex 12.859365 -0.831791 61.000000 + vertex 12.751836 -1.427831 36.486862 + vertex 12.925056 -0.339040 36.848671 + endloop + endfacet + facet normal 0.973695 -0.227853 0.001269 + outer loop + vertex 12.859365 -0.831791 61.000000 + vertex 12.440757 -2.620647 61.000000 + vertex 12.751836 -1.427831 36.486862 + endloop + endfacet + facet normal 0.998437 -0.055881 0.000000 + outer loop + vertex 13.000000 1.000000 61.000000 + vertex 12.925056 -0.339040 36.848671 + vertex 13.000000 1.000000 37.000000 + endloop + endfacet + facet normal 0.997065 -0.076549 0.001150 + outer loop + vertex 13.000000 1.000000 61.000000 + vertex 12.859365 -0.831791 61.000000 + vertex 12.925056 -0.339040 36.848671 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 12.859365 2.831791 1.000000 + vertex 11.753986 6.324638 1.000000 + vertex 12.440757 4.620647 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -8.257870 -6.634909 1.000000 + vertex -5.522810 -9.072385 1.000000 + vertex -6.983908 -7.958639 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -9.314836 -5.132224 1.000000 + vertex -10.130030 -3.485805 1.000000 + vertex -8.257870 -6.634909 1.000000 + endloop + endfacet + facet normal -0.000000 -0.000000 -1.000000 + outer loop + vertex 6.732638 11.542147 1.000000 + vertex 8.274705 10.543514 1.000000 + vertex 5.056202 12.293680 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 3.284693 12.780499 1.000000 + vertex 8.274705 10.543514 1.000000 + vertex -3.908824 11.950044 1.000000 + endloop + endfacet + facet normal -0.000000 -0.000000 -1.000000 + outer loop + vertex 5.056202 12.293680 1.000000 + vertex 8.274705 10.543514 1.000000 + vertex 3.284693 12.780499 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -5.522810 -9.072385 1.000000 + vertex -2.179778 -10.571042 1.000000 + vertex -3.908824 -9.950044 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -2.179778 -10.571042 1.000000 + vertex 8.274705 10.543514 1.000000 + vertex 8.274705 -8.543514 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -8.257870 -6.634909 1.000000 + vertex -2.179778 -10.571042 1.000000 + vertex -5.522810 -9.072385 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -3.908824 11.950044 1.000000 + vertex 8.274705 10.543514 1.000000 + vertex -2.179778 -10.571042 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -10.130030 -3.485805 1.000000 + vertex -2.179778 -10.571042 1.000000 + vertex -8.257870 -6.634909 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 8.274705 -8.543514 1.000000 + vertex 8.274705 10.543514 1.000000 + vertex 11.753986 -4.324638 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 11.753986 -4.324638 1.000000 + vertex 8.274705 10.543514 1.000000 + vertex 12.859365 -0.831791 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 11.753986 6.324638 1.000000 + vertex 9.646259 9.321190 1.000000 + vertex 10.815152 7.903824 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 12.859365 -0.831791 1.000000 + vertex 9.646259 9.321190 1.000000 + vertex 12.859365 2.831791 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 12.859365 2.831791 1.000000 + vertex 9.646259 9.321190 1.000000 + vertex 11.753986 6.324638 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 8.274705 10.543514 1.000000 + vertex 9.646259 9.321190 1.000000 + vertex 12.859365 -0.831791 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -10.684345 -1.734242 1.000000 + vertex -10.964789 0.081409 1.000000 + vertex -10.130030 -3.485805 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -2.179778 -10.571042 1.000000 + vertex 1.459633 -10.991194 1.000000 + vertex -0.376201 -10.920825 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 1.459633 -10.991194 1.000000 + vertex 5.056202 -10.293680 1.000000 + vertex 3.284693 -10.780499 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -2.179778 -10.571042 1.000000 + vertex 5.056202 -10.293680 1.000000 + vertex 1.459633 -10.991194 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -10.684345 3.734242 1.000000 + vertex -10.130030 5.485805 1.000000 + vertex -10.964789 1.918591 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -10.964789 1.918591 1.000000 + vertex -10.130030 5.485805 1.000000 + vertex -10.964789 0.081409 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -10.964789 0.081409 1.000000 + vertex -10.130030 5.485805 1.000000 + vertex -10.130030 -3.485805 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 5.056202 -10.293680 1.000000 + vertex 8.274705 -8.543514 1.000000 + vertex 6.732638 -9.542147 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -2.179778 -10.571042 1.000000 + vertex 8.274705 -8.543514 1.000000 + vertex 5.056202 -10.293680 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -8.257870 8.634910 1.000000 + vertex -6.983908 9.958638 1.000000 + vertex -9.314836 7.132224 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -9.314836 7.132224 1.000000 + vertex -6.983908 9.958638 1.000000 + vertex -10.130030 5.485805 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -10.130030 5.485805 1.000000 + vertex -6.983908 9.958638 1.000000 + vertex -10.130030 -3.485805 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 8.274705 -8.543514 1.000000 + vertex 10.815152 -5.903824 1.000000 + vertex 9.646259 -7.321190 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 8.274705 -8.543514 1.000000 + vertex 11.753986 -4.324638 1.000000 + vertex 10.815152 -5.903824 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -5.522810 11.072385 1.000000 + vertex -3.908824 11.950044 1.000000 + vertex -6.983908 9.958638 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -10.130030 -3.485805 1.000000 + vertex -3.908824 11.950044 1.000000 + vertex -2.179778 -10.571042 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -6.983908 9.958638 1.000000 + vertex -3.908824 11.950044 1.000000 + vertex -10.130030 -3.485805 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 11.753986 -4.324638 1.000000 + vertex 12.859365 -0.831791 1.000000 + vertex 12.440757 -2.620647 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -2.179778 12.571042 1.000000 + vertex -0.376201 12.920825 1.000000 + vertex -3.908824 11.950044 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex -0.376201 12.920825 1.000000 + vertex 1.459633 12.991194 1.000000 + vertex -3.908824 11.950044 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 12.859365 -0.831791 1.000000 + vertex 12.859365 2.831791 1.000000 + vertex 13.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 -1.000000 + outer loop + vertex 1.459633 12.991194 1.000000 + vertex 3.284693 12.780499 1.000000 + vertex -3.908824 11.950044 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 11.753986 6.324638 61.000000 + vertex 12.859365 2.831791 61.000000 + vertex 12.440757 4.620647 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -5.522810 -9.072385 61.000000 + vertex -8.257870 -6.634909 61.000000 + vertex -6.983908 -7.958639 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -10.130030 -3.485805 61.000000 + vertex -9.314836 -5.132224 61.000000 + vertex -8.257870 -6.634909 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.274705 10.543514 61.000000 + vertex 6.732638 11.542147 61.000000 + vertex 5.056202 12.293680 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.274705 10.543514 61.000000 + vertex 3.284693 12.780499 61.000000 + vertex -3.908824 11.950044 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.274705 10.543514 61.000000 + vertex 5.056202 12.293680 61.000000 + vertex 3.284693 12.780499 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -2.179778 -10.571042 61.000000 + vertex -5.522810 -9.072385 61.000000 + vertex -3.908824 -9.950044 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.274705 10.543514 61.000000 + vertex -2.179778 -10.571042 61.000000 + vertex 8.274705 -8.543514 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -2.179778 -10.571042 61.000000 + vertex -8.257870 -6.634909 61.000000 + vertex -5.522810 -9.072385 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.274705 10.543514 61.000000 + vertex -3.908824 11.950044 61.000000 + vertex -2.179778 -10.571042 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -2.179778 -10.571042 61.000000 + vertex -10.130030 -3.485805 61.000000 + vertex -8.257870 -6.634909 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.274705 10.543514 61.000000 + vertex 8.274705 -8.543514 61.000000 + vertex 11.753986 -4.324638 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.274705 10.543514 61.000000 + vertex 11.753986 -4.324638 61.000000 + vertex 12.859365 -0.831791 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 9.646259 9.321190 61.000000 + vertex 11.753986 6.324638 61.000000 + vertex 10.815152 7.903824 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 9.646259 9.321190 61.000000 + vertex 12.859365 -0.831791 61.000000 + vertex 12.859365 2.831791 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 9.646259 9.321190 61.000000 + vertex 12.859365 2.831791 61.000000 + vertex 11.753986 6.324638 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 9.646259 9.321190 61.000000 + vertex 8.274705 10.543514 61.000000 + vertex 12.859365 -0.831791 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -10.964789 0.081409 61.000000 + vertex -10.684345 -1.734242 61.000000 + vertex -10.130030 -3.485805 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 1.459633 -10.991194 61.000000 + vertex -2.179778 -10.571042 61.000000 + vertex -0.376201 -10.920825 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 5.056202 -10.293680 61.000000 + vertex 1.459633 -10.991194 61.000000 + vertex 3.284693 -10.780499 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 5.056202 -10.293680 61.000000 + vertex -2.179778 -10.571042 61.000000 + vertex 1.459633 -10.991194 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -10.130030 5.485805 61.000000 + vertex -10.684345 3.734242 61.000000 + vertex -10.964789 1.918591 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -10.130030 5.485805 61.000000 + vertex -10.964789 1.918591 61.000000 + vertex -10.964789 0.081409 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -10.130030 5.485805 61.000000 + vertex -10.964789 0.081409 61.000000 + vertex -10.130030 -3.485805 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.274705 -8.543514 61.000000 + vertex 5.056202 -10.293680 61.000000 + vertex 6.732638 -9.542147 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 8.274705 -8.543514 61.000000 + vertex -2.179778 -10.571042 61.000000 + vertex 5.056202 -10.293680 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -6.983908 9.958638 61.000000 + vertex -8.257870 8.634910 61.000000 + vertex -9.314836 7.132224 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -6.983908 9.958638 61.000000 + vertex -9.314836 7.132224 61.000000 + vertex -10.130030 5.485805 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -6.983908 9.958638 61.000000 + vertex -10.130030 5.485805 61.000000 + vertex -10.130030 -3.485805 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 10.815152 -5.903824 61.000000 + vertex 8.274705 -8.543514 61.000000 + vertex 9.646259 -7.321190 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 11.753986 -4.324638 61.000000 + vertex 8.274705 -8.543514 61.000000 + vertex 10.815152 -5.903824 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -3.908824 11.950044 61.000000 + vertex -5.522810 11.072385 61.000000 + vertex -6.983908 9.958638 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -3.908824 11.950044 61.000000 + vertex -10.130030 -3.485805 61.000000 + vertex -2.179778 -10.571042 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -3.908824 11.950044 61.000000 + vertex -6.983908 9.958638 61.000000 + vertex -10.130030 -3.485805 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.859365 -0.831791 61.000000 + vertex 11.753986 -4.324638 61.000000 + vertex 12.440757 -2.620647 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex -0.376201 12.920825 61.000000 + vertex -2.179778 12.571042 61.000000 + vertex -3.908824 11.950044 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 1.459633 12.991194 61.000000 + vertex -0.376201 12.920825 61.000000 + vertex -3.908824 11.950044 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 12.859365 2.831791 61.000000 + vertex 12.859365 -0.831791 61.000000 + vertex 13.000000 1.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 3.284693 12.780499 61.000000 + vertex 1.459633 12.991194 61.000000 + vertex -3.908824 11.950044 61.000000 + endloop + endfacet + facet normal -0.000854 -1.000000 0.000000 + outer loop + vertex -7.945369 -6.998773 31.140100 + vertex -34.000000 -6.976526 31.612394 + vertex -34.000000 -6.976526 30.387606 + endloop + endfacet + facet normal 0.001095 -0.994231 0.107252 + outer loop + vertex -7.945369 -6.998773 31.140100 + vertex -8.080567 -6.844954 32.567387 + vertex -34.000000 -6.976526 31.612394 + endloop + endfacet + facet normal -0.000887 -0.988280 -0.152649 + outer loop + vertex -8.039007 -6.892804 29.694763 + vertex -34.000000 -6.976526 30.387606 + vertex -34.000000 -6.789563 29.177172 + endloop + endfacet + facet normal 0.000000 0.997066 0.076549 + outer loop + vertex -7.944272 9.000000 31.000000 + vertex -34.000000 9.000000 31.000000 + vertex -34.000000 8.906243 32.221195 + endloop + endfacet + facet normal 0.001263 -0.997316 -0.073203 + outer loop + vertex -8.039007 -6.892804 29.694763 + vertex -7.945369 -6.998773 31.140100 + vertex -34.000000 -6.976526 30.387606 + endloop + endfacet + facet normal -0.000761 -0.953396 -0.301721 + outer loop + vertex -8.329084 -6.547727 28.348244 + vertex -34.000000 -6.789563 29.177172 + vertex -34.000000 -6.420020 28.009464 + endloop + endfacet + facet normal -0.000655 0.973695 0.227853 + outer loop + vertex -8.070408 8.856698 32.507416 + vertex -34.000000 8.906243 32.221195 + vertex -34.000000 8.627172 33.413765 + endloop + endfacet + facet normal 0.001102 -0.968638 -0.248473 + outer loop + vertex -8.329084 -6.547727 28.348244 + vertex -8.039007 -6.892804 29.694763 + vertex -34.000000 -6.789563 29.177172 + endloop + endfacet + facet normal 0.000857 0.995505 0.094709 + outer loop + vertex -8.070408 8.856698 32.507416 + vertex -7.944272 9.000000 31.000000 + vertex -34.000000 8.906243 32.221195 + endloop + endfacet + facet normal -0.000575 -0.896166 -0.443719 + outer loop + vertex -8.751478 -5.993474 27.115244 + vertex -34.000000 -6.420020 28.009464 + vertex -34.000000 -5.876557 26.911850 + endloop + endfacet + facet normal -0.000894 0.927502 0.373817 + outer loop + vertex -8.402561 8.455994 33.899681 + vertex -34.000000 8.627172 33.413765 + vertex -34.000000 8.169325 34.549759 + endloop + endfacet + facet normal 0.000877 -0.911974 -0.410248 + outer loop + vertex -8.751478 -5.993474 27.115244 + vertex -8.329084 -6.547727 28.348244 + vertex -34.000000 -6.420020 28.009464 + endloop + endfacet + facet normal 0.001171 0.960916 0.276838 + outer loop + vertex -8.402561 8.455994 33.899681 + vertex -8.070408 8.856698 32.507416 + vertex -34.000000 8.627172 33.413765 + endloop + endfacet + facet normal -0.000290 -0.817929 -0.575319 + outer loop + vertex -9.252076 -5.236581 25.989506 + vertex -34.000000 -5.876557 26.911850 + vertex -34.000000 -5.171914 25.910061 + endloop + endfacet + facet normal 0.000654 -0.829731 -0.558163 + outer loop + vertex -9.252076 -5.236581 25.989506 + vertex -8.751478 -5.993474 27.115244 + vertex -34.000000 -5.876557 26.911850 + endloop + endfacet + facet normal -0.000913 0.859569 0.511018 + outer loop + vertex -8.866960 7.829576 35.166161 + vertex -34.000000 8.169325 34.549759 + vertex -34.000000 7.543435 35.602551 + endloop + endfacet + facet normal 0.001232 0.896170 0.443709 + outer loop + vertex -8.866960 7.829576 35.166161 + vertex -8.402561 8.455994 33.899681 + vertex -34.000000 8.169325 34.549759 + endloop + endfacet + facet normal 0.000293 -0.720522 -0.693433 + outer loop + vertex -9.786845 -4.257754 24.970406 + vertex -34.000000 -5.171914 25.910061 + vertex -34.000000 -4.322606 25.027575 + endloop + endfacet + facet normal -0.000254 -0.606226 -0.795293 + outer loop + vertex -9.786845 -4.257754 24.970406 + vertex -34.000000 -4.322606 25.027575 + vertex -34.000000 -3.348540 24.285076 + endloop + endfacet + facet normal 0.001192 0.803405 0.595432 + outer loop + vertex -9.405215 6.977583 36.316814 + vertex -8.866960 7.829576 35.166161 + vertex -34.000000 7.543435 35.602551 + endloop + endfacet + facet normal 0.000340 -0.721125 -0.692805 + outer loop + vertex -9.786845 -4.257754 24.970406 + vertex -9.252076 -5.236581 25.989506 + vertex -34.000000 -5.171914 25.910061 + endloop + endfacet + facet normal -0.000728 0.771488 0.636243 + outer loop + vertex -9.405215 6.977583 36.316814 + vertex -34.000000 7.543435 35.602551 + vertex -34.000000 6.764173 36.547459 + endloop + endfacet + facet normal -0.000067 -0.477720 -0.878512 + outer loop + vertex -10.191252 -3.330807 24.273626 + vertex -34.000000 -3.348540 24.285076 + vertex -34.000000 -2.272549 23.699970 + endloop + endfacet + facet normal 0.000063 -0.600848 -0.799363 + outer loop + vertex -10.191252 -3.330807 24.273626 + vertex -9.786845 -4.257754 24.970406 + vertex -34.000000 -3.348540 24.285076 + endloop + endfacet + facet normal 0.000965 0.680608 0.732647 + outer loop + vertex -9.968540 5.867354 37.348927 + vertex -9.405215 6.977583 36.316814 + vertex -34.000000 6.764173 36.547459 + endloop + endfacet + facet normal -0.000069 0.665326 0.746553 + outer loop + vertex -9.968540 5.867354 37.348927 + vertex -34.000000 6.764173 36.547459 + vertex -34.000000 5.849803 37.362343 + endloop + endfacet + facet normal 0.000072 0.543568 0.839365 + outer loop + vertex -9.968540 5.867354 37.348927 + vertex -34.000000 5.849803 37.362343 + vertex -34.000000 4.821759 38.028099 + endloop + endfacet + facet normal -0.000147 -0.338016 -0.941140 + outer loop + vertex -10.557199 -2.229729 23.680925 + vertex -34.000000 -2.272549 23.699970 + vertex -34.000000 -1.119852 23.285973 + endloop + endfacet + facet normal 0.000150 -0.473945 -0.880554 + outer loop + vertex -10.557199 -2.229729 23.680925 + vertex -10.191252 -3.330807 24.273626 + vertex -34.000000 -2.272549 23.699970 + endloop + endfacet + facet normal 0.001471 0.520726 0.853723 + outer loop + vertex -10.501171 4.423895 38.230278 + vertex -9.968540 5.867354 37.348927 + vertex -34.000000 4.821759 38.028099 + endloop + endfacet + facet normal -0.000925 0.409068 0.912503 + outer loop + vertex -10.501171 4.423895 38.230278 + vertex -34.000000 4.821759 38.028099 + vertex -34.000000 3.704135 38.529121 + endloop + endfacet + facet normal -0.000697 -0.190391 -0.981708 + outer loop + vertex -10.855250 -0.858236 23.218807 + vertex -34.000000 -1.119852 23.285973 + vertex -34.000000 0.082533 23.052784 + endloop + endfacet + facet normal 0.000857 -0.319139 -0.947707 + outer loop + vertex -10.855250 -0.858236 23.218807 + vertex -10.557199 -2.229729 23.680925 + vertex -34.000000 -1.119852 23.285973 + endloop + endfacet + facet normal 0.001504 0.341172 0.940000 + outer loop + vertex -10.829480 3.015787 38.741875 + vertex -10.501171 4.423895 38.230278 + vertex -34.000000 3.704135 38.529121 + endloop + endfacet + facet normal -0.000982 0.264982 0.964253 + outer loop + vertex -10.829480 3.015787 38.741875 + vertex -34.000000 3.704135 38.529121 + vertex -34.000000 2.523129 38.853668 + endloop + endfacet + facet normal -0.000806 -0.038303 -0.999266 + outer loop + vertex -10.985648 0.413291 23.021544 + vertex -34.000000 0.082533 23.052784 + vertex -34.000000 1.306422 23.005871 + endloop + endfacet + facet normal 0.000861 -0.153219 -0.988192 + outer loop + vertex -10.985648 0.413291 23.021544 + vertex -10.855250 -0.858236 23.218807 + vertex -34.000000 0.082533 23.052784 + endloop + endfacet + facet normal 0.001358 0.160139 0.987093 + outer loop + vertex -10.987958 1.537464 38.981926 + vertex -10.829480 3.015787 38.741875 + vertex -34.000000 2.523129 38.853668 + endloop + endfacet + facet normal -0.000625 0.114682 0.993402 + outer loop + vertex -10.987958 1.537464 38.981926 + vertex -34.000000 2.523129 38.853668 + vertex -34.000000 1.306422 38.994129 + endloop + endfacet + facet normal 0.001197 0.013304 -0.999911 + outer loop + vertex -10.973373 1.798958 23.039995 + vertex -10.985648 0.413291 23.021544 + vertex -34.000000 1.306422 23.005871 + endloop + endfacet + facet normal -0.000981 0.114683 -0.993402 + outer loop + vertex -10.973373 1.798958 23.039995 + vertex -34.000000 1.306422 23.005871 + vertex -34.000000 2.523129 23.146334 + endloop + endfacet + facet normal 0.000644 -0.011284 0.999936 + outer loop + vertex -10.978530 0.282484 38.967758 + vertex -10.987958 1.537464 38.981926 + vertex -34.000000 1.306422 38.994129 + endloop + endfacet + facet normal -0.000559 -0.038303 0.999266 + outer loop + vertex -10.978530 0.282484 38.967758 + vertex -34.000000 1.306422 38.994129 + vertex -34.000000 0.082533 38.947216 + endloop + endfacet + facet normal 0.000702 0.167111 -0.985938 + outer loop + vertex -10.853421 2.869869 23.221594 + vertex -10.973373 1.798958 23.039995 + vertex -34.000000 2.523129 23.146334 + endloop + endfacet + facet normal -0.000834 0.264982 -0.964253 + outer loop + vertex -10.853421 2.869869 23.221594 + vertex -34.000000 2.523129 23.146334 + vertex -34.000000 3.704135 23.470881 + endloop + endfacet + facet normal 0.000447 -0.152943 0.988235 + outer loop + vertex -10.875323 -0.725314 38.811741 + vertex -10.978530 0.282484 38.967758 + vertex -34.000000 0.082533 38.947216 + endloop + endfacet + facet normal -0.000900 -0.190391 0.981708 + outer loop + vertex -10.875323 -0.725314 38.811741 + vertex -34.000000 0.082533 38.947216 + vertex -34.000000 -1.119852 38.714027 + endloop + endfacet + facet normal 0.000419 0.296962 -0.954889 + outer loop + vertex -10.651127 3.872498 23.533491 + vertex -10.853421 2.869869 23.221594 + vertex -34.000000 3.704135 23.470881 + endloop + endfacet + facet normal -0.000503 0.409068 -0.912504 + outer loop + vertex -10.651127 3.872498 23.533491 + vertex -34.000000 3.704135 23.470881 + vertex -34.000000 4.821759 23.971903 + endloop + endfacet + facet normal 0.000005 0.419394 -0.907804 + outer loop + vertex -10.374597 4.823421 23.972807 + vertex -10.651127 3.872498 23.533491 + vertex -34.000000 4.821759 23.971903 + endloop + endfacet + facet normal 0.000858 -0.287518 0.957775 + outer loop + vertex -10.653047 -1.864698 38.469505 + vertex -10.875323 -0.725314 38.811741 + vertex -34.000000 -1.119852 38.714027 + endloop + endfacet + facet normal -0.000006 0.543567 -0.839366 + outer loop + vertex -10.374597 4.823421 23.972807 + vertex -34.000000 4.821759 23.971903 + vertex -34.000000 5.849803 24.637657 + endloop + endfacet + facet normal -0.000927 -0.338016 0.941140 + outer loop + vertex -10.653047 -1.864698 38.469505 + vertex -34.000000 -1.119852 38.714027 + vertex -34.000000 -2.272549 38.300030 + endloop + endfacet + facet normal 0.000114 0.545514 -0.838102 + outer loop + vertex -9.963696 5.878253 24.659445 + vertex -10.374597 4.823421 23.972807 + vertex -34.000000 5.849803 24.637657 + endloop + endfacet + facet normal -0.000111 0.665326 -0.746553 + outer loop + vertex -9.963696 5.878253 24.659445 + vertex -34.000000 5.849803 24.637657 + vertex -34.000000 6.764173 25.452539 + endloop + endfacet + facet normal 0.000852 -0.424913 0.905234 + outer loop + vertex -10.341965 -2.919164 37.974251 + vertex -10.653047 -1.864698 38.469505 + vertex -34.000000 -2.272549 38.300030 + endloop + endfacet + facet normal -0.000960 -0.477720 0.878512 + outer loop + vertex -10.341965 -2.919164 37.974251 + vertex -34.000000 -2.272549 38.300030 + vertex -34.000000 -3.348540 37.714924 + endloop + endfacet + facet normal 0.000342 0.672132 -0.740431 + outer loop + vertex -9.482093 6.841722 25.534264 + vertex -9.963696 5.878253 24.659445 + vertex -34.000000 6.764173 25.452539 + endloop + endfacet + facet normal 0.001161 -0.563095 0.826391 + outer loop + vertex -9.880194 -4.061757 37.195049 + vertex -10.341965 -2.919164 37.974251 + vertex -34.000000 -3.348540 37.714924 + endloop + endfacet + facet normal -0.000319 0.771489 -0.636242 + outer loop + vertex -9.482093 6.841722 25.534264 + vertex -34.000000 6.764173 25.452539 + vertex -34.000000 7.543435 26.397451 + endloop + endfacet + facet normal -0.000784 -0.606225 0.795293 + outer loop + vertex -9.880194 -4.061757 37.195049 + vertex -34.000000 -3.348540 37.714924 + vertex -34.000000 -4.322606 36.972427 + endloop + endfacet + facet normal 0.000332 0.780546 -0.625098 + outer loop + vertex -9.014555 7.611255 26.495411 + vertex -9.482093 6.841722 25.534264 + vertex -34.000000 7.543435 26.397451 + endloop + endfacet + facet normal 0.000958 -0.698955 0.715165 + outer loop + vertex -9.345053 -5.081109 36.198086 + vertex -9.880194 -4.061757 37.195049 + vertex -34.000000 -4.322606 36.972427 + endloop + endfacet + facet normal -0.000330 0.859569 -0.511019 + outer loop + vertex -9.014555 7.611255 26.495411 + vertex -34.000000 7.543435 26.397451 + vertex -34.000000 8.169325 27.450241 + endloop + endfacet + facet normal -0.000388 -0.720522 0.693432 + outer loop + vertex -9.345053 -5.081109 36.198086 + vertex -34.000000 -4.322606 36.972427 + vertex -34.000000 -5.171914 36.089939 + endloop + endfacet + facet normal 0.000279 0.866512 -0.499157 + outer loop + vertex -8.589377 8.214142 27.542231 + vertex -9.014555 7.611255 26.495411 + vertex -34.000000 8.169325 27.450241 + endloop + endfacet + facet normal 0.000434 -0.812411 0.583085 + outer loop + vertex -8.837354 -5.872151 35.095551 + vertex -9.345053 -5.081109 36.198086 + vertex -34.000000 -5.171914 36.089939 + endloop + endfacet + facet normal -0.000283 0.927502 -0.373817 + outer loop + vertex -8.589377 8.214142 27.542231 + vertex -34.000000 8.169325 27.450241 + vertex -34.000000 8.627172 28.586235 + endloop + endfacet + facet normal -0.000026 -0.817929 0.575319 + outer loop + vertex -8.837354 -5.872151 35.095551 + vertex -34.000000 -5.171914 36.089939 + vertex -34.000000 -5.876557 35.088150 + endloop + endfacet + facet normal 0.000026 -0.896166 0.443719 + outer loop + vertex -8.837354 -5.872151 35.095551 + vertex -34.000000 -5.876557 35.088150 + vertex -34.000000 -6.420020 33.990536 + endloop + endfacet + facet normal 0.000256 0.931993 -0.362476 + outer loop + vertex -8.241260 8.655006 28.676022 + vertex -8.589377 8.214142 27.542231 + vertex -34.000000 8.627172 28.586235 + endloop + endfacet + facet normal -0.000258 0.973695 -0.227853 + outer loop + vertex -8.241260 8.655006 28.676022 + vertex -34.000000 8.627172 28.586235 + vertex -34.000000 8.906243 29.778805 + endloop + endfacet + facet normal 0.000074 0.975390 -0.220486 + outer loop + vertex -8.023660 8.910345 29.805666 + vertex -8.241260 8.655006 28.676022 + vertex -34.000000 8.906243 29.778805 + endloop + endfacet + facet normal 0.000331 -0.898910 0.438133 + outer loop + vertex -8.399053 -6.460416 33.888287 + vertex -8.837354 -5.872151 35.095551 + vertex -34.000000 -6.420020 33.990536 + endloop + endfacet + facet normal -0.000078 0.997066 -0.076549 + outer loop + vertex -8.023660 8.910345 29.805666 + vertex -34.000000 8.906243 29.778805 + vertex -34.000000 9.000000 31.000000 + endloop + endfacet + facet normal -0.000299 -0.953396 0.301720 + outer loop + vertex -8.399053 -6.460416 33.888287 + vertex -34.000000 -6.420020 33.990536 + vertex -34.000000 -6.789563 32.822826 + endloop + endfacet + facet normal 0.000000 0.997194 -0.074856 + outer loop + vertex -7.944272 9.000000 31.000000 + vertex -8.023660 8.910345 29.805666 + vertex -34.000000 9.000000 31.000000 + endloop + endfacet + facet normal -0.000608 -0.988280 0.152650 + outer loop + vertex -8.080567 -6.844954 32.567387 + vertex -34.000000 -6.789563 32.822826 + vertex -34.000000 -6.976526 31.612394 + endloop + endfacet + facet normal 0.000704 -0.960096 0.279671 + outer loop + vertex -8.080567 -6.844954 32.567387 + vertex -8.399053 -6.460416 33.888287 + vertex -34.000000 -6.789563 32.822826 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 8.906243 32.221195 + vertex -34.000000 8.169325 34.549759 + vertex -34.000000 8.627172 33.413765 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 8.906243 29.778805 + vertex -34.000000 4.821759 38.028099 + vertex -34.000000 8.906243 32.221195 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 1.306422 38.994129 + vertex -34.000000 4.821759 38.028099 + vertex -34.000000 -4.322606 36.972427 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex -34.000000 3.704135 38.529121 + vertex -34.000000 4.821759 38.028099 + vertex -34.000000 2.523129 38.853668 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -5.171914 25.910061 + vertex -34.000000 -3.348540 24.285076 + vertex -34.000000 -4.322606 25.027575 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex -34.000000 2.523129 38.853668 + vertex -34.000000 4.821759 38.028099 + vertex -34.000000 1.306422 38.994129 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 1.306422 23.005871 + vertex -34.000000 4.821759 38.028099 + vertex -34.000000 5.849803 24.637657 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -4.322606 36.972427 + vertex -34.000000 4.821759 38.028099 + vertex -34.000000 1.306422 23.005871 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 5.849803 24.637657 + vertex -34.000000 4.821759 38.028099 + vertex -34.000000 8.169325 27.450241 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 8.169325 27.450241 + vertex -34.000000 4.821759 38.028099 + vertex -34.000000 8.906243 29.778805 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 4.821759 38.028099 + vertex -34.000000 7.543435 35.602551 + vertex -34.000000 8.906243 32.221195 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 8.906243 32.221195 + vertex -34.000000 7.543435 35.602551 + vertex -34.000000 8.169325 34.549759 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -5.171914 25.910061 + vertex -34.000000 -2.272549 23.699970 + vertex -34.000000 -3.348540 24.285076 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -5.876557 26.911850 + vertex -34.000000 -6.420020 28.009464 + vertex -34.000000 -5.171914 25.910061 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex -34.000000 5.849803 37.362343 + vertex -34.000000 6.764173 36.547459 + vertex -34.000000 4.821759 38.028099 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 4.821759 38.028099 + vertex -34.000000 6.764173 36.547459 + vertex -34.000000 7.543435 35.602551 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -2.272549 23.699970 + vertex -34.000000 0.082533 23.052784 + vertex -34.000000 -1.119852 23.285973 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -5.171914 25.910061 + vertex -34.000000 0.082533 23.052784 + vertex -34.000000 -2.272549 23.699970 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -6.789563 29.177172 + vertex -34.000000 -6.976526 30.387606 + vertex -34.000000 -6.420020 28.009464 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -6.420020 28.009464 + vertex -34.000000 -6.976526 30.387606 + vertex -34.000000 -5.171914 25.910061 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 0.082533 23.052784 + vertex -34.000000 -6.976526 31.612394 + vertex -34.000000 1.306422 23.005871 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -5.171914 25.910061 + vertex -34.000000 -6.976526 31.612394 + vertex -34.000000 0.082533 23.052784 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -6.976526 30.387606 + vertex -34.000000 -6.976526 31.612394 + vertex -34.000000 -5.171914 25.910061 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -6.789563 32.822826 + vertex -34.000000 -6.420020 33.990536 + vertex -34.000000 -6.976526 31.612394 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -6.976526 31.612394 + vertex -34.000000 -6.420020 33.990536 + vertex -34.000000 1.306422 23.005871 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 1.306422 23.005871 + vertex -34.000000 4.821759 23.971903 + vertex -34.000000 2.523129 23.146334 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 2.523129 23.146334 + vertex -34.000000 4.821759 23.971903 + vertex -34.000000 3.704135 23.470881 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 1.306422 23.005871 + vertex -34.000000 5.849803 24.637657 + vertex -34.000000 4.821759 23.971903 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -5.876557 35.088150 + vertex -34.000000 -5.171914 36.089939 + vertex -34.000000 -6.420020 33.990536 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 -6.420020 33.990536 + vertex -34.000000 -4.322606 36.972427 + vertex -34.000000 1.306422 23.005871 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -5.171914 36.089939 + vertex -34.000000 -4.322606 36.972427 + vertex -34.000000 -6.420020 33.990536 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 5.849803 24.637657 + vertex -34.000000 8.169325 27.450241 + vertex -34.000000 6.764173 25.452539 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 6.764173 25.452539 + vertex -34.000000 8.169325 27.450241 + vertex -34.000000 7.543435 26.397451 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -3.348540 37.714924 + vertex -34.000000 -2.272549 38.300030 + vertex -34.000000 -4.322606 36.972427 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -2.272549 38.300030 + vertex -34.000000 -1.119852 38.714027 + vertex -34.000000 -4.322606 36.972427 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 8.169325 27.450241 + vertex -34.000000 8.906243 29.778805 + vertex -34.000000 8.627172 28.586235 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 0.082533 38.947216 + vertex -34.000000 1.306422 38.994129 + vertex -34.000000 -1.119852 38.714027 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -34.000000 -1.119852 38.714027 + vertex -34.000000 1.306422 38.994129 + vertex -34.000000 -4.322606 36.972427 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -34.000000 8.906243 29.778805 + vertex -34.000000 8.906243 32.221195 + vertex -34.000000 9.000000 31.000000 + endloop + endfacet +endsolid Mesh diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSS.stl b/apps/cpu/Multiphase/backup/FlowFocusingSS.stl new file mode 100644 index 0000000000000000000000000000000000000000..fcf2ac4f64f6ac56f8aba0db2a8718f99f5958c2 Binary files /dev/null and b/apps/cpu/Multiphase/backup/FlowFocusingSS.stl differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq.FCStd b/apps/cpu/Multiphase/backup/FlowFocusingSq.FCStd new file mode 100644 index 0000000000000000000000000000000000000000..dbd1808d2a5dac239a7f1b2f22e3621b3059bd79 Binary files /dev/null and b/apps/cpu/Multiphase/backup/FlowFocusingSq.FCStd differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq.FCStd1 b/apps/cpu/Multiphase/backup/FlowFocusingSq.FCStd1 new file mode 100644 index 0000000000000000000000000000000000000000..55f6c7b1690b72985f26a13836e7518c2704c71c Binary files /dev/null and b/apps/cpu/Multiphase/backup/FlowFocusingSq.FCStd1 differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq.ast b/apps/cpu/Multiphase/backup/FlowFocusingSq.ast new file mode 100644 index 0000000000000000000000000000000000000000..97ed8f7759e6b733e0ddb09c136075c9920c1e9e --- /dev/null +++ b/apps/cpu/Multiphase/backup/FlowFocusingSq.ast @@ -0,0 +1,310 @@ +solid Mesh + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 25.000000 1.000000 1.000000 + vertex 25.000000 1.000000 61.000000 + vertex 1.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 25.000000 1.000000 61.000000 + vertex 1.000000 1.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 1.000000 25.000000 1.000000 + vertex 25.000000 25.000000 1.000000 + vertex 1.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 25.000000 25.000000 1.000000 + vertex 25.000000 1.000000 1.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 19.000000 25.000000 + vertex 25.000000 1.000000 1.000000 + vertex 25.000000 25.000000 1.000000 + endloop + endfacet + facet normal 1.000000 -0.000000 0.000000 + outer loop + vertex 25.000000 7.000000 25.000000 + vertex 25.000000 1.000000 1.000000 + vertex 25.000000 19.000000 25.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 25.000000 19.000000 37.000000 + vertex 25.000000 19.000000 25.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 25.000000 19.000000 25.000000 + vertex 25.000000 25.000000 1.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 1.000000 61.000000 + vertex 25.000000 7.000000 37.000000 + vertex 25.000000 19.000000 37.000000 + endloop + endfacet + facet normal 1.000000 -0.000000 0.000000 + outer loop + vertex 25.000000 1.000000 61.000000 + vertex 25.000000 19.000000 37.000000 + vertex 25.000000 25.000000 61.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 1.000000 61.000000 + vertex 25.000000 1.000000 1.000000 + vertex 25.000000 7.000000 25.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 1.000000 61.000000 + vertex 25.000000 7.000000 25.000000 + vertex 25.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 1.000000 25.000000 61.000000 + vertex 1.000000 1.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 1.000000 1.000000 61.000000 + vertex 25.000000 1.000000 61.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 1.000000 21.000000 23.000000 + vertex 1.000000 25.000000 1.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 1.000000 5.000000 23.000000 + vertex 1.000000 21.000000 23.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 21.000000 23.000000 + vertex 1.000000 21.000000 39.000000 + vertex 1.000000 25.000000 1.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 21.000000 39.000000 + vertex 1.000000 25.000000 61.000000 + vertex 1.000000 25.000000 1.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 5.000000 39.000000 + vertex 1.000000 1.000000 61.000000 + vertex 1.000000 21.000000 39.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 21.000000 39.000000 + vertex 1.000000 1.000000 61.000000 + vertex 1.000000 25.000000 61.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 1.000000 1.000000 61.000000 + vertex 1.000000 5.000000 23.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 5.000000 23.000000 + vertex 1.000000 1.000000 61.000000 + vertex 1.000000 5.000000 39.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 25.000000 25.000000 1.000000 + vertex 1.000000 25.000000 1.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 1.000000 25.000000 1.000000 + vertex 1.000000 25.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 25.000000 7.000000 25.000000 + vertex 81.000000 19.000000 25.000000 + vertex 81.000000 7.000000 25.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 25.000000 19.000000 25.000000 + vertex 81.000000 19.000000 25.000000 + vertex 25.000000 7.000000 25.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 81.000000 19.000000 25.000000 + vertex 25.000000 19.000000 37.000000 + vertex 81.000000 19.000000 37.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 81.000000 19.000000 25.000000 + vertex 25.000000 19.000000 25.000000 + vertex 25.000000 19.000000 37.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 81.000000 19.000000 37.000000 + vertex 25.000000 7.000000 37.000000 + vertex 81.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 81.000000 19.000000 37.000000 + vertex 25.000000 19.000000 37.000000 + vertex 25.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 25.000000 7.000000 37.000000 + vertex 81.000000 7.000000 25.000000 + vertex 81.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 25.000000 7.000000 25.000000 + vertex 81.000000 7.000000 25.000000 + vertex 25.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -24.000000 5.000000 23.000000 + vertex 1.000000 21.000000 23.000000 + vertex 1.000000 5.000000 23.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -24.000000 21.000000 23.000000 + vertex 1.000000 21.000000 23.000000 + vertex -24.000000 5.000000 23.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 1.000000 21.000000 23.000000 + vertex -24.000000 21.000000 39.000000 + vertex 1.000000 21.000000 39.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 1.000000 21.000000 23.000000 + vertex -24.000000 21.000000 23.000000 + vertex -24.000000 21.000000 39.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 1.000000 21.000000 39.000000 + vertex -24.000000 5.000000 39.000000 + vertex 1.000000 5.000000 39.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 1.000000 21.000000 39.000000 + vertex -24.000000 21.000000 39.000000 + vertex -24.000000 5.000000 39.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -24.000000 5.000000 39.000000 + vertex 1.000000 5.000000 23.000000 + vertex 1.000000 5.000000 39.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -24.000000 5.000000 23.000000 + vertex 1.000000 5.000000 23.000000 + vertex -24.000000 5.000000 39.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 81.000000 19.000000 37.000000 + vertex 81.000000 7.000000 37.000000 + vertex 81.000000 7.000000 25.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 81.000000 19.000000 37.000000 + vertex 81.000000 7.000000 25.000000 + vertex 81.000000 19.000000 25.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -24.000000 5.000000 39.000000 + vertex -24.000000 21.000000 39.000000 + vertex -24.000000 5.000000 23.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -24.000000 5.000000 23.000000 + vertex -24.000000 21.000000 39.000000 + vertex -24.000000 21.000000 23.000000 + endloop + endfacet +endsolid Mesh diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq.stl b/apps/cpu/Multiphase/backup/FlowFocusingSq.stl new file mode 100644 index 0000000000000000000000000000000000000000..b91794e7e1cd1f01ff3fa373910b5a31e3381a70 Binary files /dev/null and b/apps/cpu/Multiphase/backup/FlowFocusingSq.stl differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq1.FCStd b/apps/cpu/Multiphase/backup/FlowFocusingSq1.FCStd new file mode 100644 index 0000000000000000000000000000000000000000..57b06dc9f17ca420e2bfdda80b16ee9ad21056e3 Binary files /dev/null and b/apps/cpu/Multiphase/backup/FlowFocusingSq1.FCStd differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq1.FCStd1 b/apps/cpu/Multiphase/backup/FlowFocusingSq1.FCStd1 new file mode 100644 index 0000000000000000000000000000000000000000..fa315bacf26389f34692d3eb1c2947d3cb8d06ba Binary files /dev/null and b/apps/cpu/Multiphase/backup/FlowFocusingSq1.FCStd1 differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq1.ast b/apps/cpu/Multiphase/backup/FlowFocusingSq1.ast new file mode 100644 index 0000000000000000000000000000000000000000..7acee410835ddb702a2ed2ca798e663db3812f8f --- /dev/null +++ b/apps/cpu/Multiphase/backup/FlowFocusingSq1.ast @@ -0,0 +1,310 @@ +solid Mesh + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 25.000000 1.000000 1.000000 + vertex 25.000000 1.000000 61.000000 + vertex 1.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 25.000000 1.000000 61.000000 + vertex 1.000000 1.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 1.000000 25.000000 1.000000 + vertex 25.000000 25.000000 1.000000 + vertex 1.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 25.000000 25.000000 1.000000 + vertex 25.000000 1.000000 1.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 19.000000 25.000000 + vertex 25.000000 1.000000 1.000000 + vertex 25.000000 25.000000 1.000000 + endloop + endfacet + facet normal 1.000000 -0.000000 0.000000 + outer loop + vertex 25.000000 7.000000 25.000000 + vertex 25.000000 1.000000 1.000000 + vertex 25.000000 19.000000 25.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 25.000000 19.000000 37.000000 + vertex 25.000000 19.000000 25.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 25.000000 19.000000 25.000000 + vertex 25.000000 25.000000 1.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 1.000000 61.000000 + vertex 25.000000 7.000000 37.000000 + vertex 25.000000 19.000000 37.000000 + endloop + endfacet + facet normal 1.000000 -0.000000 0.000000 + outer loop + vertex 25.000000 1.000000 61.000000 + vertex 25.000000 19.000000 37.000000 + vertex 25.000000 25.000000 61.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 1.000000 61.000000 + vertex 25.000000 1.000000 1.000000 + vertex 25.000000 7.000000 25.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 1.000000 61.000000 + vertex 25.000000 7.000000 25.000000 + vertex 25.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 1.000000 25.000000 61.000000 + vertex 1.000000 1.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 1.000000 1.000000 61.000000 + vertex 25.000000 1.000000 61.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 1.000000 18.000000 18.000000 + vertex 1.000000 25.000000 1.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 1.000000 8.000000 18.000000 + vertex 1.000000 18.000000 18.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 18.000000 18.000000 + vertex 1.000000 18.000000 44.000000 + vertex 1.000000 25.000000 1.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 18.000000 44.000000 + vertex 1.000000 25.000000 61.000000 + vertex 1.000000 25.000000 1.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 8.000000 44.000000 + vertex 1.000000 1.000000 61.000000 + vertex 1.000000 18.000000 44.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 18.000000 44.000000 + vertex 1.000000 1.000000 61.000000 + vertex 1.000000 25.000000 61.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 1.000000 1.000000 61.000000 + vertex 1.000000 8.000000 18.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 8.000000 18.000000 + vertex 1.000000 1.000000 61.000000 + vertex 1.000000 8.000000 44.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 25.000000 25.000000 1.000000 + vertex 1.000000 25.000000 1.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 1.000000 25.000000 1.000000 + vertex 1.000000 25.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 25.000000 19.000000 25.000000 + vertex 81.000000 19.000000 25.000000 + vertex 25.000000 7.000000 25.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 25.000000 7.000000 25.000000 + vertex 81.000000 19.000000 25.000000 + vertex 81.000000 7.000000 25.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 81.000000 19.000000 25.000000 + vertex 25.000000 19.000000 37.000000 + vertex 81.000000 19.000000 37.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 81.000000 19.000000 25.000000 + vertex 25.000000 19.000000 25.000000 + vertex 25.000000 19.000000 37.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 81.000000 19.000000 37.000000 + vertex 25.000000 19.000000 37.000000 + vertex 25.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 81.000000 19.000000 37.000000 + vertex 25.000000 7.000000 37.000000 + vertex 81.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 25.000000 7.000000 37.000000 + vertex 81.000000 7.000000 25.000000 + vertex 81.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 25.000000 7.000000 25.000000 + vertex 81.000000 7.000000 25.000000 + vertex 25.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -24.000000 8.000000 18.000000 + vertex 1.000000 18.000000 18.000000 + vertex 1.000000 8.000000 18.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -24.000000 18.000000 18.000000 + vertex 1.000000 18.000000 18.000000 + vertex -24.000000 8.000000 18.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex -24.000000 18.000000 18.000000 + vertex -24.000000 18.000000 44.000000 + vertex 1.000000 18.000000 44.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 1.000000 18.000000 18.000000 + vertex -24.000000 18.000000 18.000000 + vertex 1.000000 18.000000 44.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 1.000000 18.000000 44.000000 + vertex -24.000000 8.000000 44.000000 + vertex 1.000000 8.000000 44.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 1.000000 18.000000 44.000000 + vertex -24.000000 18.000000 44.000000 + vertex -24.000000 8.000000 44.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -24.000000 8.000000 44.000000 + vertex -24.000000 8.000000 18.000000 + vertex 1.000000 8.000000 44.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -24.000000 8.000000 18.000000 + vertex 1.000000 8.000000 18.000000 + vertex 1.000000 8.000000 44.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 81.000000 19.000000 37.000000 + vertex 81.000000 7.000000 37.000000 + vertex 81.000000 7.000000 25.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 81.000000 19.000000 37.000000 + vertex 81.000000 7.000000 25.000000 + vertex 81.000000 19.000000 25.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -24.000000 8.000000 44.000000 + vertex -24.000000 18.000000 44.000000 + vertex -24.000000 8.000000 18.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -24.000000 8.000000 18.000000 + vertex -24.000000 18.000000 44.000000 + vertex -24.000000 18.000000 18.000000 + endloop + endfacet +endsolid Mesh diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq1.stl b/apps/cpu/Multiphase/backup/FlowFocusingSq1.stl new file mode 100644 index 0000000000000000000000000000000000000000..9f6355c80a4d30dbdcadba4615fa89895a660360 Binary files /dev/null and b/apps/cpu/Multiphase/backup/FlowFocusingSq1.stl differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq2.FCStd b/apps/cpu/Multiphase/backup/FlowFocusingSq2.FCStd new file mode 100644 index 0000000000000000000000000000000000000000..64b20eb26d1d8445571b632f562e563b44467582 Binary files /dev/null and b/apps/cpu/Multiphase/backup/FlowFocusingSq2.FCStd differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq2.FCStd1 b/apps/cpu/Multiphase/backup/FlowFocusingSq2.FCStd1 new file mode 100644 index 0000000000000000000000000000000000000000..c64353de25ddbfcff53ad1ea2865621ef459f537 Binary files /dev/null and b/apps/cpu/Multiphase/backup/FlowFocusingSq2.FCStd1 differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq2.ast b/apps/cpu/Multiphase/backup/FlowFocusingSq2.ast new file mode 100644 index 0000000000000000000000000000000000000000..1aa258836f82ff338e79aebc4d275a6a134f6eb9 --- /dev/null +++ b/apps/cpu/Multiphase/backup/FlowFocusingSq2.ast @@ -0,0 +1,310 @@ +solid Mesh + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 25.000000 1.000000 1.000000 + vertex 25.000000 1.000000 61.000000 + vertex 1.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 25.000000 1.000000 61.000000 + vertex 1.000000 1.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 1.000000 25.000000 1.000000 + vertex 25.000000 25.000000 1.000000 + vertex 1.000000 1.000000 1.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 25.000000 25.000000 1.000000 + vertex 25.000000 1.000000 1.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 19.000000 25.000000 + vertex 25.000000 1.000000 1.000000 + vertex 25.000000 25.000000 1.000000 + endloop + endfacet + facet normal 1.000000 -0.000000 0.000000 + outer loop + vertex 25.000000 7.000000 25.000000 + vertex 25.000000 1.000000 1.000000 + vertex 25.000000 19.000000 25.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 25.000000 19.000000 37.000000 + vertex 25.000000 19.000000 25.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 25.000000 19.000000 25.000000 + vertex 25.000000 25.000000 1.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 1.000000 61.000000 + vertex 25.000000 7.000000 37.000000 + vertex 25.000000 19.000000 37.000000 + endloop + endfacet + facet normal 1.000000 -0.000000 0.000000 + outer loop + vertex 25.000000 1.000000 61.000000 + vertex 25.000000 19.000000 37.000000 + vertex 25.000000 25.000000 61.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 1.000000 61.000000 + vertex 25.000000 1.000000 1.000000 + vertex 25.000000 7.000000 25.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 25.000000 1.000000 61.000000 + vertex 25.000000 7.000000 25.000000 + vertex 25.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 1.000000 25.000000 61.000000 + vertex 1.000000 1.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 1.000000 1.000000 61.000000 + vertex 25.000000 1.000000 61.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 1.000000 18.000000 18.000000 + vertex 1.000000 25.000000 1.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 1.000000 8.000000 18.000000 + vertex 1.000000 18.000000 18.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 18.000000 18.000000 + vertex 1.000000 18.000000 44.000000 + vertex 1.000000 25.000000 1.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 18.000000 44.000000 + vertex 1.000000 25.000000 61.000000 + vertex 1.000000 25.000000 1.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 8.000000 44.000000 + vertex 1.000000 1.000000 61.000000 + vertex 1.000000 18.000000 44.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 18.000000 44.000000 + vertex 1.000000 1.000000 61.000000 + vertex 1.000000 25.000000 61.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 1.000000 1.000000 + vertex 1.000000 1.000000 61.000000 + vertex 1.000000 8.000000 18.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 1.000000 8.000000 18.000000 + vertex 1.000000 1.000000 61.000000 + vertex 1.000000 8.000000 44.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 25.000000 25.000000 1.000000 + vertex 1.000000 25.000000 1.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 25.000000 25.000000 61.000000 + vertex 1.000000 25.000000 1.000000 + vertex 1.000000 25.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 25.000000 19.000000 25.000000 + vertex 181.000000 19.000000 25.000000 + vertex 25.000000 7.000000 25.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 25.000000 7.000000 25.000000 + vertex 181.000000 19.000000 25.000000 + vertex 181.000000 7.000000 25.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 181.000000 19.000000 25.000000 + vertex 25.000000 19.000000 37.000000 + vertex 181.000000 19.000000 37.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 181.000000 19.000000 25.000000 + vertex 25.000000 19.000000 25.000000 + vertex 25.000000 19.000000 37.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 181.000000 19.000000 37.000000 + vertex 25.000000 19.000000 37.000000 + vertex 25.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 181.000000 19.000000 37.000000 + vertex 25.000000 7.000000 37.000000 + vertex 181.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 25.000000 7.000000 37.000000 + vertex 181.000000 7.000000 25.000000 + vertex 181.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 25.000000 7.000000 25.000000 + vertex 181.000000 7.000000 25.000000 + vertex 25.000000 7.000000 37.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -24.000000 8.000000 18.000000 + vertex 1.000000 18.000000 18.000000 + vertex 1.000000 8.000000 18.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -24.000000 18.000000 18.000000 + vertex 1.000000 18.000000 18.000000 + vertex -24.000000 8.000000 18.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex -24.000000 18.000000 18.000000 + vertex -24.000000 18.000000 44.000000 + vertex 1.000000 18.000000 44.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 1.000000 18.000000 18.000000 + vertex -24.000000 18.000000 18.000000 + vertex 1.000000 18.000000 44.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 1.000000 18.000000 44.000000 + vertex -24.000000 8.000000 44.000000 + vertex 1.000000 8.000000 44.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 1.000000 18.000000 44.000000 + vertex -24.000000 18.000000 44.000000 + vertex -24.000000 8.000000 44.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -24.000000 8.000000 44.000000 + vertex -24.000000 8.000000 18.000000 + vertex 1.000000 8.000000 44.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -24.000000 8.000000 18.000000 + vertex 1.000000 8.000000 18.000000 + vertex 1.000000 8.000000 44.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 181.000000 19.000000 37.000000 + vertex 181.000000 7.000000 37.000000 + vertex 181.000000 7.000000 25.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 181.000000 19.000000 37.000000 + vertex 181.000000 7.000000 25.000000 + vertex 181.000000 19.000000 25.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -24.000000 8.000000 44.000000 + vertex -24.000000 18.000000 44.000000 + vertex -24.000000 8.000000 18.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -24.000000 8.000000 18.000000 + vertex -24.000000 18.000000 44.000000 + vertex -24.000000 18.000000 18.000000 + endloop + endfacet +endsolid Mesh diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq2.stl b/apps/cpu/Multiphase/backup/FlowFocusingSq2.stl new file mode 100644 index 0000000000000000000000000000000000000000..2c31bb9bd4cf4af9246fc008ba606a3a9a0ba223 Binary files /dev/null and b/apps/cpu/Multiphase/backup/FlowFocusingSq2.stl differ diff --git a/apps/cpu/Multiphase/backup/JetBreakup.ASCII.stl b/apps/cpu/Multiphase/backup/JetBreakup.ASCII.stl new file mode 100644 index 0000000000000000000000000000000000000000..eff2679cd636ddd653825627f56256c425c5629d --- /dev/null +++ b/apps/cpu/Multiphase/backup/JetBreakup.ASCII.stl @@ -0,0 +1,1318 @@ +solid Mesh + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 600.000000 0.000000 + vertex 0.000000 0.000000 120.000000 + vertex 0.000000 600.000000 120.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 0.000000 0.000000 + vertex 0.000000 0.000000 120.000000 + vertex 0.000000 600.000000 0.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 120.000000 0.000000 0.000000 + vertex 120.000000 0.000000 120.000000 + vertex 0.000000 0.000000 0.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 0.000000 0.000000 0.000000 + vertex 120.000000 0.000000 120.000000 + vertex 0.000000 0.000000 120.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 0.000000 600.000000 120.000000 + vertex 0.000000 0.000000 120.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 0.000000 0.000000 120.000000 + vertex 120.000000 0.000000 120.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 57.887005 600.000000 67.196198 + vertex 56.884388 600.000000 66.822243 + vertex 0.000000 600.000000 120.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 67.423660 600.000000 58.932640 + vertex 120.000000 600.000000 0.000000 + vertex 67.196198 600.000000 57.887005 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 55.088543 600.000000 54.331879 + vertex 0.000000 600.000000 0.000000 + vertex 54.331879 600.000000 55.088543 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 58.932640 600.000000 67.423660 + vertex 57.887005 600.000000 67.196198 + vertex 0.000000 600.000000 120.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 55.945194 600.000000 53.690598 + vertex 0.000000 600.000000 0.000000 + vertex 55.088543 600.000000 54.331879 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 53.690598 600.000000 55.945194 + vertex 54.331879 600.000000 55.088543 + vertex 0.000000 600.000000 0.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 60.000000 600.000000 67.500000 + vertex 58.932640 600.000000 67.423660 + vertex 0.000000 600.000000 120.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 56.884388 600.000000 53.177761 + vertex 0.000000 600.000000 0.000000 + vertex 55.945194 600.000000 53.690598 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 67.500000 600.000000 60.000000 + vertex 120.000000 600.000000 0.000000 + vertex 67.423660 600.000000 58.932640 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 53.177761 600.000000 56.884388 + vertex 53.690598 600.000000 55.945194 + vertex 0.000000 600.000000 0.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 57.887005 600.000000 52.803802 + vertex 0.000000 600.000000 0.000000 + vertex 56.884388 600.000000 53.177761 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 52.803802 600.000000 57.887005 + vertex 53.177761 600.000000 56.884388 + vertex 0.000000 600.000000 0.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 58.932640 600.000000 52.576340 + vertex 0.000000 600.000000 0.000000 + vertex 57.887005 600.000000 52.803802 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 52.576340 600.000000 58.932640 + vertex 52.803802 600.000000 57.887005 + vertex 0.000000 600.000000 0.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 60.000000 600.000000 52.500000 + vertex 0.000000 600.000000 0.000000 + vertex 58.932640 600.000000 52.576340 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 52.500000 600.000000 60.000000 + vertex 52.576340 600.000000 58.932640 + vertex 0.000000 600.000000 0.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 67.500000 600.000000 60.000000 + vertex 67.423660 600.000000 61.067360 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 67.423660 600.000000 61.067360 + vertex 67.196198 600.000000 62.112995 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 67.196198 600.000000 62.112995 + vertex 66.822243 600.000000 63.115612 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 66.822243 600.000000 63.115612 + vertex 66.309402 600.000000 64.054810 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 66.309402 600.000000 64.054810 + vertex 65.668121 600.000000 64.911453 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 65.668121 600.000000 64.911453 + vertex 64.911453 600.000000 65.668121 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 64.911453 600.000000 65.668121 + vertex 64.054810 600.000000 66.309402 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 64.054810 600.000000 66.309402 + vertex 63.115612 600.000000 66.822243 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 120.000000 600.000000 0.000000 + vertex 67.500000 600.000000 60.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 63.115612 600.000000 66.822243 + vertex 62.112995 600.000000 67.196198 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 62.112995 600.000000 67.196198 + vertex 61.067360 600.000000 67.423660 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 61.067360 600.000000 67.423660 + vertex 60.000000 600.000000 67.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 120.000000 + vertex 60.000000 600.000000 67.500000 + vertex 0.000000 600.000000 120.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 0.000000 600.000000 120.000000 + vertex 54.331879 600.000000 64.911453 + vertex 53.690598 600.000000 64.054810 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 0.000000 600.000000 120.000000 + vertex 53.690598 600.000000 64.054810 + vertex 53.177761 600.000000 63.115612 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 0.000000 600.000000 120.000000 + vertex 53.177761 600.000000 63.115612 + vertex 52.803802 600.000000 62.112995 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 0.000000 600.000000 120.000000 + vertex 52.803802 600.000000 62.112995 + vertex 52.576340 600.000000 61.067360 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 0.000000 600.000000 120.000000 + vertex 52.576340 600.000000 61.067360 + vertex 52.500000 600.000000 60.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 0.000000 600.000000 120.000000 + vertex 52.500000 600.000000 60.000000 + vertex 0.000000 600.000000 0.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 0.000000 + vertex 60.000000 600.000000 52.500000 + vertex 61.067360 600.000000 52.576340 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 0.000000 + vertex 61.067360 600.000000 52.576340 + vertex 62.112995 600.000000 52.803802 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 0.000000 + vertex 62.112995 600.000000 52.803802 + vertex 63.115612 600.000000 53.177761 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 0.000000 + vertex 63.115612 600.000000 53.177761 + vertex 64.054810 600.000000 53.690598 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 0.000000 + vertex 64.054810 600.000000 53.690598 + vertex 64.911453 600.000000 54.331879 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 600.000000 0.000000 + vertex 0.000000 600.000000 0.000000 + vertex 60.000000 600.000000 52.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 65.668121 600.000000 55.088543 + vertex 120.000000 600.000000 0.000000 + vertex 64.911453 600.000000 54.331879 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 55.088543 600.000000 65.668121 + vertex 54.331879 600.000000 64.911453 + vertex 0.000000 600.000000 120.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 66.309402 600.000000 55.945194 + vertex 120.000000 600.000000 0.000000 + vertex 65.668121 600.000000 55.088543 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 55.945194 600.000000 66.309402 + vertex 55.088543 600.000000 65.668121 + vertex 0.000000 600.000000 120.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 66.822243 600.000000 56.884388 + vertex 120.000000 600.000000 0.000000 + vertex 66.309402 600.000000 55.945194 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 56.884388 600.000000 66.822243 + vertex 55.945194 600.000000 66.309402 + vertex 0.000000 600.000000 120.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 67.196198 600.000000 57.887005 + vertex 120.000000 600.000000 0.000000 + vertex 66.822243 600.000000 56.884388 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 0.000000 600.000000 0.000000 + vertex 120.000000 600.000000 0.000000 + vertex 0.000000 0.000000 0.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 0.000000 0.000000 0.000000 + vertex 120.000000 600.000000 0.000000 + vertex 120.000000 0.000000 0.000000 + endloop + endfacet + facet normal 1.000000 -0.000000 0.000000 + outer loop + vertex 120.000000 0.000000 120.000000 + vertex 120.000000 600.000000 0.000000 + vertex 120.000000 600.000000 120.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 120.000000 0.000000 120.000000 + vertex 120.000000 0.000000 0.000000 + vertex 120.000000 600.000000 0.000000 + endloop + endfacet + facet normal 0.349466 0.000000 -0.936949 + outer loop + vertex 62.112995 630.000000 52.803802 + vertex 63.115612 630.000000 53.177761 + vertex 62.112995 600.000000 52.803802 + endloop + endfacet + facet normal -0.707109 0.000000 0.707105 + outer loop + vertex 55.088543 600.000000 65.668121 + vertex 54.331879 630.000000 64.911453 + vertex 54.331879 600.000000 64.911453 + endloop + endfacet + facet normal 0.349466 0.000000 -0.936949 + outer loop + vertex 62.112995 600.000000 52.803802 + vertex 63.115612 630.000000 53.177761 + vertex 63.115612 600.000000 53.177761 + endloop + endfacet + facet normal -0.707109 0.000000 0.707105 + outer loop + vertex 55.088543 630.000000 65.668121 + vertex 54.331879 630.000000 64.911453 + vertex 55.088543 600.000000 65.668121 + endloop + endfacet + facet normal 0.479246 0.000000 -0.877681 + outer loop + vertex 63.115612 630.000000 53.177761 + vertex 64.054810 630.000000 53.690598 + vertex 63.115612 600.000000 53.177761 + endloop + endfacet + facet normal -0.800539 0.000000 0.599281 + outer loop + vertex 54.331879 600.000000 64.911453 + vertex 53.690598 630.000000 64.054810 + vertex 53.690598 600.000000 64.054810 + endloop + endfacet + facet normal 0.479246 0.000000 -0.877681 + outer loop + vertex 63.115612 600.000000 53.177761 + vertex 64.054810 630.000000 53.690598 + vertex 64.054810 600.000000 53.690598 + endloop + endfacet + facet normal -0.800539 0.000000 0.599281 + outer loop + vertex 54.331879 630.000000 64.911453 + vertex 53.690598 630.000000 64.054810 + vertex 54.331879 600.000000 64.911453 + endloop + endfacet + facet normal 0.599281 0.000000 -0.800539 + outer loop + vertex 64.054810 630.000000 53.690598 + vertex 64.911453 630.000000 54.331879 + vertex 64.054810 600.000000 53.690598 + endloop + endfacet + facet normal -0.877681 0.000000 0.479246 + outer loop + vertex 53.690598 600.000000 64.054810 + vertex 53.177761 630.000000 63.115612 + vertex 53.177761 600.000000 63.115612 + endloop + endfacet + facet normal 0.599281 0.000000 -0.800539 + outer loop + vertex 64.054810 600.000000 53.690598 + vertex 64.911453 630.000000 54.331879 + vertex 64.911453 600.000000 54.331879 + endloop + endfacet + facet normal 0.997452 0.000000 0.071340 + outer loop + vertex 67.500000 600.000000 60.000000 + vertex 67.423660 630.000000 61.067360 + vertex 67.423660 600.000000 61.067360 + endloop + endfacet + facet normal -0.877681 0.000000 0.479246 + outer loop + vertex 53.690598 630.000000 64.054810 + vertex 53.177761 630.000000 63.115612 + vertex 53.690598 600.000000 64.054810 + endloop + endfacet + facet normal 0.997452 0.000000 0.071340 + outer loop + vertex 67.500000 630.000000 60.000000 + vertex 67.423660 630.000000 61.067360 + vertex 67.500000 600.000000 60.000000 + endloop + endfacet + facet normal 0.707105 0.000000 -0.707109 + outer loop + vertex 64.911453 630.000000 54.331879 + vertex 65.668121 630.000000 55.088543 + vertex 64.911453 600.000000 54.331879 + endloop + endfacet + facet normal -0.936949 0.000000 0.349466 + outer loop + vertex 53.177761 600.000000 63.115612 + vertex 52.803802 630.000000 62.112995 + vertex 52.803802 600.000000 62.112995 + endloop + endfacet + facet normal 0.707105 0.000000 -0.707109 + outer loop + vertex 64.911453 600.000000 54.331879 + vertex 65.668121 630.000000 55.088543 + vertex 65.668121 600.000000 55.088543 + endloop + endfacet + facet normal 0.977147 0.000000 0.212564 + outer loop + vertex 67.423660 600.000000 61.067360 + vertex 67.196198 630.000000 62.112995 + vertex 67.196198 600.000000 62.112995 + endloop + endfacet + facet normal -0.936949 0.000000 0.349466 + outer loop + vertex 53.177761 630.000000 63.115612 + vertex 52.803802 630.000000 62.112995 + vertex 53.177761 600.000000 63.115612 + endloop + endfacet + facet normal 0.977147 0.000000 0.212564 + outer loop + vertex 67.423660 630.000000 61.067360 + vertex 67.196198 630.000000 62.112995 + vertex 67.423660 600.000000 61.067360 + endloop + endfacet + facet normal 0.800541 0.000000 -0.599278 + outer loop + vertex 65.668121 630.000000 55.088543 + vertex 66.309402 630.000000 55.945194 + vertex 65.668121 600.000000 55.088543 + endloop + endfacet + facet normal -0.977147 0.000000 0.212564 + outer loop + vertex 52.803802 600.000000 62.112995 + vertex 52.576340 630.000000 61.067360 + vertex 52.576340 600.000000 61.067360 + endloop + endfacet + facet normal 0.800541 0.000000 -0.599278 + outer loop + vertex 65.668121 600.000000 55.088543 + vertex 66.309402 630.000000 55.945194 + vertex 66.309402 600.000000 55.945194 + endloop + endfacet + facet normal -0.977147 0.000000 0.212564 + outer loop + vertex 52.803802 630.000000 62.112995 + vertex 52.576340 630.000000 61.067360 + vertex 52.803802 600.000000 62.112995 + endloop + endfacet + facet normal 0.936950 0.000000 0.349463 + outer loop + vertex 67.196198 630.000000 62.112995 + vertex 66.822243 630.000000 63.115612 + vertex 67.196198 600.000000 62.112995 + endloop + endfacet + facet normal 0.936950 0.000000 0.349463 + outer loop + vertex 67.196198 600.000000 62.112995 + vertex 66.822243 630.000000 63.115612 + vertex 66.822243 600.000000 63.115612 + endloop + endfacet + facet normal 0.877678 0.000000 -0.479250 + outer loop + vertex 66.309402 630.000000 55.945194 + vertex 66.822243 630.000000 56.884388 + vertex 66.309402 600.000000 55.945194 + endloop + endfacet + facet normal -0.997452 0.000000 0.071340 + outer loop + vertex 52.576340 600.000000 61.067360 + vertex 52.500000 630.000000 60.000000 + vertex 52.500000 600.000000 60.000000 + endloop + endfacet + facet normal 0.877678 0.000000 -0.479250 + outer loop + vertex 66.309402 600.000000 55.945194 + vertex 66.822243 630.000000 56.884388 + vertex 66.822243 600.000000 56.884388 + endloop + endfacet + facet normal -0.997452 0.000000 0.071340 + outer loop + vertex 52.576340 630.000000 61.067360 + vertex 52.500000 630.000000 60.000000 + vertex 52.576340 600.000000 61.067360 + endloop + endfacet + facet normal 0.877679 0.000000 0.479249 + outer loop + vertex 66.822243 630.000000 63.115612 + vertex 66.309402 630.000000 64.054810 + vertex 66.822243 600.000000 63.115612 + endloop + endfacet + facet normal 0.877679 0.000000 0.479249 + outer loop + vertex 66.822243 600.000000 63.115612 + vertex 66.309402 630.000000 64.054810 + vertex 66.309402 600.000000 64.054810 + endloop + endfacet + facet normal 0.936950 0.000000 -0.349463 + outer loop + vertex 66.822243 630.000000 56.884388 + vertex 67.196198 630.000000 57.887005 + vertex 66.822243 600.000000 56.884388 + endloop + endfacet + facet normal -0.997452 0.000000 -0.071340 + outer loop + vertex 52.500000 600.000000 60.000000 + vertex 52.576340 630.000000 58.932640 + vertex 52.576340 600.000000 58.932640 + endloop + endfacet + facet normal 0.936950 0.000000 -0.349463 + outer loop + vertex 66.822243 600.000000 56.884388 + vertex 67.196198 630.000000 57.887005 + vertex 67.196198 600.000000 57.887005 + endloop + endfacet + facet normal -0.997452 -0.000000 -0.071340 + outer loop + vertex 52.500000 630.000000 60.000000 + vertex 52.576340 630.000000 58.932640 + vertex 52.500000 600.000000 60.000000 + endloop + endfacet + facet normal 0.800539 0.000000 0.599281 + outer loop + vertex 66.309402 630.000000 64.054810 + vertex 65.668121 630.000000 64.911453 + vertex 66.309402 600.000000 64.054810 + endloop + endfacet + facet normal 0.977147 0.000000 -0.212564 + outer loop + vertex 67.196198 630.000000 57.887005 + vertex 67.423660 630.000000 58.932640 + vertex 67.196198 600.000000 57.887005 + endloop + endfacet + facet normal 0.800539 0.000000 0.599281 + outer loop + vertex 66.309402 600.000000 64.054810 + vertex 65.668121 630.000000 64.911453 + vertex 65.668121 600.000000 64.911453 + endloop + endfacet + facet normal 0.977147 0.000000 -0.212564 + outer loop + vertex 67.196198 600.000000 57.887005 + vertex 67.423660 630.000000 58.932640 + vertex 67.423660 600.000000 58.932640 + endloop + endfacet + facet normal -0.977147 0.000000 -0.212564 + outer loop + vertex 52.576340 600.000000 58.932640 + vertex 52.803802 630.000000 57.887005 + vertex 52.803802 600.000000 57.887005 + endloop + endfacet + facet normal -0.977147 -0.000000 -0.212564 + outer loop + vertex 52.576340 630.000000 58.932640 + vertex 52.803802 630.000000 57.887005 + vertex 52.576340 600.000000 58.932640 + endloop + endfacet + facet normal 0.997452 0.000000 -0.071340 + outer loop + vertex 67.423660 630.000000 58.932640 + vertex 67.500000 630.000000 60.000000 + vertex 67.423660 600.000000 58.932640 + endloop + endfacet + facet normal 0.997452 0.000000 -0.071340 + outer loop + vertex 67.423660 600.000000 58.932640 + vertex 67.500000 630.000000 60.000000 + vertex 67.500000 600.000000 60.000000 + endloop + endfacet + facet normal 0.707107 0.000000 0.707107 + outer loop + vertex 65.668121 630.000000 64.911453 + vertex 64.911453 630.000000 65.668121 + vertex 65.668121 600.000000 64.911453 + endloop + endfacet + facet normal 0.707107 0.000000 0.707107 + outer loop + vertex 65.668121 600.000000 64.911453 + vertex 64.911453 630.000000 65.668121 + vertex 64.911453 600.000000 65.668121 + endloop + endfacet + facet normal -0.936949 0.000000 -0.349466 + outer loop + vertex 52.803802 600.000000 57.887005 + vertex 53.177761 630.000000 56.884388 + vertex 53.177761 600.000000 56.884388 + endloop + endfacet + facet normal -0.936949 -0.000000 -0.349466 + outer loop + vertex 52.803802 630.000000 57.887005 + vertex 53.177761 630.000000 56.884388 + vertex 52.803802 600.000000 57.887005 + endloop + endfacet + facet normal 0.599281 0.000000 0.800539 + outer loop + vertex 64.911453 630.000000 65.668121 + vertex 64.054810 630.000000 66.309402 + vertex 64.911453 600.000000 65.668121 + endloop + endfacet + facet normal 0.599281 0.000000 0.800539 + outer loop + vertex 64.911453 600.000000 65.668121 + vertex 64.054810 630.000000 66.309402 + vertex 64.054810 600.000000 66.309402 + endloop + endfacet + facet normal -0.877680 0.000000 -0.479247 + outer loop + vertex 53.177761 600.000000 56.884388 + vertex 53.690598 630.000000 55.945194 + vertex 53.690598 600.000000 55.945194 + endloop + endfacet + facet normal -0.877680 -0.000000 -0.479247 + outer loop + vertex 53.177761 630.000000 56.884388 + vertex 53.690598 630.000000 55.945194 + vertex 53.177761 600.000000 56.884388 + endloop + endfacet + facet normal 0.479249 0.000000 0.877679 + outer loop + vertex 64.054810 630.000000 66.309402 + vertex 63.115612 630.000000 66.822243 + vertex 64.054810 600.000000 66.309402 + endloop + endfacet + facet normal -0.800541 0.000000 -0.599278 + outer loop + vertex 53.690598 600.000000 55.945194 + vertex 54.331879 630.000000 55.088543 + vertex 54.331879 600.000000 55.088543 + endloop + endfacet + facet normal 0.479249 0.000000 0.877679 + outer loop + vertex 64.054810 600.000000 66.309402 + vertex 63.115612 630.000000 66.822243 + vertex 63.115612 600.000000 66.822243 + endloop + endfacet + facet normal -0.800541 -0.000000 -0.599278 + outer loop + vertex 53.690598 630.000000 55.945194 + vertex 54.331879 630.000000 55.088543 + vertex 53.690598 600.000000 55.945194 + endloop + endfacet + facet normal -0.707107 -0.000000 -0.707107 + outer loop + vertex 54.331879 630.000000 55.088543 + vertex 55.088543 630.000000 54.331879 + vertex 54.331879 600.000000 55.088543 + endloop + endfacet + facet normal 0.349463 0.000000 0.936950 + outer loop + vertex 63.115612 630.000000 66.822243 + vertex 62.112995 630.000000 67.196198 + vertex 63.115612 600.000000 66.822243 + endloop + endfacet + facet normal -0.707107 0.000000 -0.707107 + outer loop + vertex 54.331879 600.000000 55.088543 + vertex 55.088543 630.000000 54.331879 + vertex 55.088543 600.000000 54.331879 + endloop + endfacet + facet normal 0.349463 0.000000 0.936950 + outer loop + vertex 63.115612 600.000000 66.822243 + vertex 62.112995 630.000000 67.196198 + vertex 62.112995 600.000000 67.196198 + endloop + endfacet + facet normal -0.599278 -0.000000 -0.800541 + outer loop + vertex 55.088543 630.000000 54.331879 + vertex 55.945194 630.000000 53.690598 + vertex 55.088543 600.000000 54.331879 + endloop + endfacet + facet normal 0.212564 0.000000 0.977147 + outer loop + vertex 62.112995 630.000000 67.196198 + vertex 61.067360 630.000000 67.423660 + vertex 62.112995 600.000000 67.196198 + endloop + endfacet + facet normal -0.599278 0.000000 -0.800541 + outer loop + vertex 55.088543 600.000000 54.331879 + vertex 55.945194 630.000000 53.690598 + vertex 55.945194 600.000000 53.690598 + endloop + endfacet + facet normal 0.212564 0.000000 0.977147 + outer loop + vertex 62.112995 600.000000 67.196198 + vertex 61.067360 630.000000 67.423660 + vertex 61.067360 600.000000 67.423660 + endloop + endfacet + facet normal -0.479247 -0.000000 -0.877680 + outer loop + vertex 55.945194 630.000000 53.690598 + vertex 56.884388 630.000000 53.177761 + vertex 55.945194 600.000000 53.690598 + endloop + endfacet + facet normal 0.071340 0.000000 0.997452 + outer loop + vertex 61.067360 630.000000 67.423660 + vertex 60.000000 630.000000 67.500000 + vertex 61.067360 600.000000 67.423660 + endloop + endfacet + facet normal -0.479247 0.000000 -0.877680 + outer loop + vertex 55.945194 600.000000 53.690598 + vertex 56.884388 630.000000 53.177761 + vertex 56.884388 600.000000 53.177761 + endloop + endfacet + facet normal 0.071340 0.000000 0.997452 + outer loop + vertex 61.067360 600.000000 67.423660 + vertex 60.000000 630.000000 67.500000 + vertex 60.000000 600.000000 67.500000 + endloop + endfacet + facet normal -0.349466 -0.000000 -0.936949 + outer loop + vertex 56.884388 630.000000 53.177761 + vertex 57.887005 630.000000 52.803802 + vertex 56.884388 600.000000 53.177761 + endloop + endfacet + facet normal -0.071340 0.000000 0.997452 + outer loop + vertex 60.000000 630.000000 67.500000 + vertex 58.932640 630.000000 67.423660 + vertex 60.000000 600.000000 67.500000 + endloop + endfacet + facet normal -0.349466 0.000000 -0.936949 + outer loop + vertex 56.884388 600.000000 53.177761 + vertex 57.887005 630.000000 52.803802 + vertex 57.887005 600.000000 52.803802 + endloop + endfacet + facet normal -0.071340 0.000000 0.997452 + outer loop + vertex 60.000000 600.000000 67.500000 + vertex 58.932640 630.000000 67.423660 + vertex 58.932640 600.000000 67.423660 + endloop + endfacet + facet normal -0.212564 -0.000000 -0.977147 + outer loop + vertex 57.887005 630.000000 52.803802 + vertex 58.932640 630.000000 52.576340 + vertex 57.887005 600.000000 52.803802 + endloop + endfacet + facet normal -0.212564 0.000000 0.977147 + outer loop + vertex 58.932640 630.000000 67.423660 + vertex 57.887005 630.000000 67.196198 + vertex 58.932640 600.000000 67.423660 + endloop + endfacet + facet normal -0.212564 0.000000 -0.977147 + outer loop + vertex 57.887005 600.000000 52.803802 + vertex 58.932640 630.000000 52.576340 + vertex 58.932640 600.000000 52.576340 + endloop + endfacet + facet normal -0.212564 0.000000 0.977147 + outer loop + vertex 58.932640 600.000000 67.423660 + vertex 57.887005 630.000000 67.196198 + vertex 57.887005 600.000000 67.196198 + endloop + endfacet + facet normal -0.071340 -0.000000 -0.997452 + outer loop + vertex 58.932640 630.000000 52.576340 + vertex 60.000000 630.000000 52.500000 + vertex 58.932640 600.000000 52.576340 + endloop + endfacet + facet normal -0.349463 0.000000 0.936950 + outer loop + vertex 57.887005 630.000000 67.196198 + vertex 56.884388 630.000000 66.822243 + vertex 57.887005 600.000000 67.196198 + endloop + endfacet + facet normal -0.071340 0.000000 -0.997452 + outer loop + vertex 58.932640 600.000000 52.576340 + vertex 60.000000 630.000000 52.500000 + vertex 60.000000 600.000000 52.500000 + endloop + endfacet + facet normal -0.349463 0.000000 0.936950 + outer loop + vertex 57.887005 600.000000 67.196198 + vertex 56.884388 630.000000 66.822243 + vertex 56.884388 600.000000 66.822243 + endloop + endfacet + facet normal 0.071340 0.000000 -0.997452 + outer loop + vertex 60.000000 630.000000 52.500000 + vertex 61.067360 630.000000 52.576340 + vertex 60.000000 600.000000 52.500000 + endloop + endfacet + facet normal -0.479250 0.000000 0.877678 + outer loop + vertex 56.884388 630.000000 66.822243 + vertex 55.945194 630.000000 66.309402 + vertex 56.884388 600.000000 66.822243 + endloop + endfacet + facet normal 0.071340 0.000000 -0.997452 + outer loop + vertex 60.000000 600.000000 52.500000 + vertex 61.067360 630.000000 52.576340 + vertex 61.067360 600.000000 52.576340 + endloop + endfacet + facet normal -0.479250 0.000000 0.877678 + outer loop + vertex 56.884388 600.000000 66.822243 + vertex 55.945194 630.000000 66.309402 + vertex 55.945194 600.000000 66.309402 + endloop + endfacet + facet normal 0.212564 0.000000 -0.977147 + outer loop + vertex 61.067360 630.000000 52.576340 + vertex 62.112995 630.000000 52.803802 + vertex 61.067360 600.000000 52.576340 + endloop + endfacet + facet normal -0.599278 0.000000 0.800541 + outer loop + vertex 55.945194 630.000000 66.309402 + vertex 55.088543 630.000000 65.668121 + vertex 55.945194 600.000000 66.309402 + endloop + endfacet + facet normal 0.212564 0.000000 -0.977147 + outer loop + vertex 61.067360 600.000000 52.576340 + vertex 62.112995 630.000000 52.803802 + vertex 62.112995 600.000000 52.803802 + endloop + endfacet + facet normal -0.599278 0.000000 0.800541 + outer loop + vertex 55.945194 600.000000 66.309402 + vertex 55.088543 630.000000 65.668121 + vertex 55.088543 600.000000 65.668121 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 67.423660 630.000000 61.067360 + vertex 67.423660 630.000000 58.932640 + vertex 65.668121 630.000000 64.911453 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 67.500000 630.000000 60.000000 + vertex 67.423660 630.000000 58.932640 + vertex 67.423660 630.000000 61.067360 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 65.668121 630.000000 64.911453 + vertex 67.423660 630.000000 58.932640 + vertex 64.911453 630.000000 65.668121 + endloop + endfacet + facet normal -0.000000 1.000000 0.000000 + outer loop + vertex 55.945194 630.000000 66.309402 + vertex 56.884388 630.000000 66.822243 + vertex 55.088543 630.000000 65.668121 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 67.423660 630.000000 58.932640 + vertex 66.822243 630.000000 56.884388 + vertex 64.911453 630.000000 65.668121 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 54.331879 630.000000 64.911453 + vertex 52.803802 630.000000 62.112995 + vertex 53.690598 630.000000 64.054810 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 53.690598 630.000000 64.054810 + vertex 52.803802 630.000000 62.112995 + vertex 53.177761 630.000000 63.115612 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 67.196198 630.000000 57.887005 + vertex 66.822243 630.000000 56.884388 + vertex 67.423660 630.000000 58.932640 + endloop + endfacet + facet normal -0.000000 1.000000 0.000000 + outer loop + vertex 53.690598 630.000000 55.945194 + vertex 66.822243 630.000000 56.884388 + vertex 55.088543 630.000000 54.331879 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 64.911453 630.000000 65.668121 + vertex 66.822243 630.000000 56.884388 + vertex 53.690598 630.000000 55.945194 + endloop + endfacet + facet normal -0.000000 1.000000 0.000000 + outer loop + vertex 55.088543 630.000000 54.331879 + vertex 66.822243 630.000000 56.884388 + vertex 56.884388 630.000000 53.177761 + endloop + endfacet + facet normal -0.000000 1.000000 0.000000 + outer loop + vertex 57.887005 630.000000 67.196198 + vertex 58.932640 630.000000 67.423660 + vertex 56.884388 630.000000 66.822243 + endloop + endfacet + facet normal -0.000000 1.000000 0.000000 + outer loop + vertex 56.884388 630.000000 53.177761 + vertex 64.911453 630.000000 54.331879 + vertex 58.932640 630.000000 52.576340 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 66.822243 630.000000 56.884388 + vertex 64.911453 630.000000 54.331879 + vertex 56.884388 630.000000 53.177761 + endloop + endfacet + facet normal -0.000000 1.000000 0.000000 + outer loop + vertex 58.932640 630.000000 52.576340 + vertex 64.911453 630.000000 54.331879 + vertex 60.000000 630.000000 52.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 60.000000 630.000000 52.500000 + vertex 64.911453 630.000000 54.331879 + vertex 61.067360 630.000000 52.576340 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 61.067360 630.000000 52.576340 + vertex 64.911453 630.000000 54.331879 + vertex 62.112995 630.000000 52.803802 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 62.112995 630.000000 52.803802 + vertex 64.911453 630.000000 54.331879 + vertex 63.115612 630.000000 53.177761 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 63.115612 630.000000 53.177761 + vertex 64.911453 630.000000 54.331879 + vertex 64.054810 630.000000 53.690598 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 66.822243 630.000000 56.884388 + vertex 65.668121 630.000000 55.088543 + vertex 64.911453 630.000000 54.331879 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 66.309402 630.000000 55.945194 + vertex 65.668121 630.000000 55.088543 + vertex 66.822243 630.000000 56.884388 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 55.088543 630.000000 65.668121 + vertex 52.576340 630.000000 58.932640 + vertex 54.331879 630.000000 64.911453 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 52.803802 630.000000 62.112995 + vertex 52.576340 630.000000 58.932640 + vertex 52.576340 630.000000 61.067360 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 52.576340 630.000000 61.067360 + vertex 52.576340 630.000000 58.932640 + vertex 52.500000 630.000000 60.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 56.884388 630.000000 66.822243 + vertex 52.576340 630.000000 58.932640 + vertex 55.088543 630.000000 65.668121 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 54.331879 630.000000 64.911453 + vertex 52.576340 630.000000 58.932640 + vertex 52.803802 630.000000 62.112995 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 61.067360 630.000000 67.423660 + vertex 62.112995 630.000000 67.196198 + vertex 60.000000 630.000000 67.500000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 60.000000 630.000000 67.500000 + vertex 62.112995 630.000000 67.196198 + vertex 58.932640 630.000000 67.423660 + endloop + endfacet + facet normal -0.000000 1.000000 0.000000 + outer loop + vertex 52.576340 630.000000 58.932640 + vertex 62.112995 630.000000 67.196198 + vertex 52.803802 630.000000 57.887005 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 58.932640 630.000000 67.423660 + vertex 62.112995 630.000000 67.196198 + vertex 56.884388 630.000000 66.822243 + endloop + endfacet + facet normal -0.000000 1.000000 0.000000 + outer loop + vertex 56.884388 630.000000 66.822243 + vertex 62.112995 630.000000 67.196198 + vertex 52.576340 630.000000 58.932640 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 62.112995 630.000000 67.196198 + vertex 53.177761 630.000000 56.884388 + vertex 52.803802 630.000000 57.887005 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 63.115612 630.000000 66.822243 + vertex 64.054810 630.000000 66.309402 + vertex 62.112995 630.000000 67.196198 + endloop + endfacet + facet normal -0.000000 1.000000 0.000000 + outer loop + vertex 53.177761 630.000000 56.884388 + vertex 64.911453 630.000000 65.668121 + vertex 53.690598 630.000000 55.945194 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 62.112995 630.000000 67.196198 + vertex 64.911453 630.000000 65.668121 + vertex 53.177761 630.000000 56.884388 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 64.054810 630.000000 66.309402 + vertex 64.911453 630.000000 65.668121 + vertex 62.112995 630.000000 67.196198 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 53.690598 630.000000 55.945194 + vertex 55.088543 630.000000 54.331879 + vertex 54.331879 630.000000 55.088543 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 55.088543 630.000000 54.331879 + vertex 56.884388 630.000000 53.177761 + vertex 55.945194 630.000000 53.690598 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 56.884388 630.000000 53.177761 + vertex 58.932640 630.000000 52.576340 + vertex 57.887005 630.000000 52.803802 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 67.196198 630.000000 62.112995 + vertex 67.423660 630.000000 61.067360 + vertex 66.822243 630.000000 63.115612 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 66.822243 630.000000 63.115612 + vertex 67.423660 630.000000 61.067360 + vertex 66.309402 630.000000 64.054810 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 66.309402 630.000000 64.054810 + vertex 67.423660 630.000000 61.067360 + vertex 65.668121 630.000000 64.911453 + endloop + endfacet +endsolid Mesh diff --git a/apps/cpu/Multiphase/backup/JetBreakup.FCStd b/apps/cpu/Multiphase/backup/JetBreakup.FCStd new file mode 100644 index 0000000000000000000000000000000000000000..00f4eb43bb96542b5dc11c9ec84bd8b5a348a6fc Binary files /dev/null and b/apps/cpu/Multiphase/backup/JetBreakup.FCStd differ diff --git a/apps/cpu/Multiphase/backup/JetBreakup.stl b/apps/cpu/Multiphase/backup/JetBreakup.stl new file mode 100644 index 0000000000000000000000000000000000000000..a82398ec6fc375e407ebe8ac42b811318e2fa788 Binary files /dev/null and b/apps/cpu/Multiphase/backup/JetBreakup.stl differ diff --git a/apps/cpu/Multiphase/backup/JetBreakup2.ASCII.stl b/apps/cpu/Multiphase/backup/JetBreakup2.ASCII.stl new file mode 100644 index 0000000000000000000000000000000000000000..d42dbd278b8e81c2c30a813f685d394ad351423a --- /dev/null +++ b/apps/cpu/Multiphase/backup/JetBreakup2.ASCII.stl @@ -0,0 +1,1584 @@ +solid Mesh + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -61.000000 -610.000000 -61.000000 + vertex -60.000000 -610.000000 60.000000 + vertex -61.000000 -610.000000 61.000000 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex -60.000000 -610.000000 -60.000000 + vertex -60.000000 -610.000000 60.000000 + vertex -61.000000 -610.000000 -61.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -61.000000 -610.000000 -61.000000 + vertex 61.000000 -610.000000 -61.000000 + vertex -60.000000 -610.000000 -60.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 61.000000 -610.000000 -61.000000 + vertex 60.000000 -610.000000 -60.000000 + vertex -60.000000 -610.000000 -60.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 60.000000 -610.000000 60.000000 + vertex 61.000000 -610.000000 61.000000 + vertex -60.000000 -610.000000 60.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -60.000000 -610.000000 60.000000 + vertex 61.000000 -610.000000 61.000000 + vertex -61.000000 -610.000000 61.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 61.000000 -610.000000 -61.000000 + vertex 61.000000 -610.000000 61.000000 + vertex 60.000000 -610.000000 -60.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 60.000000 -610.000000 -60.000000 + vertex 61.000000 -610.000000 61.000000 + vertex 60.000000 -610.000000 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 61.000000 -3.000000 61.000000 + vertex -61.000000 -610.000000 61.000000 + vertex 61.000000 -610.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 61.000000 -3.000000 61.000000 + vertex -61.000000 -3.000000 61.000000 + vertex -61.000000 -610.000000 61.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 61.000000 -3.000000 -61.000000 + vertex 61.000000 -610.000000 61.000000 + vertex 61.000000 -610.000000 -61.000000 + endloop + endfacet + facet normal 1.000000 0.000000 -0.000000 + outer loop + vertex 61.000000 -3.000000 -61.000000 + vertex 61.000000 -3.000000 61.000000 + vertex 61.000000 -610.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -61.000000 -3.000000 -61.000000 + vertex 61.000000 -610.000000 -61.000000 + vertex -61.000000 -610.000000 -61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -61.000000 -3.000000 -61.000000 + vertex 61.000000 -3.000000 -61.000000 + vertex 61.000000 -610.000000 -61.000000 + endloop + endfacet + facet normal -1.000000 -0.000000 0.000000 + outer loop + vertex -61.000000 -3.000000 61.000000 + vertex -61.000000 -610.000000 -61.000000 + vertex -61.000000 -610.000000 61.000000 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -61.000000 -3.000000 61.000000 + vertex -61.000000 -3.000000 -61.000000 + vertex -61.000000 -610.000000 -61.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex -60.000000 -610.000000 -60.000000 + vertex -60.000000 -3.000000 -60.000000 + vertex -60.000000 -610.000000 60.000000 + endloop + endfacet + facet normal 1.000000 0.000000 -0.000000 + outer loop + vertex -60.000000 -3.000000 -60.000000 + vertex -60.000000 -3.000000 60.000000 + vertex -60.000000 -610.000000 60.000000 + endloop + endfacet + facet normal 0.000000 -0.000000 1.000000 + outer loop + vertex 60.000000 -610.000000 -60.000000 + vertex 60.000000 -3.000000 -60.000000 + vertex -60.000000 -610.000000 -60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 60.000000 -3.000000 -60.000000 + vertex -60.000000 -3.000000 -60.000000 + vertex -60.000000 -610.000000 -60.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 60.000000 -610.000000 60.000000 + vertex 60.000000 -3.000000 -60.000000 + vertex 60.000000 -610.000000 -60.000000 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex 60.000000 -3.000000 60.000000 + vertex 60.000000 -3.000000 -60.000000 + vertex 60.000000 -610.000000 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -60.000000 -610.000000 60.000000 + vertex -60.000000 -3.000000 60.000000 + vertex 60.000000 -610.000000 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -60.000000 -3.000000 60.000000 + vertex 60.000000 -3.000000 60.000000 + vertex 60.000000 -610.000000 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 61.000000 -3.000000 61.000000 + vertex -61.000000 -1.000000 61.000000 + vertex -61.000000 -3.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 61.000000 -1.000000 61.000000 + vertex -61.000000 -1.000000 61.000000 + vertex 61.000000 -3.000000 61.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 61.000000 -1.000000 -61.000000 + vertex 61.000000 -3.000000 61.000000 + vertex 61.000000 -3.000000 -61.000000 + endloop + endfacet + facet normal 1.000000 0.000000 -0.000000 + outer loop + vertex 61.000000 -1.000000 -61.000000 + vertex 61.000000 -1.000000 61.000000 + vertex 61.000000 -3.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -61.000000 -1.000000 -61.000000 + vertex 61.000000 -3.000000 -61.000000 + vertex -61.000000 -3.000000 -61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -61.000000 -1.000000 -61.000000 + vertex 61.000000 -1.000000 -61.000000 + vertex 61.000000 -3.000000 -61.000000 + endloop + endfacet + facet normal -1.000000 -0.000000 0.000000 + outer loop + vertex -61.000000 -1.000000 61.000000 + vertex -61.000000 -3.000000 -61.000000 + vertex -61.000000 -3.000000 61.000000 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex -61.000000 -1.000000 61.000000 + vertex -61.000000 -1.000000 -61.000000 + vertex -61.000000 -3.000000 -61.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -60.000000 -3.000000 -60.000000 + vertex -4.489497 -3.000000 -6.621512 + vertex -5.807964 -3.000000 -5.501595 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex -5.807964 -3.000000 -5.501595 + vertex -6.854857 -3.000000 -4.124431 + vertex -60.000000 -3.000000 -60.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -60.000000 -3.000000 -60.000000 + vertex -2.961105 -3.000000 -7.431814 + vertex -4.489497 -3.000000 -6.621512 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex -6.854857 -3.000000 -4.124431 + vertex -7.581225 -3.000000 -2.554412 + vertex -60.000000 -3.000000 -60.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -60.000000 -3.000000 -60.000000 + vertex -1.294256 -3.000000 -7.894612 + vertex -2.961105 -3.000000 -7.431814 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex -7.581225 -3.000000 -2.554412 + vertex -7.953104 -3.000000 -0.864952 + vertex -60.000000 -3.000000 -60.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -60.000000 -3.000000 -60.000000 + vertex 0.433111 -3.000000 -7.988267 + vertex -1.294256 -3.000000 -7.894612 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex -7.953104 -3.000000 -0.864952 + vertex -7.953104 -3.000000 0.864952 + vertex -60.000000 -3.000000 -60.000000 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex -5.807964 -3.000000 5.501595 + vertex -60.000000 -3.000000 60.000000 + vertex -6.854857 -3.000000 4.124431 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex -6.854857 -3.000000 4.124431 + vertex -60.000000 -3.000000 60.000000 + vertex -7.581225 -3.000000 2.554412 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex -7.581225 -3.000000 2.554412 + vertex -60.000000 -3.000000 60.000000 + vertex -7.953104 -3.000000 0.864952 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex -7.953104 -3.000000 0.864952 + vertex -60.000000 -3.000000 60.000000 + vertex -60.000000 -3.000000 -60.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 0.433111 -3.000000 -7.988267 + vertex 60.000000 -3.000000 -60.000000 + vertex 2.140227 -3.000000 -7.708400 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 2.140227 -3.000000 -7.708400 + vertex 60.000000 -3.000000 -60.000000 + vertex 3.747267 -3.000000 -7.068096 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 3.747267 -3.000000 -7.068096 + vertex 60.000000 -3.000000 -60.000000 + vertex 5.179090 -3.000000 -6.097296 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -60.000000 -3.000000 -60.000000 + vertex 60.000000 -3.000000 -60.000000 + vertex 0.433111 -3.000000 -7.988267 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 60.000000 -3.000000 -60.000000 + vertex 6.368744 -3.000000 -4.841394 + vertex 5.179090 -3.000000 -6.097296 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -5.807964 -3.000000 5.501595 + vertex -4.489497 -3.000000 6.621512 + vertex -60.000000 -3.000000 60.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 60.000000 -3.000000 -60.000000 + vertex 7.260603 -3.000000 -3.359113 + vertex 6.368744 -3.000000 -4.841394 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -4.489497 -3.000000 6.621512 + vertex -2.961105 -3.000000 7.431814 + vertex -60.000000 -3.000000 60.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 60.000000 -3.000000 -60.000000 + vertex 7.812964 -3.000000 -1.719764 + vertex 7.260603 -3.000000 -3.359113 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -2.961105 -3.000000 7.431814 + vertex -1.294256 -3.000000 7.894612 + vertex -60.000000 -3.000000 60.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 60.000000 -3.000000 -60.000000 + vertex 8.000000 -3.000000 0.000000 + vertex 7.812964 -3.000000 -1.719764 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -1.294256 -3.000000 7.894612 + vertex 0.433111 -3.000000 7.988267 + vertex -60.000000 -3.000000 60.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 8.000000 -3.000000 0.000000 + vertex 60.000000 -3.000000 60.000000 + vertex 7.812964 -3.000000 1.719764 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 7.812964 -3.000000 1.719764 + vertex 60.000000 -3.000000 60.000000 + vertex 7.260603 -3.000000 3.359113 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 7.260603 -3.000000 3.359113 + vertex 60.000000 -3.000000 60.000000 + vertex 6.368744 -3.000000 4.841394 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 6.368744 -3.000000 4.841394 + vertex 60.000000 -3.000000 60.000000 + vertex 5.179090 -3.000000 6.097296 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 5.179090 -3.000000 6.097296 + vertex 60.000000 -3.000000 60.000000 + vertex 3.747267 -3.000000 7.068096 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 3.747267 -3.000000 7.068096 + vertex 60.000000 -3.000000 60.000000 + vertex 2.140227 -3.000000 7.708400 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 2.140227 -3.000000 7.708400 + vertex 60.000000 -3.000000 60.000000 + vertex 0.433111 -3.000000 7.988267 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 60.000000 -3.000000 -60.000000 + vertex 60.000000 -3.000000 60.000000 + vertex 8.000000 -3.000000 0.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 0.433111 -3.000000 7.988267 + vertex 60.000000 -3.000000 60.000000 + vertex -60.000000 -3.000000 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 61.000000 -1.000000 61.000000 + vertex -61.000000 0.000000 61.000000 + vertex -61.000000 -1.000000 61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 61.000000 0.000000 61.000000 + vertex -61.000000 0.000000 61.000000 + vertex 61.000000 -1.000000 61.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 61.000000 -1.000000 -61.000000 + vertex 61.000000 0.000000 61.000000 + vertex 61.000000 -1.000000 61.000000 + endloop + endfacet + facet normal 1.000000 0.000000 -0.000000 + outer loop + vertex 61.000000 -0.000000 -61.000000 + vertex 61.000000 0.000000 61.000000 + vertex 61.000000 -1.000000 -61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -61.000000 -1.000000 -61.000000 + vertex 61.000000 -0.000000 -61.000000 + vertex 61.000000 -1.000000 -61.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex -61.000000 -0.000000 -61.000000 + vertex 61.000000 -0.000000 -61.000000 + vertex -61.000000 -1.000000 -61.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex -61.000000 -1.000000 61.000000 + vertex -61.000000 -0.000000 -61.000000 + vertex -61.000000 -1.000000 -61.000000 + endloop + endfacet + facet normal -1.000000 -0.000000 0.000000 + outer loop + vertex -61.000000 0.000000 61.000000 + vertex -61.000000 -0.000000 -61.000000 + vertex -61.000000 -1.000000 61.000000 + endloop + endfacet + facet normal 0.647386 0.000000 0.762162 + outer loop + vertex -4.489497 -1.000000 -6.621512 + vertex -5.807964 -1.000000 -5.501595 + vertex -5.807964 -3.000000 -5.501595 + endloop + endfacet + facet normal 0.647386 0.000000 0.762162 + outer loop + vertex -4.489497 -1.000000 -6.621512 + vertex -5.807964 -3.000000 -5.501595 + vertex -4.489497 -3.000000 -6.621512 + endloop + endfacet + facet normal 0.468408 0.000000 0.883512 + outer loop + vertex -2.961105 -1.000000 -7.431814 + vertex -4.489497 -1.000000 -6.621512 + vertex -4.489497 -3.000000 -6.621512 + endloop + endfacet + facet normal 0.468408 0.000000 0.883512 + outer loop + vertex -2.961105 -1.000000 -7.431814 + vertex -4.489497 -3.000000 -6.621512 + vertex -2.961105 -3.000000 -7.431814 + endloop + endfacet + facet normal 0.267528 0.000000 0.963550 + outer loop + vertex -1.294256 -1.000000 -7.894612 + vertex -2.961105 -1.000000 -7.431814 + vertex -2.961105 -3.000000 -7.431814 + endloop + endfacet + facet normal -0.994138 -0.000000 -0.108119 + outer loop + vertex 7.812964 -1.000000 1.719764 + vertex 8.000000 -3.000000 0.000000 + vertex 7.812964 -3.000000 1.719764 + endloop + endfacet + facet normal 0.267528 0.000000 0.963550 + outer loop + vertex -1.294256 -1.000000 -7.894612 + vertex -2.961105 -3.000000 -7.431814 + vertex -1.294256 -3.000000 -7.894612 + endloop + endfacet + facet normal -0.994138 0.000000 -0.108119 + outer loop + vertex 7.812964 -1.000000 1.719764 + vertex 8.000000 -1.000000 0.000000 + vertex 8.000000 -3.000000 0.000000 + endloop + endfacet + facet normal 0.054139 0.000000 0.998533 + outer loop + vertex 0.433111 -1.000000 -7.988267 + vertex -1.294256 -1.000000 -7.894612 + vertex -1.294256 -3.000000 -7.894612 + endloop + endfacet + facet normal -0.947653 -0.000000 -0.319302 + outer loop + vertex 7.260603 -1.000000 3.359113 + vertex 7.812964 -3.000000 1.719764 + vertex 7.260603 -3.000000 3.359113 + endloop + endfacet + facet normal 0.054139 0.000000 0.998533 + outer loop + vertex 0.433111 -1.000000 -7.988267 + vertex -1.294256 -3.000000 -7.894612 + vertex 0.433111 -3.000000 -7.988267 + endloop + endfacet + facet normal -0.947653 0.000000 -0.319302 + outer loop + vertex 7.260603 -1.000000 3.359113 + vertex 7.812964 -1.000000 1.719764 + vertex 7.812964 -3.000000 1.719764 + endloop + endfacet + facet normal -0.161782 0.000000 0.986826 + outer loop + vertex 2.140227 -1.000000 -7.708400 + vertex 0.433111 -1.000000 -7.988267 + vertex 0.433111 -3.000000 -7.988267 + endloop + endfacet + facet normal -0.161782 0.000000 0.986826 + outer loop + vertex 2.140227 -1.000000 -7.708400 + vertex 0.433111 -3.000000 -7.988267 + vertex 2.140227 -3.000000 -7.708400 + endloop + endfacet + facet normal -0.856857 -0.000000 -0.515554 + outer loop + vertex 6.368744 -1.000000 4.841394 + vertex 7.260603 -3.000000 3.359113 + vertex 6.368744 -3.000000 4.841394 + endloop + endfacet + facet normal -0.856857 0.000000 -0.515554 + outer loop + vertex 6.368744 -1.000000 4.841394 + vertex 7.260603 -1.000000 3.359113 + vertex 7.260603 -3.000000 3.359113 + endloop + endfacet + facet normal -0.370138 0.000000 0.928977 + outer loop + vertex 3.747267 -1.000000 -7.068096 + vertex 2.140227 -3.000000 -7.708400 + vertex 3.747267 -3.000000 -7.068096 + endloop + endfacet + facet normal -0.725995 -0.000000 -0.687699 + outer loop + vertex 5.179090 -1.000000 6.097296 + vertex 6.368744 -3.000000 4.841394 + vertex 5.179090 -3.000000 6.097296 + endloop + endfacet + facet normal -0.370138 0.000000 0.928977 + outer loop + vertex 3.747267 -1.000000 -7.068096 + vertex 2.140227 -1.000000 -7.708400 + vertex 2.140227 -3.000000 -7.708400 + endloop + endfacet + facet normal -0.725995 0.000000 -0.687699 + outer loop + vertex 5.179090 -1.000000 6.097296 + vertex 6.368744 -1.000000 4.841394 + vertex 6.368744 -3.000000 4.841394 + endloop + endfacet + facet normal -0.561187 0.000000 0.827689 + outer loop + vertex 5.179090 -1.000000 -6.097296 + vertex 3.747267 -3.000000 -7.068096 + vertex 5.179090 -3.000000 -6.097296 + endloop + endfacet + facet normal -0.561187 -0.000000 -0.827689 + outer loop + vertex 3.747267 -1.000000 7.068096 + vertex 5.179090 -3.000000 6.097296 + vertex 3.747267 -3.000000 7.068096 + endloop + endfacet + facet normal -0.561187 0.000000 0.827689 + outer loop + vertex 5.179090 -1.000000 -6.097296 + vertex 3.747267 -1.000000 -7.068096 + vertex 3.747267 -3.000000 -7.068096 + endloop + endfacet + facet normal -0.561187 0.000000 -0.827689 + outer loop + vertex 3.747267 -1.000000 7.068096 + vertex 5.179090 -1.000000 6.097296 + vertex 5.179090 -3.000000 6.097296 + endloop + endfacet + facet normal -0.725995 0.000000 0.687699 + outer loop + vertex 6.368744 -1.000000 -4.841394 + vertex 5.179090 -3.000000 -6.097296 + vertex 6.368744 -3.000000 -4.841394 + endloop + endfacet + facet normal -0.370138 -0.000000 -0.928977 + outer loop + vertex 2.140227 -1.000000 7.708400 + vertex 3.747267 -3.000000 7.068096 + vertex 2.140227 -3.000000 7.708400 + endloop + endfacet + facet normal -0.725995 0.000000 0.687699 + outer loop + vertex 6.368744 -1.000000 -4.841394 + vertex 5.179090 -1.000000 -6.097296 + vertex 5.179090 -3.000000 -6.097296 + endloop + endfacet + facet normal -0.370138 0.000000 -0.928977 + outer loop + vertex 2.140227 -1.000000 7.708400 + vertex 3.747267 -1.000000 7.068096 + vertex 3.747267 -3.000000 7.068096 + endloop + endfacet + facet normal -0.856857 0.000000 0.515554 + outer loop + vertex 7.260603 -1.000000 -3.359113 + vertex 6.368744 -3.000000 -4.841394 + vertex 7.260603 -3.000000 -3.359113 + endloop + endfacet + facet normal -0.161782 -0.000000 -0.986826 + outer loop + vertex 0.433111 -1.000000 7.988267 + vertex 2.140227 -3.000000 7.708400 + vertex 0.433111 -3.000000 7.988267 + endloop + endfacet + facet normal -0.856857 0.000000 0.515554 + outer loop + vertex 7.260603 -1.000000 -3.359113 + vertex 6.368744 -1.000000 -4.841394 + vertex 6.368744 -3.000000 -4.841394 + endloop + endfacet + facet normal -0.161782 0.000000 -0.986826 + outer loop + vertex 0.433111 -1.000000 7.988267 + vertex 2.140227 -1.000000 7.708400 + vertex 2.140227 -3.000000 7.708400 + endloop + endfacet + facet normal -0.947653 0.000000 0.319302 + outer loop + vertex 7.812964 -1.000000 -1.719764 + vertex 7.260603 -3.000000 -3.359113 + vertex 7.812964 -3.000000 -1.719764 + endloop + endfacet + facet normal -0.947653 0.000000 0.319302 + outer loop + vertex 7.812964 -1.000000 -1.719764 + vertex 7.260603 -1.000000 -3.359113 + vertex 7.260603 -3.000000 -3.359113 + endloop + endfacet + facet normal 0.054139 0.000000 -0.998533 + outer loop + vertex -1.294256 -1.000000 7.894612 + vertex 0.433111 -3.000000 7.988267 + vertex -1.294256 -3.000000 7.894612 + endloop + endfacet + facet normal 0.054139 0.000000 -0.998533 + outer loop + vertex -1.294256 -1.000000 7.894612 + vertex 0.433111 -1.000000 7.988267 + vertex 0.433111 -3.000000 7.988267 + endloop + endfacet + facet normal -0.994138 0.000000 0.108119 + outer loop + vertex 8.000000 -1.000000 0.000000 + vertex 7.812964 -3.000000 -1.719764 + vertex 8.000000 -3.000000 0.000000 + endloop + endfacet + facet normal -0.994138 0.000000 0.108119 + outer loop + vertex 8.000000 -1.000000 0.000000 + vertex 7.812964 -1.000000 -1.719764 + vertex 7.812964 -3.000000 -1.719764 + endloop + endfacet + facet normal 0.267528 0.000000 -0.963550 + outer loop + vertex -2.961105 -1.000000 7.431814 + vertex -1.294256 -3.000000 7.894612 + vertex -2.961105 -3.000000 7.431814 + endloop + endfacet + facet normal 0.267528 0.000000 -0.963550 + outer loop + vertex -2.961105 -1.000000 7.431814 + vertex -1.294256 -1.000000 7.894612 + vertex -1.294256 -3.000000 7.894612 + endloop + endfacet + facet normal 0.468408 0.000000 -0.883512 + outer loop + vertex -4.489497 -1.000000 6.621512 + vertex -2.961105 -1.000000 7.431814 + vertex -2.961105 -3.000000 7.431814 + endloop + endfacet + facet normal 0.468408 0.000000 -0.883512 + outer loop + vertex -4.489497 -1.000000 6.621512 + vertex -2.961105 -3.000000 7.431814 + vertex -4.489497 -3.000000 6.621512 + endloop + endfacet + facet normal 0.647386 0.000000 -0.762162 + outer loop + vertex -5.807964 -1.000000 5.501595 + vertex -4.489497 -1.000000 6.621512 + vertex -4.489497 -3.000000 6.621512 + endloop + endfacet + facet normal 0.647386 0.000000 -0.762162 + outer loop + vertex -5.807964 -1.000000 5.501595 + vertex -4.489497 -3.000000 6.621512 + vertex -5.807964 -3.000000 5.501595 + endloop + endfacet + facet normal 0.796093 0.000000 -0.605174 + outer loop + vertex -6.854857 -1.000000 4.124431 + vertex -5.807964 -1.000000 5.501595 + vertex -5.807964 -3.000000 5.501595 + endloop + endfacet + facet normal 0.796093 0.000000 -0.605174 + outer loop + vertex -6.854857 -1.000000 4.124431 + vertex -5.807964 -3.000000 5.501595 + vertex -6.854857 -3.000000 4.124431 + endloop + endfacet + facet normal 0.907575 0.000000 -0.419889 + outer loop + vertex -7.581225 -1.000000 2.554412 + vertex -6.854857 -1.000000 4.124431 + vertex -6.854857 -3.000000 4.124431 + endloop + endfacet + facet normal 0.907575 0.000000 -0.419889 + outer loop + vertex -7.581225 -1.000000 2.554412 + vertex -6.854857 -3.000000 4.124431 + vertex -7.581225 -3.000000 2.554412 + endloop + endfacet + facet normal 0.976621 0.000000 -0.214970 + outer loop + vertex -7.953104 -1.000000 0.864952 + vertex -7.581225 -1.000000 2.554412 + vertex -7.581225 -3.000000 2.554412 + endloop + endfacet + facet normal 0.976621 0.000000 -0.214970 + outer loop + vertex -7.953104 -1.000000 0.864952 + vertex -7.581225 -3.000000 2.554412 + vertex -7.953104 -3.000000 0.864952 + endloop + endfacet + facet normal 1.000000 0.000000 -0.000000 + outer loop + vertex -7.953104 -1.000000 -0.864952 + vertex -7.953104 -1.000000 0.864952 + vertex -7.953104 -3.000000 0.864952 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex -7.953104 -1.000000 -0.864952 + vertex -7.953104 -3.000000 0.864952 + vertex -7.953104 -3.000000 -0.864952 + endloop + endfacet + facet normal 0.976621 0.000000 0.214970 + outer loop + vertex -7.581225 -1.000000 -2.554412 + vertex -7.953104 -1.000000 -0.864952 + vertex -7.953104 -3.000000 -0.864952 + endloop + endfacet + facet normal 0.976621 0.000000 0.214970 + outer loop + vertex -7.581225 -1.000000 -2.554412 + vertex -7.953104 -3.000000 -0.864952 + vertex -7.581225 -3.000000 -2.554412 + endloop + endfacet + facet normal 0.907575 0.000000 0.419889 + outer loop + vertex -6.854857 -1.000000 -4.124431 + vertex -7.581225 -1.000000 -2.554412 + vertex -7.581225 -3.000000 -2.554412 + endloop + endfacet + facet normal 0.907575 0.000000 0.419889 + outer loop + vertex -6.854857 -1.000000 -4.124431 + vertex -7.581225 -3.000000 -2.554412 + vertex -6.854857 -3.000000 -4.124431 + endloop + endfacet + facet normal 0.796093 0.000000 0.605174 + outer loop + vertex -5.807964 -1.000000 -5.501595 + vertex -6.854857 -1.000000 -4.124431 + vertex -6.854857 -3.000000 -4.124431 + endloop + endfacet + facet normal 0.796093 0.000000 0.605174 + outer loop + vertex -5.807964 -1.000000 -5.501595 + vertex -6.854857 -3.000000 -4.124431 + vertex -5.807964 -3.000000 -5.501595 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 61.000000 -0.000000 -61.000000 + vertex -61.000000 -0.000000 -61.000000 + vertex -60.000000 -0.000000 -60.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 60.000000 -0.000000 -60.000000 + vertex 61.000000 -0.000000 -61.000000 + vertex -60.000000 -0.000000 -60.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -61.000000 0.000000 61.000000 + vertex -60.000000 -0.000000 -60.000000 + vertex -61.000000 -0.000000 -61.000000 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex -60.000000 0.000000 60.000000 + vertex -60.000000 -0.000000 -60.000000 + vertex -61.000000 0.000000 61.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 60.000000 0.000000 60.000000 + vertex -60.000000 0.000000 60.000000 + vertex -61.000000 0.000000 61.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 61.000000 0.000000 61.000000 + vertex 60.000000 0.000000 60.000000 + vertex -61.000000 0.000000 61.000000 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 61.000000 0.000000 61.000000 + vertex 61.000000 -0.000000 -61.000000 + vertex 60.000000 -0.000000 -60.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 61.000000 0.000000 61.000000 + vertex 60.000000 -0.000000 -60.000000 + vertex 60.000000 0.000000 60.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -4.489497 -1.000000 -6.621512 + vertex -6.854857 -1.000000 -4.124431 + vertex -5.807964 -1.000000 -5.501595 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -2.961105 -1.000000 -7.431814 + vertex -1.294256 -1.000000 -7.894612 + vertex -4.489497 -1.000000 -6.621512 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -1.294256 -1.000000 -7.894612 + vertex 0.433111 -1.000000 -7.988267 + vertex -4.489497 -1.000000 -6.621512 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -7.581225 -1.000000 -2.554412 + vertex -7.953104 -1.000000 0.864952 + vertex -7.953104 -1.000000 -0.864952 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex 2.140227 -1.000000 -7.708400 + vertex 3.747267 -1.000000 -7.068096 + vertex 0.433111 -1.000000 -7.988267 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -7.953104 -1.000000 0.864952 + vertex -6.854857 -1.000000 4.124431 + vertex -7.581225 -1.000000 2.554412 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -7.581225 -1.000000 -2.554412 + vertex -6.854857 -1.000000 4.124431 + vertex -7.953104 -1.000000 0.864952 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex 3.747267 -1.000000 -7.068096 + vertex 5.179090 -1.000000 -6.097296 + vertex 0.433111 -1.000000 -7.988267 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -6.854857 -1.000000 -4.124431 + vertex -4.489497 -1.000000 6.621512 + vertex -7.581225 -1.000000 -2.554412 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -6.854857 -1.000000 4.124431 + vertex -4.489497 -1.000000 6.621512 + vertex -5.807964 -1.000000 5.501595 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -4.489497 -1.000000 -6.621512 + vertex -4.489497 -1.000000 6.621512 + vertex -6.854857 -1.000000 -4.124431 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -7.581225 -1.000000 -2.554412 + vertex -4.489497 -1.000000 6.621512 + vertex -6.854857 -1.000000 4.124431 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex 6.368744 -1.000000 -4.841394 + vertex 7.260603 -1.000000 -3.359113 + vertex 5.179090 -1.000000 -6.097296 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex 5.179090 -1.000000 -6.097296 + vertex 7.260603 -1.000000 -3.359113 + vertex 0.433111 -1.000000 -7.988267 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -4.489497 -1.000000 6.621512 + vertex -1.294256 -1.000000 7.894612 + vertex -2.961105 -1.000000 7.431814 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 0.433111 -1.000000 -7.988267 + vertex -1.294256 -1.000000 7.894612 + vertex -4.489497 -1.000000 -6.621512 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -4.489497 -1.000000 -6.621512 + vertex -1.294256 -1.000000 7.894612 + vertex -4.489497 -1.000000 6.621512 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex 8.000000 -1.000000 0.000000 + vertex 7.812964 -1.000000 1.719764 + vertex 7.812964 -1.000000 -1.719764 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex 7.812964 -1.000000 -1.719764 + vertex 7.812964 -1.000000 1.719764 + vertex 7.260603 -1.000000 -3.359113 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -1.294256 -1.000000 7.894612 + vertex 2.140227 -1.000000 7.708400 + vertex 0.433111 -1.000000 7.988267 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -1.294256 -1.000000 7.894612 + vertex 3.747267 -1.000000 7.068096 + vertex 2.140227 -1.000000 7.708400 + endloop + endfacet + facet normal -0.000000 -1.000000 -0.000000 + outer loop + vertex 7.260603 -1.000000 3.359113 + vertex 6.368744 -1.000000 4.841394 + vertex 7.812964 -1.000000 1.719764 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex 7.260603 -1.000000 -3.359113 + vertex 6.368744 -1.000000 4.841394 + vertex 0.433111 -1.000000 -7.988267 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex 7.812964 -1.000000 1.719764 + vertex 6.368744 -1.000000 4.841394 + vertex 7.260603 -1.000000 -3.359113 + endloop + endfacet + facet normal -0.000000 -1.000000 0.000000 + outer loop + vertex 6.368744 -1.000000 4.841394 + vertex 5.179090 -1.000000 6.097296 + vertex 0.433111 -1.000000 -7.988267 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 0.433111 -1.000000 -7.988267 + vertex 5.179090 -1.000000 6.097296 + vertex -1.294256 -1.000000 7.894612 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex -1.294256 -1.000000 7.894612 + vertex 5.179090 -1.000000 6.097296 + vertex 3.747267 -1.000000 7.068096 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex -4.489497 -0.000000 -6.621512 + vertex -60.000000 -0.000000 -60.000000 + vertex -5.807964 -0.000000 -5.501595 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex -6.854857 -0.000000 -4.124431 + vertex -5.807964 -0.000000 -5.501595 + vertex -60.000000 -0.000000 -60.000000 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex -2.961105 -0.000000 -7.431814 + vertex -60.000000 -0.000000 -60.000000 + vertex -4.489497 -0.000000 -6.621512 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex -7.581225 -0.000000 -2.554412 + vertex -6.854857 -0.000000 -4.124431 + vertex -60.000000 -0.000000 -60.000000 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex -1.294256 -0.000000 -7.894612 + vertex -60.000000 -0.000000 -60.000000 + vertex -2.961105 -0.000000 -7.431814 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex -7.953104 -0.000000 -0.864952 + vertex -7.581225 -0.000000 -2.554412 + vertex -60.000000 -0.000000 -60.000000 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 0.433111 -0.000000 -7.988267 + vertex -60.000000 -0.000000 -60.000000 + vertex -1.294256 -0.000000 -7.894612 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex -7.953104 0.000000 0.864952 + vertex -7.953104 -0.000000 -0.864952 + vertex -60.000000 -0.000000 -60.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -60.000000 0.000000 60.000000 + vertex -5.807964 0.000000 5.501595 + vertex -6.854857 0.000000 4.124431 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -60.000000 0.000000 60.000000 + vertex -6.854857 0.000000 4.124431 + vertex -7.581225 0.000000 2.554412 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -60.000000 0.000000 60.000000 + vertex -7.581225 0.000000 2.554412 + vertex -7.953104 0.000000 0.864952 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -60.000000 0.000000 60.000000 + vertex -7.953104 0.000000 0.864952 + vertex -60.000000 -0.000000 -60.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 60.000000 -0.000000 -60.000000 + vertex 0.433111 -0.000000 -7.988267 + vertex 2.140227 -0.000000 -7.708400 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 60.000000 -0.000000 -60.000000 + vertex 2.140227 -0.000000 -7.708400 + vertex 3.747267 -0.000000 -7.068096 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 60.000000 -0.000000 -60.000000 + vertex 3.747267 -0.000000 -7.068096 + vertex 5.179090 -0.000000 -6.097296 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 60.000000 -0.000000 -60.000000 + vertex -60.000000 -0.000000 -60.000000 + vertex 0.433111 -0.000000 -7.988267 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 6.368744 -0.000000 -4.841394 + vertex 60.000000 -0.000000 -60.000000 + vertex 5.179090 -0.000000 -6.097296 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -4.489497 0.000000 6.621512 + vertex -5.807964 0.000000 5.501595 + vertex -60.000000 0.000000 60.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 7.260603 -0.000000 -3.359113 + vertex 60.000000 -0.000000 -60.000000 + vertex 6.368744 -0.000000 -4.841394 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -2.961105 0.000000 7.431814 + vertex -4.489497 0.000000 6.621512 + vertex -60.000000 0.000000 60.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 7.812964 -0.000000 -1.719764 + vertex 60.000000 -0.000000 -60.000000 + vertex 7.260603 -0.000000 -3.359113 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -1.294256 0.000000 7.894612 + vertex -2.961105 0.000000 7.431814 + vertex -60.000000 0.000000 60.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 8.000000 0.000000 0.000000 + vertex 60.000000 -0.000000 -60.000000 + vertex 7.812964 -0.000000 -1.719764 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 0.433111 0.000000 7.988267 + vertex -1.294256 0.000000 7.894612 + vertex -60.000000 0.000000 60.000000 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 60.000000 0.000000 60.000000 + vertex 8.000000 0.000000 0.000000 + vertex 7.812964 0.000000 1.719764 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 60.000000 0.000000 60.000000 + vertex 7.812964 0.000000 1.719764 + vertex 7.260603 0.000000 3.359113 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 60.000000 0.000000 60.000000 + vertex 7.260603 0.000000 3.359113 + vertex 6.368744 0.000000 4.841394 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 60.000000 0.000000 60.000000 + vertex 6.368744 0.000000 4.841394 + vertex 5.179090 0.000000 6.097296 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 60.000000 0.000000 60.000000 + vertex 5.179090 0.000000 6.097296 + vertex 3.747267 0.000000 7.068096 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 60.000000 0.000000 60.000000 + vertex 3.747267 0.000000 7.068096 + vertex 2.140227 0.000000 7.708400 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 60.000000 0.000000 60.000000 + vertex 2.140227 0.000000 7.708400 + vertex 0.433111 0.000000 7.988267 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 60.000000 0.000000 60.000000 + vertex 0.433111 0.000000 7.988267 + vertex -60.000000 0.000000 60.000000 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 60.000000 0.000000 60.000000 + vertex 60.000000 -0.000000 -60.000000 + vertex 8.000000 0.000000 0.000000 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex -6.854857 -0.000000 -4.124431 + vertex -4.489497 -0.000000 -6.621512 + vertex -5.807964 -0.000000 -5.501595 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -7.581225 0.000000 2.554412 + vertex -7.953104 -0.000000 -0.864952 + vertex -7.953104 0.000000 0.864952 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 3.747267 -0.000000 -7.068096 + vertex -1.294256 -0.000000 -7.894612 + vertex -2.961105 -0.000000 -7.431814 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 3.747267 -0.000000 -7.068096 + vertex 0.433111 -0.000000 -7.988267 + vertex -1.294256 -0.000000 -7.894612 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 3.747267 -0.000000 -7.068096 + vertex 2.140227 -0.000000 -7.708400 + vertex 0.433111 -0.000000 -7.988267 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -6.854857 0.000000 4.124431 + vertex -7.953104 -0.000000 -0.864952 + vertex -7.581225 0.000000 2.554412 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -5.807964 0.000000 5.501595 + vertex -7.581225 -0.000000 -2.554412 + vertex -7.953104 -0.000000 -0.864952 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -5.807964 0.000000 5.501595 + vertex -6.854857 -0.000000 -4.124431 + vertex -7.581225 -0.000000 -2.554412 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -5.807964 0.000000 5.501595 + vertex -7.953104 -0.000000 -0.864952 + vertex -6.854857 0.000000 4.124431 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 6.368744 -0.000000 -4.841394 + vertex 5.179090 -0.000000 -6.097296 + vertex 3.747267 -0.000000 -7.068096 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex -2.961105 0.000000 7.431814 + vertex -5.807964 0.000000 5.501595 + vertex -4.489497 0.000000 6.621512 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -2.961105 0.000000 7.431814 + vertex -2.961105 -0.000000 -7.431814 + vertex -4.489497 -0.000000 -6.621512 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -2.961105 0.000000 7.431814 + vertex 7.260603 -0.000000 -3.359113 + vertex 6.368744 -0.000000 -4.841394 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex -2.961105 0.000000 7.431814 + vertex -4.489497 -0.000000 -6.621512 + vertex -6.854857 -0.000000 -4.124431 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -2.961105 0.000000 7.431814 + vertex 3.747267 -0.000000 -7.068096 + vertex -2.961105 -0.000000 -7.431814 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -2.961105 0.000000 7.431814 + vertex 6.368744 -0.000000 -4.841394 + vertex 3.747267 -0.000000 -7.068096 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex -2.961105 0.000000 7.431814 + vertex -6.854857 -0.000000 -4.124431 + vertex -5.807964 0.000000 5.501595 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 7.812964 0.000000 1.719764 + vertex -2.961105 0.000000 7.431814 + vertex -1.294256 0.000000 7.894612 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 7.812964 0.000000 1.719764 + vertex 7.812964 -0.000000 -1.719764 + vertex 7.260603 -0.000000 -3.359113 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 7.812964 0.000000 1.719764 + vertex 8.000000 0.000000 0.000000 + vertex 7.812964 -0.000000 -1.719764 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 7.812964 0.000000 1.719764 + vertex 7.260603 -0.000000 -3.359113 + vertex -2.961105 0.000000 7.431814 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 2.140227 0.000000 7.708400 + vertex -1.294256 0.000000 7.894612 + vertex 0.433111 0.000000 7.988267 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 2.140227 0.000000 7.708400 + vertex 7.812964 0.000000 1.719764 + vertex -1.294256 0.000000 7.894612 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 6.368744 0.000000 4.841394 + vertex 7.260603 0.000000 3.359113 + vertex 7.812964 0.000000 1.719764 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 5.179090 0.000000 6.097296 + vertex 2.140227 0.000000 7.708400 + vertex 3.747267 0.000000 7.068096 + endloop + endfacet + facet normal -0.000000 1.000000 -0.000000 + outer loop + vertex 5.179090 0.000000 6.097296 + vertex 7.812964 0.000000 1.719764 + vertex 2.140227 0.000000 7.708400 + endloop + endfacet + facet normal 0.000000 1.000000 -0.000000 + outer loop + vertex 5.179090 0.000000 6.097296 + vertex 6.368744 0.000000 4.841394 + vertex 7.812964 0.000000 1.719764 + endloop + endfacet +endsolid Mesh diff --git a/apps/cpu/Multiphase/backup/JetBreakup2.FCStd b/apps/cpu/Multiphase/backup/JetBreakup2.FCStd new file mode 100644 index 0000000000000000000000000000000000000000..8e6ed64fa6eeb4fb3c310c7513463635b0f6ee19 Binary files /dev/null and b/apps/cpu/Multiphase/backup/JetBreakup2.FCStd differ diff --git a/apps/cpu/Multiphase/backup/JetBreakup2.FCStd1 b/apps/cpu/Multiphase/backup/JetBreakup2.FCStd1 new file mode 100644 index 0000000000000000000000000000000000000000..6d0a48be9fed1a6a9398d9e8a620f5480d5fcd8d Binary files /dev/null and b/apps/cpu/Multiphase/backup/JetBreakup2.FCStd1 differ diff --git a/apps/cpu/Multiphase/backup/JetBreakup2.stl b/apps/cpu/Multiphase/backup/JetBreakup2.stl new file mode 100644 index 0000000000000000000000000000000000000000..3c36f67113ef3741bbe0f8526dfe5efaf635f1ec Binary files /dev/null and b/apps/cpu/Multiphase/backup/JetBreakup2.stl differ diff --git a/apps/cpu/Multiphase/backup/JetBreakup3.FCStd b/apps/cpu/Multiphase/backup/JetBreakup3.FCStd new file mode 100644 index 0000000000000000000000000000000000000000..beaf8c0e46fe33f5d006d98e3a96214ba09f2bbb Binary files /dev/null and b/apps/cpu/Multiphase/backup/JetBreakup3.FCStd differ diff --git a/apps/cpu/Multiphase/backup/JetBreakup3.stl b/apps/cpu/Multiphase/backup/JetBreakup3.stl new file mode 100644 index 0000000000000000000000000000000000000000..a7f77cbf00ea06646ff3b8e6cfddec6be7eea3b4 Binary files /dev/null and b/apps/cpu/Multiphase/backup/JetBreakup3.stl differ diff --git a/apps/cpu/Multiphase/backup/Multiphase (Droplet Test).cpp b/apps/cpu/Multiphase/backup/Multiphase (Droplet Test).cpp new file mode 100644 index 0000000000000000000000000000000000000000..b5a8a9eac55d2150f08e00a8ba6f215228bf135a --- /dev/null +++ b/apps/cpu/Multiphase/backup/Multiphase (Droplet Test).cpp @@ -0,0 +1,482 @@ +#include <iostream> +#include <string> + +#include "VirtualFluids.h" + +using namespace std; + + +void run(string configname) +{ + try + { + ConfigurationFile config; + config.load(configname); + + string pathname = config.getString("pathname"); + string pathGeo = config.getString("pathGeo"); + string geoFile = config.getString("geoFile"); + int numOfThreads = config.getInt("numOfThreads"); + vector<int> blocknx = config.getVector<int>("blocknx"); + vector<double> boundingBox = config.getVector<double>("boundingBox"); + //vector<double> length = config.getVector<double>("length"); + double uLB = config.getDouble("uLB"); + double uF2 = config.getDouble("uF2"); + double nuL = config.getDouble("nuL"); + double nuG = config.getDouble("nuG"); + double densityRatio = config.getDouble("densityRatio"); + double sigma = config.getDouble("sigma"); + int interfaceThickness = config.getInt("interfaceThickness"); + double radius = config.getDouble("radius"); + double theta = config.getDouble("contactAngle"); + double gr = config.getDouble("gravity"); + double phiL = config.getDouble("phi_L"); + double phiH = config.getDouble("phi_H"); + double tauH = config.getDouble("Phase-field Relaxation"); + double mob = config.getDouble("Mobility"); + + + double endTime = config.getDouble("endTime"); + double outTime = config.getDouble("outTime"); + double availMem = config.getDouble("availMem"); + int refineLevel = config.getInt("refineLevel"); + double Re = config.getDouble("Re"); + double dx = config.getDouble("dx"); + bool logToFile = config.getBool("logToFile"); + double restartStep = config.getDouble("restartStep"); + double cpStart = config.getValue<double>("cpStart"); + double cpStep = config.getValue<double>("cpStep"); + bool newStart = config.getValue<bool>("newStart"); + + double beta = 12*sigma/interfaceThickness; + double kappa = 1.5*interfaceThickness*sigma; + + CommunicatorPtr comm = MPICommunicator::getInstance(); + int myid = comm->getProcessID(); + + if (logToFile) + { +#if defined(__unix__) + if (myid == 0) + { + const char* str = pathname.c_str(); + mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + } +#endif + + if (myid == 0) + { + stringstream logFilename; + logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; + UbLog::output_policy::setStream(logFilename.str()); + } + } + + //Sleep(30000); + + LBMReal dLB; // = length[1] / dx; + LBMReal rhoLB = 0.0; + LBMReal nuLB = nuL; //(uLB*dLB) / Re; + + LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); + + const int baseLevel = 0; + + + + Grid3DPtr grid(new Grid3D(comm)); + //grid->setPeriodicX1(true); + //grid->setPeriodicX2(true); + //grid->setPeriodicX3(true); + ////////////////////////////////////////////////////////////////////////// + //restart + UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart)); + //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT); + MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm); + ////////////////////////////////////////////////////////////////////////// + + + + if (newStart) + { + + //bounding box + /*double g_minX1 = 0.0; + double g_minX2 = -length[1] / 2.0; + double g_minX3 = -length[2] / 2.0; + + double g_maxX1 = length[0]; + double g_maxX2 = length[1] / 2.0; + double g_maxX3 = length[2] / 2.0;*/ + + double g_minX1 = boundingBox[0]; + double g_minX2 = boundingBox[2]; + double g_minX3 = boundingBox[4]; + + double g_maxX1 = boundingBox[1]; + double g_maxX2 = boundingBox[3]; + double g_maxX3 = boundingBox[5]; + + //geometry + + 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, 20.0)); + GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/cylinder", WbWriterVtkXmlBinary::getInstance()); + + GbObject3DPtr 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()); + + + double blockLength = blocknx[0] * dx; + + + + if (myid == 0) + { + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "Preprocess - start"); + } + + grid->setDeltaX(dx); + grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); + + grid->setPeriodicX1(true); + grid->setPeriodicX2(true); + grid->setPeriodicX3(true); + + + + GenBlocksGridVisitor genBlocks(gridCube); + grid->accept(genBlocks); + + + //inflow + //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_minX1, g_maxX2+blockLength, g_maxX3+blockLength)); + //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(-34.0, -20.0, 1.0, -31.5, 16.0, 46.0)); + //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(-24.0, 3, 20.0, -22.0, 24.0, 42.0)); + //if (myid==0) GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname+"/geo/geoInflowF1", WbWriterVtkXmlASCII::getInstance()); + + /*GbCuboid3DPtr geoInflowF2_1(new GbCuboid3D(-24.0, -24.0, 0.0, 26.0, 26.0, 3.5)); + if (myid==0) GbSystem3D::writeGeoObject(geoInflowF2_1.get(), pathname+"/geo/geoInflowF2_1", WbWriterVtkXmlASCII::getInstance()); + + GbCuboid3DPtr geoInflowF2_2(new GbCuboid3D(-24.0, -24.0, 56.5, 26.0, 26.0, 59.9)); + if (myid==0) GbSystem3D::writeGeoObject(geoInflowF2_2.get(), pathname+"/geo/geoInflowF2_2", WbWriterVtkXmlASCII::getInstance());*/ + + //outflow + //GbCuboid3DPtr geoOutflow(new GbCuboid3D(126.0-50, -20.0, 1.0, 130.0-50, 16.0, 46.0)); + //GbCuboid3DPtr geoOutflow(new GbCuboid3D(126.0, -20.0, 1.0, 130.0, 16.0, 46.0)); + //GbCuboid3DPtr geoOutflow(new GbCuboid3D(78.0, 3, 20.0, 81.0, 24.0, 42.0)); + //if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); + + //BC Adapter + ////////////////////////////////////////////////////////////////////////////// + //BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + //noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + + + //BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + //denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + + 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 fctF1; + fctF1.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))"); + //fctF1.SetExpr("vx1"); + fctF1.DefineConst("R", 10.0); + //fctF1.DefineConst("R", 8.0); // FlowFocusingSS + fctF1.DefineConst("vx1", uLB); + fctF1.DefineConst("y0", 1.0); + fctF1.DefineConst("z0", 31.0); + + mu::Parser fctF2_1; + fctF2_1.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))"); + //fctF2_1.SetExpr("vx3"); + fctF2_1.DefineConst("R", 12.0); + fctF2_1.DefineConst("vx3", uF2); + fctF2_1.DefineConst("x0", 1.0); + fctF2_1.DefineConst("y0", 1.0); + + mu::Parser fctF2_2; + fctF2_2.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))"); + //fctF2_2.SetExpr("vx3"); + fctF2_2.DefineConst("R", 12.0); + fctF2_2.DefineConst("vx3", -uF2); + fctF2_2.DefineConst("x0", 1.0); + fctF2_2.DefineConst("y0", 1.0); + + mu::Parser fctPhi_F1; + fctPhi_F1.SetExpr("phiH"); + fctPhi_F1.DefineConst("phiH", phiH); + + mu::Parser fctPhi_F2; + fctPhi_F2.SetExpr("phiL"); + fctPhi_F2.DefineConst("phiL", phiL); + + mu::Parser fctvel_F2_init; + 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 velBCAdapterF1(new VelocityBCAdapterMultiphase(true, false, false, fctF1, phiH, 0.0, endTime)); + + //BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiL, 0.0, endTime)); + //BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_2, phiL, 0.0, endTime)); + + //BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + //BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + + //velBCAdapterF1->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + //velBCAdapterF2_1_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + //velBCAdapterF2_2_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + + + //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())); + + + ////////////////////////////////////////////////////////////////////////////////// + //BC visitor + BoundaryConditionsBlockVisitorMultiphase bcVisitor; + /*bcVisitor.addBC(noSlipBCAdapter); + bcVisitor.addBC(denBCAdapter); + bcVisitor.addBC(velBCAdapterF1); + bcVisitor.addBC(velBCAdapterF2_1_init); + bcVisitor.addBC(velBCAdapterF2_2_init);*/ + + + + WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); + + ppblocks->process(0); + + //Interactor3DPtr tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::INVERSESOLID)); + + + + Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B)); + InteractorsHelper intHelper(grid, metisVisitor); + //intHelper.addInteractor(tubes); + + intHelper.selectBlocks(); + + + ppblocks->process(0); + ppblocks.reset(); + + unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks(); + int ghostLayer = 3; + unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]); + unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock; + unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer); + double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); + double needMem = needMemAll / double(comm->getNumberOfProcesses()); + + if (myid == 0) + { + UBLOG(logINFO, "Number of blocks = " << numberOfBlocks); + UBLOG(logINFO, "Number of nodes = " << numberOfNodes); + int minInitLevel = grid->getCoarsestInitializedLevel(); + int maxInitLevel = grid->getFinestInitializedLevel(); + for (int level = minInitLevel; level <= maxInitLevel; level++) + { + int nobl = grid->getNumberOfBlocks(level); + UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl); + UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock); + } + UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); + UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); + UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); + } + + LBMKernelPtr kernel; + + kernel = LBMKernelPtr(new MultiphaseCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], MultiphaseCumulantLBMKernel::NORMAL)); + + kernel->setWithForcing(false); + kernel->setForcingX1(gr); + kernel->setForcingX2(0.0); + 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); + + SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem); + + grid->accept(kernelVisitor); + + if (refineLevel > 0) + { + SetUndefinedNodesBlockVisitor undefNodesVisitor; + grid->accept(undefNodesVisitor); + } + + + + //intHelper.setBC(); + //grid->accept(bcVisitor); + + //initialization of distributions + //initialization of distributions + LBMReal x1c = (g_maxX1 - g_minX1-1)/2; + LBMReal x2c = (g_maxX2 - g_minX2-1)/2; + LBMReal x3c = (g_maxX3 - g_minX3-1)/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.DefineConst("x1c", x1c); + fct1.DefineConst("x2c", x2c); + fct1.DefineConst("x3c", x3c); + 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("0.5*uLB-uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + //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); + + + InitDistributionsBlockVisitorMultiphase 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); + grid->accept(setConnsVisitor); + + //domain decomposition for threads + PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); + grid->accept(pqPartVisitor); + + + + + //boundary conditions grid + { + UbSchedulerPtr geoSch(new UbScheduler(1)); + WriteBoundaryConditionsCoProcessorPtr ppgeo( + new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); + ppgeo->process(0); + ppgeo.reset(); + } + + if (myid == 0) UBLOG(logINFO, "Preprocess - end"); + } + else + { + if (myid == 0) + { + UBLOG(logINFO, "Parameters:"); + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "number of levels = " << refineLevel + 1); + UBLOG(logINFO, "numOfThreads = " << numOfThreads); + UBLOG(logINFO, "path = " << pathname); + } + + 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"); + } + UbSchedulerPtr visSch(new UbScheduler(outTime)); + WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm); + + UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); + NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); + + + + + + + UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000)); + TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch)); + //inflowF2->addInteractor(inflowF2_1Int); + //inflowF2->addInteractor(inflowF2_2Int); + + //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI)); + CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch)); + if (myid == 0) UBLOG(logINFO, "Simulation-start"); + calculation->calculate(); + if (myid == 0) UBLOG(logINFO, "Simulation-end"); + } + catch (std::exception& e) + { + cerr << e.what() << endl << flush; + } + catch (std::string& s) + { + cerr << s << endl; + } + catch (...) + { + cerr << "unknown exception" << endl; + } + +} +int main(int argc, char* argv[]) +{ + //Sleep(30000); + if (argv != NULL) + { + if (argv[1] != NULL) + { + run(string(argv[1])); + } + else + { + cout << "Configuration file is missing!" << endl; + } + } + +} + diff --git a/apps/cpu/Multiphase/backup/Multiphase (Final before automation).cpp b/apps/cpu/Multiphase/backup/Multiphase (Final before automation).cpp new file mode 100644 index 0000000000000000000000000000000000000000..b4a6b34782a4bc8df00168d9d0a9130d19630755 --- /dev/null +++ b/apps/cpu/Multiphase/backup/Multiphase (Final before automation).cpp @@ -0,0 +1,586 @@ +#include <iostream> +#include <string> + +#include "VirtualFluids.h" + +using namespace std; + + +void run(string configname) +{ + try + { + ConfigurationFile config; + config.load(configname); + + string pathname = config.getString("pathname"); + string pathGeo = config.getString("pathGeo"); + string geoFile = config.getString("geoFile"); + int numOfThreads = config.getInt("numOfThreads"); + vector<int> blocknx = config.getVector<int>("blocknx"); + vector<double> boundingBox = config.getVector<double>("boundingBox"); + //vector<double> length = config.getVector<double>("length"); + double uLB = config.getDouble("uLB"); + double uF2 = config.getDouble("uF2"); + double nuL = config.getDouble("nuL"); + double nuG = config.getDouble("nuG"); + double densityRatio = config.getDouble("densityRatio"); + double sigma = config.getDouble("sigma"); + int interfaceThickness = config.getInt("interfaceThickness"); + double radius = config.getDouble("radius"); + double theta = config.getDouble("contactAngle"); + double gr = config.getDouble("gravity"); + double phiL = config.getDouble("phi_L"); + double phiH = config.getDouble("phi_H"); + double tauH = config.getDouble("Phase-field Relaxation"); + double mob = config.getDouble("Mobility"); + + + double endTime = config.getDouble("endTime"); + double outTime = config.getDouble("outTime"); + double availMem = config.getDouble("availMem"); + int refineLevel = config.getInt("refineLevel"); + double Re = config.getDouble("Re"); + double dx = config.getDouble("dx"); + bool logToFile = config.getBool("logToFile"); + double restartStep = config.getDouble("restartStep"); + double cpStart = config.getValue<double>("cpStart"); + double cpStep = config.getValue<double>("cpStep"); + bool newStart = config.getValue<bool>("newStart"); + + + bool eastBoundary = config.getValue<bool>("eastBoundary"); + bool westBoundary = config.getValue<bool>("westBoundary"); + bool northBoundary = config.getValue<bool>("northBoundary"); + bool southBoundary = config.getValue<bool>("southBoundary"); + bool topBoundary = config.getValue<bool>("topBoundary"); + bool bottomBoundary = config.getValue<bool>("bottomBoundary"); + + int eastBoundaryType = config.getInt("eastBoundaryType"); + int westBoundaryType = config.getInt("westBoundaryType"); + int northBoundaryType = config.getInt("northBoundaryType"); + int southBoundaryType = config.getInt("southBoundaryType"); + int topBoundaryType = config.getInt("topBoundaryType"); + int bottomBoundaryType = config.getInt("bottomBoundaryType"); + + + double beta = 12*sigma/interfaceThickness; + double kappa = 1.5*interfaceThickness*sigma; + + CommunicatorPtr comm = MPICommunicator::getInstance(); + int myid = comm->getProcessID(); + + if (logToFile) + { +#if defined(__unix__) + if (myid == 0) + { + const char* str = pathname.c_str(); + mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + } +#endif + + if (myid == 0) + { + stringstream logFilename; + logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; + UbLog::output_policy::setStream(logFilename.str()); + } + } + + //Sleep(30000); + + LBMReal dLB; // = length[1] / dx; + LBMReal rhoLB = 0.0; + LBMReal nuLB = nuL; //(uLB*dLB) / Re; + + LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); + + const int baseLevel = 0; + + + + Grid3DPtr grid(new Grid3D(comm)); + //grid->setPeriodicX1(true); + //grid->setPeriodicX2(true); + //grid->setPeriodicX3(true); + ////////////////////////////////////////////////////////////////////////// + //restart + UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart)); + //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT); + MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm); + ////////////////////////////////////////////////////////////////////////// + + + + + + mu::Parser fctF1; + //fctF1.SetExpr("vy1*(1-((x1-x0)^2+(x3-z0)^2)/(R^2))"); + fctF1.SetExpr("vy1"); + fctF1.DefineConst("vy1", -uLB); + fctF1.DefineConst("R", 7.5); + fctF1.DefineConst("x0", 60.0); + fctF1.DefineConst("z0", 60.0); + + + if (newStart) + { + + //bounding box + /*double g_minX1 = 0.0; + double g_minX2 = -length[1] / 2.0; + double g_minX3 = -length[2] / 2.0; + + double g_maxX1 = length[0]; + double g_maxX2 = length[1] / 2.0; + double g_maxX3 = length[2] / 2.0;*/ + + double g_minX1 = boundingBox[0]; + double g_minX2 = boundingBox[2]; + double g_minX3 = boundingBox[4]; + + double g_maxX1 = boundingBox[1]; + double g_maxX2 = boundingBox[3]; + 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()); + + + + + GbObject3DPtr 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()); + + //GbTriFaceMesh3DPtr cylinder; + //if (myid==0) UBLOG(logINFO, "Read geoFile:start"); + //cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT)); + //GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance()); + + /*GbObject3DPtr cylinder(new GbCuboid3D(g_minX1 + 2.0, g_minX2 + 2.0, g_minX3 + 2.0, g_maxX1 - 2.0, g_maxX2 - 2.0, g_maxX3 -2.0)); + if (myid == 0) GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/solidWall", WbWriterVtkXmlBinary::getInstance());*/ + + + + bool isDefined_SlipBC = false; + bool isDefined_noSlipBC = false; + bool isDefined_Outflow = false; + + if (eastBoundary) + { + switch (eastBoundaryType) + { + case 0: + + break; + case 1: + break; + case 2: + break; + case 3: + break; + } + } + + /*GbObject3DPtr geoWallEast(new GbCuboid3D(g_maxX1 + 2.0, g_maxX2 + 2.0, g_maxX3 + 2.0, g_maxX1 - 2.0, g_minX2 - 2.0, g_minX3 -2.0)); + if (myid == 0) GbSystem3D::writeGeoObject(geoWallEast.get(), pathname + "/geo/geoWallEast", WbWriterVtkXmlBinary::getInstance()); + + GbObject3DPtr geoWallWest(new GbCuboid3D(g_minX1 + 2.0, g_maxX2 + 2.0, g_maxX3 + 2.0, g_minX1 - 2.0, g_minX2 - 2.0, g_minX3 -2.0)); + if (myid == 0) GbSystem3D::writeGeoObject(geoWallWest.get(), pathname + "/geo/geoWallWest", WbWriterVtkXmlBinary::getInstance()); + + GbObject3DPtr geoWallTop(new GbCuboid3D(g_maxX1 + 2.0, g_maxX2 + 2.0, g_maxX3 + 2.0, g_minX1 - 2.0, g_maxX2 - 2.0, g_minX3 -2.0)); + if (myid == 0) GbSystem3D::writeGeoObject(geoWallTop.get(), pathname + "/geo/geoWallTop", WbWriterVtkXmlBinary::getInstance()); + + GbObject3DPtr geoWallBottom(new GbCuboid3D(g_maxX1 + 2.0, g_minX2 + 2.0, g_maxX3 + 2.0, g_minX1 - 2.0, g_minX2 - 2.0, g_minX3 -2.0)); + if (myid == 0) GbSystem3D::writeGeoObject(geoWallBottom.get(), pathname + "/geo/geoWallBottom", WbWriterVtkXmlBinary::getInstance()); + + GbObject3DPtr geoWallNorth(new GbCuboid3D(g_maxX1 + 2.0, g_maxX2 + 2.0, g_minX3 + 2.0, g_minX1 - 2.0, g_minX2 - 2.0, g_minX3 -2.0)); + if (myid == 0) GbSystem3D::writeGeoObject(geoWallNorth.get(), pathname + "/geo/geoWallNorth", WbWriterVtkXmlBinary::getInstance()); + + GbObject3DPtr geoWallSouth(new GbCuboid3D(g_maxX1 + 2.0, g_maxX2 + 2.0, g_maxX3 + 2.0, g_minX1 - 2.0, g_minX2 - 2.0, g_maxX3 -2.0)); + if (myid == 0) GbSystem3D::writeGeoObject(geoWallSouth.get(), pathname + "/geo/geoWallSouth", WbWriterVtkXmlBinary::getInstance());*/ + + + //inflow + //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(40.0, 628.0, 40.0, 80, 631.0, 80.0)); // Original + GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1, g_minX2-0.5*dx, g_minX3, g_maxX1, g_minX2 - 1.0*dx, g_maxX3)); + if (myid==0) GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname+"/geo/geoInflowF1", WbWriterVtkXmlASCII::getInstance()); + + + + //outflow + //GbCuboid3DPtr geoOutflow(new GbCuboid3D(-1.0, 499+80, -1.0, 121.0, 501.0+80, 121.0)); // Original + GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1, g_maxX2-1*dx, g_minX3, g_maxX1, g_maxX2, g_maxX3)); + if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); + + + double blockLength = blocknx[0] * dx; + + + + + if (myid == 0) + { + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "Preprocess - start"); + } + + grid->setDeltaX(dx); + grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); + + grid->setPeriodicX1(true); + grid->setPeriodicX2(true); + grid->setPeriodicX3(true); + + + + GenBlocksGridVisitor genBlocks(gridCube); + grid->accept(genBlocks); + + + + + //BC Adapter + ////////////////////////////////////////////////////////////////////////////// + BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + + + BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + + 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); + + mu::Parser fctPhi_F2; + fctPhi_F2.SetExpr("phiL"); + fctPhi_F2.DefineConst("phiL", phiL); + + mu::Parser fctvel_F2_init; + 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 velBCAdapterF1 (new VelocityBCAdapterMultiphase(false, true, false, fctF1 , phiH, 0.0, endTime)); + + //BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiH, 0.0, endTime)); + //BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_2, phiH, 0.0, endTime)); + + //BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + //BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + + velBCAdapterF1->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + //velBCAdapterF2_1_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + //velBCAdapterF2_2_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + + + //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())); + + + ////////////////////////////////////////////////////////////////////////////////// + //BC visitor + BoundaryConditionsBlockVisitorMultiphase bcVisitor; + bcVisitor.addBC(noSlipBCAdapter); + bcVisitor.addBC(denBCAdapter); + bcVisitor.addBC(velBCAdapterF1); + //bcVisitor.addBC(velBCAdapterF2_1_init); + //bcVisitor.addBC(velBCAdapterF2_2_init); + + + + WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); + + ppblocks->process(0); + + //Interactor3DPtr tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::SOLID)); + //D3Q27InteractorPtr tubes = D3Q27InteractorPtr(new D3Q27Interactor(cylinder, grid, noSlipBCAdapter, Interactor3D::INVERSESOLID)); + + + + /*D3Q27InteractorPtr wallEast = D3Q27InteractorPtr(new D3Q27Interactor(geoWallEast, grid, noSlipBCAdapter, Interactor3D::SOLID)); + D3Q27InteractorPtr wallWest = D3Q27InteractorPtr(new D3Q27Interactor(geoWallWest, grid, noSlipBCAdapter, Interactor3D::SOLID)); + D3Q27InteractorPtr wallTop = D3Q27InteractorPtr(new D3Q27Interactor(geoWallTop, grid, noSlipBCAdapter, Interactor3D::SOLID)); + D3Q27InteractorPtr wallBottom = D3Q27InteractorPtr(new D3Q27Interactor(geoWallBottom, grid, noSlipBCAdapter, Interactor3D::SOLID)); + D3Q27InteractorPtr wallNorth = D3Q27InteractorPtr(new D3Q27Interactor(geoWallNorth, grid, noSlipBCAdapter, Interactor3D::SOLID)); + D3Q27InteractorPtr wallSouth = D3Q27InteractorPtr(new D3Q27Interactor(geoWallSouth, grid, noSlipBCAdapter, Interactor3D::SOLID));*/ + + D3Q27InteractorPtr inflowF1Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF1, grid, velBCAdapterF1, Interactor3D::SOLID)); + + D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(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); + + + Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW)); + InteractorsHelper intHelper(grid, metisVisitor); + //intHelper.addInteractor(tubes); + //intHelper.addInteractor(inflowF1Int); + //intHelper.addInteractor(outflowInt); + intHelper.selectBlocks(); + + + ppblocks->process(0); + ppblocks.reset(); + + unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks(); + int ghostLayer = 3; + unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]); + unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock; + unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer); + double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); + double needMem = needMemAll / double(comm->getNumberOfProcesses()); + + if (myid == 0) + { + UBLOG(logINFO, "Number of blocks = " << numberOfBlocks); + UBLOG(logINFO, "Number of nodes = " << numberOfNodes); + int minInitLevel = grid->getCoarsestInitializedLevel(); + int maxInitLevel = grid->getFinestInitializedLevel(); + for (int level = minInitLevel; level <= maxInitLevel; level++) + { + int nobl = grid->getNumberOfBlocks(level); + UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl); + UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock); + } + UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); + UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); + 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); + + SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem); + + grid->accept(kernelVisitor); + + if (refineLevel > 0) + { + SetUndefinedNodesBlockVisitor undefNodesVisitor; + grid->accept(undefNodesVisitor); + } + + //inflowF2_1Int->initInteractor(); + //inflowF2_2Int->initInteractor(); + + intHelper.setBC(); + + + grid->accept(bcVisitor); + + //initialization of distributions + LBMReal x1c = (g_maxX1+g_minX1)/2; //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*(phiH + phiL) - 0.5*uLB*(phiH - phiL)*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("phiL", phiL); + fct2.DefineConst("phiH", phiH); + fct2.DefineConst("radius", radius); + fct2.DefineConst("interfaceThickness", interfaceThickness); + + + mu::Parser fct3; + fct3.SetExpr("0.5*sigma*(phiH + phiL)/radius - 0.5*sigma/radius*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + fct3.DefineConst("sigma", sigma); + fct3.DefineConst("x1c", x1c); + fct3.DefineConst("x2c", x2c); + fct3.DefineConst("x3c", x3c); + fct3.DefineConst("phiL", phiL); + fct3.DefineConst("phiH", phiH); + fct3.DefineConst("radius", radius); + fct3.DefineConst("interfaceThickness", interfaceThickness); + + InitDistributionsBlockVisitorMultiphase initVisitor(densityRatio, interfaceThickness, radius); + initVisitor.setPhi(fct1); + //initVisitor.setVx1(fct2); + //initVisitor.setRho(fct3); + 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); + grid->accept(setConnsVisitor); + + //domain decomposition for threads + PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); + grid->accept(pqPartVisitor); + + + + + //boundary conditions grid + { + UbSchedulerPtr geoSch(new UbScheduler(1)); + WriteBoundaryConditionsCoProcessorPtr ppgeo( + new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); + ppgeo->process(0); + ppgeo.reset(); + } + + if (myid == 0) UBLOG(logINFO, "Preprocess - end"); + } + else + { + if (myid == 0) + { + UBLOG(logINFO, "Parameters:"); + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "number of levels = " << refineLevel + 1); + UBLOG(logINFO, "numOfThreads = " << numOfThreads); + UBLOG(logINFO, "path = " << pathname); + } + + 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"); + } + UbSchedulerPtr visSch(new UbScheduler(outTime)); + WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm); + + UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); + NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); + + + + + + + //UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000)); + //TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch)); + //inflowF2->addInteractor(inflowF2_1Int); + //inflowF2->addInteractor(inflowF2_2Int); + + //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI)); + CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch)); + if (myid == 0) UBLOG(logINFO, "Simulation-start"); + calculation->calculate(); + if (myid == 0) UBLOG(logINFO, "Simulation-end"); + } + catch (std::exception& e) + { + cerr << e.what() << endl << flush; + } + catch (std::string& s) + { + cerr << s << endl; + } + catch (...) + { + cerr << "unknown exception" << endl; + } + +} +int main(int argc, char* argv[]) +{ + //Sleep(30000); + if (argv != NULL) + { + if (argv[1] != NULL) + { + run(string(argv[1])); + } + else + { + cout << "Configuration file is missing!" << endl; + } + } + +} + diff --git a/apps/cpu/Multiphase/backup/Multiphase (Flow Focusing).cpp b/apps/cpu/Multiphase/backup/Multiphase (Flow Focusing).cpp new file mode 100644 index 0000000000000000000000000000000000000000..33333fc0dba8d082574e766e39c9573adbdde450 --- /dev/null +++ b/apps/cpu/Multiphase/backup/Multiphase (Flow Focusing).cpp @@ -0,0 +1,560 @@ +#include <iostream> +#include <string> + +#include "VirtualFluids.h" + +using namespace std; + + +void run(string configname) +{ + try + { + ConfigurationFile config; + config.load(configname); + + string pathname = config.getString("pathname"); + string pathGeo = config.getString("pathGeo"); + string geoFile = config.getString("geoFile"); + int numOfThreads = config.getInt("numOfThreads"); + vector<int> blocknx = config.getVector<int>("blocknx"); + vector<double> boundingBox = config.getVector<double>("boundingBox"); + //vector<double> length = config.getVector<double>("length"); + double uLB = config.getDouble("uLB"); + double uF2 = config.getDouble("uF2"); + double nuL = config.getDouble("nuL"); + double nuG = config.getDouble("nuG"); + double densityRatio = config.getDouble("densityRatio"); + double sigma = config.getDouble("sigma"); + int interfaceThickness = config.getInt("interfaceThickness"); + double radius = config.getDouble("radius"); + double theta = config.getDouble("contactAngle"); + double gr = config.getDouble("gravity"); + double phiL = config.getDouble("phi_L"); + double phiH = config.getDouble("phi_H"); + double tauH = config.getDouble("Phase-field Relaxation"); + double mob = config.getDouble("Mobility"); + + + double endTime = config.getDouble("endTime"); + double outTime = config.getDouble("outTime"); + double availMem = config.getDouble("availMem"); + int refineLevel = config.getInt("refineLevel"); + double Re = config.getDouble("Re"); + double dx = config.getDouble("dx"); + bool logToFile = config.getBool("logToFile"); + double restartStep = config.getDouble("restartStep"); + double cpStart = config.getValue<double>("cpStart"); + double cpStep = config.getValue<double>("cpStep"); + bool newStart = config.getValue<bool>("newStart"); + + double beta = 12*sigma/interfaceThickness; + double kappa = 1.5*interfaceThickness*sigma; + + CommunicatorPtr comm = MPICommunicator::getInstance(); + int myid = comm->getProcessID(); + + if (logToFile) + { +#if defined(__unix__) + if (myid == 0) + { + const char* str = pathname.c_str(); + mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + } +#endif + + if (myid == 0) + { + stringstream logFilename; + logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; + UbLog::output_policy::setStream(logFilename.str()); + } + } + + //Sleep(30000); + + LBMReal dLB; // = length[1] / dx; + LBMReal rhoLB = 0.0; + LBMReal nuLB = nuL; //(uLB*dLB) / Re; + + LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); + + const int baseLevel = 0; + + + + Grid3DPtr grid(new Grid3D(comm)); + //grid->setPeriodicX1(true); + //grid->setPeriodicX2(true); + //grid->setPeriodicX3(true); + ////////////////////////////////////////////////////////////////////////// + //restart + UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart)); + //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT); + MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm); + ////////////////////////////////////////////////////////////////////////// + + + //inflow + GbCuboid3DPtr geoInflowF1(new GbCuboid3D(-26.5, -1, 24.0, -22.5, 18.0, 78.0)); // For FlowFocusingS2 + if (myid==0) GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname+"/geo/geoInflowF1", WbWriterVtkXmlASCII::getInstance()); + + + GbCuboid3DPtr geoInflowF2_1(new GbCuboid3D(-1.0, -1.0, 0.5, 53.0, 18.0, 2.5)); // For FlowFocusingS2 + if (myid==0) GbSystem3D::writeGeoObject(geoInflowF2_1.get(), pathname+"/geo/geoInflowF2_1", WbWriterVtkXmlASCII::getInstance()); + + + GbCuboid3DPtr geoInflowF2_2(new GbCuboid3D(-1.0, -1.0, 63.5, 53.0, 18.0, 66.5)); // For FlowFocusingS2 + if (myid==0) GbSystem3D::writeGeoObject(geoInflowF2_2.get(), pathname+"/geo/geoInflowF2_2", WbWriterVtkXmlASCII::getInstance()); + + //outflow + GbCuboid3DPtr geoOutflow(new GbCuboid3D(178.5, -1, 24.0, 181.5, 18.0, 78.0)); // For FlowFocusingS2 + if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); + + + mu::Parser fctF1; + //fctF1.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))"); + fctF1.SetExpr("vx1"); + fctF1.DefineConst("vx1", uLB); + /*fctF1.DefineConst("R", 8.0); + fctF1.DefineConst("y0", 0.0); + fctF1.DefineConst("z0", 0.0);*/ + + fctF1.DefineConst("R", 10.0); // FlowFocusingSS , FlowFocusingS + fctF1.DefineConst("y0", 1.0); // FlowFocusingSS , FlowFocusingS + fctF1.DefineConst("z0", 31.0); // FlowFocusingSS , FlowFocusingS + + mu::Parser fctF2_1; + //fctF2_1.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))"); + fctF2_1.SetExpr("vx3"); + fctF2_1.DefineConst("vx3", uF2); + /*fctF2_1.DefineConst("R", 16.0); + fctF2_1.DefineConst("x0", 35.0); + fctF2_1.DefineConst("y0", 0.0);*/ + + fctF2_1.DefineConst("R", 12.0); // FlowFocusingSS , FlowFocusingS + fctF2_1.DefineConst("x0", 1.0); // FlowFocusingSS , FlowFocusingS + fctF2_1.DefineConst("y0", 1.0); // FlowFocusingSS , FlowFocusingS + + + mu::Parser fctF2_2; + //fctF2_2.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))"); + fctF2_2.SetExpr("vx3"); + fctF2_2.DefineConst("vx3", -uF2); + /*fctF2_2.DefineConst("R", 16.0); + fctF2_2.DefineConst("x0", 35.0); + fctF2_2.DefineConst("y0", 0.0);*/ + + fctF2_2.DefineConst("R", 12.0); // FlowFocusingSS , FlowFocusingS + fctF2_2.DefineConst("x0", 1.0); // FlowFocusingSS , FlowFocusingS + fctF2_2.DefineConst("y0", 1.0); // FlowFocusingSS , FlowFocusingS + + + /*mu::Parser fctF2_1; + fctF2_1.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))"); + fctF2_1.DefineConst("R", 12.0); + fctF2_1.DefineConst("vx3", uF2); + fctF2_1.DefineConst("x0", 1.0); + fctF2_1.DefineConst("y0", 1.0); + + mu::Parser fctF2_2; + fctF2_2.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))"); + fctF2_2.DefineConst("R", 12.0); + fctF2_2.DefineConst("vx3", -uF2); + fctF2_2.DefineConst("x0", 1.0); + fctF2_2.DefineConst("y0", 1.0); + + BCAdapterPtr velBCAdapterF2_1(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiL, 0.0, endTime)); + BCAdapterPtr velBCAdapterF2_2(new VelocityBCAdapterMultiphase(false, false, true, fctF2_2, phiL, 0.0, endTime)); + + D3Q27InteractorPtr inflowF2_1Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_1, grid, velBCAdapterF2_1, Interactor3D::SOLID)); + D3Q27InteractorPtr inflowF2_2Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_2, grid, velBCAdapterF2_2, Interactor3D::SOLID));*/ + + + + if (newStart) + { + + //bounding box + /*double g_minX1 = 0.0; + double g_minX2 = -length[1] / 2.0; + double g_minX3 = -length[2] / 2.0; + + double g_maxX1 = length[0]; + double g_maxX2 = length[1] / 2.0; + double g_maxX3 = length[2] / 2.0;*/ + + double g_minX1 = boundingBox[0]; + double g_minX2 = boundingBox[2]; + double g_minX3 = boundingBox[4]; + + double g_maxX1 = boundingBox[1]; + double g_maxX2 = boundingBox[3]; + 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()); + + + + + GbObject3DPtr 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()); + + GbTriFaceMesh3DPtr cylinder; + if (myid==0) UBLOG(logINFO, "Read geoFile:start"); + //cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); + cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT)); + GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance()); + + double blockLength = blocknx[0] * dx; + + + + if (myid == 0) + { + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "Preprocess - start"); + } + + grid->setDeltaX(dx); + grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); + + grid->setPeriodicX1(false); + grid->setPeriodicX2(false); + grid->setPeriodicX3(false); + + + + GenBlocksGridVisitor genBlocks(gridCube); + grid->accept(genBlocks); + + + + + //BC Adapter + ////////////////////////////////////////////////////////////////////////////// + BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + + + BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + + 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); + + mu::Parser fctPhi_F2; + fctPhi_F2.SetExpr("phiL"); + fctPhi_F2.DefineConst("phiL", phiL); + + mu::Parser fctvel_F2_init; + 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 velBCAdapterF1 (new VelocityBCAdapterMultiphase(true, false, false, fctF1 , phiH, 0.0, endTime)); + + BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiH, 0.0, endTime)); + BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_2, phiH, 0.0, endTime)); + + //BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + //BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + + velBCAdapterF1->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + velBCAdapterF2_1_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + velBCAdapterF2_2_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + + + //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())); + + + ////////////////////////////////////////////////////////////////////////////////// + //BC visitor + BoundaryConditionsBlockVisitorMultiphase bcVisitor; + bcVisitor.addBC(noSlipBCAdapter); + bcVisitor.addBC(denBCAdapter); + bcVisitor.addBC(velBCAdapterF1); + bcVisitor.addBC(velBCAdapterF2_1_init); + bcVisitor.addBC(velBCAdapterF2_2_init); + + + + WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); + + ppblocks->process(0); + + Interactor3DPtr tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::INVERSESOLID)); + + D3Q27InteractorPtr inflowF1Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF1, grid, velBCAdapterF1, Interactor3D::SOLID)); + + 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)); + + D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(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); + + + Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B)); + InteractorsHelper intHelper(grid, metisVisitor); + intHelper.addInteractor(tubes); + intHelper.addInteractor(inflowF1Int); + intHelper.addInteractor(inflowF2_1Int_init); + intHelper.addInteractor(inflowF2_2Int_init); + intHelper.addInteractor(outflowInt); + intHelper.selectBlocks(); + + + ppblocks->process(0); + ppblocks.reset(); + + unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks(); + int ghostLayer = 3; + unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]); + unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock; + unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer); + double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); + double needMem = needMemAll / double(comm->getNumberOfProcesses()); + + if (myid == 0) + { + UBLOG(logINFO, "Number of blocks = " << numberOfBlocks); + UBLOG(logINFO, "Number of nodes = " << numberOfNodes); + int minInitLevel = grid->getCoarsestInitializedLevel(); + int maxInitLevel = grid->getFinestInitializedLevel(); + for (int level = minInitLevel; level <= maxInitLevel; level++) + { + int nobl = grid->getNumberOfBlocks(level); + UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl); + UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock); + } + UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); + UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); + UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); + } + + LBMKernelPtr kernel; + + kernel = LBMKernelPtr(new MultiphaseCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], MultiphaseCumulantLBMKernel::NORMAL)); + + kernel->setWithForcing(false); + kernel->setForcingX1(gr); + kernel->setForcingX2(0.0); + 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); + + SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem); + + grid->accept(kernelVisitor); + + if (refineLevel > 0) + { + SetUndefinedNodesBlockVisitor undefNodesVisitor; + 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*((x1-x1c))/interfaceThickness)"); + fct1.SetExpr("phiH"); + 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);*/ + + + InitDistributionsBlockVisitorMultiphase 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); + grid->accept(setConnsVisitor); + + //domain decomposition for threads + PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); + grid->accept(pqPartVisitor); + + + + + //boundary conditions grid + { + UbSchedulerPtr geoSch(new UbScheduler(1)); + WriteBoundaryConditionsCoProcessorPtr ppgeo( + new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); + ppgeo->process(0); + ppgeo.reset(); + } + + if (myid == 0) UBLOG(logINFO, "Preprocess - end"); + } + else + { + if (myid == 0) + { + UBLOG(logINFO, "Parameters:"); + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "number of levels = " << refineLevel + 1); + UBLOG(logINFO, "numOfThreads = " << numOfThreads); + UBLOG(logINFO, "path = " << pathname); + } + + 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"); + } + UbSchedulerPtr visSch(new UbScheduler(outTime)); + WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm); + + UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); + NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); + + + + + + + UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000)); + TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch)); + //inflowF2->addInteractor(inflowF2_1Int); + //inflowF2->addInteractor(inflowF2_2Int); + + //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI)); + CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch)); + if (myid == 0) UBLOG(logINFO, "Simulation-start"); + calculation->calculate(); + if (myid == 0) UBLOG(logINFO, "Simulation-end"); + } + catch (std::exception& e) + { + cerr << e.what() << endl << flush; + } + catch (std::string& s) + { + cerr << s << endl; + } + catch (...) + { + cerr << "unknown exception" << endl; + } + +} +int main(int argc, char* argv[]) +{ + //Sleep(30000); + if (argv != NULL) + { + if (argv[1] != NULL) + { + run(string(argv[1])); + } + else + { + cout << "Configuration file is missing!" << endl; + } + } + +} + diff --git a/apps/cpu/Multiphase/backup/Multiphase (Jet breakup on Phoenix).cpp b/apps/cpu/Multiphase/backup/Multiphase (Jet breakup on Phoenix).cpp new file mode 100644 index 0000000000000000000000000000000000000000..9f28008987968254edb46a1b7750155aad4f5ced --- /dev/null +++ b/apps/cpu/Multiphase/backup/Multiphase (Jet breakup on Phoenix).cpp @@ -0,0 +1,508 @@ +#include <iostream> +#include <string> + +#include "VirtualFluids.h" + +using namespace std; + + +void run(string configname) +{ + try + { + ConfigurationFile config; + config.load(configname); + + string pathname = config.getString("pathname"); + string pathGeo = config.getString("pathGeo"); + string geoFile = config.getString("geoFile"); + int numOfThreads = config.getInt("numOfThreads"); + vector<int> blocknx = config.getVector<int>("blocknx"); + vector<double> boundingBox = config.getVector<double>("boundingBox"); + //vector<double> length = config.getVector<double>("length"); + double uLB = config.getDouble("uLB"); + double uF2 = config.getDouble("uF2"); + double nuL = config.getDouble("nuL"); + double nuG = config.getDouble("nuG"); + double densityRatio = config.getDouble("densityRatio"); + double sigma = config.getDouble("sigma"); + int interfaceThickness = config.getInt("interfaceThickness"); + double radius = config.getDouble("radius"); + double theta = config.getDouble("contactAngle"); + double gr = config.getDouble("gravity"); + double phiL = config.getDouble("phi_L"); + double phiH = config.getDouble("phi_H"); + double tauH = config.getDouble("Phase-field Relaxation"); + double mob = config.getDouble("Mobility"); + + + double endTime = config.getDouble("endTime"); + double outTime = config.getDouble("outTime"); + double availMem = config.getDouble("availMem"); + int refineLevel = config.getInt("refineLevel"); + double Re = config.getDouble("Re"); + double dx = config.getDouble("dx"); + bool logToFile = config.getBool("logToFile"); + double restartStep = config.getDouble("restartStep"); + double cpStart = config.getValue<double>("cpStart"); + double cpStep = config.getValue<double>("cpStep"); + bool newStart = config.getValue<bool>("newStart"); + + double beta = 12*sigma/interfaceThickness; + double kappa = 1.5*interfaceThickness*sigma; + + CommunicatorPtr comm = MPICommunicator::getInstance(); + int myid = comm->getProcessID(); + + if (logToFile) + { +#if defined(__unix__) + if (myid == 0) + { + const char* str = pathname.c_str(); + mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + } +#endif + + if (myid == 0) + { + stringstream logFilename; + logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; + UbLog::output_policy::setStream(logFilename.str()); + } + } + + //Sleep(30000); + + LBMReal dLB; // = length[1] / dx; + LBMReal rhoLB = 0.0; + LBMReal nuLB = nuL; //(uLB*dLB) / Re; + + LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); + + const int baseLevel = 0; + + + + Grid3DPtr grid(new Grid3D(comm)); + //grid->setPeriodicX1(true); + //grid->setPeriodicX2(true); + //grid->setPeriodicX3(true); + ////////////////////////////////////////////////////////////////////////// + //restart + UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart)); + //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT); + MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm); + ////////////////////////////////////////////////////////////////////////// + + + + + + mu::Parser fctF1; + //fctF1.SetExpr("vy1*(1-((x1-x0)^2+(x3-z0)^2)/(R^2))"); + //fctF1.SetExpr("vy1*(1-(sqrt((x1-x0)^2+(x3-z0)^2)/R))^0.1"); + fctF1.SetExpr("vy1"); + fctF1.DefineConst("vy1", -uLB); + fctF1.DefineConst("R", 8.0); + fctF1.DefineConst("x0", 0.0); + fctF1.DefineConst("z0", 0.0); + + + if (newStart) + { + + //bounding box + /*double g_minX1 = 0.0; + double g_minX2 = -length[1] / 2.0; + double g_minX3 = -length[2] / 2.0; + + double g_maxX1 = length[0]; + double g_maxX2 = length[1] / 2.0; + double g_maxX3 = length[2] / 2.0;*/ + + double g_minX1 = boundingBox[0]; + double g_minX2 = boundingBox[2]; + double g_minX3 = boundingBox[4]; + + double g_maxX1 = boundingBox[1]; + double g_maxX2 = boundingBox[3]; + 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()); + + + + + GbObject3DPtr 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()); + + GbTriFaceMesh3DPtr cylinder; + if (myid==0) UBLOG(logINFO, "Read geoFile:start"); + //cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); + cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT)); + GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance()); + + + + //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, g_minX2-0.5*dx, g_minX3, g_maxX1, g_minX2 - 1.0*dx, g_maxX3)); + 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, g_maxX2-1*dx, g_minX3, g_maxX1, g_maxX2, g_maxX3)); + if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); + + + double blockLength = blocknx[0] * dx; + + + + if (myid == 0) + { + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "Preprocess - start"); + } + + grid->setDeltaX(dx); + grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); + + grid->setPeriodicX1(false); + grid->setPeriodicX2(false); + grid->setPeriodicX3(false); + + + + GenBlocksGridVisitor genBlocks(gridCube); + grid->accept(genBlocks); + + + + + //BC Adapter + ////////////////////////////////////////////////////////////////////////////// + BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + + + BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + + 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); + + mu::Parser fctPhi_F2; + fctPhi_F2.SetExpr("phiL"); + fctPhi_F2.DefineConst("phiL", phiL); + + mu::Parser fctvel_F2_init; + 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 velBCAdapterF1 (new VelocityBCAdapterMultiphase(false, true, false, fctF1 , phiH, 0.0, endTime)); + + //BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiH, 0.0, endTime)); + //BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctF2_2, phiH, 0.0, endTime)); + + //BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + //BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + + velBCAdapterF1->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + //velBCAdapterF2_1_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + //velBCAdapterF2_2_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + + + //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())); + + + ////////////////////////////////////////////////////////////////////////////////// + //BC visitor + BoundaryConditionsBlockVisitorMultiphase bcVisitor; + bcVisitor.addBC(noSlipBCAdapter); + bcVisitor.addBC(denBCAdapter); + bcVisitor.addBC(velBCAdapterF1); + //bcVisitor.addBC(velBCAdapterF2_1_init); + //bcVisitor.addBC(velBCAdapterF2_2_init); + + + + WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); + + ppblocks->process(0); + + Interactor3DPtr tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::SOLID)); + + D3Q27InteractorPtr inflowF1Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF1, grid, velBCAdapterF1, Interactor3D::SOLID)); + + //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)); + + D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(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); + + + Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW)); + InteractorsHelper intHelper(grid, metisVisitor); + intHelper.addInteractor(tubes); + intHelper.addInteractor(inflowF1Int); + intHelper.addInteractor(outflowInt); + intHelper.selectBlocks(); + + + ppblocks->process(0); + ppblocks.reset(); + + unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks(); + int ghostLayer = 3; + unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]); + unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock; + unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer); + double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); + double needMem = needMemAll / double(comm->getNumberOfProcesses()); + + if (myid == 0) + { + UBLOG(logINFO, "Number of blocks = " << numberOfBlocks); + UBLOG(logINFO, "Number of nodes = " << numberOfNodes); + int minInitLevel = grid->getCoarsestInitializedLevel(); + int maxInitLevel = grid->getFinestInitializedLevel(); + for (int level = minInitLevel; level <= maxInitLevel; level++) + { + int nobl = grid->getNumberOfBlocks(level); + UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl); + UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock); + } + UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); + UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); + 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); + + SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem); + + grid->accept(kernelVisitor); + + if (refineLevel > 0) + { + SetUndefinedNodesBlockVisitor undefNodesVisitor; + 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);*/ + + + InitDistributionsBlockVisitorMultiphase 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); + grid->accept(setConnsVisitor); + + //domain decomposition for threads + //PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); + //grid->accept(pqPartVisitor); + + + + + //boundary conditions grid + { + UbSchedulerPtr geoSch(new UbScheduler(1)); + WriteBoundaryConditionsCoProcessorPtr ppgeo( + new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); + ppgeo->process(0); + ppgeo.reset(); + } + + if (myid == 0) UBLOG(logINFO, "Preprocess - end"); + } + else + { + if (myid == 0) + { + UBLOG(logINFO, "Parameters:"); + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "number of levels = " << refineLevel + 1); + UBLOG(logINFO, "numOfThreads = " << numOfThreads); + UBLOG(logINFO, "path = " << pathname); + } + + 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"); + } + UbSchedulerPtr visSch(new UbScheduler(outTime)); + WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm); + + UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); + NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); + + + + + + + //UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000)); + //TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch)); + //inflowF2->addInteractor(inflowF2_1Int); + //inflowF2->addInteractor(inflowF2_2Int); + + //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI)); + CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch)); + if (myid == 0) UBLOG(logINFO, "Simulation-start"); + calculation->calculate(); + if (myid == 0) UBLOG(logINFO, "Simulation-end"); + } + catch (std::exception& e) + { + cerr << e.what() << endl << flush; + } + catch (std::string& s) + { + cerr << s << endl; + } + catch (...) + { + cerr << "unknown exception" << endl; + } + +} +int main(int argc, char* argv[]) +{ + //Sleep(30000); + if (argv != NULL) + { + if (argv[1] != NULL) + { + run(string(argv[1])); + } + else + { + cout << "Configuration file is missing!" << endl; + } + } + +} + diff --git a/apps/cpu/Multiphase/backup/Multiphase (T-Junction).cpp b/apps/cpu/Multiphase/backup/Multiphase (T-Junction).cpp new file mode 100644 index 0000000000000000000000000000000000000000..18651e4a5584a7eda7bd3aea4dc8789eb03e1d15 --- /dev/null +++ b/apps/cpu/Multiphase/backup/Multiphase (T-Junction).cpp @@ -0,0 +1,488 @@ +#include <iostream> +#include <string> + +#include "VirtualFluids.h" + +using namespace std; + + +void run(string configname) +{ + try + { + ConfigurationFile config; + config.load(configname); + + string pathname = config.getString("pathname"); + string pathGeo = config.getString("pathGeo"); + string geoFile = config.getString("geoFile"); + int numOfThreads = config.getInt("numOfThreads"); + vector<int> blocknx = config.getVector<int>("blocknx"); + vector<double> boundingBox = config.getVector<double>("boundingBox"); + //vector<double> length = config.getVector<double>("length"); + double uLB = config.getDouble("uLB"); + double uF2 = config.getDouble("uF2"); + double nuL = config.getDouble("nuL"); + double nuG = config.getDouble("nuG"); + double densityRatio = config.getDouble("densityRatio"); + double sigma = config.getDouble("sigma"); + int interfaceThickness = config.getInt("interfaceThickness"); + double radius = config.getDouble("radius"); + double theta = config.getDouble("contactAngle"); + double gr = config.getDouble("gravity"); + double phiL = config.getDouble("phi_L"); + double phiH = config.getDouble("phi_H"); + double tauH = config.getDouble("Phase-field Relaxation"); + double mob = config.getDouble("Mobility"); + + + double endTime = config.getDouble("endTime"); + double outTime = config.getDouble("outTime"); + double availMem = config.getDouble("availMem"); + int refineLevel = config.getInt("refineLevel"); + double Re = config.getDouble("Re"); + double dx = config.getDouble("dx"); + bool logToFile = config.getBool("logToFile"); + double restartStep = config.getDouble("restartStep"); + double cpStart = config.getValue<double>("cpStart"); + double cpStep = config.getValue<double>("cpStep"); + bool newStart = config.getValue<bool>("newStart"); + + double beta = 12*sigma/interfaceThickness; + double kappa = 1.5*interfaceThickness*sigma; + + CommunicatorPtr comm = MPICommunicator::getInstance(); + int myid = comm->getProcessID(); + + if (logToFile) + { +#if defined(__unix__) + if (myid == 0) + { + const char* str = pathname.c_str(); + mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + } +#endif + + if (myid == 0) + { + stringstream logFilename; + logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; + UbLog::output_policy::setStream(logFilename.str()); + } + } + + //Sleep(30000); + + LBMReal dLB; // = length[1] / dx; + LBMReal rhoLB = 0.0; + LBMReal nuLB = nuL; //(uLB*dLB) / Re; + + LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); + + const int baseLevel = 0; + + + + Grid3DPtr grid(new Grid3D(comm)); + //grid->setPeriodicX1(true); + //grid->setPeriodicX2(true); + //grid->setPeriodicX3(true); + ////////////////////////////////////////////////////////////////////////// + //restart + UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart)); + //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT); + MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm); + ////////////////////////////////////////////////////////////////////////// + + //inflow + GbCuboid3DPtr geoInflowF1(new GbCuboid3D(-2.0, -25.0, -25.0, 0.5, 25.0, 25.0)); + if (myid==0) GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname+"/geo/geoInflowF1", WbWriterVtkXmlASCII::getInstance()); + + GbCuboid3DPtr geoInflowF2_1(new GbCuboid3D(35.0, -15.0, 62.0, 65.0, 15.0, 59.5)); + if (myid==0) GbSystem3D::writeGeoObject(geoInflowF2_1.get(), pathname+"/geo/geoInflowF2_1", WbWriterVtkXmlASCII::getInstance()); + + + //outflow + GbCuboid3DPtr geoOutflow(new GbCuboid3D(179.5, -25.0, -25.0, 182.0, 25.0, 25.0)); + if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); + + + mu::Parser fctF1; + fctF1.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))"); + fctF1.DefineConst("R", 12.0); + fctF1.DefineConst("vx1", uLB); + fctF1.DefineConst("y0", 0.0); + fctF1.DefineConst("z0", 0.0); + + + mu::Parser fctF2_1; + fctF2_1.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))"); + fctF2_1.DefineConst("R", 10.0); + fctF2_1.DefineConst("vx3", -uF2); + fctF2_1.DefineConst("x0", 50.0); + fctF2_1.DefineConst("y0", 0.0); + + + BCAdapterPtr velBCAdapterF1(new VelocityBCAdapterMultiphase(true, false, false, fctF1, phiL, 0.0, endTime)); + BCAdapterPtr velBCAdapterF2_1(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiH, 0.0, endTime)); + + + + + + + + if (newStart) + { + + //bounding box + /*double g_minX1 = 0.0; + double g_minX2 = -length[1] / 2.0; + double g_minX3 = -length[2] / 2.0; + + double g_maxX1 = length[0]; + double g_maxX2 = length[1] / 2.0; + double g_maxX3 = length[2] / 2.0;*/ + + double g_minX1 = boundingBox[0]; + double g_minX2 = boundingBox[2]; + double g_minX3 = boundingBox[4]; + + double g_maxX1 = boundingBox[1]; + double g_maxX2 = boundingBox[3]; + double g_maxX3 = boundingBox[5]; + + //geometry + + GbObject3DPtr 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()); + + GbTriFaceMesh3DPtr cylinder; + if (myid==0) UBLOG(logINFO, "Read geoFile:start"); + //cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); + cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT)); + GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance()); + + double blockLength = blocknx[0] * dx; + + + + if (myid == 0) + { + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "Preprocess - start"); + } + + grid->setDeltaX(dx); + grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); + + grid->setPeriodicX1(false); + grid->setPeriodicX2(false); + grid->setPeriodicX3(false); + + + + GenBlocksGridVisitor genBlocks(gridCube); + grid->accept(genBlocks); + + + + //BC Adapter + ////////////////////////////////////////////////////////////////////////////// + BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + + + BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + + 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(); + + + + //fct.SetExpr("U"); + //fct.DefineConst("U", uLB); + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); + + + + + + velBCAdapterF1->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + velBCAdapterF2_1->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + + //velBCAdapterF2_2_init->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + + + //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())); + + + ////////////////////////////////////////////////////////////////////////////////// + //BC visitor + BoundaryConditionsBlockVisitorMultiphase bcVisitor; + bcVisitor.addBC(noSlipBCAdapter); + bcVisitor.addBC(denBCAdapter); + bcVisitor.addBC(velBCAdapterF1); + bcVisitor.addBC(velBCAdapterF2_1); + + + + + WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); + + ppblocks->process(0); + + Interactor3DPtr tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::INVERSESOLID)); + + D3Q27InteractorPtr inflowF1Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF1, grid, velBCAdapterF1, Interactor3D::SOLID)); + + D3Q27InteractorPtr inflowF2_1Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_1, grid, velBCAdapterF2_1, Interactor3D::SOLID)); + + D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(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); + + + Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B)); + InteractorsHelper intHelper(grid, metisVisitor); + intHelper.addInteractor(tubes); + intHelper.addInteractor(inflowF1Int); + intHelper.addInteractor(inflowF2_1Int); + intHelper.addInteractor(outflowInt); + intHelper.selectBlocks(); + + + ppblocks->process(0); + ppblocks.reset(); + + unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks(); + int ghostLayer = 3; + unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]); + unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock; + unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer); + double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); + double needMem = needMemAll / double(comm->getNumberOfProcesses()); + + if (myid == 0) + { + UBLOG(logINFO, "Number of blocks = " << numberOfBlocks); + UBLOG(logINFO, "Number of nodes = " << numberOfNodes); + int minInitLevel = grid->getCoarsestInitializedLevel(); + int maxInitLevel = grid->getFinestInitializedLevel(); + for (int level = minInitLevel; level <= maxInitLevel; level++) + { + int nobl = grid->getNumberOfBlocks(level); + UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl); + UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock); + } + UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); + UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); + UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); + } + + LBMKernelPtr kernel; + + kernel = LBMKernelPtr(new MultiphaseCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], MultiphaseCumulantLBMKernel::NORMAL)); + + kernel->setWithForcing(false); + kernel->setForcingX1(gr); + kernel->setForcingX2(0.0); + 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); + + SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem); + + grid->accept(kernelVisitor); + + if (refineLevel > 0) + { + SetUndefinedNodesBlockVisitor undefNodesVisitor; + 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*((x3-x1c))/interfaceThickness)"); + + //fct1.SetExpr("phiH"); + 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);*/ + + + InitDistributionsBlockVisitorMultiphase 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); + grid->accept(setConnsVisitor); + + //domain decomposition for threads + PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); + grid->accept(pqPartVisitor); + + + + + //boundary conditions grid + { + UbSchedulerPtr geoSch(new UbScheduler(1)); + WriteBoundaryConditionsCoProcessorPtr ppgeo( + new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); + ppgeo->process(0); + ppgeo.reset(); + } + + if (myid == 0) UBLOG(logINFO, "Preprocess - end"); + } + else + { + if (myid == 0) + { + UBLOG(logINFO, "Parameters:"); + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "number of levels = " << refineLevel + 1); + UBLOG(logINFO, "numOfThreads = " << numOfThreads); + UBLOG(logINFO, "path = " << pathname); + } + + 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"); + } + UbSchedulerPtr visSch(new UbScheduler(outTime)); + WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm); + + UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); + NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); + + + + + + + UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000)); + TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch)); + //inflowF2->addInteractor(inflowF2_1Int); + //inflowF2->addInteractor(inflowF2_2Int); + + //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI)); + CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch)); + if (myid == 0) UBLOG(logINFO, "Simulation-start"); + calculation->calculate(); + if (myid == 0) UBLOG(logINFO, "Simulation-end"); + } + catch (std::exception& e) + { + cerr << e.what() << endl << flush; + } + catch (std::string& s) + { + cerr << s << endl; + } + catch (...) + { + cerr << "unknown exception" << endl; + } + +} +int main(int argc, char* argv[]) +{ + //Sleep(30000); + if (argv != NULL) + { + if (argv[1] != NULL) + { + run(string(argv[1])); + } + else + { + cout << "Configuration file is missing!" << endl; + } + } + +} + diff --git a/apps/cpu/Multiphase/backup/Multiphase (Thermal).cpp b/apps/cpu/Multiphase/backup/Multiphase (Thermal).cpp new file mode 100644 index 0000000000000000000000000000000000000000..a5d20b94a4a74331f55954088545df8f735faf71 --- /dev/null +++ b/apps/cpu/Multiphase/backup/Multiphase (Thermal).cpp @@ -0,0 +1,529 @@ +#include <iostream> +#include <string> + +#include "VirtualFluids.h" + +using namespace std; + + +void run(string configname) +{ + try + { + ConfigurationFile config; + config.load(configname); + + string pathname = config.getString("pathname"); + string pathGeo = config.getString("pathGeo"); + string geoFile = config.getString("geoFile"); + int numOfThreads = config.getInt("numOfThreads"); + vector<int> blocknx = config.getVector<int>("blocknx"); + vector<double> boundingBox = config.getVector<double>("boundingBox"); + //vector<double> length = config.getVector<double>("length"); + double uLB = config.getDouble("uLB"); + double uF2 = config.getDouble("uF2"); + double nuL = config.getDouble("nuL"); + double nuG = config.getDouble("nuG"); + double densityRatio = config.getDouble("densityRatio"); + double sigma = config.getDouble("sigma"); + int interfaceThickness = config.getInt("interfaceThickness"); + double radius = config.getDouble("radius"); + double theta = config.getDouble("contactAngle"); + double gr = config.getDouble("gravity"); + double phiL = config.getDouble("phi_L"); + double phiH = config.getDouble("phi_H"); + double tauH = config.getDouble("Phase-field Relaxation"); + double mob = config.getDouble("Mobility"); + + + double endTime = config.getDouble("endTime"); + double outTime = config.getDouble("outTime"); + double availMem = config.getDouble("availMem"); + int refineLevel = config.getInt("refineLevel"); + double Re = config.getDouble("Re"); + double dx = config.getDouble("dx"); + bool logToFile = config.getBool("logToFile"); + double restartStep = config.getDouble("restartStep"); + double cpStart = config.getValue<double>("cpStart"); + double cpStep = config.getValue<double>("cpStep"); + bool newStart = config.getValue<bool>("newStart"); + + double beta = 12*sigma/interfaceThickness; + double kappa = 1.5*interfaceThickness*sigma; + + CommunicatorPtr comm = MPICommunicator::getInstance(); + int myid = comm->getProcessID(); + + if (logToFile) + { +#if defined(__unix__) + if (myid == 0) + { + const char* str = pathname.c_str(); + mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + } +#endif + + if (myid == 0) + { + stringstream logFilename; + logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; + UbLog::output_policy::setStream(logFilename.str()); + } + } + + //Sleep(30000); + + LBMReal dLB; // = length[1] / dx; + LBMReal rhoLB = 0.0; + LBMReal nuLB = nuL; //(uLB*dLB) / Re; + + LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); + + const int baseLevel = 0; + + + + Grid3DPtr grid(new Grid3D(comm)); + //grid->setPeriodicX1(true); + //grid->setPeriodicX2(true); + //grid->setPeriodicX3(true); + ////////////////////////////////////////////////////////////////////////// + //restart + UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart)); + //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT); + MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm); + ////////////////////////////////////////////////////////////////////////// + + + + + + + + mu::Parser fctF1; + //fctF1.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))"); + fctF1.SetExpr("vx1"); + fctF1.DefineConst("vx1", 0.0); + /*fctF1.DefineConst("R", 8.0); + fctF1.DefineConst("y0", 0.0); + fctF1.DefineConst("z0", 0.0);*/ + + fctF1.DefineConst("R", 10.0); // FlowFocusingSS , FlowFocusingS + fctF1.DefineConst("y0", 1.0); // FlowFocusingSS , FlowFocusingS + fctF1.DefineConst("z0", 31.0); // FlowFocusingSS , FlowFocusingS + + + + + /*mu::Parser fctF2_1; + fctF2_1.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))"); + fctF2_1.DefineConst("R", 12.0); + fctF2_1.DefineConst("vx3", uF2); + fctF2_1.DefineConst("x0", 1.0); + fctF2_1.DefineConst("y0", 1.0); + + mu::Parser fctF2_2; + fctF2_2.SetExpr("vx3*(1-((x1-x0)^2+(x2-y0)^2)/(R^2))"); + fctF2_2.DefineConst("R", 12.0); + fctF2_2.DefineConst("vx3", -uF2); + fctF2_2.DefineConst("x0", 1.0); + fctF2_2.DefineConst("y0", 1.0); + + BCAdapterPtr velBCAdapterF2_1(new VelocityBCAdapterMultiphase(false, false, true, fctF2_1, phiL, 0.0, endTime)); + BCAdapterPtr velBCAdapterF2_2(new VelocityBCAdapterMultiphase(false, false, true, fctF2_2, phiL, 0.0, endTime)); + + D3Q27InteractorPtr inflowF2_1Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_1, grid, velBCAdapterF2_1, Interactor3D::SOLID)); + D3Q27InteractorPtr inflowF2_2Int = D3Q27InteractorPtr(new D3Q27Interactor(geoInflowF2_2, grid, velBCAdapterF2_2, Interactor3D::SOLID));*/ + + + + if (newStart) + { + + //bounding box + /*double g_minX1 = 0.0; + double g_minX2 = -length[1] / 2.0; + double g_minX3 = -length[2] / 2.0; + + double g_maxX1 = length[0]; + double g_maxX2 = length[1] / 2.0; + double g_maxX3 = length[2] / 2.0;*/ + + double g_minX1 = boundingBox[0]; + double g_minX2 = boundingBox[2]; + double g_minX3 = boundingBox[4]; + + double g_maxX1 = boundingBox[1]; + double g_maxX2 = boundingBox[3]; + 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()); + + + + + GbObject3DPtr 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()); + + GbTriFaceMesh3DPtr cylinder; + if (myid==0) UBLOG(logINFO, "Read geoFile:start"); + //cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); + cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT)); + GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance()); + + double blockLength = blocknx[0] * dx; + + + + + if (myid == 0) + { + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "Preprocess - start"); + } + + grid->setDeltaX(dx); + grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); + + grid->setPeriodicX1(true); + grid->setPeriodicX2(false); + grid->setPeriodicX3(true); + + + + GenBlocksGridVisitor genBlocks(gridCube); + grid->accept(genBlocks); + + + + + //BC Adapter + ////////////////////////////////////////////////////////////////////////////// + BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + + + BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + + 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(); + + GbCuboid3DPtr geoBottomWall(new GbCuboid3D(g_minX1-2, g_minX2-1, g_minX3-2, g_maxX1+2, g_minX2+1, g_maxX3+2)); // For FlowFocusingS2 + if (myid==0) GbSystem3D::writeGeoObject(geoBottomWall.get(), pathname+"/geo/geoBottomWall", WbWriterVtkXmlASCII::getInstance()); + + GbCuboid3DPtr geoTopWall(new GbCuboid3D(g_minX1-2, g_maxX2-1, g_minX3-2, g_maxX1+2, g_maxX2+1, g_maxX3+2)); // For FlowFocusingS2 + if (myid==0) GbSystem3D::writeGeoObject(geoTopWall.get(), pathname+"/geo/geoTopWall", WbWriterVtkXmlASCII::getInstance()); + + + + mu::Parser fctPhi_F1; + fctPhi_F1.SetExpr("phiH"); + fctPhi_F1.DefineConst("phiH", phiH); + + mu::Parser fctPhi_F2; + fctPhi_F2.SetExpr("phiL"); + fctPhi_F2.DefineConst("phiL", phiL); + + mu::Parser fctvel_F2_init; + 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 velBCAdapterBottom(new VelocityBCAdapterMultiphase(false, false, true, fctF1, phiH, 0.0, endTime)); + BCAdapterPtr velBCAdapterTop (new VelocityBCAdapterMultiphase(true, false, false, fctF1 , phiL, 0.0, endTime)); + + + + //BCAdapterPtr velBCAdapterF2_1_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + //BCAdapterPtr velBCAdapterF2_2_init(new VelocityBCAdapterMultiphase(false, false, true, fctvel_F2_init, phiL, 0.0, endTime)); + + velBCAdapterBottom->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmThermal())); + velBCAdapterTop->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmThermal())); + + + + //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())); + + + ////////////////////////////////////////////////////////////////////////////////// + //BC visitor + BoundaryConditionsBlockVisitorMultiphase bcVisitor; + //bcVisitor.addBC(noSlipBCAdapter); + //bcVisitor.addBC(denBCAdapter); + bcVisitor.addBC(velBCAdapterBottom); + bcVisitor.addBC(velBCAdapterTop); + + + + + WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); + + ppblocks->process(0); + + //Interactor3DPtr tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, Interactor3D::INVERSESOLID)); + + D3Q27InteractorPtr bottomWallInt = D3Q27InteractorPtr(new D3Q27Interactor(geoBottomWall, grid, velBCAdapterBottom, Interactor3D::SOLID)); + + D3Q27InteractorPtr topWallInt = D3Q27InteractorPtr(new D3Q27Interactor(geoTopWall, grid, velBCAdapterTop, Interactor3D::SOLID)); + + + //SetSolidBlockVisitor visitor1(inflowF2_1Int, SetSolidBlockVisitor::BC); + //grid->accept(visitor1); + //SetSolidBlockVisitor visitor2(inflowF2_2Int, SetSolidBlockVisitor::BC); + //grid->accept(visitor2); + + + Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B)); + InteractorsHelper intHelper(grid, metisVisitor); + //intHelper.addInteractor(tubes); + intHelper.addInteractor(bottomWallInt); + intHelper.addInteractor(topWallInt); + //intHelper.addInteractor(inflowF2_2Int_init); + //intHelper.addInteractor(outflowInt); + intHelper.selectBlocks(); + + + ppblocks->process(0); + ppblocks.reset(); + + unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks(); + int ghostLayer = 3; + unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]); + unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock; + unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer); + double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); + double needMem = needMemAll / double(comm->getNumberOfProcesses()); + + if (myid == 0) + { + UBLOG(logINFO, "Number of blocks = " << numberOfBlocks); + UBLOG(logINFO, "Number of nodes = " << numberOfNodes); + int minInitLevel = grid->getCoarsestInitializedLevel(); + int maxInitLevel = grid->getFinestInitializedLevel(); + for (int level = minInitLevel; level <= maxInitLevel; level++) + { + int nobl = grid->getNumberOfBlocks(level); + UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl); + UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock); + } + UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); + UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); + UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); + } + + LBMKernelPtr kernel; + + kernel = LBMKernelPtr(new ThermalCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], ThermalCumulantLBMKernel::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); + + SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem); + + grid->accept(kernelVisitor); + + if (refineLevel > 0) + { + SetUndefinedNodesBlockVisitor undefNodesVisitor; + 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*((x1-x1c))/interfaceThickness)"); + + fct1.SetExpr("0.5*(phiH + phiL)"); + //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("0.005*cos(2*3.14159265*x1/50.0)"); + /*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);*/ + + + InitDistributionsBlockVisitorThermal initVisitor(densityRatio, interfaceThickness, radius); + initVisitor.setPhi(fct1); + initVisitor.setRho(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); + grid->accept(setConnsVisitor); + + //domain decomposition for threads + PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); + grid->accept(pqPartVisitor); + + + + + //boundary conditions grid + { + UbSchedulerPtr geoSch(new UbScheduler(1)); + WriteBoundaryConditionsCoProcessorPtr ppgeo( + new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); + ppgeo->process(0); + ppgeo.reset(); + } + + if (myid == 0) UBLOG(logINFO, "Preprocess - end"); + } + else + { + if (myid == 0) + { + UBLOG(logINFO, "Parameters:"); + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "number of levels = " << refineLevel + 1); + UBLOG(logINFO, "numOfThreads = " << numOfThreads); + UBLOG(logINFO, "path = " << pathname); + } + + 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"); + } + UbSchedulerPtr visSch(new UbScheduler(outTime)); + WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm); + + UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); + NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); + + + + + + + UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000)); + TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch)); + //inflowF2->addInteractor(inflowF2_1Int); + //inflowF2->addInteractor(inflowF2_2Int); + + //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI)); + CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch)); + if (myid == 0) UBLOG(logINFO, "Simulation-start"); + calculation->calculate(); + if (myid == 0) UBLOG(logINFO, "Simulation-end"); + } + catch (std::exception& e) + { + cerr << e.what() << endl << flush; + } + catch (std::string& s) + { + cerr << s << endl; + } + catch (...) + { + cerr << "unknown exception" << endl; + } + +} +int main(int argc, char* argv[]) +{ + //Sleep(30000); + if (argv != NULL) + { + if (argv[1] != NULL) + { + run(string(argv[1])); + } + else + { + cout << "Configuration file is missing!" << endl; + } + } + +} + diff --git a/apps/cpu/Multiphase/backup/Multiphase (Tube).cpp b/apps/cpu/Multiphase/backup/Multiphase (Tube).cpp new file mode 100644 index 0000000000000000000000000000000000000000..5795ec61054dfa359fd4038ce7f8f1f263b6ee71 --- /dev/null +++ b/apps/cpu/Multiphase/backup/Multiphase (Tube).cpp @@ -0,0 +1,404 @@ +#include <iostream> +#include <string> + +#include "VirtualFluids.h" + +using namespace std; + + +void run(string configname) +{ + try + { + ConfigurationFile config; + config.load(configname); + + string pathname = config.getString("pathname"); + int numOfThreads = config.getInt("numOfThreads"); + vector<int> blocknx = config.getVector<int>("blocknx"); + double uLB = config.getDouble("uLB"); + double nuL = config.getDouble("nuL"); + double nuG = config.getDouble("nuG"); + double densityRatio = config.getDouble("densityRatio"); + double sigma = config.getDouble("sigma"); + int interfaceThickness = config.getInt("interfaceThickness"); + double radius = config.getDouble("radius"); + double theta = config.getDouble("contactAngle"); + + + double endTime = config.getDouble("endTime"); + double outTime = config.getDouble("outTime"); + double availMem = config.getDouble("availMem"); + int refineLevel = config.getInt("refineLevel"); + double Re = config.getDouble("Re"); + double dx = config.getDouble("dx"); + vector<double> length = config.getVector<double>("length"); + bool logToFile = config.getBool("logToFile"); + double restartStep = config.getDouble("restartStep"); + double cpStart = config.getValue<double>("cpStart"); + double cpStep = config.getValue<double>("cpStep"); + bool newStart = config.getValue<bool>("newStart"); + + double beta = 12*sigma/interfaceThickness; + double kappa = 1.5*interfaceThickness*sigma; + + CommunicatorPtr comm = MPICommunicator::getInstance(); + int myid = comm->getProcessID(); + + if (logToFile) + { +#if defined(__unix__) + if (myid == 0) + { + const char* str = pathname.c_str(); + mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + } +#endif + + if (myid == 0) + { + stringstream logFilename; + logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; + UbLog::output_policy::setStream(logFilename.str()); + } + } + + //Sleep(30000); + + LBMReal dLB = length[1] / dx; + LBMReal rhoLB = 0.0; + LBMReal nuLB = (uLB*dLB) / Re; + + LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); + + const int baseLevel = 0; + + + + Grid3DPtr grid(new Grid3D(comm)); + //grid->setPeriodicX1(true); + //grid->setPeriodicX2(true); + //grid->setPeriodicX3(true); + ////////////////////////////////////////////////////////////////////////// + //restart + UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart)); + //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT); + MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm); + ////////////////////////////////////////////////////////////////////////// + + if (newStart) + { + + //bounding box + /*double g_minX1 = 0.0; + double g_minX2 = -length[1] / 2.0; + double g_minX3 = -length[2] / 2.0; + + double g_maxX1 = length[0]; + double g_maxX2 = length[1] / 2.0; + double g_maxX3 = length[2] / 2.0;*/ + + double g_minX1 = 0.0; + double g_minX2 = 0.0; + double g_minX3 = 0.0; + + double g_maxX1 = length[0]; + double g_maxX2 = length[1]; + double g_maxX3 = length[2]; + + //geometry + + 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)); + GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/cylinder", WbWriterVtkXmlBinary::getInstance()); + + GbObject3DPtr 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()); + + + double blockLength = blocknx[0] * dx; + + + + if (myid == 0) + { + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "Preprocess - start"); + } + + grid->setDeltaX(dx); + grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); + + grid->setPeriodicX1(false); + grid->setPeriodicX2(false); + grid->setPeriodicX3(false); + + + + GenBlocksGridVisitor genBlocks(gridCube); + grid->accept(genBlocks); + + //inflow + GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1 - 1.0*dx, g_minX2 - dx, g_minX3 - dx, g_minX1, g_maxX2, g_maxX3 + dx)); + if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname + "/geo/geoInflow", WbWriterVtkXmlASCII::getInstance()); + + //outflow + GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2, g_minX3 - dx, g_maxX1 + 2.0*dx, g_maxX2 + dx, g_maxX3 + dx)); + if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + "/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); + + + //inflow + //GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_minX1, g_maxX2+blockLength, g_maxX3+blockLength)); + //if (myid==0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname+"/geo/geoInflow", WbWriterVtkXmlASCII::getInstance()); + + //outflow + //GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); + //if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); + + //BC Adapter + ////////////////////////////////////////////////////////////////////////////// + BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + + + BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + + double r = boost::dynamic_pointer_cast<GbCylinder3D>(cylinder)->getRadius(); + double cx1 = g_minX1; + double cx2 = cylinder->getX2Centroid(); + double cx3 = cylinder->getX3Centroid(); + + mu::Parser fct; + fct.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))"); + fct.DefineConst("x2Vmax", 0.0); //x2-Pos fuer vmax + fct.DefineConst("x3Vmax", 0.0); //x3-Pos fuer vmax + fct.DefineConst("R", r); + fct.DefineConst("vx1", uLB); + fct.DefineConst("x0", cx1); + fct.DefineConst("y0", cx2); + fct.DefineConst("z0", cx3); + //fct.DefineConst("nue", nuLB); + //fct.SetExpr("U"); + //fct.DefineConst("U", uLB); + //BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); + BCAdapterPtr velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, endTime)); + velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + + + //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())); + + + ////////////////////////////////////////////////////////////////////////////////// + //BS visitor + BoundaryConditionsBlockVisitorMultiphase bcVisitor; + bcVisitor.addBC(noSlipBCAdapter); + bcVisitor.addBC(denBCAdapter); + bcVisitor.addBC(velBCAdapter); + + + + WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); + + ppblocks->process(0); + + D3Q27InteractorPtr cylinderInt(new D3Q27Interactor(cylinder, grid, noSlipBCAdapter, Interactor3D::INVERSESOLID)); + + D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID)); + + D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoOutflow, grid, denBCAdapter, Interactor3D::SOLID)); + + + Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B)); + InteractorsHelper intHelper(grid, metisVisitor); + intHelper.addInteractor(cylinderInt); + intHelper.addInteractor(inflowInt); + intHelper.addInteractor(outflowInt); + intHelper.selectBlocks(); + + + ppblocks->process(0); + ppblocks.reset(); + + unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks(); + int ghostLayer = 3; + unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]); + unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock; + unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer); + double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); + double needMem = needMemAll / double(comm->getNumberOfProcesses()); + + if (myid == 0) + { + UBLOG(logINFO, "Number of blocks = " << numberOfBlocks); + UBLOG(logINFO, "Number of nodes = " << numberOfNodes); + int minInitLevel = grid->getCoarsestInitializedLevel(); + int maxInitLevel = grid->getFinestInitializedLevel(); + for (int level = minInitLevel; level <= maxInitLevel; level++) + { + int nobl = grid->getNumberOfBlocks(level); + UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl); + UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock); + } + UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); + UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); + UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); + } + + LBMKernelPtr kernel; + + kernel = LBMKernelPtr(new MultiphaseCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], MultiphaseCumulantLBMKernel::NORMAL)); + + + BCProcessorPtr bcProc(new BCProcessor()); + //BCProcessorPtr bcProc(new ThinWallBCProcessor()); + + kernel->setBCProcessor(bcProc); + + SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem); + grid->accept(kernelVisitor); + + if (refineLevel > 0) + { + SetUndefinedNodesBlockVisitor undefNodesVisitor; + grid->accept(undefNodesVisitor); + } + + intHelper.setBC(); + + + grid->accept(bcVisitor); + + //initialization of distributions + LBMReal x1c = (length[0]-1)/2; + LBMReal x2c = (length[1]-1)/2; + LBMReal x3c = (length[2]-1)/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.DefineConst("x1c", x1c); + fct1.DefineConst("x2c", x2c); + fct1.DefineConst("x3c", x3c); + fct1.DefineConst("radius", radius); + fct1.DefineConst("interfaceThickness", interfaceThickness); + + mu::Parser fct2; + 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); + + + InitDistributionsBlockVisitorMultiphase 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); + grid->accept(setConnsVisitor); + + //domain decomposition for threads + PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); + grid->accept(pqPartVisitor); + + //boundary conditions grid + { + UbSchedulerPtr geoSch(new UbScheduler(1)); + WriteBoundaryConditionsCoProcessorPtr ppgeo( + new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); + ppgeo->process(0); + ppgeo.reset(); + } + + if (myid == 0) UBLOG(logINFO, "Preprocess - end"); + } + else + { + if (myid == 0) + { + UBLOG(logINFO, "Parameters:"); + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "number of levels = " << refineLevel + 1); + UBLOG(logINFO, "numOfThreads = " << numOfThreads); + UBLOG(logINFO, "path = " << pathname); + } + + 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"); + } + UbSchedulerPtr visSch(new UbScheduler(outTime)); + WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm); + + UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); + NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); + + //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI)); + CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch)); + if (myid == 0) UBLOG(logINFO, "Simulation-start"); + calculation->calculate(); + if (myid == 0) UBLOG(logINFO, "Simulation-end"); + } + catch (std::exception& e) + { + cerr << e.what() << endl << flush; + } + catch (std::string& s) + { + cerr << s << endl; + } + catch (...) + { + cerr << "unknown exception" << endl; + } + +} +int main(int argc, char* argv[]) +{ + //Sleep(30000); + if (argv != NULL) + { + if (argv[1] != NULL) + { + run(string(argv[1])); + } + else + { + cout << "Configuration file is missing!" << endl; + } + } + +} + diff --git a/apps/cpu/Multiphase/backup/Multiphase - Cfg_file (The last).txt b/apps/cpu/Multiphase/backup/Multiphase - Cfg_file (The last).txt new file mode 100644 index 0000000000000000000000000000000000000000..f0d6104808996b53dbd9ab63d9f761ba1ec70df4 --- /dev/null +++ b/apps/cpu/Multiphase/backup/Multiphase - Cfg_file (The last).txt @@ -0,0 +1,72 @@ +pathname = d:/temp/Multiphase +pathGeo = d:/Hesam/VirtualFluids/source/Applications/Multiphase +geoFile = FlowFocusingS2_Small.ast +#geoFile = T-Junction.ast +numOfThreads = 4 +availMem = 10e9 + +#Grid +#length = 50 50 50 +#length = 21 6 13 +#boundingBox = x1min x1max x2min x2max x3min x3max [mm] +#boundingBox = 0.5 219.5 -30 30 -30 30 +#boundingBox = -1 121 -30 30 -30 30 +#boundingBox = -32 128 -12 14 3 58 (FlowFocusingSS , FlowFocusingS) (X1 extendable until 128) +#blocknx = 10 13 11 +#boundingBox = 0.5 165.5 -17.5 17.5 -29.5 30.5 (FlowFocusing) +#blocknx = 11 7 10 +#boundingBox = -32 128 -12 14 -27 88 (FlowFocusingSL) +#blocknx = 10 13 5 +#boundingBox = 1 179 -21 21 -21 59 (T-Junction) +#blocknx = 8 7 8 +#boundingBox = -23 79 0 26 3 59 (FlowFocusingSq0-1) +#blocknx = 6 13 7 +#boundingBox = -23 179 0 26 3 59 (FlowFocusingSq2) +#blocknx = 6 13 7 +#boundingBox = -24 181 0 18 1 101 (FlowFocusingS2) +#blocknx = 5 9 10 + +boundingBox = -24.5 180.5 2.5 4.5 1.5 64.5 (FlowFocusingS2_Small) +blocknx = 5 2 9 + +#boundingBox = 0.5 50.5 0.5 50.5 0.5 50.5 (Droplet test) +#blocknx = 10 10 10 +dx = 1.0 +refineLevel = 0 + +#Simulation +uLB = 0.001 +uF2 = 0.001 +Re = 10 +#nuL = 3.3e-3 +nuL = 1.0e-2 +nuG = 1.36e-2 +#nuL = 0.16666 +#nuG = 0.16666 +densityRatio = 1.0495 +#densityRatio = 10.0 +sigma = 7.4e-4 +interfaceThickness = 3 +#radius = 10.0 (Droplet test) +#radius = -20.0 (FlowFocusingSS , FlowFocusingS) +radius = -5.0 (FlowFocusingSq) +#radius = 10.0 (FlowFocusing) +#radius = 20.0 (T-Junction) +contactAngle = 120.0 +gravity = 1.34e-5 +phi_L = 1.0 +phi_H = 0.0 +Phase-field Relaxation = 1.0 +Mobility = 0.05 + + +logToFile = false + +newStart = true +restartStep = 100000 + +cpStart = 100000 +cpStep = 100000 + +outTime = 200 +endTime = 20000000 \ No newline at end of file diff --git a/apps/cpu/Multiphase/backup/Multiphase.cfg b/apps/cpu/Multiphase/backup/Multiphase.cfg new file mode 100644 index 0000000000000000000000000000000000000000..3f19b6657a380c706a534577eab5cecdbe4fe637 --- /dev/null +++ b/apps/cpu/Multiphase/backup/Multiphase.cfg @@ -0,0 +1,115 @@ +pathname = d:/temp/Multiphase +pathGeo = d:/Hesam/VirtualFluids/source/Applications/Multiphase +geoFile = JetBreakup2.ast +#geoFile = T-Junction.ast +numOfThreads = 4 +availMem = 10e9 + +#Grid +#length = 50 50 50 +#length = 21 6 13 +#boundingBox = x1min x1max x2min x2max x3min x3max [mm] +#boundingBox = 0.5 219.5 -30 30 -30 30 +#boundingBox = -1 121 -30 30 -30 30 +#boundingBox = -32 128 -12 14 3 58 (FlowFocusingSS , FlowFocusingS) (X1 extendable until 128) +#blocknx = 10 13 11 +#boundingBox = 0.5 165.5 -17.5 17.5 -29.5 30.5 (FlowFocusing) +#blocknx = 11 7 10 +#boundingBox = -32 128 -12 14 -27 88 (FlowFocusingSL) +#blocknx = 10 13 5 +#boundingBox = 1 179 -21 21 -21 59 (T-Junction) +#blocknx = 8 7 8 +#boundingBox = -23 79 0 26 3 59 (FlowFocusingSq0-1) +#blocknx = 6 13 7 +#boundingBox = -23 179 0 26 3 59 (FlowFocusingSq2) +#blocknx = 6 13 7 +#boundingBox = -24 181 0 18 1 101 (FlowFocusingS2) +#blocknx = 5 9 10 + +#boundingBox = -24.5 180.5 2.5 4.5 1.5 64.5 (FlowFocusingS2_Small) (Periodic X2) +#blocknx = 5 2 9 + + +#boundingBox = -24.5 180.5 -1.5 11.5 1.5 64.5 (FlowFocusingS2_Small) (Original was 180.5) +#blocknx = 5 6 9 + +#boundingBox = -1.0 121.0 580.0 629.0 -1.0 121.0 (Jet Breakup) (Original) +#boundingBox = -50.0 50.0 -10.0 -60.0 -25.0 25.0 (Jet Breakup2) (Original) + + + +#boundingBox = 0.5 50.5 0.5 50.5 0.5 50.5 (Droplet test) +#blocknx = 10 10 10 + + + +# Grid + +boundingBox = 0.5 50.5 0.5 50.5 0.5 50.5 (Jet Breakup2) (Original) +#blocknx = 50 50 50 +blocknx = 10 10 10 +dx = 1.0 +refineLevel = 0 + +# Boundary Condition +# Boundary type tags: 1: no-slip 2:velocity 3:outflow 4: slip + +isEastBoundary = false +isWestBoundary = false +isNorthBoundary = false +isSouthBoundary = false +isTopBoundary = false +isBottomBoundary = false + +eastBoundaryType = 4 +westBoundaryType = 4 +northBoundaryType = 4 +southBoundaryType = 4 +topBoundaryType = 0 +bottomBoundaryType = 0 + +isPeriodicX1 = true +isPeriodicX2 = true +isPeriodicX3 = true + + + + +# Initial profiles +isInitialVelocity = false +phaseFieldProfile = 0.5*(phiH + phiL) + 0.5*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness) +velocityProfile = 0.5*uLB*(phiH + phiL) - 0.5*uLB*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness) + + +#Simulation +uLB = 0.05 +uF2 = 0.0025 +Re = 10 +#nuL = 1.0e-1 +#nuG = 1.04e-1 +nuL = 1.160e-2 +nuG = 1.16e-1 +densityRatio = 813 +sigma = 1.56e-1 +interfaceThickness = 5 +radius = 10.0 (Droplet test) +#radius = -5.0 (FlowFocusing2D) +#radius = 615.0 (Jet Breakup) +contactAngle = 120.0 +gravity = 0.0 +phi_L = 0.0 +phi_H = 1.0 +Phase-field Relaxation = 0.55 +Mobility = 0.02 + + +logToFile = false + +newStart = true +restartStep = 100000 + +cpStart = 100000 +cpStep = 100000 + +outTime = 100 +endTime = 200000 \ No newline at end of file diff --git a/apps/cpu/Multiphase/backup/Multiphase.cpp b/apps/cpu/Multiphase/backup/Multiphase.cpp new file mode 100644 index 0000000000000000000000000000000000000000..eae4ab93de060157422f29ae9984078e298194d4 --- /dev/null +++ b/apps/cpu/Multiphase/backup/Multiphase.cpp @@ -0,0 +1,755 @@ +#include <iostream> +#include <string> + +#include "VirtualFluids.h" + +using namespace std; + + +void run(string configname) +{ + try + { + ConfigurationFile config; + config.load(configname); + + string pathname = config.getString("pathname"); + string pathGeo = config.getString("pathGeo"); + string geoFile = config.getString("geoFile"); + int numOfThreads = config.getInt("numOfThreads"); + vector<int> blocknx = config.getVector<int>("blocknx"); + vector<double> boundingBox = config.getVector<double>("boundingBox"); + //vector<double> length = config.getVector<double>("length"); + double uLB = config.getDouble("uLB"); + double uF2 = config.getDouble("uF2"); + double nuL = config.getDouble("nuL"); + double nuG = config.getDouble("nuG"); + double densityRatio = config.getDouble("densityRatio"); + double sigma = config.getDouble("sigma"); + int interfaceThickness = config.getInt("interfaceThickness"); + double radius = config.getDouble("radius"); + double theta = config.getDouble("contactAngle"); + double gr = config.getDouble("gravity"); + double phiL = config.getDouble("phi_L"); + double phiH = config.getDouble("phi_H"); + double tauH = config.getDouble("Phase-field Relaxation"); + double mob = config.getDouble("Mobility"); + + + double endTime = config.getDouble("endTime"); + double outTime = config.getDouble("outTime"); + double availMem = config.getDouble("availMem"); + int refineLevel = config.getInt("refineLevel"); + double Re = config.getDouble("Re"); + double dx = config.getDouble("dx"); + bool logToFile = config.getBool("logToFile"); + double restartStep = config.getDouble("restartStep"); + double cpStart = config.getValue<double>("cpStart"); + double cpStep = config.getValue<double>("cpStep"); + bool newStart = config.getValue<bool>("newStart"); + + + bool isEastBoundary = config.getValue<bool>("isEastBoundary"); + bool isWestBoundary = config.getValue<bool>("isWestBoundary"); + bool isNorthBoundary = config.getValue<bool>("isNorthBoundary"); + bool isSouthBoundary = config.getValue<bool>("isSouthBoundary"); + bool isTopBoundary = config.getValue<bool>("isTopBoundary"); + bool isBottomBoundary = config.getValue<bool>("isBottomBoundary"); + bool isPeriodicX1 = config.getValue<bool>("isPeriodicX1"); + bool isPeriodicX2 = config.getValue<bool>("isPeriodicX2"); + bool isPeriodicX3 = config.getValue<bool>("isPeriodicX3"); + + int eastBoundaryType = config.getInt("eastBoundaryType"); + int westBoundaryType = config.getInt("westBoundaryType"); + int northBoundaryType = config.getInt("northBoundaryType"); + int southBoundaryType = config.getInt("southBoundaryType"); + int topBoundaryType = config.getInt("topBoundaryType"); + int bottomBoundaryType = config.getInt("bottomBoundaryType"); + + bool isInitialVelocity = config.getValue<bool>("isInitialVelocity"); + string phaseFieldProfile = config.getString("phaseFieldProfile"); + string velocityProfile = config.getString("velocityProfile"); + + double p_in = config.getDouble("p_in"); + double p_out = config.getDouble("p_out"); + + + + double beta = 12*sigma/interfaceThickness; + double kappa = 1.5*interfaceThickness*sigma; + + CommunicatorPtr comm = MPICommunicator::getInstance(); + int myid = comm->getProcessID(); + + if (logToFile) + { +#if defined(__unix__) + if (myid == 0) + { + const char* str = pathname.c_str(); + mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); + } +#endif + + if (myid == 0) + { + stringstream logFilename; + logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; + UbLog::output_policy::setStream(logFilename.str()); + } + } + + //Sleep(30000); + + LBMReal dLB; // = length[1] / dx; + LBMReal rhoLB = 0.0; + LBMReal nuLB = nuL; //(uLB*dLB) / Re; + + LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); + + const int baseLevel = 0; + + + + Grid3DPtr grid(new Grid3D(comm)); + //grid->setPeriodicX1(true); + //grid->setPeriodicX2(true); + //grid->setPeriodicX3(true); + ////////////////////////////////////////////////////////////////////////// + //restart + UbSchedulerPtr rSch(new UbScheduler(cpStep, cpStart)); + //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT); + MPIIORestart1CoProcessor rcp(grid, rSch, pathname, comm); + ////////////////////////////////////////////////////////////////////////// + + + + + + mu::Parser fctF1; + //fctF1.SetExpr("vy1*(1-((x1-x0)^2+(x3-z0)^2)/(R^2))"); + fctF1.SetExpr("vy1"); + fctF1.DefineConst("vy1", -uLB); + fctF1.DefineConst("R", 7.5); + fctF1.DefineConst("x0", 60.0); + fctF1.DefineConst("z0", 60.0); + + + if (newStart) + { + + //bounding box + /*double g_minX1 = 0.0; + double g_minX2 = -length[1] / 2.0; + double g_minX3 = -length[2] / 2.0; + + double g_maxX1 = length[0]; + double g_maxX2 = length[1] / 2.0; + double g_maxX3 = length[2] / 2.0;*/ + + double g_minX1 = boundingBox[0]; + double g_minX2 = boundingBox[2]; + double g_minX3 = boundingBox[4]; + + double g_maxX1 = boundingBox[1]; + double g_maxX2 = boundingBox[3]; + 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()); + + + + + GbObject3DPtr 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()); + + //GbTriFaceMesh3DPtr cylinder; + //if (myid==0) UBLOG(logINFO, "Read geoFile:start"); + //cylinder = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+geoFile, "geoCylinders", GbTriFaceMesh3D::KDTREE_SAHPLIT)); + //GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance()); + + /*GbObject3DPtr cylinder(new GbCuboid3D(g_minX1 + 2.0, g_minX2 + 2.0, g_minX3 + 2.0, g_maxX1 - 2.0, g_maxX2 - 2.0, g_maxX3 -2.0)); + if (myid == 0) GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/solidWall", WbWriterVtkXmlBinary::getInstance());*/ + + + double blockLength = blocknx[0] * dx; + + + + + if (myid == 0) + { + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "Preprocess - start"); + } + + grid->setDeltaX(dx); + grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); + + grid->setPeriodicX1(isPeriodicX1); + grid->setPeriodicX2(isPeriodicX2); + grid->setPeriodicX3(isPeriodicX3); + + + + GenBlocksGridVisitor genBlocks(gridCube); + grid->accept(genBlocks); + + WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); + + ppblocks->process(0); + + BoundaryConditionsBlockVisitorMultiphase bcVisitor; + + Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW)); + InteractorsHelper intHelper(grid, metisVisitor); + + + + + + if (isEastBoundary) + { + GbCuboid3DPtr geoEastBoundary(new GbCuboid3D(g_maxX1 + 1.0*dx, g_minX2 - 1.0*dx, g_minX3 - 1.0*dx, g_maxX1 - 1.0*dx, g_maxX2 + 1.0*dx, g_maxX3 + 1.0*dx)); + if (myid==0) GbSystem3D::writeGeoObject(geoEastBoundary.get(), pathname+"/geo/geoEastBoundary", WbWriterVtkXmlASCII::getInstance()); + + if (eastBoundaryType == 1) + { + BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + bcVisitor.addBC(noSlipBCAdapter); + D3Q27InteractorPtr eastBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoEastBoundary, grid, noSlipBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(eastBoundaryInt); + + } + + if (eastBoundaryType == 4) + { + BCAdapterPtr slipBCAdapter(new SlipBCAdapter()); + slipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new SlipBCAlgorithmMultiphase())); + bcVisitor.addBC(slipBCAdapter); + D3Q27InteractorPtr eastBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoEastBoundary, grid, slipBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(eastBoundaryInt); + } + + if (eastBoundaryType == 2) + { + BCAdapterPtr velBCAdapter (new VelocityBCAdapterMultiphase(true, false, false, fctF1 , phiH, 0.0, endTime)); + velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + bcVisitor.addBC(velBCAdapter); + D3Q27InteractorPtr eastBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoEastBoundary, grid, velBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(eastBoundaryInt); + } + + if (eastBoundaryType == 3) + { + BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + bcVisitor.addBC(denBCAdapter); + D3Q27InteractorPtr eastBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoEastBoundary, grid, denBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(eastBoundaryInt); + } + if (eastBoundaryType == 5) + { + BCAdapterPtr denBCAdapter(new DensityBCAdapter(p_out)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new EqDensityBCAlgorithm())); + bcVisitor.addBC(denBCAdapter); + D3Q27InteractorPtr eastBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoEastBoundary, grid, denBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(eastBoundaryInt); + } + + } + + + if (isWestBoundary) + { + GbCuboid3DPtr geoWestBoundary(new GbCuboid3D(g_minX1 + 1.0*dx, g_minX2 - 1.0*dx, g_minX3 - 1.0*dx, g_minX1 - 1.0*dx, g_maxX2 + 1.0*dx, g_maxX3 + 1.0*dx)); + if (myid==0) GbSystem3D::writeGeoObject(geoWestBoundary.get(), pathname+"/geo/geoWestBoundary", WbWriterVtkXmlASCII::getInstance()); + + if (westBoundaryType == 1) + { + BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + bcVisitor.addBC(noSlipBCAdapter); + D3Q27InteractorPtr westBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoWestBoundary, grid, noSlipBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(westBoundaryInt); + + } + + if (westBoundaryType == 4) + { + BCAdapterPtr slipBCAdapter(new SlipBCAdapter()); + slipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new SlipBCAlgorithmMultiphase())); + bcVisitor.addBC(slipBCAdapter); + D3Q27InteractorPtr westBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoWestBoundary, grid, slipBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(westBoundaryInt); + } + + if (westBoundaryType == 2) + { + BCAdapterPtr velBCAdapter (new VelocityBCAdapterMultiphase(true, false, false, fctF1 , phiH, 0.0, endTime)); + velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + bcVisitor.addBC(velBCAdapter); + D3Q27InteractorPtr westBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoWestBoundary, grid, velBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(westBoundaryInt); + } + + if (westBoundaryType == 3) + { + BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + bcVisitor.addBC(denBCAdapter); + D3Q27InteractorPtr westBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoWestBoundary, grid, denBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(westBoundaryInt); + } + if (westBoundaryType == 5) + { + BCAdapterPtr denBCAdapter(new DensityBCAdapter(p_in)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new EqDensityBCAlgorithm())); + bcVisitor.addBC(denBCAdapter); + D3Q27InteractorPtr westBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoWestBoundary, grid, denBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(westBoundaryInt); + } + + } + + + if (isNorthBoundary) + { + GbCuboid3DPtr geoNorthBoundary(new GbCuboid3D(g_minX1 - 1.0*dx, g_maxX2 + 1.0*dx, g_minX3 + 1.0*dx, g_maxX1 + 1.0*dx, g_minX2 - 1.0*dx, g_minX3 - 1.0*dx)); + if (myid==0) GbSystem3D::writeGeoObject(geoNorthBoundary.get(), pathname+"/geo/geoNorthBoundary", WbWriterVtkXmlASCII::getInstance()); + + if (northBoundaryType == 1) + { + BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + bcVisitor.addBC(noSlipBCAdapter); + D3Q27InteractorPtr northBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoNorthBoundary, grid, noSlipBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(northBoundaryInt); + + } + + if (northBoundaryType == 4) + { + BCAdapterPtr slipBCAdapter(new SlipBCAdapter()); + slipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new SlipBCAlgorithmMultiphase())); + bcVisitor.addBC(slipBCAdapter); + D3Q27InteractorPtr northBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoNorthBoundary, grid, slipBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(northBoundaryInt); + } + + if (northBoundaryType == 2) + { + BCAdapterPtr velBCAdapter (new VelocityBCAdapterMultiphase(true, false, false, fctF1 , phiH, 0.0, endTime)); + velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + bcVisitor.addBC(velBCAdapter); + D3Q27InteractorPtr northBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoNorthBoundary, grid, velBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(northBoundaryInt); + } + + if (northBoundaryType == 3) + { + BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + bcVisitor.addBC(denBCAdapter); + D3Q27InteractorPtr northBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoNorthBoundary, grid, denBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(northBoundaryInt); + } + + } + + + if (isSouthBoundary) + { + GbCuboid3DPtr geoSouthBoundary(new GbCuboid3D(g_minX1 - 1.0*dx, g_maxX2 + 1.0*dx, g_maxX3 + 1.0*dx, g_maxX1 + 1.0*dx, g_minX2 - 1.0*dx, g_maxX3 - 1.0*dx)); + if (myid==0) GbSystem3D::writeGeoObject(geoSouthBoundary.get(), pathname+"/geo/geoSouthBoundary", WbWriterVtkXmlASCII::getInstance()); + + if (southBoundaryType == 1) + { + BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + bcVisitor.addBC(noSlipBCAdapter); + D3Q27InteractorPtr southBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoSouthBoundary, grid, noSlipBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(southBoundaryInt); + + } + + if (southBoundaryType == 4) + { + BCAdapterPtr slipBCAdapter(new SlipBCAdapter()); + slipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new SlipBCAlgorithmMultiphase())); + bcVisitor.addBC(slipBCAdapter); + D3Q27InteractorPtr southBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoSouthBoundary, grid, slipBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(southBoundaryInt); + } + + if (southBoundaryType == 2) + { + BCAdapterPtr velBCAdapter (new VelocityBCAdapterMultiphase(true, false, false, fctF1 , phiH, 0.0, endTime)); + velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + bcVisitor.addBC(velBCAdapter); + D3Q27InteractorPtr southBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoSouthBoundary, grid, velBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(southBoundaryInt); + } + + if (southBoundaryType == 3) + { + BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + bcVisitor.addBC(denBCAdapter); + D3Q27InteractorPtr southBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoSouthBoundary, grid, denBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(southBoundaryInt); + } + + } + + + + + if (isTopBoundary) + { + GbCuboid3DPtr geoTopBoundary(new GbCuboid3D(g_minX1 - 1.0*dx, g_maxX2 + 1.0*dx, g_minX3 - 1.0*dx, g_maxX1 + 1.0*dx, g_maxX2 - 1.0*dx, g_maxX3 + 1.0*dx)); + if (myid==0) GbSystem3D::writeGeoObject(geoTopBoundary.get(), pathname+"/geo/geoTopBoundary", WbWriterVtkXmlASCII::getInstance()); + + if (topBoundaryType == 1) + { + BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + bcVisitor.addBC(noSlipBCAdapter); + D3Q27InteractorPtr topBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoTopBoundary, grid, noSlipBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(topBoundaryInt); + + } + + if (topBoundaryType == 4) + { + BCAdapterPtr slipBCAdapter(new SlipBCAdapter()); + slipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new SlipBCAlgorithmMultiphase())); + bcVisitor.addBC(slipBCAdapter); + D3Q27InteractorPtr topBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoTopBoundary, grid, slipBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(topBoundaryInt); + } + + if (topBoundaryType == 2) + { + BCAdapterPtr velBCAdapter (new VelocityBCAdapterMultiphase(true, false, false, fctF1 , phiH, 0.0, endTime)); + velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + bcVisitor.addBC(velBCAdapter); + D3Q27InteractorPtr topBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoTopBoundary, grid, velBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(topBoundaryInt); + } + + if (topBoundaryType == 3) + { + BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + bcVisitor.addBC(denBCAdapter); + D3Q27InteractorPtr topBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoTopBoundary, grid, denBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(topBoundaryInt); + } + + } + + + if (isBottomBoundary) + { + GbCuboid3DPtr geoBottomBoundary(new GbCuboid3D(g_minX1 - 1.0*dx, g_minX2 + 1.0*dx, g_minX3 - 1.0*dx, g_maxX1 + 1.0*dx, g_minX2 - 1.0*dx, g_maxX3 + 1.0*dx)); + if (myid==0) GbSystem3D::writeGeoObject(geoBottomBoundary.get(), pathname+"/geo/geoBottomBoundary", WbWriterVtkXmlASCII::getInstance()); + + if (bottomBoundaryType == 1) + { + BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); + noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithmMultiphase())); + bcVisitor.addBC(noSlipBCAdapter); + D3Q27InteractorPtr bottomBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoBottomBoundary, grid, noSlipBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(bottomBoundaryInt); + + } + + if (bottomBoundaryType == 4) + { + BCAdapterPtr slipBCAdapter(new SlipBCAdapter()); + slipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new SlipBCAlgorithmMultiphase())); + bcVisitor.addBC(slipBCAdapter); + D3Q27InteractorPtr bottomBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoBottomBoundary, grid, slipBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(bottomBoundaryInt); + } + + if (bottomBoundaryType == 2) + { + BCAdapterPtr velBCAdapter (new VelocityBCAdapterMultiphase(true, false, false, fctF1 , phiH, 0.0, endTime)); + velBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new VelocityBCAlgorithmMultiphase())); + bcVisitor.addBC(velBCAdapter); + D3Q27InteractorPtr bottomBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoBottomBoundary, grid, velBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(bottomBoundaryInt); + } + + if (bottomBoundaryType == 3) + { + BCAdapterPtr denBCAdapter(new DensityBCAdapter(rhoLB)); + denBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NonReflectingOutflowBCAlgorithmMultiphase())); + bcVisitor.addBC(denBCAdapter); + D3Q27InteractorPtr bottomBoundaryInt = D3Q27InteractorPtr(new D3Q27Interactor(geoBottomBoundary, grid, denBCAdapter, Interactor3D::SOLID)); + intHelper.addInteractor(bottomBoundaryInt); + } + + } + + + + + + + + + + intHelper.selectBlocks(); + + + ppblocks->process(0); + ppblocks.reset(); + + unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks(); + int ghostLayer = 3; + unsigned long long numberOfNodesPerBlock = (unsigned long long)(blocknx[0])* (unsigned long long)(blocknx[1])* (unsigned long long)(blocknx[2]); + unsigned long long numberOfNodes = numberOfBlocks * numberOfNodesPerBlock; + unsigned long long numberOfNodesPerBlockWithGhostLayer = numberOfBlocks * (blocknx[0] + ghostLayer) * (blocknx[1] + ghostLayer) * (blocknx[2] + ghostLayer); + double needMemAll = double(numberOfNodesPerBlockWithGhostLayer*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); + double needMem = needMemAll / double(comm->getNumberOfProcesses()); + + if (myid == 0) + { + UBLOG(logINFO, "Number of blocks = " << numberOfBlocks); + UBLOG(logINFO, "Number of nodes = " << numberOfNodes); + int minInitLevel = grid->getCoarsestInitializedLevel(); + int maxInitLevel = grid->getFinestInitializedLevel(); + for (int level = minInitLevel; level <= maxInitLevel; level++) + { + int nobl = grid->getNumberOfBlocks(level); + UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl); + UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*numberOfNodesPerBlock); + } + UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); + UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); + 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); + + SetKernelBlockVisitorMultiphase kernelVisitor(kernel, nuL, nuG, densityRatio, beta, kappa, theta, availMem, needMem); + + grid->accept(kernelVisitor); + + if (refineLevel > 0) + { + SetUndefinedNodesBlockVisitor undefNodesVisitor; + grid->accept(undefNodesVisitor); + } + + //inflowF2_1Int->initInteractor(); + //inflowF2_2Int->initInteractor(); + + intHelper.setBC(); + + + grid->accept(bcVisitor); + + //initialization of distributions + LBMReal x1c = (g_maxX1+g_minX1)/2; //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(phaseFieldProfile); + + //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*(phiH + phiL) - 0.5*uLB*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + fct2.SetExpr(velocityProfile); + fct2.DefineConst("uLB", uLB); + fct2.DefineConst("x1c", x1c); + fct2.DefineConst("x2c", x2c); + fct2.DefineConst("x3c", x3c); + fct2.DefineConst("phiL", phiL); + fct2.DefineConst("phiH", phiH); + fct2.DefineConst("radius", radius); + fct2.DefineConst("interfaceThickness", interfaceThickness); + + + mu::Parser fct3; + fct3.SetExpr("0.5*sigma*(phiH + phiL)/radius - 0.5*sigma/radius*(phiH - phiL)*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); + fct3.DefineConst("sigma", sigma); + fct3.DefineConst("x1c", x1c); + fct3.DefineConst("x2c", x2c); + fct3.DefineConst("x3c", x3c); + fct3.DefineConst("phiL", phiL); + fct3.DefineConst("phiH", phiH); + fct3.DefineConst("radius", radius); + fct3.DefineConst("interfaceThickness", interfaceThickness); + + InitDistributionsBlockVisitorMultiphase initVisitor(densityRatio, interfaceThickness, radius); + initVisitor.setPhi(fct1); + if (isInitialVelocity) initVisitor.setVx1(fct2); + //initVisitor.setRho(fct3); + 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); + grid->accept(setConnsVisitor); + + //domain decomposition for threads + PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); + grid->accept(pqPartVisitor); + + + + + //boundary conditions grid + { + UbSchedulerPtr geoSch(new UbScheduler(1)); + WriteBoundaryConditionsCoProcessorPtr ppgeo( + new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); + ppgeo->process(0); + ppgeo.reset(); + } + + if (myid == 0) UBLOG(logINFO, "Preprocess - end"); + } + else + { + if (myid == 0) + { + UBLOG(logINFO, "Parameters:"); + UBLOG(logINFO, "uLb = " << uLB); + UBLOG(logINFO, "rho = " << rhoLB); + UBLOG(logINFO, "nuLb = " << nuLB); + UBLOG(logINFO, "Re = " << Re); + UBLOG(logINFO, "dx = " << dx); + UBLOG(logINFO, "number of levels = " << refineLevel + 1); + UBLOG(logINFO, "numOfThreads = " << numOfThreads); + UBLOG(logINFO, "path = " << pathname); + } + + 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"); + } + UbSchedulerPtr visSch(new UbScheduler(outTime)); + WriteMacroscopicQuantitiesCoProcessor pp(grid, visSch, pathname, WbWriterVtkXmlASCII::getInstance(), conv, comm); + + UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); + NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); + + + + + + + //UbSchedulerPtr bcSch(new UbScheduler(1, 12000, 12000)); + //TimeDependentBCCoProcessorPtr inflowF2 (new TimeDependentBCCoProcessor(grid,bcSch)); + //inflowF2->addInteractor(inflowF2_1Int); + //inflowF2->addInteractor(inflowF2_2Int); + + //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch,CalculationManager::MPI)); + CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, visSch)); + if (myid == 0) UBLOG(logINFO, "Simulation-start"); + calculation->calculate(); + if (myid == 0) UBLOG(logINFO, "Simulation-end"); + } + catch (std::exception& e) + { + cerr << e.what() << endl << flush; + } + catch (std::string& s) + { + cerr << s << endl; + } + catch (...) + { + cerr << "unknown exception" << endl; + } + +} +int main(int argc, char* argv[]) +{ + //Sleep(30000); + if (argv != NULL) + { + if (argv[1] != NULL) + { + run(string(argv[1])); + } + else + { + cout << "Configuration file is missing!" << endl; + } + } + +} + diff --git a/apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (New VBased).cpp b/apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (New VBased).cpp new file mode 100644 index 0000000000000000000000000000000000000000..1cdf5905cbac12297fc3ab9c759cda726673c508 --- /dev/null +++ b/apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (New VBased).cpp @@ -0,0 +1,1258 @@ +#include "MultiphaseCumulantLBMKernel.h" +#include "D3Q27System.h" +#include "InterpolationProcessor.h" +#include "D3Q27EsoTwist3DSplittedVector.h" +#include <math.h> +#include <omp.h> + +#define PROOF_CORRECTNESS + +////////////////////////////////////////////////////////////////////////// +MultiphaseCumulantLBMKernel::MultiphaseCumulantLBMKernel() +{ + this->nx1 = 0; + this->nx2 = 0; + this->nx3 = 0; + this->parameter = NORMAL; + this->OxyyMxzz = 1.0; + this->compressible = false; +} +////////////////////////////////////////////////////////////////////////// +MultiphaseCumulantLBMKernel::MultiphaseCumulantLBMKernel(int nx1, int nx2, int nx3, Parameter p) +{ + this->nx1 = nx1; + this->nx2 = nx2; + this->nx3 = nx3; + parameter = p; + this->compressible = false; +} +////////////////////////////////////////////////////////////////////////// +MultiphaseCumulantLBMKernel::~MultiphaseCumulantLBMKernel(void) +{ + +} +////////////////////////////////////////////////////////////////////////// +void MultiphaseCumulantLBMKernel::init() +{ + //DistributionArray3DPtr d(new D3Q27EsoTwist3DSplittedVector(nx1+ghostLayerWitdh*2, nx2+ghostLayerWitdh*2, nx3+ghostLayerWitdh*2, -999.0)); + DistributionArray3DPtr f(new D3Q27EsoTwist3DSplittedVector(nx1+2, nx2+2, nx3+2, -999.0)); + DistributionArray3DPtr h(new D3Q27EsoTwist3DSplittedVector(nx1+2, nx2+2, nx3+2, -999.0)); // For phase-field + PhaseFieldArray3DPtr divU(new CbArray3D<LBMReal,IndexerX3X2X1>(nx1+2, nx2+2, nx3+2, 0.0)); + dataSet->setFdistributions(f); + dataSet->setHdistributions(h); // For phase-field + dataSet->setPhaseField(divU); +} +////////////////////////////////////////////////////////////////////////// +LBMKernelPtr MultiphaseCumulantLBMKernel::clone() +{ + LBMKernelPtr kernel(new MultiphaseCumulantLBMKernel(nx1, nx2, nx3, parameter)); + boost::dynamic_pointer_cast<MultiphaseCumulantLBMKernel>(kernel)->init(); + + kernel->setCollisionFactorMultiphase(this->collFactorL, this->collFactorG); + kernel->setDensityRatio(this->densityRatio); + kernel->setMultiphaseModelParameters(this->beta, this->kappa); + kernel->setContactAngle(this->contactAngle); + kernel->setPhiL(this->phiL); + kernel->setPhiH(this->phiH); + kernel->setPhaseFieldRelaxation(this->tauH); + kernel->setMobility(this->mob); + + kernel->setBCProcessor(bcProcessor->clone(kernel)); + kernel->setWithForcing(withForcing); + kernel->setForcingX1(muForcingX1); + kernel->setForcingX2(muForcingX2); + kernel->setForcingX3(muForcingX3); + kernel->setIndex(ix1, ix2, ix3); + kernel->setDeltaT(deltaT); + switch (parameter) + { + case NORMAL: + boost::dynamic_pointer_cast<MultiphaseCumulantLBMKernel>(kernel)->OxyyMxzz = 1.0; + break; + case MAGIC: + boost::dynamic_pointer_cast<MultiphaseCumulantLBMKernel>(kernel)->OxyyMxzz = 2.0 +(-collFactor); + break; + } + return kernel; +} +////////////////////////////////////////////////////////////////////////// +void MultiphaseCumulantLBMKernel::calculate() +{ + timer.resetAndStart(); + collideAll(); + timer.stop(); +} +////////////////////////////////////////////////////////////////////////// +void MultiphaseCumulantLBMKernel::collideAll() +{ + using namespace D3Q27System; + + //initializing of forcing stuff + /*if (withForcing) + { + muForcingX1.DefineVar("x1",&muX1); muForcingX1.DefineVar("x2",&muX2); muForcingX1.DefineVar("x3",&muX3); + muForcingX2.DefineVar("x1",&muX1); muForcingX2.DefineVar("x2",&muX2); muForcingX2.DefineVar("x3",&muX3); + muForcingX3.DefineVar("x1",&muX1); muForcingX3.DefineVar("x2",&muX2); muForcingX3.DefineVar("x3",&muX3); + + muDeltaT = deltaT; + + muForcingX1.DefineVar("dt",&muDeltaT); + muForcingX2.DefineVar("dt",&muDeltaT); + muForcingX3.DefineVar("dt",&muDeltaT); + + muNu = (1.0/3.0)*(1.0/collFactor - 1.0/2.0); + + muForcingX1.DefineVar("nu",&muNu); + muForcingX2.DefineVar("nu",&muNu); + muForcingX3.DefineVar("nu",&muNu); + + LBMReal forcingX1 = 0; + LBMReal forcingX2 = 0; + LBMReal forcingX3 = 0; + }*/ + forcingX1 = 0.0; + forcingX2 = 0.0; + forcingX3 = 0.0; + ///////////////////////////////////// + + localDistributionsF = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); + nonLocalDistributionsF = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); + zeroDistributionsF = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); + + localDistributionsH = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions(); + nonLocalDistributionsH = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions(); + zeroDistributionsH = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions(); + + + + //phaseField = dataSet->getPhaseField(); + + BCArray3DPtr bcArray = this->getBCProcessor()->getBCArray(); + + + + const int bcArrayMaxX1 = (int)bcArray->getNX1(); + const int bcArrayMaxX2 = (int)bcArray->getNX2(); + const int bcArrayMaxX3 = (int)bcArray->getNX3(); + + int minX1 = ghostLayerWidth; + int minX2 = ghostLayerWidth; + int minX3 = ghostLayerWidth; + int maxX1 = bcArrayMaxX1-ghostLayerWidth; + int maxX2 = bcArrayMaxX2-ghostLayerWidth; + int maxX3 = bcArrayMaxX3-ghostLayerWidth; + + +//#pragma omp parallel num_threads(8) + { + // int i = omp_get_thread_num(); + // printf_s("Hello from thread %d\n", i); + //} +//#pragma omp for + + + CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr phaseField(new CbArray3D<LBMReal,IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0)); + CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr p1Field(new CbArray3D<LBMReal,IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0)); + CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr p1Field_filtered(new CbArray3D<LBMReal,IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0)); + CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr divU(new CbArray3D<LBMReal,IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, 0.0)); + + //CbArray3D<LBMReal> phaseField(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3,-999); + + + for(int x3 = 0; x3 <= maxX3; x3++) + { + for(int x2 = 0; x2 <= maxX2; x2++) + { + for(int x1 = 0; x1 <= maxX1; x1++) + { + if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3)) + { + int x1p = x1 + 1; + int x2p = x2 + 1; + int x3p = x3 + 1; + + LBMReal mfcbb = (*this->localDistributionsH)(D3Q27System::ET_E, x1,x2,x3); + LBMReal mfbcb = (*this->localDistributionsH)(D3Q27System::ET_N,x1,x2,x3); + LBMReal mfbbc = (*this->localDistributionsH)(D3Q27System::ET_T,x1,x2,x3); + LBMReal mfccb = (*this->localDistributionsH)(D3Q27System::ET_NE,x1,x2,x3); + LBMReal mfacb = (*this->localDistributionsH)(D3Q27System::ET_NW,x1p,x2,x3); + LBMReal mfcbc = (*this->localDistributionsH)(D3Q27System::ET_TE,x1,x2,x3); + LBMReal mfabc = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p,x2,x3); + LBMReal mfbcc = (*this->localDistributionsH)(D3Q27System::ET_TN,x1,x2,x3); + LBMReal mfbac = (*this->localDistributionsH)(D3Q27System::ET_TS,x1,x2p,x3); + LBMReal mfccc = (*this->localDistributionsH)(D3Q27System::ET_TNE,x1,x2,x3); + LBMReal mfacc = (*this->localDistributionsH)(D3Q27System::ET_TNW,x1p,x2,x3); + LBMReal mfcac = (*this->localDistributionsH)(D3Q27System::ET_TSE,x1,x2p,x3); + LBMReal mfaac = (*this->localDistributionsH)(D3Q27System::ET_TSW,x1p,x2p,x3); + LBMReal mfabb = (*this->nonLocalDistributionsH)(D3Q27System::ET_W,x1p,x2,x3 ); + LBMReal mfbab = (*this->nonLocalDistributionsH)(D3Q27System::ET_S,x1,x2p,x3 ); + LBMReal mfbba = (*this->nonLocalDistributionsH)(D3Q27System::ET_B,x1,x2,x3p ); + LBMReal mfaab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW,x1p,x2p,x3 ); + LBMReal mfcab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE,x1,x2p,x3 ); + LBMReal mfaba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW,x1p,x2,x3p ); + LBMReal mfcba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE,x1,x2,x3p ); + LBMReal mfbaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS,x1,x2p,x3p ); + LBMReal mfbca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN,x1,x2,x3p ); + LBMReal mfaaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW,x1p,x2p,x3p); + LBMReal mfcaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE,x1,x2p,x3p); + LBMReal mfaca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW,x1p,x2,x3p); + LBMReal mfcca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE,x1,x2,x3p); + LBMReal mfbbb = (*this->zeroDistributionsH)(x1,x2,x3); + //LBMReal phase = h[ZERO] + h[E] + h[W] + h[N] + h[S] + h[T] + h[B] + h[NE] + h[SW] + h[SE] + h[NW] + h[TE] + h[BW] + + // h[BE] + h[TW] + h[TN] + h[BS] + h[BN] + h[TS] + h[TNE] + h[TNW] + h[TSE] + h[TSW] + h[BNE] + h[BNW] + h[BSE] + h[BSW]; + //if (phase > 1.0) phase = 1.0e0; + //(*phaseField)(x1,x2,x3) = phase; + (*phaseField)(x1,x2,x3) = (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; + if ((*phaseField)(x1,x2,x3) > 1.0) (*phaseField)(x1,x2,x3)=1.0; + + mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1,x2,x3); + mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N,x1,x2,x3); + mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T,x1,x2,x3); + mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE,x1,x2,x3); + mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW,x1p,x2,x3); + mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE,x1,x2,x3); + mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p,x2,x3); + mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN,x1,x2,x3); + mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS,x1,x2p,x3); + mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE,x1,x2,x3); + mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW,x1p,x2,x3); + mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE,x1,x2p,x3); + mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW,x1p,x2p,x3); + mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W,x1p,x2,x3 ); + mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S,x1,x2p,x3 ); + mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B,x1,x2,x3p ); + mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW,x1p,x2p,x3 ); + mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE,x1,x2p,x3 ); + mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW,x1p,x2,x3p ); + mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE,x1,x2,x3p ); + mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS,x1,x2p,x3p ); + mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN,x1,x2,x3p ); + mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW,x1p,x2p,x3p); + mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE,x1,x2p,x3p); + mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW,x1p,x2,x3p); + mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE,x1,x2,x3p); + mfbbb = (*this->zeroDistributionsF)(x1,x2,x3); + + (*p1Field)(x1,x2,x3) = ((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); + (*p1Field_filtered)(x1,x2,x3) = (*p1Field)(x1,x2,x3); + } + } + } + } + + LBMReal sum1, AA; + for(int x3 = minX3; x3 < maxX3; x3++) + { + for(int x2 = minX2; x2 < maxX2; x2++) + { + for(int x1 = minX1; x1 < maxX1; x1++) + { + if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3)) + { + int cnum = 0; + sum1 = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + //for (int k = FSTARTDIR ; k <= 5 ; k++) + { + if(!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) + { + //cnum++; + sum1 += (*p1Field)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])*WEIGTH[k]; + + } + else + { + //cnum++; + //sum1 += (*p1Field)(x1 + DX1[INVDIR[k]], x2 + DX2[INVDIR[k]], x3 + DX3[INVDIR[k]])*WEIGTH[k]; + //std::cout << x1 << ' ' << x2 << ' ' << x3 << ' '<< k << std::endl; + sum1 += ((*p1Field)(x1, x2, x3))*WEIGTH[k]; + } + } + //LBMReal av = (sum1+(*p1Field)(x1, x2, x3))/7.0; + //(*p1Field_filtered)(x1, x2, x3) = av; + + /*LBMReal d0 = 2.0/9.0; + LBMReal d1 = -1.0/9.6; + LBMReal wf = 0.25; + AA = 3*d0*(*p1Field)(x1, x2, x3) + d1*((*p1Field)(x1+1, x2, x3)+(*p1Field)(x1-1, x2, x3)) + + d1*((*p1Field)(x1, x2+1, x3)+(*p1Field)(x1, x2-1, x3)) + d1*((*p1Field)(x1, x2, x3+1)+(*p1Field)(x1, x2, x3-1)); + (*p1Field_filtered)(x1, x2, x3) = (*p1Field)(x1, x2, x3) - AA*wf;*/ + + (*p1Field_filtered)(x1, x2, x3) = ((*p1Field)(x1, x2, x3))*WEIGTH[ZERO] + sum1; + //(*p1Field)(x1, x2, x3) = ((*p1Field)(x1, x2, x3))*WEIGTH[ZERO] + sum1; + + } + } + } + } + + LBMReal collFactorM; + LBMReal forcingTerm[D3Q27System::ENDF+1]; + LBMReal m000, m100, m010, m001, m110, m101, m011, m200, m020, m002, m120, m102, m210, m012, m201, m021, m111, m220, m202, m022, m211, m121, m112, m221, m212, m122, m222; + LBMReal k000, k100, k010, k001, k110, k101, k011, k200, k020, k002, k120, k102, k210, k012, k201, k021, k111, k220, k202, k022, k211, k121, k112, k221, k212, k122, k222; + LBMReal c000, c100, c010, c001, c110, c101, c011, c200, c020, c002, c120, c102, c210, c012, c201, c021, c111, c220, c202, c022, c211, c121, c112, c221, c212, c122, c222; + + LBMReal k200_pl_k020_pl_k002, k200_mi_k020, k200_mi_k002, k210_pl_k012, k210_mi_k012, k201_pl_k021, k201_mi_k021, k120_pl_k102, k120_mi_k102, k220_pl_k202_pl_k022, + k220_mi2_k202_pl_k022, k220_pl_k202_mi2_k022; + + LBMReal c200_pl_c020_pl_c002, c200_mi_c020, c200_mi_c002, c210_pl_c012, c210_mi_c012, c201_pl_c021, c201_mi_c021, c120_pl_c102, c120_mi_c102, c220_pl_c202_pl_c022, + c220_mi2_c202_pl_c022, c220_pl_c202_mi2_c022; + + LBMReal w1, w2, w3, w4, w5, w6, w7, w8, w9, w10; + + w2 = 1.0; + w3 = 1.0; + w4 = 1.0; + w5 = 1.0; + w6 = 1.0; + w7 = 1.0; + w8 = 1.0; + w9 = 1.0; + w10 = 1.0; + + for(int x3 = minX3; x3 < maxX3; x3++) + { + for(int x2 = minX2; x2 < maxX2; x2++) + { + for(int x1 = minX1; x1 < maxX1; x1++) + { + if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3)) + { + int x1p = x1 + 1; + int x2p = x2 + 1; + int x3p = x3 + 1; + + + ////////////////////////////////////////////////////////////////////////// + //Read distributions and phase field + //////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////// + + //E N T + //c c c + ////////// + //W S B + //a a a + + //Rest ist b + + //mfxyz + //a - negative + //b - null + //c - positive + + // a b c + //-1 0 1 + + /* + phi[ZERO] = (phaseField)(x1,x2,x3); + phi[E ] = (phaseField)(x1 + DX1[E ], x2 + DX2[E ], x3 + DX3[E ]); + phi[N ] = (phaseField)(x1 + DX1[N ], x2 + DX2[N ], x3 + DX3[N ]); + phi[T ] = (phaseField)(x1 + DX1[T ], x2 + DX2[T ], x3 + DX3[T ]); + phi[W ] = (phaseField)(x1 + DX1[W ], x2 + DX2[W ], x3 + DX3[W ]); + phi[S ] = (phaseField)(x1 + DX1[S ], x2 + DX2[S ], x3 + DX3[S ]); + phi[B ] = (phaseField)(x1 + DX1[B ], x2 + DX2[B ], x3 + DX3[B ]); + phi[NE ] = (phaseField)(x1 + DX1[NE ], x2 + DX2[NE ], x3 + DX3[NE ]); + phi[NW ] = (phaseField)(x1 + DX1[NW ], x2 + DX2[NW ], x3 + DX3[NW ]); + phi[TE ] = (phaseField)(x1 + DX1[TE ], x2 + DX2[TE ], x3 + DX3[TE ]); + phi[TW ] = (phaseField)(x1 + DX1[TW ], x2 + DX2[TW ], x3 + DX3[TW ]); + phi[TN ] = (phaseField)(x1 + DX1[TN ], x2 + DX2[TN ], x3 + DX3[TN ]); + phi[TS ] = (phaseField)(x1 + DX1[TS ], x2 + DX2[TS ], x3 + DX3[TS ]); + phi[SW ] = (phaseField)(x1 + DX1[SW ], x2 + DX2[SW ], x3 + DX3[SW ]); + phi[SE ] = (phaseField)(x1 + DX1[SE ], x2 + DX2[SE ], x3 + DX3[SE ]); + phi[BW ] = (phaseField)(x1 + DX1[BW ], x2 + DX2[BW ], x3 + DX3[BW ]); + phi[BE ] = (phaseField)(x1 + DX1[BE ], x2 + DX2[BE ], x3 + DX3[BE ]); + phi[BS ] = (phaseField)(x1 + DX1[BS ], x2 + DX2[BS ], x3 + DX3[BS ]); + phi[BN ] = (phaseField)(x1 + DX1[BN ], x2 + DX2[BN ], x3 + DX3[BN ]); + phi[BSW] = (phaseField)(x1 + DX1[BSW], x2 + DX2[BSW], x3 + DX3[BSW]); + phi[BSE] = (phaseField)(x1 + DX1[BSE], x2 + DX2[BSE], x3 + DX3[BSE]); + phi[BNW] = (phaseField)(x1 + DX1[BNW], x2 + DX2[BNW], x3 + DX3[BNW]); + phi[BNE] = (phaseField)(x1 + DX1[BNE], x2 + DX2[BNE], x3 + DX3[BNE]); + phi[TNE] = (phaseField)(x1 + DX1[TNE], x2 + DX2[TNE], x3 + DX3[TNE]); + phi[TNW] = (phaseField)(x1 + DX1[TNW], x2 + DX2[TNW], x3 + DX3[TNW]); + phi[TSE] = (phaseField)(x1 + DX1[TSE], x2 + DX2[TSE], x3 + DX3[TSE]); + phi[TSW] = (phaseField)(x1 + DX1[TSW], x2 + DX2[TSW], x3 + DX3[TSW]); + */ + findNeighbors(phaseField, p1Field_filtered, x1, x2, x3); + //findNeighbors(phaseField, p1Field, x1, x2, x3); + + LBMReal mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1,x2,x3); + LBMReal mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N,x1,x2,x3); + LBMReal mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T,x1,x2,x3); + LBMReal mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE,x1,x2,x3); + LBMReal mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW,x1p,x2,x3); + LBMReal mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE,x1,x2,x3); + LBMReal mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p,x2,x3); + LBMReal mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN,x1,x2,x3); + LBMReal mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS,x1,x2p,x3); + LBMReal mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE,x1,x2,x3); + LBMReal mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW,x1p,x2,x3); + LBMReal mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE,x1,x2p,x3); + LBMReal mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW,x1p,x2p,x3); + LBMReal mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W,x1p,x2,x3 ); + LBMReal mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S,x1,x2p,x3 ); + LBMReal mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B,x1,x2,x3p ); + LBMReal mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW,x1p,x2p,x3 ); + LBMReal mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE,x1,x2p,x3 ); + LBMReal mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW,x1p,x2,x3p ); + LBMReal mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE,x1,x2,x3p ); + LBMReal mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS,x1,x2p,x3p ); + LBMReal mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN,x1,x2,x3p ); + LBMReal mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW,x1p,x2p,x3p); + LBMReal mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE,x1,x2p,x3p); + LBMReal mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW,x1p,x2,x3p); + LBMReal mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE,x1,x2,x3p); + + LBMReal mfbbb = (*this->zeroDistributionsF)(x1,x2,x3); + + g[E ] = mfcbb; + g[N ] = mfbcb; + g[T ] = mfbbc; + g[NE ] = mfccb; + g[NW ] = mfacb; + g[TE ] = mfcbc; + g[TW ] = mfabc; + g[TN ] = mfbcc; + g[TS ] = mfbac; + g[TNE] = mfccc; + g[TNW] = mfacc; + g[TSE] = mfcac; + g[TSW] = mfaac; + g[W ] = mfabb; + g[S ] = mfbab; + g[B ] = mfbba; + g[SW ] = mfaab; + g[SE ] = mfcab; + g[BW ] = mfaba; + g[BE ] = mfcba; + g[BS ] = mfbaa; + g[BN ] = mfbca; + g[BSW] = mfaaa; + g[BSE] = mfcaa; + g[BNW] = mfaca; + g[BNE] = mfcca; + g[ZERO] = mfbbb; + + LBMReal rhoH = 997.0; + LBMReal rhoL = rhoH/densityRatio; + + //LBMReal rhoToPhi = (1.0 - 1.0/densityRatio); + LBMReal rhoToPhi = (rhoH - rhoL)/(phiH - phiL); + + //collFactorM = phi[ZERO]*collFactorL + (1-phi[ZERO])*collFactorG; + //collFactorM = phi[ZERO]*collFactorG + (1-phi[ZERO])*collFactorL; + + //LBMReal tauH = 1.0; + LBMReal di = sqrt(8*kappa/beta); + + LBMReal dX1_phi = gradX1_phi(); + LBMReal dX2_phi = gradX2_phi(); + LBMReal dX3_phi = gradX3_phi(); + + LBMReal dX1_pr1 = gradX1_pr1(); + LBMReal dX2_pr1 = gradX2_pr1(); + LBMReal dX3_pr1 = gradX3_pr1(); + + 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; + + collFactorM = collFactorL + (collFactorL - collFactorG)*(phi[ZERO] - phiH)/(phiH - phiL); + + /*if ((phi[ZERO] > 0.1)||(phi[ZERO] < 0.9)) + { + collFactorM*=(1.0-denom); + }*/ + + w1 = collFactorM; + + /*dX1_phi = -normX1*((phi[ZERO]>phiH || phi[ZERO]<phiL) ? 0.0 : 4*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)/di); + dX2_phi = -normX2*((phi[ZERO]>phiH || phi[ZERO]<phiL) ? 0.0 : 4*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)/di); + dX3_phi = -normX3*((phi[ZERO]>phiH || phi[ZERO]<phiL) ? 0.0 : 4*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)/di);*/ + + //UbTupleDouble3 coords = grid->getNodeCoordinates(block, x1, x2, x3); + /*Block3D bl = this->block(); + + int wX1 = bl->getX1() + x1; + int wX2 = bl->getX2() + x2; + int wX3 = bl->getX3() + x3;*/ + + /*if (wX3 >= 30.0) + { + dX1_phi = 0.0; + dX2_phi = 0.0; + dX3_phi = 0.0; + }*/ + + + LBMReal mu = 2*beta*phi[ZERO]*(phi[ZERO]-1)*(2*phi[ZERO]-1) - kappa*nabla2_phi(); + //mu = mu*10; + + //LBMReal rhoToPhi = (1.0/densityRatio - 1.0); + + + + //----------- Calculating Macroscopic Values ------------- + + //LBMReal rho = phi[ZERO] + (1.0 - phi[ZERO])*1.0/densityRatio; + LBMReal rho = rhoH + rhoToPhi*(phi[ZERO] - phiH); + if (phi[ZERO] > 1.0) rho = rhoH; + //LBMReal rho = phi[ZERO]*1.0/densityRatio + (1.0 - phi[ZERO]); + + if (withForcing) + { + //muX1 = static_cast<double>(x1-1+ix1*maxX1); + //muX2 = static_cast<double>(x2-1+ix2*maxX2); + //muX3 = static_cast<double>(x3-1+ix3*maxX3); + + forcingX1 = muForcingX1.Eval(); + forcingX2 = muForcingX2.Eval(); + forcingX3 = muForcingX3.Eval(); + + //LBMReal rho_m = 1.0/densityRatio; + //LBMReal rho_m = (rhoL + rhoH)/2.0; + LBMReal rho_m = rhoH; + forcingX1 = forcingX1*(rho-rho_m); + forcingX2 = forcingX2*(rho-rho_m); + forcingX3 = forcingX3*(rho-rho_m); + + //ux += forcingX1*deltaT*0.5; // X + //uy += forcingX2*deltaT*0.5; // Y + //uz += forcingX3*deltaT*0.5; // Z + } + + /*LBMReal p1 = (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; + + p1 = p1*rho*c1o3;*/ + + LBMReal rho2 = rho*rho; + + /*LBMReal Sx = rhoToPhi*dX1_phi*p1/rho2; + LBMReal Sy = rhoToPhi*dX2_phi*p1/rho2; + LBMReal Sz = rhoToPhi*dX3_phi*p1/rho2;*/ + + LBMReal Sx = -1.0*dX1_pr1/rho; + LBMReal Sy = -1.0*dX2_pr1/rho; + LBMReal Sz = -1.0*dX3_pr1/rho; + + + /*if ((phi[ZERO] < 0.1)||(phi[ZERO] > 0.9)) + { + Sx = 0.0; + Sy = 0.0; + Sz = 0.0; + }*/ + + LBMReal ux = ((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + + (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) + + (mfcbb-mfabb)) + (mu*dX1_phi + forcingX1)/(2*rho) + 0.5*Sx; + + LBMReal uy = ((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) + + (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) + + (mfbcb-mfbab)) + (mu*dX2_phi + forcingX2)/(2*rho) + 0.5*Sy; + + LBMReal uz = ((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) + + (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) + + (mfbbc-mfbba)) + (mu*dX3_phi + forcingX3)/(2*rho) + 0.5*Sz; + + + //+ (ux*rhoToPhi*dX1_phi*c1o3 + uy*rhoToPhi*dX2_phi*c1o3 + uz*rhoToPhi*dX3_phi*c1o3)/2.0; + + //vvx = 0.0; vvy = 0.0; vvz = 0.0; + //-------------------------------------------------------- + + + + + LBMReal ux2 = ux*ux; + LBMReal uy2 = uy*uy; + LBMReal uz2 = uz*uz; + LBMReal ux_uy = ux*uy; + LBMReal ux_uz = ux*uz; + LBMReal uy_uz = uy*uz; + LBMReal ux_uy_uz = ux*uy*uz; + + +/* + //----------- Calculating Forcing Terms ------------- + LBMReal forcingTerm1 = (ux*mu*dX1_phi + uy*mu*dX2_phi + uz*mu*dX3_phi); + for (int dir = STARTF; dir < (ENDF+1); dir++) + { + if (dir != ZERO) + { + LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0; + forcingTerm[dir] = (c1o3*rhoToPhi*dirGrad_phi + mu*dirGrad_phi)*(DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz)*WEIGTH[dir]/c1o3 + mu*dirGrad_phi*WEIGTH[dir] - + (forcingTerm1)*WEIGTH[dir]; + } + else + { + forcingTerm[ZERO] = -(forcingTerm1)*WEIGTH[ZERO]; + } + } + //-------------------------------------------------------- +*/ + + //----------- Calculating Forcing Terms * ------------- + //LBMReal forcingTerm1 = (ux*mu*dX1_phi + uy*mu*dX2_phi + uz*mu*dX3_phi); + for (int dir = STARTF; dir <= (FENDDIR); dir++) + { + LBMReal velProd = DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz; + LBMReal velSq1 = velProd*velProd; + //LBMReal gamma = WEIGTH[dir]*(1.0 + 3*velProd + 4.5*velSq1 - 1.5*(ux2+uy2+uz2)); + LBMReal gamma = WEIGTH[dir]*(3*velProd + 4.5*velSq1 - 1.5*(ux2+uy2+uz2)); + + //forcingTerm[dir] = (DX1[dir] - ux)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX1_phi + gamma*mu*dX1_phi) + + // (DX2[dir] - uy)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX2_phi + gamma*mu*dX2_phi) + + // (DX3[dir] - uz)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX3_phi + gamma*mu*dX3_phi); + + LBMReal fac1 = (gamma - WEIGTH[dir])*c1o3*rhoToPhi; + LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0; + //LBMReal dirGrad_phi = DX1[dir]*dX1_phi + DX2[dir]*dX2_phi + DX3[dir]*dX3_phi; + + /*forcingTerm[dir] = (- (ux)*(fac1*dX1_phi + gamma*mu*dX1_phi) - + (uy)*(fac1*dX2_phi + gamma*mu*dX2_phi) - + (uz)*(fac1*dX3_phi + gamma*mu*dX3_phi)) + (fac1*dirGrad_phi + gamma*mu*dirGrad_phi + DX1[dir]*forcingX1 + DX2[dir]*forcingX2 + DX3[dir]*forcingX3);*/ + + + forcingTerm[dir] = (-ux)* (gamma*(mu*dX1_phi/rho + forcingX1/rho + Sx)) + + (-uy)* (gamma*(mu*dX2_phi/rho + forcingX2/rho + Sy)) + + (-uz)* (gamma*(mu*dX3_phi/rho + forcingX3/rho + Sz)) + + (DX1[dir])*(gamma*(mu*dX1_phi/rho + forcingX1/rho + Sx)) + + (DX2[dir])*(gamma*(mu*dX2_phi/rho + forcingX2/rho + Sy)) + + (DX3[dir])*(gamma*(mu*dX3_phi/rho + forcingX3/rho + Sz)); + + } + + LBMReal gamma = WEIGTH[ZERO]*(-1.5*(ux2+uy2+uz2)); + /*forcingTerm[ZERO] = -(ux)*((gamma - WEIGTH[ZERO])*c1o3*rhoToPhi*dX1_phi + gamma*mu*dX1_phi) - + (uy)*((gamma - WEIGTH[ZERO])*c1o3*rhoToPhi*dX2_phi + gamma*mu*dX2_phi) - + (uz)*((gamma - WEIGTH[ZERO])*c1o3*rhoToPhi*dX3_phi + gamma*mu*dX3_phi);*/ + LBMReal fac1 = (gamma - WEIGTH[ZERO])*c1o3*rhoToPhi; + forcingTerm[ZERO] = (-ux)*(gamma*(mu*dX1_phi/rho + forcingX1/rho + Sx)) + + (-uy)*(gamma*(mu*dX2_phi/rho + forcingX2/rho + Sy)) + + (-uz)*(gamma*(mu*dX3_phi/rho + forcingX3/rho + Sz)); + + //-------------------------------------------------------- + + g[E ] += 0.5*forcingTerm[E ] ; + g[N ] += 0.5*forcingTerm[N ] ; + g[T ] += 0.5*forcingTerm[T ] ; + g[NE ] += 0.5*forcingTerm[NE ] ; + g[NW ] += 0.5*forcingTerm[NW ] ; + g[TE ] += 0.5*forcingTerm[TE ] ; + g[TW ] += 0.5*forcingTerm[TW ] ; + g[TN ] += 0.5*forcingTerm[TN ] ; + g[TS ] += 0.5*forcingTerm[TS ] ; + g[TNE] += 0.5*forcingTerm[TNE] ; + g[TNW] += 0.5*forcingTerm[TNW] ; + g[TSE] += 0.5*forcingTerm[TSE] ; + g[TSW] += 0.5*forcingTerm[TSW] ; + g[W ] += 0.5*forcingTerm[W ] ; + g[S ] += 0.5*forcingTerm[S ] ; + g[B ] += 0.5*forcingTerm[B ] ; + g[SW ] += 0.5*forcingTerm[SW ] ; + g[SE ] += 0.5*forcingTerm[SE ] ; + g[BW ] += 0.5*forcingTerm[BW ] ; + g[BE ] += 0.5*forcingTerm[BE ] ; + g[BS ] += 0.5*forcingTerm[BS ] ; + g[BN ] += 0.5*forcingTerm[BN ] ; + g[BSW] += 0.5*forcingTerm[BSW] ; + g[BSE] += 0.5*forcingTerm[BSE] ; + g[BNW] += 0.5*forcingTerm[BNW] ; + g[BNE] += 0.5*forcingTerm[BNE] ; + g[ZERO] += 0.5*forcingTerm[ZERO]; + + for (int dir = STARTF; dir < (ENDF+1); dir++) + { + LBMReal velProd = DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz; + LBMReal velSq1 = velProd*velProd; + LBMReal gamma = WEIGTH[dir]*(3*velProd + 4.5*velSq1 - 1.5*(ux2+uy2+uz2)); + LBMReal hEq, gEq; + + if (dir != ZERO) + { + + //gEq = p1*WEIGTH[dir]/(rho*c1o3) + gamma; + gEq = gamma; + + g[dir] = g[dir] - collFactorM*(g[dir]-gEq) + 0.5*forcingTerm[dir]; + + } + else + { + //gEq = p1*WEIGTH[dir]/(rho*c1o3) + gamma; + gEq = pr1[ZERO]*WEIGTH1[dir] + gamma; + + g[dir] = g[dir] - collFactorM*(g[dir]-gEq) + 0.5*forcingTerm[dir]; + } + } + + + + (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = g[D3Q27System::INV_E]; + (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = g[D3Q27System::INV_N]; + (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = g[D3Q27System::INV_T]; + (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = g[D3Q27System::INV_NE]; + (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = g[D3Q27System::INV_NW]; + (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = g[D3Q27System::INV_TE]; + (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = g[D3Q27System::INV_TW]; + (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = g[D3Q27System::INV_TN]; + (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = g[D3Q27System::INV_TS]; + (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = g[D3Q27System::INV_TNE]; + (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = g[D3Q27System::INV_TNW]; + (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = g[D3Q27System::INV_TSE]; + (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = g[D3Q27System::INV_TSW]; + + (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3 ) = g[D3Q27System::INV_W ]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3 ) = g[D3Q27System::INV_S ]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = g[D3Q27System::INV_B ]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3 ) = g[D3Q27System::INV_SW]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3 ) = g[D3Q27System::INV_SE]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = g[D3Q27System::INV_BW]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = g[D3Q27System::INV_BE]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = g[D3Q27System::INV_BS]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = g[D3Q27System::INV_BN]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = g[D3Q27System::INV_BSW]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = g[D3Q27System::INV_BSE]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = g[D3Q27System::INV_BNW]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = g[D3Q27System::INV_BNE]; + + (*this->zeroDistributionsF)(x1,x2,x3) = g[D3Q27System::ZERO]; + + + + + + + + + + +///////////////////// P H A S E - F I E L D S O L V E R ///////////////////////////////////////// + + + +///////////////////// 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[ZERO] = (*this->zeroDistributionsH)(x1,x2,x3); + + + //LBMReal denom = sqrt(dX1_phi*dX1_phi + dX2_phi*dX2_phi + dX3_phi*dX3_phi) + 1e-15; + //LBMReal di = sqrt(8*kappa/beta); + LBMReal tauH1 = 3.0*mob + 0.5; + 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 != ZERO) + { + //LBMReal dirGrad_phi = DX1[dir]*dX1_phi+DX2[dir]*dX2_phi+DX3[dir]*dX3_phi; + LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0; + //LBMReal hSource = (tauH - 0.5)*(1.0 - phi[ZERO])*(phi[ZERO])*(dirGrad_phi)/denom; // + phi[ZERO]*(dxux + dyuy + dzuz); + + //LBMReal hSource =((phi[ZERO]>phiH || phi[ZERO]<phiL) ? 0.1 : 1.0) * 3.0*mob*(-4.0)/di*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)*(dirGrad_phi)/denom; + LBMReal hSource = 3.0*mob*(-4.0)/di*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)*(dirGrad_phi)/denom; + hEq = phi[ZERO]*WEIGTH[dir]*(1.0 + 3.0*velProd + 4.5*velSq1 - 1.5*(ux2+uy2+uz2)) + hSource*WEIGTH[dir]; + //gEq = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx2+vy2+vz2))*c1o3 + (p1-rho*c1o3)*WEIGTH[dir]; + //h[dir] = hEq; //h[dir] - (h[dir] - hEq)/(tauH + 0.5)); /// This corresponds with the collision factor of 1.0 which equals (tauH + 0.5). + h[dir] = h[dir] - (h[dir] - hEq)/(tauH1); // + WEIGTH[dir]*phi[ZERO]*(dxux + dyuy + dzuz); + //h[dir] = h[dir] - (h[dir] - hEq)/(tauH1); + //g[dir] = g[dir] - collFactorM*(g[dir]-gEq) + 0.5*forcingTerm[dir]; + + } + else + { + hEq = phi[ZERO]*WEIGTH[ZERO]*(1.0 - 1.5*(ux2+uy2+uz2)); + //gEq = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx2+vy2+vz2))*c1o3 + (p1-rho*c1o3)*WEIGTH[dir]; + //h[dir] = hEq; + h[ZERO] = h[ZERO] - (h[ZERO] - hEq)/(tauH1); // + WEIGTH[ZERO]*phi[ZERO]*(dxux + dyuy + dzuz); + //g[dir] = g[dir] - collFactorM*(g[dir]-gEq) + 0.5*forcingTerm[dir]; + } + } + + + (*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::ZERO]; + + +///////////////////// END OF OLD BGK SOLVER /////////////////////////////// + + + + + + + ////////////////////////////////////////////////////////////////////////// + + } + } + } + } + dataSet->setPhaseField(divU); + + } +} +////////////////////////////////////////////////////////////////////////// +double MultiphaseCumulantLBMKernel::getCallculationTime() +{ + //return timer.getDuration(); + return timer.getTotalTime(); +} +////////////////////////////////////////////////////////////////////////// + +LBMReal MultiphaseCumulantLBMKernel::gradX1_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*DX1[k]*phi[k]; + } + return 3.0*sum; +} + +LBMReal MultiphaseCumulantLBMKernel::gradX2_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*DX2[k]*phi[k]; + } + return 3.0*sum; +} + +LBMReal MultiphaseCumulantLBMKernel::gradX3_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*DX3[k]*phi[k]; + } + return 3.0*sum; +} + + + +LBMReal MultiphaseCumulantLBMKernel::gradX1_pr1() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*DX1[k]*pr1[k]; + } + return 3.0*sum; + //return 0.5*(pr1[E] - pr1[W]); +} + +LBMReal MultiphaseCumulantLBMKernel::gradX2_pr1() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*DX2[k]*pr1[k]; + } + return 3.0*sum; + //return 0.5*(pr1[N] - pr1[S]); +} + +LBMReal MultiphaseCumulantLBMKernel::gradX3_pr1() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*DX3[k]*pr1[k]; + } + return 3.0*sum; + //return 0.5*(pr1[T] - pr1[B]); +} + + + +LBMReal MultiphaseCumulantLBMKernel::nabla2_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*(phi[k] - phi[ZERO]); + } + return 6.0*sum; +} +///// Commnets neeeded //////// + +void MultiphaseCumulantLBMKernel::computePhasefield() +{ + using namespace D3Q27System; + DistributionArray3DPtr distributionsH = dataSet->getHdistributions(); + + //const int bcArrayMaxX1 = (int)distributionsH->getNX1(); + //const int bcArrayMaxX2 = (int)distributionsH->getNX2(); + //const int bcArrayMaxX3 = (int)distributionsH->getNX3(); + + int minX1 = ghostLayerWidth; + int minX2 = ghostLayerWidth; + int minX3 = ghostLayerWidth; + int maxX1 = (int)distributionsH->getNX1() - ghostLayerWidth; + int maxX2 = (int)distributionsH->getNX2() - ghostLayerWidth; + int maxX3 = (int)distributionsH->getNX3() - ghostLayerWidth; + + //------------- Computing the phase-field ------------------ + for(int x3 = minX3; x3 < maxX3; x3++) + { + for(int x2 = minX2; x2 < maxX2; x2++) + { + for(int x1 = minX1; x1 < maxX1; x1++) + { + //if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3)) + { + int x1p = x1 + 1; + int x2p = x2 + 1; + int x3p = x3 + 1; + + 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[ZERO] = (*this->zeroDistributionsH)(x1,x2,x3); + + /*(*this->phaseField)(x1,x2,x3) = h[ZERO] + h[E] + h[W] + h[N] + h[S] + h[T] + h[B] + h[NE] + h[SW] + h[SE] + h[NW] + h[TE] + h[BW] + + h[BE] + h[TW] + h[TN] + h[BS] + h[BN] + h[TS] + h[TNE] + h[TNW] + h[TSE] + h[TSW] + h[BNE] + h[BNW] + h[BSE] + h[BSW];*/ + + } + } + } + } + //---------------------------------------------------------- + +/* + /////// Filling ghost nodes for FD computations ////////// + for(int x1 = minX1; x1 < maxX1; x1++) + { + for(int x2 = minX2; x2 < maxX2; x2++) + { + int x3 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, x2, maxX3-1); + x3 = maxX3; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, x2, minX3); + } + } + for(int x2 = minX2; x2 < maxX2; x2++) + { + for(int x3 = minX3; x3 < maxX3; x3++) + { + int x1 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(maxX1-1, x2, x3); + x1 = maxX1; + (*phaseField)(x1, x2, x3) = (*phaseField)(minX1, x2, x3); + } + } + for(int x1 = minX1; x1 < maxX1; x1++) + { + for(int x3 = minX3; x3 < maxX3; x3++) + { + int x2 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, maxX2-1, x3); + x2 = maxX2; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, minX2, x3); + } + } + (*phaseField)(0, 0, 0 ) = (*phaseField)(maxX1-1, maxX2-1, maxX3-1); + (*phaseField)(0, 0, maxX3) = (*phaseField)(maxX1-1, maxX2-1, minX3 ); + (*phaseField)(0, maxX2, 0 ) = (*phaseField)(maxX1-1, minX2, maxX3-1 ); + (*phaseField)(0, maxX2, maxX3) = (*phaseField)(maxX1-1, minX2, minX3 ); + + (*phaseField)(maxX1, 0, 0 ) = (*phaseField)(minX1, maxX2-1, maxX3-1); + (*phaseField)(maxX1, 0, maxX3) = (*phaseField)(minX1, maxX2-1, minX3 ); + (*phaseField)(maxX1, maxX2, 0 ) = (*phaseField)(minX1, minX2, maxX3-1 ); + (*phaseField)(maxX1, maxX2, maxX3) = (*phaseField)(minX1, minX2, minX3 ); + + ///////////////////////////////////////////////////////// +*/ +} + +void MultiphaseCumulantLBMKernel::findNeighbors(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr ph, CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf, int x1, int x2, int x3) +{ + using namespace D3Q27System; + + BCArray3DPtr bcArray = this->getBCProcessor()->getBCArray(); + + phi[ZERO] = (*ph)(x1,x2,x3); + pr1[ZERO] = (*pf)(x1,x2,x3); + + LBMReal a = -0.5*sqrt(2*beta/kappa)*cos(contactAngle*PI/180); + LBMReal a1 = 1 + a; + + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + + if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) + { + phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]); + pr1[k] = (*pf)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]); + } + else + { + /* + if (phi[ZERO] < 1e-2) + { + phi[k] = (*ph)(x1 + DX1[INVDIR[k]], x2 + DX2[INVDIR[k]], x3 + DX3[INVDIR[k]]); + } + else + { + LBMReal phi_f = (*ph)(x1 + DX1[k], x2, x3 + DX3[k]); + phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f; + } + */ + + phi[k] = (*ph)(x1, x2, x3); + pr1[k] = (*pf)(x1, x2, x3); + + //if (bcArray->isSolid(x1 + DX1[k], x2, x3)) + //{ + // phi[k] = (*ph)(x1, x2, x3); + // //if (!bcArray->isSolid(x1 , x2 + DX2[k], x3 + DX3[k])) + // //{ + // // //phi[k] = (*ph)(x1 , x2 + DX2[k], x3 + DX3[k]); + // // LBMReal phi_f = (*ph)(x1 , x2 + DX2[k], x3 + DX3[k]); + // // phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f; + // //} + // //else + // //{ + // // phi[k] = (*ph)(x1, x2, x3); + // //} + //} + // + //if (bcArray->isSolid(x1 , x2 + DX2[k], x3)) + //{ + // phi[k] = (*ph)(x1, x2, x3); + // //if (!bcArray->isSolid(x1 + DX1[k], x2 , x3 + DX3[k])) + // //{ + // // //phi[k] = (*ph)(x1 + DX1[k], x2 , x3 + DX3[k]); + // // LBMReal phi_f = (*ph)(x1 + DX1[k], x2 , x3 + DX3[k]); + // // phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f; + // //} + // //else + // //{ + // // phi[k] = (*ph)(x1, x2, x3); + // //} + //} + + + //if (bcArray->isSolid(x1 , x2, x3+ DX3[k])) + //{ + // if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3)) + // { + // //phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3); + // LBMReal phi_f = (*ph)(x1 + DX1[k], x2 + DX2[k], x3); + // phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f; + // } + // else + // { + // phi[k] = (*ph)(x1, x2, x3); + // } + //} + + + /*if (bcArray->isSolid(x1 + DX1[k], x2, x3)) phi[k] = (*ph)(x1 , x2 + DX2[k], x3 + DX3[k]); + if (bcArray->isSolid(x1 , x2 + DX2[k], x3)) phi[k] = (*ph)(x1 + DX1[k], x2 , x3 + DX3[k]); + if (bcArray->isSolid(x1 , x2, x3+ DX3[k])) phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 );*/ + + /*if (phi[ZERO] < 0.00001) + { + phi[k] = 0.0; + } + else + { + phi[k] = 0.5; + }*/ + + //phi[k] = 0.5; + //phi[k] = (*ph)(x1, x2, x3); + //phi[k] = (*ph)(x1 + DX1[INVDIR[k]], x2 + DX2[INVDIR[k]], x3 + DX3[INVDIR[k]]); + + + } + } + + /* + phi[E ] = (*ph)(x1 + DX1[E ], x2 + DX2[E ], x3 + DX3[E ]); + phi[N ] = (*ph)(x1 + DX1[N ], x2 + DX2[N ], x3 + DX3[N ]); + phi[T ] = (*ph)(x1 + DX1[T ], x2 + DX2[T ], x3 + DX3[T ]); + phi[W ] = (*ph)(x1 + DX1[W ], x2 + DX2[W ], x3 + DX3[W ]); + phi[S ] = (*ph)(x1 + DX1[S ], x2 + DX2[S ], x3 + DX3[S ]); + phi[B ] = (*ph)(x1 + DX1[B ], x2 + DX2[B ], x3 + DX3[B ]); + phi[NE ] = (*ph)(x1 + DX1[NE ], x2 + DX2[NE ], x3 + DX3[NE ]); + phi[NW ] = (*ph)(x1 + DX1[NW ], x2 + DX2[NW ], x3 + DX3[NW ]); + phi[TE ] = (*ph)(x1 + DX1[TE ], x2 + DX2[TE ], x3 + DX3[TE ]); + phi[TW ] = (*ph)(x1 + DX1[TW ], x2 + DX2[TW ], x3 + DX3[TW ]); + phi[TN ] = (*ph)(x1 + DX1[TN ], x2 + DX2[TN ], x3 + DX3[TN ]); + phi[TS ] = (*ph)(x1 + DX1[TS ], x2 + DX2[TS ], x3 + DX3[TS ]); + phi[SW ] = (*ph)(x1 + DX1[SW ], x2 + DX2[SW ], x3 + DX3[SW ]); + phi[SE ] = (*ph)(x1 + DX1[SE ], x2 + DX2[SE ], x3 + DX3[SE ]); + phi[BW ] = (*ph)(x1 + DX1[BW ], x2 + DX2[BW ], x3 + DX3[BW ]); + phi[BE ] = (*ph)(x1 + DX1[BE ], x2 + DX2[BE ], x3 + DX3[BE ]); + phi[BS ] = (*ph)(x1 + DX1[BS ], x2 + DX2[BS ], x3 + DX3[BS ]); + phi[BN ] = (*ph)(x1 + DX1[BN ], x2 + DX2[BN ], x3 + DX3[BN ]); + phi[BSW] = (*ph)(x1 + DX1[BSW], x2 + DX2[BSW], x3 + DX3[BSW]); + phi[BSE] = (*ph)(x1 + DX1[BSE], x2 + DX2[BSE], x3 + DX3[BSE]); + phi[BNW] = (*ph)(x1 + DX1[BNW], x2 + DX2[BNW], x3 + DX3[BNW]); + phi[BNE] = (*ph)(x1 + DX1[BNE], x2 + DX2[BNE], x3 + DX3[BNE]); + phi[TNE] = (*ph)(x1 + DX1[TNE], x2 + DX2[TNE], x3 + DX3[TNE]); + phi[TNW] = (*ph)(x1 + DX1[TNW], x2 + DX2[TNW], x3 + DX3[TNW]); + phi[TSE] = (*ph)(x1 + DX1[TSE], x2 + DX2[TSE], x3 + DX3[TSE]); + phi[TSW] = (*ph)(x1 + DX1[TSW], x2 + DX2[TSW], x3 + DX3[TSW]); + */ +} + +void MultiphaseCumulantLBMKernel::pressureFiltering(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf /*Pressure-Field*/, CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf_filtered /*Pressure-Field*/) +{ + using namespace D3Q27System; + + BCArray3DPtr bcArray = this->getBCProcessor()->getBCArray(); + + + + const int bcArrayMaxX1 = (int)bcArray->getNX1(); + const int bcArrayMaxX2 = (int)bcArray->getNX2(); + const int bcArrayMaxX3 = (int)bcArray->getNX3(); + + int minX1 = ghostLayerWidth; + int minX2 = ghostLayerWidth; + int minX3 = ghostLayerWidth; + int maxX1 = bcArrayMaxX1-ghostLayerWidth; + int maxX2 = bcArrayMaxX2-ghostLayerWidth; + int maxX3 = bcArrayMaxX3-ghostLayerWidth; + + for(int x3 = 0; x3 <= maxX3; x3++) + { + for(int x2 = 0; x2 <= maxX2; x2++) + { + for(int x1 = 0; x1 <= maxX1; x1++) + { + if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3)) + { + int cnum = 0; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + //if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) + { + cnum++; + sum += (*pf)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])*WEIGTH[k]; + + } + } + LBMReal av = sum/cnum; + (*pf_filtered)(x1, x2, x3) = ((*pf)(x1, x2, x3))*WEIGTH[ZERO] + sum; + + } + } + } + } + + + + +} + + + +void MultiphaseCumulantLBMKernel::swapDistributions() +{ + dataSet->getFdistributions()->swap(); + dataSet->getHdistributions()->swap(); + //computePhasefield(); +} \ No newline at end of file diff --git a/apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (Original Final from Phoenix).cpp b/apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (Original Final from Phoenix).cpp new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (Original Final).cpp b/apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (Original Final).cpp new file mode 100644 index 0000000000000000000000000000000000000000..498d91ff8fb8e0a7ae19000225d82a2d7e757387 --- /dev/null +++ b/apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (Original Final).cpp @@ -0,0 +1,2700 @@ +#include "MultiphaseCumulantLBMKernel.h" +#include "D3Q27System.h" +#include "InterpolationProcessor.h" +#include "D3Q27EsoTwist3DSplittedVector.h" +#include <math.h> +#include <omp.h> + +#define PROOF_CORRECTNESS + +////////////////////////////////////////////////////////////////////////// +MultiphaseCumulantLBMKernel::MultiphaseCumulantLBMKernel() +{ + this->nx1 = 0; + this->nx2 = 0; + this->nx3 = 0; + this->parameter = NORMAL; + this->OxyyMxzz = 1.0; + this->compressible = false; +} +////////////////////////////////////////////////////////////////////////// +MultiphaseCumulantLBMKernel::MultiphaseCumulantLBMKernel(int nx1, int nx2, int nx3, Parameter p) +{ + this->nx1 = nx1; + this->nx2 = nx2; + this->nx3 = nx3; + parameter = p; + this->compressible = false; +} +////////////////////////////////////////////////////////////////////////// +MultiphaseCumulantLBMKernel::~MultiphaseCumulantLBMKernel(void) +{ + +} +////////////////////////////////////////////////////////////////////////// +void MultiphaseCumulantLBMKernel::init() +{ + //DistributionArray3DPtr d(new D3Q27EsoTwist3DSplittedVector(nx1+ghostLayerWitdh*2, nx2+ghostLayerWitdh*2, nx3+ghostLayerWitdh*2, -999.0)); + DistributionArray3DPtr f(new D3Q27EsoTwist3DSplittedVector(nx1+2, nx2+2, nx3+2, -999.0)); + DistributionArray3DPtr h(new D3Q27EsoTwist3DSplittedVector(nx1+2, nx2+2, nx3+2, -999.0)); // For phase-field + PhaseFieldArray3DPtr divU(new CbArray3D<LBMReal,IndexerX3X2X1>(nx1+2, nx2+2, nx3+2, 0.0)); + dataSet->setFdistributions(f); + dataSet->setHdistributions(h); // For phase-field + dataSet->setPhaseField(divU); +} +////////////////////////////////////////////////////////////////////////// +LBMKernelPtr MultiphaseCumulantLBMKernel::clone() +{ + LBMKernelPtr kernel(new MultiphaseCumulantLBMKernel(nx1, nx2, nx3, parameter)); + boost::dynamic_pointer_cast<MultiphaseCumulantLBMKernel>(kernel)->init(); + + kernel->setCollisionFactorMultiphase(this->collFactorL, this->collFactorG); + kernel->setDensityRatio(this->densityRatio); + kernel->setMultiphaseModelParameters(this->beta, this->kappa); + kernel->setContactAngle(this->contactAngle); + kernel->setPhiL(this->phiL); + kernel->setPhiH(this->phiH); + kernel->setPhaseFieldRelaxation(this->tauH); + kernel->setMobility(this->mob); + + kernel->setBCProcessor(bcProcessor->clone(kernel)); + kernel->setWithForcing(withForcing); + kernel->setForcingX1(muForcingX1); + kernel->setForcingX2(muForcingX2); + kernel->setForcingX3(muForcingX3); + kernel->setIndex(ix1, ix2, ix3); + kernel->setDeltaT(deltaT); + switch (parameter) + { + case NORMAL: + boost::dynamic_pointer_cast<MultiphaseCumulantLBMKernel>(kernel)->OxyyMxzz = 1.0; + break; + case MAGIC: + boost::dynamic_pointer_cast<MultiphaseCumulantLBMKernel>(kernel)->OxyyMxzz = 2.0 +(-collFactor); + break; + } + return kernel; +} +////////////////////////////////////////////////////////////////////////// +void MultiphaseCumulantLBMKernel::calculate() +{ + timer.resetAndStart(); + collideAll(); + timer.stop(); +} +////////////////////////////////////////////////////////////////////////// +void MultiphaseCumulantLBMKernel::collideAll() +{ + using namespace D3Q27System; + + //initializing of forcing stuff + /*if (withForcing) + { + muForcingX1.DefineVar("x1",&muX1); muForcingX1.DefineVar("x2",&muX2); muForcingX1.DefineVar("x3",&muX3); + muForcingX2.DefineVar("x1",&muX1); muForcingX2.DefineVar("x2",&muX2); muForcingX2.DefineVar("x3",&muX3); + muForcingX3.DefineVar("x1",&muX1); muForcingX3.DefineVar("x2",&muX2); muForcingX3.DefineVar("x3",&muX3); + + muDeltaT = deltaT; + + muForcingX1.DefineVar("dt",&muDeltaT); + muForcingX2.DefineVar("dt",&muDeltaT); + muForcingX3.DefineVar("dt",&muDeltaT); + + muNu = (1.0/3.0)*(1.0/collFactor - 1.0/2.0); + + muForcingX1.DefineVar("nu",&muNu); + muForcingX2.DefineVar("nu",&muNu); + muForcingX3.DefineVar("nu",&muNu); + + LBMReal forcingX1 = 0; + LBMReal forcingX2 = 0; + LBMReal forcingX3 = 0; + }*/ + forcingX1 = 0.0; + forcingX2 = 0.0; + forcingX3 = 0.0; + ///////////////////////////////////// + + localDistributionsF = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); + nonLocalDistributionsF = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); + zeroDistributionsF = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); + + localDistributionsH = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions(); + nonLocalDistributionsH = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions(); + zeroDistributionsH = boost::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions(); + + + + //phaseField = dataSet->getPhaseField(); + + BCArray3DPtr bcArray = this->getBCProcessor()->getBCArray(); + + + + const int bcArrayMaxX1 = (int)bcArray->getNX1(); + const int bcArrayMaxX2 = (int)bcArray->getNX2(); + const int bcArrayMaxX3 = (int)bcArray->getNX3(); + + int minX1 = ghostLayerWidth; + int minX2 = ghostLayerWidth; + int minX3 = ghostLayerWidth; + int maxX1 = bcArrayMaxX1-ghostLayerWidth; + int maxX2 = bcArrayMaxX2-ghostLayerWidth; + int maxX3 = bcArrayMaxX3-ghostLayerWidth; + + +//#pragma omp parallel num_threads(8) + { + // int i = omp_get_thread_num(); + // printf_s("Hello from thread %d\n", i); + //} +//#pragma omp for + + + CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr phaseField(new CbArray3D<LBMReal,IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0)); + CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr divU(new CbArray3D<LBMReal,IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, 0.0)); + + //CbArray3D<LBMReal> phaseField(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3,-999); + + + for(int x3 = 0; x3 <= maxX3; x3++) + { + for(int x2 = 0; x2 <= maxX2; x2++) + { + for(int x1 = 0; x1 <= maxX1; x1++) + { + if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3)) + { + int x1p = x1 + 1; + int x2p = x2 + 1; + int x3p = x3 + 1; + + LBMReal mfcbb = (*this->localDistributionsH)(D3Q27System::ET_E, x1,x2,x3); + LBMReal mfbcb = (*this->localDistributionsH)(D3Q27System::ET_N,x1,x2,x3); + LBMReal mfbbc = (*this->localDistributionsH)(D3Q27System::ET_T,x1,x2,x3); + LBMReal mfccb = (*this->localDistributionsH)(D3Q27System::ET_NE,x1,x2,x3); + LBMReal mfacb = (*this->localDistributionsH)(D3Q27System::ET_NW,x1p,x2,x3); + LBMReal mfcbc = (*this->localDistributionsH)(D3Q27System::ET_TE,x1,x2,x3); + LBMReal mfabc = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p,x2,x3); + LBMReal mfbcc = (*this->localDistributionsH)(D3Q27System::ET_TN,x1,x2,x3); + LBMReal mfbac = (*this->localDistributionsH)(D3Q27System::ET_TS,x1,x2p,x3); + LBMReal mfccc = (*this->localDistributionsH)(D3Q27System::ET_TNE,x1,x2,x3); + LBMReal mfacc = (*this->localDistributionsH)(D3Q27System::ET_TNW,x1p,x2,x3); + LBMReal mfcac = (*this->localDistributionsH)(D3Q27System::ET_TSE,x1,x2p,x3); + LBMReal mfaac = (*this->localDistributionsH)(D3Q27System::ET_TSW,x1p,x2p,x3); + LBMReal mfabb = (*this->nonLocalDistributionsH)(D3Q27System::ET_W,x1p,x2,x3 ); + LBMReal mfbab = (*this->nonLocalDistributionsH)(D3Q27System::ET_S,x1,x2p,x3 ); + LBMReal mfbba = (*this->nonLocalDistributionsH)(D3Q27System::ET_B,x1,x2,x3p ); + LBMReal mfaab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW,x1p,x2p,x3 ); + LBMReal mfcab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE,x1,x2p,x3 ); + LBMReal mfaba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW,x1p,x2,x3p ); + LBMReal mfcba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE,x1,x2,x3p ); + LBMReal mfbaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS,x1,x2p,x3p ); + LBMReal mfbca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN,x1,x2,x3p ); + LBMReal mfaaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW,x1p,x2p,x3p); + LBMReal mfcaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE,x1,x2p,x3p); + LBMReal mfaca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW,x1p,x2,x3p); + LBMReal mfcca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE,x1,x2,x3p); + + LBMReal mfbbb = (*this->zeroDistributionsH)(x1,x2,x3); + //LBMReal phase = h[ZERO] + h[E] + h[W] + h[N] + h[S] + h[T] + h[B] + h[NE] + h[SW] + h[SE] + h[NW] + h[TE] + h[BW] + + // h[BE] + h[TW] + h[TN] + h[BS] + h[BN] + h[TS] + h[TNE] + h[TNW] + h[TSE] + h[TSW] + h[BNE] + h[BNW] + h[BSE] + h[BSW]; + //if (phase > 1.0) phase = 1.0e0; + //(*phaseField)(x1,x2,x3) = phase; + (*phaseField)(x1,x2,x3) = (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 collFactorM; + LBMReal forcingTerm[D3Q27System::ENDF+1]; + LBMReal m000, m100, m010, m001, m110, m101, m011, m200, m020, m002, m120, m102, m210, m012, m201, m021, m111, m220, m202, m022, m211, m121, m112, m221, m212, m122, m222; + LBMReal k000, k100, k010, k001, k110, k101, k011, k200, k020, k002, k120, k102, k210, k012, k201, k021, k111, k220, k202, k022, k211, k121, k112, k221, k212, k122, k222; + LBMReal c000, c100, c010, c001, c110, c101, c011, c200, c020, c002, c120, c102, c210, c012, c201, c021, c111, c220, c202, c022, c211, c121, c112, c221, c212, c122, c222; + + LBMReal k200_pl_k020_pl_k002, k200_mi_k020, k200_mi_k002, k210_pl_k012, k210_mi_k012, k201_pl_k021, k201_mi_k021, k120_pl_k102, k120_mi_k102, k220_pl_k202_pl_k022, + k220_mi2_k202_pl_k022, k220_pl_k202_mi2_k022; + + LBMReal c200_pl_c020_pl_c002, c200_mi_c020, c200_mi_c002, c210_pl_c012, c210_mi_c012, c201_pl_c021, c201_mi_c021, c120_pl_c102, c120_mi_c102, c220_pl_c202_pl_c022, + c220_mi2_c202_pl_c022, c220_pl_c202_mi2_c022; + + LBMReal w1, w2, w3, w4, w5, w6, w7, w8, w9, w10; + + w2 = 1.0; + w3 = 1.0; + w4 = 1.0; + w5 = 1.0; + w6 = 1.0; + w7 = 1.0; + w8 = 1.0; + w9 = 1.0; + w10 = 1.0; + + for(int x3 = minX3; x3 < maxX3; x3++) + { + for(int x2 = minX2; x2 < maxX2; x2++) + { + for(int x1 = minX1; x1 < maxX1; x1++) + { + if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3)) + { + int x1p = x1 + 1; + int x2p = x2 + 1; + int x3p = x3 + 1; + + + ////////////////////////////////////////////////////////////////////////// + //Read distributions and phase field + //////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////// + + //E N T + //c c c + ////////// + //W S B + //a a a + + //Rest ist b + + //mfxyz + //a - negative + //b - null + //c - positive + + // a b c + //-1 0 1 + + /* + phi[ZERO] = (phaseField)(x1,x2,x3); + phi[E ] = (phaseField)(x1 + DX1[E ], x2 + DX2[E ], x3 + DX3[E ]); + phi[N ] = (phaseField)(x1 + DX1[N ], x2 + DX2[N ], x3 + DX3[N ]); + phi[T ] = (phaseField)(x1 + DX1[T ], x2 + DX2[T ], x3 + DX3[T ]); + phi[W ] = (phaseField)(x1 + DX1[W ], x2 + DX2[W ], x3 + DX3[W ]); + phi[S ] = (phaseField)(x1 + DX1[S ], x2 + DX2[S ], x3 + DX3[S ]); + phi[B ] = (phaseField)(x1 + DX1[B ], x2 + DX2[B ], x3 + DX3[B ]); + phi[NE ] = (phaseField)(x1 + DX1[NE ], x2 + DX2[NE ], x3 + DX3[NE ]); + phi[NW ] = (phaseField)(x1 + DX1[NW ], x2 + DX2[NW ], x3 + DX3[NW ]); + phi[TE ] = (phaseField)(x1 + DX1[TE ], x2 + DX2[TE ], x3 + DX3[TE ]); + phi[TW ] = (phaseField)(x1 + DX1[TW ], x2 + DX2[TW ], x3 + DX3[TW ]); + phi[TN ] = (phaseField)(x1 + DX1[TN ], x2 + DX2[TN ], x3 + DX3[TN ]); + phi[TS ] = (phaseField)(x1 + DX1[TS ], x2 + DX2[TS ], x3 + DX3[TS ]); + phi[SW ] = (phaseField)(x1 + DX1[SW ], x2 + DX2[SW ], x3 + DX3[SW ]); + phi[SE ] = (phaseField)(x1 + DX1[SE ], x2 + DX2[SE ], x3 + DX3[SE ]); + phi[BW ] = (phaseField)(x1 + DX1[BW ], x2 + DX2[BW ], x3 + DX3[BW ]); + phi[BE ] = (phaseField)(x1 + DX1[BE ], x2 + DX2[BE ], x3 + DX3[BE ]); + phi[BS ] = (phaseField)(x1 + DX1[BS ], x2 + DX2[BS ], x3 + DX3[BS ]); + phi[BN ] = (phaseField)(x1 + DX1[BN ], x2 + DX2[BN ], x3 + DX3[BN ]); + phi[BSW] = (phaseField)(x1 + DX1[BSW], x2 + DX2[BSW], x3 + DX3[BSW]); + phi[BSE] = (phaseField)(x1 + DX1[BSE], x2 + DX2[BSE], x3 + DX3[BSE]); + phi[BNW] = (phaseField)(x1 + DX1[BNW], x2 + DX2[BNW], x3 + DX3[BNW]); + phi[BNE] = (phaseField)(x1 + DX1[BNE], x2 + DX2[BNE], x3 + DX3[BNE]); + phi[TNE] = (phaseField)(x1 + DX1[TNE], x2 + DX2[TNE], x3 + DX3[TNE]); + phi[TNW] = (phaseField)(x1 + DX1[TNW], x2 + DX2[TNW], x3 + DX3[TNW]); + phi[TSE] = (phaseField)(x1 + DX1[TSE], x2 + DX2[TSE], x3 + DX3[TSE]); + phi[TSW] = (phaseField)(x1 + DX1[TSW], x2 + DX2[TSW], x3 + DX3[TSW]); + */ + findNeighbors(phaseField, x1, x2, x3); + + LBMReal mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1,x2,x3); + LBMReal mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N,x1,x2,x3); + LBMReal mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T,x1,x2,x3); + LBMReal mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE,x1,x2,x3); + LBMReal mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW,x1p,x2,x3); + LBMReal mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE,x1,x2,x3); + LBMReal mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p,x2,x3); + LBMReal mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN,x1,x2,x3); + LBMReal mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS,x1,x2p,x3); + LBMReal mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE,x1,x2,x3); + LBMReal mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW,x1p,x2,x3); + LBMReal mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE,x1,x2p,x3); + LBMReal mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW,x1p,x2p,x3); + LBMReal mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W,x1p,x2,x3 ); + LBMReal mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S,x1,x2p,x3 ); + LBMReal mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B,x1,x2,x3p ); + LBMReal mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW,x1p,x2p,x3 ); + LBMReal mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE,x1,x2p,x3 ); + LBMReal mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW,x1p,x2,x3p ); + LBMReal mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE,x1,x2,x3p ); + LBMReal mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS,x1,x2p,x3p ); + LBMReal mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN,x1,x2,x3p ); + LBMReal mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW,x1p,x2p,x3p); + LBMReal mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE,x1,x2p,x3p); + LBMReal mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW,x1p,x2,x3p); + LBMReal mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE,x1,x2,x3p); + + LBMReal mfbbb = (*this->zeroDistributionsF)(x1,x2,x3); + + + + LBMReal rhoH = 1.0; + LBMReal rhoL = 1.0/densityRatio; + + //LBMReal rhoToPhi = (1.0 - 1.0/densityRatio); + LBMReal rhoToPhi = (rhoH - rhoL)/(phiH - phiL); + + //collFactorM = phi[ZERO]*collFactorL + (1-phi[ZERO])*collFactorG; + //collFactorM = phi[ZERO]*collFactorG + (1-phi[ZERO])*collFactorL; + + //LBMReal tauH = 1.0; + LBMReal di = sqrt(8*kappa/beta); + + LBMReal dX1_phi = gradX1_phi(); + 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; + + collFactorM = collFactorL + (collFactorL - collFactorG)*(phi[ZERO] - phiH)/(phiH - phiL); + + /*if ((phi[ZERO] > 0.1)||(phi[ZERO] < 0.9)) + { + collFactorM*=(1.0-denom); + }*/ + + w1 = collFactorM; + + /*dX1_phi = -normX1*((phi[ZERO]>phiH || phi[ZERO]<phiL) ? 0.0 : 4*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)/di); + dX2_phi = -normX2*((phi[ZERO]>phiH || phi[ZERO]<phiL) ? 0.0 : 4*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)/di); + dX3_phi = -normX3*((phi[ZERO]>phiH || phi[ZERO]<phiL) ? 0.0 : 4*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)/di);*/ + + //UbTupleDouble3 coords = grid->getNodeCoordinates(block, x1, x2, x3); + /*Block3D bl = this->block(); + + int wX1 = bl->getX1() + x1; + int wX2 = bl->getX2() + x2; + int wX3 = bl->getX3() + x3;*/ + + /*if (wX3 >= 30.0) + { + dX1_phi = 0.0; + dX2_phi = 0.0; + dX3_phi = 0.0; + }*/ + + + LBMReal mu = 2*beta*phi[ZERO]*(phi[ZERO]-1)*(2*phi[ZERO]-1) - kappa*nabla2_phi(); + + //LBMReal rhoToPhi = (1.0/densityRatio - 1.0); + + + + //----------- Calculating Macroscopic Values ------------- + + //LBMReal rho = phi[ZERO] + (1.0 - phi[ZERO])*1.0/densityRatio; + LBMReal rho = rhoH + rhoToPhi*(phi[ZERO] - phiH); + //LBMReal rho = phi[ZERO]*1.0/densityRatio + (1.0 - phi[ZERO]); + + if (withForcing) + { + //muX1 = static_cast<double>(x1-1+ix1*maxX1); + //muX2 = static_cast<double>(x2-1+ix2*maxX2); + //muX3 = static_cast<double>(x3-1+ix3*maxX3); + + forcingX1 = muForcingX1.Eval(); + forcingX2 = muForcingX2.Eval(); + forcingX3 = muForcingX3.Eval(); + + LBMReal rho_m = 1.0/densityRatio; + forcingX1 = forcingX1*(rho-rho_m); + forcingX2 = forcingX2*(rho-rho_m); + forcingX3 = forcingX3*(rho-rho_m); + + //ux += forcingX1*deltaT*0.5; // X + //uy += forcingX2*deltaT*0.5; // Y + //uz += forcingX3*deltaT*0.5; // Z + } + + LBMReal ux = ((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + + (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) + + (mfcbb-mfabb)) / (rho*c1o3) + (mu*dX1_phi + forcingX1)/(2*rho); + + LBMReal uy = ((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) + + (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) + + (mfbcb-mfbab)) / (rho*c1o3) + (mu*dX2_phi + forcingX2)/(2*rho); + + LBMReal uz = ((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) + + (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) + + (mfbbc-mfbba)) / (rho*c1o3) + (mu*dX3_phi + forcingX3)/(2*rho); + + LBMReal p1 = (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 + + (ux*rhoToPhi*dX1_phi*c1o3 + uy*rhoToPhi*dX2_phi*c1o3 + uz*rhoToPhi*dX3_phi*c1o3)/2.0; + + //vvx = 0.0; vvy = 0.0; vvz = 0.0; + //-------------------------------------------------------- + + + + + LBMReal ux2 = ux*ux; + LBMReal uy2 = uy*uy; + LBMReal uz2 = uz*uz; + LBMReal ux_uy = ux*uy; + LBMReal ux_uz = ux*uz; + LBMReal uy_uz = uy*uz; + LBMReal ux_uy_uz = ux*uy*uz; + + +/* + //----------- Calculating Forcing Terms ------------- + LBMReal forcingTerm1 = (ux*mu*dX1_phi + uy*mu*dX2_phi + uz*mu*dX3_phi); + for (int dir = STARTF; dir < (ENDF+1); dir++) + { + if (dir != ZERO) + { + LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0; + forcingTerm[dir] = (c1o3*rhoToPhi*dirGrad_phi + mu*dirGrad_phi)*(DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz)*WEIGTH[dir]/c1o3 + mu*dirGrad_phi*WEIGTH[dir] - + (forcingTerm1)*WEIGTH[dir]; + } + else + { + forcingTerm[ZERO] = -(forcingTerm1)*WEIGTH[ZERO]; + } + } + //-------------------------------------------------------- +*/ + + //----------- Calculating Forcing Terms * ------------- + //LBMReal forcingTerm1 = (ux*mu*dX1_phi + uy*mu*dX2_phi + uz*mu*dX3_phi); + for (int dir = STARTF; dir <= (FENDDIR); dir++) + { + LBMReal velProd = DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz; + LBMReal velSq1 = velProd*velProd; + LBMReal gamma = WEIGTH[dir]*(1.0 + 3*velProd + 4.5*velSq1 - 1.5*(ux2+uy2+uz2)); + + //forcingTerm[dir] = (DX1[dir] - ux)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX1_phi + gamma*mu*dX1_phi) + + // (DX2[dir] - uy)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX2_phi + gamma*mu*dX2_phi) + + // (DX3[dir] - uz)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX3_phi + gamma*mu*dX3_phi); + + LBMReal fac1 = (gamma - WEIGTH[dir])*c1o3*rhoToPhi; + LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0; + //LBMReal dirGrad_phi = DX1[dir]*dX1_phi + DX2[dir]*dX2_phi + DX3[dir]*dX3_phi; + + /*forcingTerm[dir] = (- (ux)*(fac1*dX1_phi + gamma*mu*dX1_phi) - + (uy)*(fac1*dX2_phi + gamma*mu*dX2_phi) - + (uz)*(fac1*dX3_phi + gamma*mu*dX3_phi)) + (fac1*dirGrad_phi + gamma*mu*dirGrad_phi + DX1[dir]*forcingX1 + DX2[dir]*forcingX2 + DX3[dir]*forcingX3);*/ + + + forcingTerm[dir] = ((-ux)*(fac1*dX1_phi + gamma*(mu*dX1_phi + forcingX1)) + + (-uy)*(fac1*dX2_phi + gamma*(mu*dX2_phi + forcingX2)) + + (-uz)*(fac1*dX3_phi + gamma*(mu*dX3_phi + forcingX3))) + + (DX1[dir])*(fac1*dX1_phi + gamma*(mu*dX1_phi + forcingX1)) + + (DX2[dir])*(fac1*dX2_phi + gamma*(mu*dX2_phi + forcingX2)) + + (DX3[dir])*(fac1*dX3_phi + gamma*(mu*dX3_phi + forcingX3)); + + } + + LBMReal gamma = WEIGTH[ZERO]*(1.0 - 1.5*(ux2+uy2+uz2)); + /*forcingTerm[ZERO] = -(ux)*((gamma - WEIGTH[ZERO])*c1o3*rhoToPhi*dX1_phi + gamma*mu*dX1_phi) - + (uy)*((gamma - WEIGTH[ZERO])*c1o3*rhoToPhi*dX2_phi + gamma*mu*dX2_phi) - + (uz)*((gamma - WEIGTH[ZERO])*c1o3*rhoToPhi*dX3_phi + gamma*mu*dX3_phi);*/ + LBMReal fac1 = (gamma - WEIGTH[ZERO])*c1o3*rhoToPhi; + forcingTerm[ZERO] = (-ux)*(fac1*dX1_phi + gamma*(mu*dX1_phi + forcingX1)) + + (-uy)*(fac1*dX2_phi + gamma*(mu*dX2_phi + forcingX2)) + + (-uz)*(fac1*dX3_phi + gamma*(mu*dX3_phi + forcingX3)); + + //-------------------------------------------------------- + +/* + f1[E ] = (g[E ] + 0.5*forcingTerm[E ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[E ]/c1o3; + f1[N ] = (g[N ] + 0.5*forcingTerm[N ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[N ]/c1o3; + f1[T ] = (g[T ] + 0.5*forcingTerm[T ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[T ]/c1o3; + f1[NE ] = (g[NE ] + 0.5*forcingTerm[NE ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[NE ]/c1o3; + f1[NW ] = (g[NW ] + 0.5*forcingTerm[NW ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[NW ]/c1o3; + f1[TE ] = (g[TE ] + 0.5*forcingTerm[TE ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TE ]/c1o3; + f1[TW ] = (g[TW ] + 0.5*forcingTerm[TW ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TW ]/c1o3; + f1[TN ] = (g[TN ] + 0.5*forcingTerm[TN ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TN ]/c1o3; + f1[TS ] = (g[TS ] + 0.5*forcingTerm[TS ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TS ]/c1o3; + f1[TNE] = (g[TNE] + 0.5*forcingTerm[TNE])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TNE]/c1o3; + f1[TNW] = (g[TNW] + 0.5*forcingTerm[TNW])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TNW]/c1o3; + f1[TSE] = (g[TSE] + 0.5*forcingTerm[TSE])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TSE]/c1o3; + f1[TSW] = (g[TSW] + 0.5*forcingTerm[TSW])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TSW]/c1o3; + f1[W ] = (g[W ] + 0.5*forcingTerm[W ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[W ]/c1o3; + f1[S ] = (g[S ] + 0.5*forcingTerm[S ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[S ]/c1o3; + f1[B ] = (g[B ] + 0.5*forcingTerm[B ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[B ]/c1o3; + f1[SW ] = (g[SW ] + 0.5*forcingTerm[SW ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[SW ]/c1o3; + f1[SE ] = (g[SE ] + 0.5*forcingTerm[SE ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[SE ]/c1o3; + f1[BW ] = (g[BW ] + 0.5*forcingTerm[BW ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BW ]/c1o3; + f1[BE ] = (g[BE ] + 0.5*forcingTerm[BE ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BE ]/c1o3; + f1[BS ] = (g[BS ] + 0.5*forcingTerm[BS ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BS ]/c1o3; + f1[BN ] = (g[BN ] + 0.5*forcingTerm[BN ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BN ]/c1o3; + f1[BSW] = (g[BSW] + 0.5*forcingTerm[BSW])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BSW]/c1o3; + f1[BSE] = (g[BSE] + 0.5*forcingTerm[BSE])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BSE]/c1o3; + f1[BNW] = (g[BNW] + 0.5*forcingTerm[BNW])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BNW]/c1o3; + f1[BNE] = (g[BNE] + 0.5*forcingTerm[BNE])/c1o3 - (p1 - rho*c1o3)*WEIGTH[BNE]/c1o3; + f1[ZERO] = (g[ZERO] + 0.5*forcingTerm[ZERO])/c1o3 - (p1 - rho*c1o3)*WEIGTH[ZERO]/c1o3; +*/ + + mfcbb = 3.0*(mfcbb + 0.5*forcingTerm[E ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[E ]; + mfbcb = 3.0*(mfbcb + 0.5*forcingTerm[N ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[N ]; + mfbbc = 3.0*(mfbbc + 0.5*forcingTerm[T ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[T ]; + mfccb = 3.0*(mfccb + 0.5*forcingTerm[NE ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[NE ]; + mfacb = 3.0*(mfacb + 0.5*forcingTerm[NW ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[NW ]; + mfcbc = 3.0*(mfcbc + 0.5*forcingTerm[TE ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[TE ]; + mfabc = 3.0*(mfabc + 0.5*forcingTerm[TW ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[TW ]; + mfbcc = 3.0*(mfbcc + 0.5*forcingTerm[TN ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[TN ]; + mfbac = 3.0*(mfbac + 0.5*forcingTerm[TS ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[TS ]; + mfccc = 3.0*(mfccc + 0.5*forcingTerm[TNE] )/rho ;//-(3.0*p1 - rho)*WEIGTH[TNE]; + mfacc = 3.0*(mfacc + 0.5*forcingTerm[TNW] )/rho ;//-(3.0*p1 - rho)*WEIGTH[TNW]; + mfcac = 3.0*(mfcac + 0.5*forcingTerm[TSE] )/rho ;//-(3.0*p1 - rho)*WEIGTH[TSE]; + mfaac = 3.0*(mfaac + 0.5*forcingTerm[TSW] )/rho ;//-(3.0*p1 - rho)*WEIGTH[TSW]; + mfabb = 3.0*(mfabb + 0.5*forcingTerm[W ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[W ]; + mfbab = 3.0*(mfbab + 0.5*forcingTerm[S ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[S ]; + mfbba = 3.0*(mfbba + 0.5*forcingTerm[B ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[B ]; + mfaab = 3.0*(mfaab + 0.5*forcingTerm[SW ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[SW ]; + mfcab = 3.0*(mfcab + 0.5*forcingTerm[SE ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[SE ]; + mfaba = 3.0*(mfaba + 0.5*forcingTerm[BW ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[BW ]; + mfcba = 3.0*(mfcba + 0.5*forcingTerm[BE ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[BE ]; + mfbaa = 3.0*(mfbaa + 0.5*forcingTerm[BS ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[BS ]; + mfbca = 3.0*(mfbca + 0.5*forcingTerm[BN ] )/rho ;//-(3.0*p1 - rho)*WEIGTH[BN ]; + mfaaa = 3.0*(mfaaa + 0.5*forcingTerm[BSW] )/rho ;//-(3.0*p1 - rho)*WEIGTH[BSW]; + mfcaa = 3.0*(mfcaa + 0.5*forcingTerm[BSE] )/rho ;//-(3.0*p1 - rho)*WEIGTH[BSE]; + mfaca = 3.0*(mfaca + 0.5*forcingTerm[BNW] )/rho ;//-(3.0*p1 - rho)*WEIGTH[BNW]; + mfcca = 3.0*(mfcca + 0.5*forcingTerm[BNE] )/rho ;//-(3.0*p1 - rho)*WEIGTH[BNE]; + mfbbb = 3.0*(mfbbb + 0.5*forcingTerm[ZERO])/rho ;//- (3.0*p1 - rho)*WEIGTH[ZERO]; + + LBMReal rho1 = (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; + + + /* + //forcing + /////////////////////////////////////////////////////////////////////////////////////////// + if (withForcing) + { + muX1 = static_cast<double>(x1-1+ix1*maxX1); + muX2 = static_cast<double>(x2-1+ix2*maxX2); + muX3 = static_cast<double>(x3-1+ix3*maxX3); + + forcingX1 = muForcingX1.Eval(); + forcingX2 = muForcingX2.Eval(); + forcingX3 = muForcingX3.Eval(); + + vvx += forcingX1*deltaT*0.5; // X + vvy += forcingX2*deltaT*0.5; // Y + vvz += forcingX3*deltaT*0.5; // Z + } + /////////////////////////////////////////////////////////////////////////////////////////// + */ + + LBMReal oMdrho, m0, m1, m2; + + oMdrho=mfccc+mfaaa; + m0=mfaca+mfcac; + m1=mfacc+mfcaa; + m2=mfaac+mfcca; + oMdrho+=m0; + m1+=m2; + oMdrho+=m1; + m0=mfbac+mfbca; + m1=mfbaa+mfbcc; + m0+=m1; + m1=mfabc+mfcba; + m2=mfaba+mfcbc; + m1+=m2; + m0+=m1; + m1=mfacb+mfcab; + m2=mfaab+mfccb; + m1+=m2; + m0+=m1; + oMdrho+=m0; + m0=mfabb+mfcbb; + m1=mfbab+mfbcb; + m2=mfbba+mfbbc; + m0+=m1+m2; + m0+=mfbbb; //hat gefehlt + oMdrho = 1. - (oMdrho + m0); + //oMdrho = rho - (oMdrho + m0); + + + //////////////////////////////////////////////////////////////////////////////////// + LBMReal wadjust; + LBMReal qudricLimit = 0.01; + //////////////////////////////////////////////////////////////////////////////////// + //Hin + //////////////////////////////////////////////////////////////////////////////////// + // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Z - Dir + m2 = mfaaa + mfaac; + m1 = mfaac - mfaaa; + m0 = m2 + mfaab; + mfaaa = m0; + m0 += c1o36 * oMdrho; + mfaab = m1 - m0 * uz; + mfaac = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaba + mfabc; + m1 = mfabc - mfaba; + m0 = m2 + mfabb; + mfaba = m0; + m0 += c1o9 * oMdrho; + mfabb = m1 - m0 * uz; + mfabc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaca + mfacc; + m1 = mfacc - mfaca; + m0 = m2 + mfacb; + mfaca = m0; + m0 += c1o36 * oMdrho; + mfacb = m1 - m0 * uz; + mfacc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbaa + mfbac; + m1 = mfbac - mfbaa; + m0 = m2 + mfbab; + mfbaa = m0; + m0 += c1o9 * oMdrho; + mfbab = m1 - m0 * uz; + mfbac = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbba + mfbbc; + m1 = mfbbc - mfbba; + m0 = m2 + mfbbb; + mfbba = m0; + m0 += c4o9 * oMdrho; + mfbbb = m1 - m0 * uz; + mfbbc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbca + mfbcc; + m1 = mfbcc - mfbca; + m0 = m2 + mfbcb; + mfbca = m0; + m0 += c1o9 * oMdrho; + mfbcb = m1 - m0 * uz; + mfbcc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcaa + mfcac; + m1 = mfcac - mfcaa; + m0 = m2 + mfcab; + mfcaa = m0; + m0 += c1o36 * oMdrho; + mfcab = m1 - m0 * uz; + mfcac = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcba + mfcbc; + m1 = mfcbc - mfcba; + m0 = m2 + mfcbb; + mfcba = m0; + m0 += c1o9 * oMdrho; + mfcbb = m1 - m0 * uz; + mfcbc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcca + mfccc; + m1 = mfccc - mfcca; + m0 = m2 + mfccb; + mfcca = m0; + m0 += c1o36 * oMdrho; + mfccb = m1 - m0 * uz; + mfccc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Y - Dir + m2 = mfaaa + mfaca; + m1 = mfaca - mfaaa; + m0 = m2 + mfaba; + mfaaa = m0; + m0 += c1o6 * oMdrho; + mfaba = m1 - m0 * uy; + mfaca = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaab + mfacb; + m1 = mfacb - mfaab; + m0 = m2 + mfabb; + mfaab = m0; + mfabb = m1 - m0 * uy; + mfacb = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaac + mfacc; + m1 = mfacc - mfaac; + m0 = m2 + mfabc; + mfaac = m0; + m0 += c1o18 * oMdrho; + mfabc = m1 - m0 * uy; + mfacc = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbaa + mfbca; + m1 = mfbca - mfbaa; + m0 = m2 + mfbba; + mfbaa = m0; + m0 += c2o3 * oMdrho; + mfbba = m1 - m0 * uy; + mfbca = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbab + mfbcb; + m1 = mfbcb - mfbab; + m0 = m2 + mfbbb; + mfbab = m0; + mfbbb = m1 - m0 * uy; + mfbcb = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbac + mfbcc; + m1 = mfbcc - mfbac; + m0 = m2 + mfbbc; + mfbac = m0; + m0 += c2o9 * oMdrho; + mfbbc = m1 - m0 * uy; + mfbcc = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcaa + mfcca; + m1 = mfcca - mfcaa; + m0 = m2 + mfcba; + mfcaa = m0; + m0 += c1o6 * oMdrho; + mfcba = m1 - m0 * uy; + mfcca = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcab + mfccb; + m1 = mfccb - mfcab; + m0 = m2 + mfcbb; + mfcab = m0; + mfcbb = m1 - m0 * uy; + mfccb = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcac + mfccc; + m1 = mfccc - mfcac; + m0 = m2 + mfcbc; + mfcac = m0; + m0 += c1o18 * oMdrho; + mfcbc = m1 - m0 * uy; + mfccc = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // X - Dir + m2 = mfaaa + mfcaa; + m1 = mfcaa - mfaaa; + m0 = m2 + mfbaa; + mfaaa = m0; + m0 += 1. * oMdrho; + mfbaa = m1 - m0 * ux; + mfcaa = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaba + mfcba; + m1 = mfcba - mfaba; + m0 = m2 + mfbba; + mfaba = m0; + mfbba = m1 - m0 * ux; + mfcba = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaca + mfcca; + m1 = mfcca - mfaca; + m0 = m2 + mfbca; + mfaca = m0; + m0 += c1o3 * oMdrho; + mfbca = m1 - m0 * ux; + mfcca = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaab + mfcab; + m1 = mfcab - mfaab; + m0 = m2 + mfbab; + mfaab = m0; + mfbab = m1 - m0 * ux; + mfcab = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfabb + mfcbb; + m1 = mfcbb - mfabb; + m0 = m2 + mfbbb; + mfabb = m0; + mfbbb = m1 - m0 * ux; + mfcbb = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfacb + mfccb; + m1 = mfccb - mfacb; + m0 = m2 + mfbcb; + mfacb = m0; + mfbcb = m1 - m0 * ux; + mfccb = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaac + mfcac; + m1 = mfcac - mfaac; + m0 = m2 + mfbac; + mfaac = m0; + m0 += c1o3 * oMdrho; + mfbac = m1 - m0 * ux; + mfcac = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfabc + mfcbc; + m1 = mfcbc - mfabc; + m0 = m2 + mfbbc; + mfabc = m0; + mfbbc = m1 - m0 * ux; + mfcbc = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfacc + mfccc; + m1 = mfccc - mfacc; + m0 = m2 + mfbcc; + mfacc = m0; + m0 += c1o9 * oMdrho; + mfbcc = m1 - m0 * ux; + mfccc = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + // Cumulants + //////////////////////////////////////////////////////////////////////////////////// + LBMReal OxxPyyPzz = 1.; //omega2 or bulk viscosity + LBMReal OxyyPxzz = 1.;//-s9;//2+s9;// + //LBMReal OxyyMxzz = 1.;//2+s9;// + LBMReal O4 = 1.; + LBMReal O5 = 1.; + LBMReal O6 = 1.; + + //Cum 4. + //LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015 + //LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015 + //LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015 + + LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 ) * mfabb + 2. * mfbba * mfbab); + LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 ) * mfbab + 2. * mfbba * mfabb); + LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 ) * mfbba + 2. * mfbab * mfabb); + + LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho); + LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho-1)*oMdrho); + LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho); + + //LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(-p1/c1o3)*oMdrho); + //LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(-p1/c1o3)*oMdrho); + //LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(-p1/c1o3)*oMdrho); + + //Cum 5. + LBMReal CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho; + LBMReal CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho; + LBMReal CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho; + + //Cum 6. + LBMReal CUMccc = mfccc +((-4. * mfbbb * mfbbb + - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) + - 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) + - 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) + +( 4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) + + 2. * (mfcaa * mfaca * mfaac) + + 16. * mfbba * mfbab * mfabb) + - c1o3* (mfacc + mfcac + mfcca) * oMdrho -c1o9*oMdrho*oMdrho + - c1o9* (mfcaa + mfaca + mfaac) * oMdrho*(1.-2.* oMdrho)- c1o27* oMdrho * oMdrho*(-2.* oMdrho) + +( 2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) + + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) +c1o27*oMdrho; + + //2. + // linear combinations + LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac; + LBMReal mxxMyy = mfcaa - mfaca; + LBMReal mxxMzz = mfcaa - mfaac; + + LBMReal dxux = -c1o2 * collFactorM *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz*(mfaaa - mxxPyyPzz); + LBMReal dyuy = dxux + collFactorM * c3o2 * mxxMyy; + LBMReal dzuz = dxux + collFactorM * c3o2 * mxxMzz; + + /*LBMReal Dxy =-three*collFactorM*mfbba; + LBMReal Dxz =-three*collFactorM*mfbab; + LBMReal Dyz =-three*collFactorM*mfabb; + + LBMReal strainMag = sqrt(2*(dxux*dxux + dyuy*dyuy + dzuz*dzuz) + Dxy*Dxy + Dxz*Dxz + Dyz*Dyz); + LBMReal intVis = 3*abs(denom - 1e-9)*strainMag; + LBMReal fluidVis = (1.0/collFactorM - 0.5)/3.0; + collFactorM = 1.0/((fluidVis + intVis)*3.0 + 0.5);*/ + (*divU)(x1,x2,x3) = dxux + dyuy + dzuz; + + + //relax + mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- 3. * (1. - c1o2 * OxxPyyPzz) * (ux2 * dxux + uy2 * dyuy + uz2 * dzuz); + mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (ux2 * dxux - uy2 * dyuy); + mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (ux2 * dxux - uz2 * dzuz); + + mfabb += collFactorM * (-mfabb); + mfbab += collFactorM * (-mfbab); + mfbba += collFactorM * (-mfbba); + + // linear combinations back + mfcaa = c1o3 * ( mxxMyy + mxxMzz + mxxPyyPzz); + mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz); + mfaac = c1o3 * ( mxxMyy - 2. * mxxMzz + mxxPyyPzz); + + //3. + // linear combinations + LBMReal mxxyPyzz = mfcba + mfabc; + LBMReal mxxyMyzz = mfcba - mfabc; + + LBMReal mxxzPyyz = mfcab + mfacb; + LBMReal mxxzMyyz = mfcab - mfacb; + + LBMReal mxyyPxzz = mfbca + mfbac; + LBMReal mxyyMxzz = mfbca - mfbac; + + //relax + wadjust = OxyyMxzz+(1.-OxyyMxzz)*fabs(mfbbb)/(fabs(mfbbb)+qudricLimit); + mfbbb += wadjust * (-mfbbb); + wadjust = OxyyPxzz+(1.-OxyyPxzz)*fabs(mxxyPyzz)/(fabs(mxxyPyzz)+qudricLimit); + mxxyPyzz += wadjust * (-mxxyPyzz); + wadjust = OxyyMxzz+(1.-OxyyMxzz)*fabs(mxxyMyzz)/(fabs(mxxyMyzz)+qudricLimit); + mxxyMyzz += wadjust * (-mxxyMyzz); + wadjust = OxyyPxzz+(1.-OxyyPxzz)*fabs(mxxzPyyz)/(fabs(mxxzPyyz)+qudricLimit); + mxxzPyyz += wadjust * (-mxxzPyyz); + wadjust = OxyyMxzz+(1.-OxyyMxzz)*fabs(mxxzMyyz)/(fabs(mxxzMyyz)+qudricLimit); + mxxzMyyz += wadjust * (-mxxzMyyz); + wadjust = OxyyPxzz+(1.-OxyyPxzz)*fabs(mxyyPxzz)/(fabs(mxyyPxzz)+qudricLimit); + mxyyPxzz += wadjust * (-mxyyPxzz); + wadjust = OxyyMxzz+(1.-OxyyMxzz)*fabs(mxyyMxzz)/(fabs(mxyyMxzz)+qudricLimit); + mxyyMxzz += wadjust * (-mxyyMxzz); + + // linear combinations back + mfcba = ( mxxyMyzz + mxxyPyzz) * c1o2; + mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; + mfcab = ( mxxzMyyz + mxxzPyyz) * c1o2; + mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; + mfbca = ( mxyyMxzz + mxyyPxzz) * c1o2; + mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; + + //4. + CUMacc += O4 * (-CUMacc); + CUMcac += O4 * (-CUMcac); + CUMcca += O4 * (-CUMcca); + + CUMbbc += O4 * (-CUMbbc); + CUMbcb += O4 * (-CUMbcb); + CUMcbb += O4 * (-CUMcbb); + + //5. + CUMbcc += O5 * (-CUMbcc); + CUMcbc += O5 * (-CUMcbc); + CUMccb += O5 * (-CUMccb); + + //6. + CUMccc += O6 * (-CUMccc); + + //back cumulants to central moments + //4. + //mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015 + //mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015 + //mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015 + + mfcbb = CUMcbb + ((mfcaa + c1o3 ) * mfabb + 2. * mfbba * mfbab); + mfbcb = CUMbcb + ((mfaca + c1o3 ) * mfbab + 2. * mfbba * mfabb); + mfbbc = CUMbbc + ((mfaac + c1o3 ) * mfbba + 2. * mfbab * mfabb); + + mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho; + mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho-1)*oMdrho; + mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho-1)*oMdrho; + + //mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(-p1/c1o3)*oMdrho; + //mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(-p1/c1o3)*oMdrho; + //mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(-p1/c1o3)*oMdrho; + + //5. + mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho; + mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho; + mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho; + + //6. + mfccc = CUMccc -((-4. * mfbbb * mfbbb + - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) + - 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) + - 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) + +( 4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) + + 2. * (mfcaa * mfaca * mfaac) + + 16. * mfbba * mfbab * mfabb) + - c1o3* (mfacc + mfcac + mfcca) * oMdrho -c1o9*oMdrho*oMdrho + - c1o9* (mfcaa + mfaca + mfaac) * oMdrho*(1.-2.* oMdrho)- c1o27* oMdrho * oMdrho*(-2.* oMdrho) + +( 2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) + + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) -c1o27*oMdrho; + + //////////////////////////////////////////////////////////////////////////////////// + //forcing + mfbaa=-mfbaa; + mfaba=-mfaba; + mfaab=-mfaab; + ////////////////////////////////////////////////////////////////////////////////////// + + //////////////////////////////////////////////////////////////////////////////////// + //back + //////////////////////////////////////////////////////////////////////////////////// + //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Z - Dir + m0 = mfaac * c1o2 + mfaab * (uz - c1o2) + (mfaaa + 1. * oMdrho) * ( uz2 - uz) * c1o2; + m1 = -mfaac - 2. * mfaab * uz + mfaaa * (1. - uz2) - 1. * oMdrho * uz2; + m2 = mfaac * c1o2 + mfaab * (uz + c1o2) + (mfaaa + 1. * oMdrho) * ( uz2 + uz) * c1o2; + mfaaa = m0; + mfaab = m1; + mfaac = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfabc * c1o2 + mfabb * (uz - c1o2) + mfaba * ( uz2 - uz) * c1o2; + m1 = -mfabc - 2. * mfabb * uz + mfaba * (1. - uz2); + m2 = mfabc * c1o2 + mfabb * (uz + c1o2) + mfaba * ( uz2 + uz) * c1o2; + mfaba = m0; + mfabb = m1; + mfabc = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfacc * c1o2 + mfacb * (uz - c1o2) + (mfaca + c1o3 * oMdrho) * ( uz2 - uz) * c1o2; + m1 = -mfacc - 2. * mfacb * uz + mfaca * (1. - uz2) - c1o3 * oMdrho * uz2; + m2 = mfacc * c1o2 + mfacb * (uz + c1o2) + (mfaca + c1o3 * oMdrho) * ( uz2 + uz) * c1o2; + mfaca = m0; + mfacb = m1; + mfacc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfbac * c1o2 + mfbab * (uz - c1o2) + mfbaa * ( uz2 - uz) * c1o2; + m1 = -mfbac - 2. * mfbab * uz + mfbaa * (1. - uz2); + m2 = mfbac * c1o2 + mfbab * (uz + c1o2) + mfbaa * ( uz2 + uz) * c1o2; + mfbaa = m0; + mfbab = m1; + mfbac = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbbc * c1o2 + mfbbb * (uz - c1o2) + mfbba * ( uz2 - uz) * c1o2; + m1 = -mfbbc - 2. * mfbbb * uz + mfbba * (1. - uz2); + m2 = mfbbc * c1o2 + mfbbb * (uz + c1o2) + mfbba * ( uz2 + uz) * c1o2; + mfbba = m0; + mfbbb = m1; + mfbbc = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbcc * c1o2 + mfbcb * (uz - c1o2) + mfbca * ( uz2 - uz) * c1o2; + m1 = -mfbcc - 2. * mfbcb * uz + mfbca * (1. - uz2); + m2 = mfbcc * c1o2 + mfbcb * (uz + c1o2) + mfbca * ( uz2 + uz) * c1o2; + mfbca = m0; + mfbcb = m1; + mfbcc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcac * c1o2 + mfcab * (uz - c1o2) + (mfcaa + c1o3 * oMdrho) * ( uz2 - uz) * c1o2; + m1 = -mfcac - 2. * mfcab * uz + mfcaa * (1. - uz2) - c1o3 * oMdrho * uz2; + m2 = mfcac * c1o2 + mfcab * (uz + c1o2) + (mfcaa + c1o3 * oMdrho) * ( uz2 + uz) * c1o2; + mfcaa = m0; + mfcab = m1; + mfcac = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfcbc * c1o2 + mfcbb * (uz - c1o2) + mfcba * ( uz2 - uz) * c1o2; + m1 = -mfcbc - 2. * mfcbb * uz + mfcba * (1. - uz2); + m2 = mfcbc * c1o2 + mfcbb * (uz + c1o2) + mfcba * ( uz2 + uz) * c1o2; + mfcba = m0; + mfcbb = m1; + mfcbc = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfccc * c1o2 + mfccb * (uz - c1o2) + (mfcca + c1o9 * oMdrho) * ( uz2 - uz) * c1o2; + m1 = -mfccc - 2. * mfccb * uz + mfcca * (1. - uz2) - c1o9 * oMdrho * uz2; + m2 = mfccc * c1o2 + mfccb * (uz + c1o2) + (mfcca + c1o9 * oMdrho) * ( uz2 + uz) * c1o2; + mfcca = m0; + mfccb = m1; + mfccc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Y - Dir + m0 = mfaca * c1o2 + mfaba * (uy - c1o2) + (mfaaa + c1o6 * oMdrho) * ( uy2 - uy) * c1o2; + m1 = -mfaca - 2. * mfaba * uy + mfaaa * (1. - uy2) - c1o6 * oMdrho * uy2; + m2 = mfaca * c1o2 + mfaba * (uy + c1o2) + (mfaaa + c1o6 * oMdrho) * ( uy2 + uy) * c1o2; + mfaaa = m0; + mfaba = m1; + mfaca = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfacb * c1o2 + mfabb * (uy - c1o2) + (mfaab + c2o3 * oMdrho) * ( uy2 - uy) * c1o2; + m1 = -mfacb - 2. * mfabb * uy + mfaab * (1. - uy2) - c2o3 * oMdrho * uy2; + m2 = mfacb * c1o2 + mfabb * (uy + c1o2) + (mfaab + c2o3 * oMdrho) * ( uy2 + uy) * c1o2; + mfaab = m0; + mfabb = m1; + mfacb = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfacc * c1o2 + mfabc * (uy - c1o2) + (mfaac + c1o6 * oMdrho) * ( uy2 - uy) * c1o2; + m1 = -mfacc - 2. * mfabc * uy + mfaac * (1. - uy2) - c1o6 * oMdrho * uy2; + m2 = mfacc * c1o2 + mfabc * (uy + c1o2) + (mfaac + c1o6 * oMdrho) * ( uy2 + uy) * c1o2; + mfaac = m0; + mfabc = m1; + mfacc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfbca * c1o2 + mfbba * (uy - c1o2) + mfbaa * ( uy2 - uy) * c1o2; + m1 = -mfbca - 2. * mfbba * uy + mfbaa * (1. - uy2); + m2 = mfbca * c1o2 + mfbba * (uy + c1o2) + mfbaa * ( uy2 + uy) * c1o2; + mfbaa = m0; + mfbba = m1; + mfbca = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbcb * c1o2 + mfbbb * (uy - c1o2) + mfbab * ( uy2 - uy) * c1o2; + m1 = -mfbcb - 2. * mfbbb * uy + mfbab * (1. - uy2); + m2 = mfbcb * c1o2 + mfbbb * (uy + c1o2) + mfbab * ( uy2 + uy) * c1o2; + mfbab = m0; + mfbbb = m1; + mfbcb = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbcc * c1o2 + mfbbc * (uy - c1o2) + mfbac * ( uy2 - uy) * c1o2; + m1 = -mfbcc - 2. * mfbbc * uy + mfbac * (1. - uy2); + m2 = mfbcc * c1o2 + mfbbc * (uy + c1o2) + mfbac * ( uy2 + uy) * c1o2; + mfbac = m0; + mfbbc = m1; + mfbcc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcca * c1o2 + mfcba * (uy - c1o2) + (mfcaa + c1o18 * oMdrho) * ( uy2 - uy) * c1o2; + m1 = -mfcca - 2. * mfcba * uy + mfcaa * (1. - uy2) - c1o18 * oMdrho * uy2; + m2 = mfcca * c1o2 + mfcba * (uy + c1o2) + (mfcaa + c1o18 * oMdrho) * ( uy2 + uy) * c1o2; + mfcaa = m0; + mfcba = m1; + mfcca = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfccb * c1o2 + mfcbb * (uy - c1o2) + (mfcab + c2o9 * oMdrho) * ( uy2 - uy) * c1o2; + m1 = -mfccb - 2. * mfcbb * uy + mfcab * (1. - uy2) - c2o9 * oMdrho * uy2; + m2 = mfccb * c1o2 + mfcbb * (uy + c1o2) + (mfcab + c2o9 * oMdrho) * ( uy2 + uy) * c1o2; + mfcab = m0; + mfcbb = m1; + mfccb = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfccc * c1o2 + mfcbc * (uy - c1o2) + (mfcac + c1o18 * oMdrho) * ( uy2 - uy) * c1o2; + m1 = -mfccc - 2. * mfcbc * uy + mfcac * (1. - uy2) - c1o18 * oMdrho * uy2; + m2 = mfccc * c1o2 + mfcbc * (uy + c1o2) + (mfcac + c1o18 * oMdrho) * ( uy2 + uy) * c1o2; + mfcac = m0; + mfcbc = m1; + mfccc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // X - Dir + m0 = mfcaa * c1o2 + mfbaa * (ux - c1o2) + (mfaaa + c1o36 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfcaa - 2. * mfbaa * ux + mfaaa * (1. - ux2) - c1o36 * oMdrho * ux2; + m2 = mfcaa * c1o2 + mfbaa * (ux + c1o2) + (mfaaa + c1o36 * oMdrho) * ( ux2 + ux) * c1o2; + mfaaa = m0; + mfbaa = m1; + mfcaa = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcba * c1o2 + mfbba * (ux - c1o2) + (mfaba + c1o9 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfcba - 2. * mfbba * ux + mfaba * (1. - ux2) - c1o9 * oMdrho * ux2; + m2 = mfcba * c1o2 + mfbba * (ux + c1o2) + (mfaba + c1o9 * oMdrho) * ( ux2 + ux) * c1o2; + mfaba = m0; + mfbba = m1; + mfcba = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcca * c1o2 + mfbca * (ux - c1o2) + (mfaca + c1o36 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfcca - 2. * mfbca * ux + mfaca * (1. - ux2) - c1o36 * oMdrho * ux2; + m2 = mfcca * c1o2 + mfbca * (ux + c1o2) + (mfaca + c1o36 * oMdrho) * ( ux2 + ux) * c1o2; + mfaca = m0; + mfbca = m1; + mfcca = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcab * c1o2 + mfbab * (ux - c1o2) + (mfaab + c1o9 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfcab - 2. * mfbab * ux + mfaab * (1. - ux2) - c1o9 * oMdrho * ux2; + m2 = mfcab * c1o2 + mfbab * (ux + c1o2) + (mfaab + c1o9 * oMdrho) * ( ux2 + ux) * c1o2; + mfaab = m0; + mfbab = m1; + mfcab = m2; + ///////////b//////////////////////////////////////////////////////////////////////// + m0 = mfcbb * c1o2 + mfbbb * (ux - c1o2) + (mfabb + c4o9 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfcbb - 2. * mfbbb * ux + mfabb * (1. - ux2) - c4o9 * oMdrho * ux2; + m2 = mfcbb * c1o2 + mfbbb * (ux + c1o2) + (mfabb + c4o9 * oMdrho) * ( ux2 + ux) * c1o2; + mfabb = m0; + mfbbb = m1; + mfcbb = m2; + ///////////b//////////////////////////////////////////////////////////////////////// + m0 = mfccb * c1o2 + mfbcb * (ux - c1o2) + (mfacb + c1o9 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfccb - 2. * mfbcb * ux + mfacb * (1. - ux2) - c1o9 * oMdrho * ux2; + m2 = mfccb * c1o2 + mfbcb * (ux + c1o2) + (mfacb + c1o9 * oMdrho) * ( ux2 + ux) * c1o2; + mfacb = m0; + mfbcb = m1; + mfccb = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcac * c1o2 + mfbac * (ux - c1o2) + (mfaac + c1o36 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfcac - 2. * mfbac * ux + mfaac * (1. - ux2) - c1o36 * oMdrho * ux2; + m2 = mfcac * c1o2 + mfbac * (ux + c1o2) + (mfaac + c1o36 * oMdrho) * ( ux2 + ux) * c1o2; + mfaac = m0; + mfbac = m1; + mfcac = m2; + ///////////c//////////////////////////////////////////////////////////////////////// + m0 = mfcbc * c1o2 + mfbbc * (ux - c1o2) + (mfabc + c1o9 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfcbc - 2. * mfbbc * ux + mfabc * (1. - ux2) - c1o9 * oMdrho * ux2; + m2 = mfcbc * c1o2 + mfbbc * (ux + c1o2) + (mfabc + c1o9 * oMdrho) * ( ux2 + ux) * c1o2; + mfabc = m0; + mfbbc = m1; + mfcbc = m2; + ///////////c//////////////////////////////////////////////////////////////////////// + m0 = mfccc * c1o2 + mfbcc * (ux - c1o2) + (mfacc + c1o36 * oMdrho) * ( ux2 - ux) * c1o2; + m1 = -mfccc - 2. * mfbcc * ux + mfacc * (1. - ux2) - c1o36 * oMdrho * ux2; + m2 = mfccc * c1o2 + mfbcc * (ux + c1o2) + (mfacc + c1o36 * oMdrho) * ( ux2 + ux) * c1o2; + mfacc = m0; + mfbcc = m1; + mfccc = m2; + + + +/////////////////////////////////////////////////////////////////////////// + +/* + m000 = f1[ZERO] + f1[E] + f1[W] + f1[N] + f1[S] + f1[T] + f1[B] + f1[NE] + f1[SW] + f1[SE] + f1[NW] + f1[TE] + f1[BW] + f1[BE] + f1[TW] + f1[TN] + f1[BS] + f1[BN] + + f1[TS] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW]; + + m100 = f1[BE] + f1[BNE] - f1[BNW] + f1[BSE] - f1[BSW] - f1[BW] + f1[E] + f1[NE] - f1[NW] + f1[SE] - f1[SW] + f1[TE] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW] - f1[TW] - f1[W]; + m010 = f1[BN] + f1[BNE] + f1[BNW] - f1[BS] - f1[BSE] - f1[BSW] + f1[N] + f1[NE] + f1[NW] - f1[S] - f1[SE] - f1[SW] + f1[TN] + f1[TNE] + f1[TNW] - f1[TS] - f1[TSE] - f1[TSW]; + m001 = f1[T] + f1[TE] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW] + f1[TW] - f1[B] - f1[BE] - f1[BN] - f1[BNE] - f1[BNW] - f1[BS] - f1[BSE] - f1[BSW] - f1[BW]; + + m110 = f1[BNE] - f1[BNW] - f1[BSE] + f1[BSW] + f1[NE] - f1[NW] - f1[SE] + f1[SW] + f1[TNE] - f1[TNW] - f1[TSE] + f1[TSW]; + m101 = -f1[BE] - f1[BNE] + f1[BNW] - f1[BSE] + f1[BSW] + f1[BW] + f1[TE] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW] - f1[TW]; + m011 = -f1[BN] - f1[BNE] - f1[BNW] + f1[BS] + f1[BSE] + f1[BSW] + f1[TN] + f1[TNE] + f1[TNW] - f1[TS] - f1[TSE] - f1[TSW]; + m200 = f1[BE] + f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW] + f1[BW] + f1[E] + f1[NE] + f1[NW] + f1[SE] + f1[SW] + f1[TE] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[TW] + f1[W]; + m020 = f1[BN] + f1[BNE] + f1[BNW] + f1[BS] + f1[BSE] + f1[BSW] + f1[N] + f1[NE] + f1[NW] + f1[S] + f1[SE] + f1[SW] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW]; + m002 = f1[B] + f1[BE] + f1[BN] + f1[BNE] + f1[BNW] + f1[BS] + f1[BSE] + f1[BSW] + f1[BW] + f1[T] + f1[TE] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW] + f1[TW]; + m120 = f1[BNE] - f1[BNW] + f1[BSE] - f1[BSW] + f1[NE] - f1[NW] + f1[SE] - f1[SW] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW]; + m102 = f1[BE] + f1[BNE] - f1[BNW] + f1[BSE] - f1[BSW] - f1[BW] + f1[TE] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW] - f1[TW]; + m210 = f1[BNE] + f1[BNW] - f1[BSE] - f1[BSW] + f1[NE] + f1[NW] - f1[SE] - f1[SW] + f1[TNE] + f1[TNW] - f1[TSE] - f1[TSW]; + m012 = f1[BN] + f1[BNE] + f1[BNW] - f1[BS] - f1[BSE] - f1[BSW] + f1[TN] + f1[TNE] + f1[TNW] - f1[TS] - f1[TSE] - f1[TSW]; + m201 = -f1[BE] - f1[BNE] - f1[BNW] - f1[BSE] - f1[BSW] - f1[BW] + f1[TE] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[TW]; + m021 = -f1[BN] - f1[BNE] - f1[BNW] - f1[BS] - f1[BSE] - f1[BSW] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW]; + m111 = -f1[BNE] + f1[BNW] + f1[BSE] - f1[BSW] + f1[TNE] - f1[TNW] - f1[TSE] + f1[TSW]; + m220 = f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW] + f1[NE] + f1[NW] + f1[SE] + f1[SW] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW]; + m202 = f1[BE] + f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW] + f1[BW] + f1[TE] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[TW]; + m022 = f1[BN] + f1[BNE] + f1[BNW] + f1[BS] + f1[BSE] + f1[BSW] + f1[TN] + f1[TNE] + f1[TNW] + f1[TS] + f1[TSE] + f1[TSW]; + m211 = -f1[BNE] - f1[BNW] + f1[BSE] + f1[BSW] + f1[TNE] + f1[TNW] - f1[TSE] - f1[TSW]; + m121 = -f1[BNE] + f1[BNW] - f1[BSE] + f1[BSW] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW]; + m112 = f1[BNE] - f1[BNW] - f1[BSE] + f1[BSW] + f1[TNE] - f1[TNW] - f1[TSE] + f1[TSW]; + m221 = -f1[BNE] - f1[BNW] - f1[BSE] - f1[BSW] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW]; + m212 = f1[BNE] + f1[BNW] - f1[BSE] - f1[BSW] + f1[TNE] + f1[TNW] - f1[TSE] - f1[TSW]; + m122 = f1[BNE] - f1[BNW] + f1[BSE] - f1[BSW] + f1[TNE] - f1[TNW] + f1[TSE] - f1[TSW]; + m222 = f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW]; + + k200 = m200 - m000*ux2; + k020 = m020 - m000*uy2; + k002 = m002 - m000*uz2; + k110 = m110 - m000*ux_uy; + k101 = m101 - m000*ux_uz; + k011 = m011 - m000*uy_uz; + + k021 = m021 - (m020*uz + 2.0*uy*k011); + k012 = m012 - (uy*m002 + 2.0*uz*k011); + k102 = m102 - (ux*m002 + 2.0*uz*k101); + k201 = m201 - (m200*uz + 2.0*ux*k101 ); + k210 = m210 - (m200*uy + 2.0*ux*k110 ); + k120 = m120 - (ux*m020 + 2.0*uy*k110); + k111 = m111 - (ux_uy_uz + ux*k011 + uy*k101 + uz*k110); + + k121 = m121 - (uz*m120+ 2.0*ux_uy*k011+ux*k021+uy2*k101+2.0*uy*k111); + k112 = m112 - (uy*m102+ 2.0*ux_uz*k011+ux*k012+uz2*k110+2.0*uz*k111); + k211 = m211 - (uz*m210+ 2.0*ux_uy*k101+uy*k201+ux2*k011+2.0*ux*k111); + + + k220 = m220 - ( ux2*m020+ 4.0*ux_uy*k110 + 2.0*ux*k120 + uy2*k200 + 2.0*uy*k210); + k022 = m022 - ( uy2*m002+ 4.0*uy_uz*k011 + 2.0*uy*k012 + uz2*k020 + 2.0*uz*k021); + k202 = m202 - ( ux2*m002+ 4.0*ux_uz*k101 + 2.0*ux*k102 + uz2*k200 + 2.0*uz*k201); + + k221 = m221 - (uz*m220+ + 2.0*ux2*uy*k011 + ux2*k021 + 2.0*ux*uy2*k101 +4.0*ux_uy*k111 + + 2.0*ux*k121 + uy2*k201 + 2.0*uy*k211); + k122 = m122 - (ux*m022 + + 2.0*uy2*uz*k101 + uy2*k102 + 2.0*uy*uz2*k110 + 4.0*uy_uz*k111 + + 2.0*uy*k112 + uz2*k120 + 2.0*uz*k121); + k212 = m212 - (uy*m202 + + 2.0*ux2*uz*k011 +ux2*k012 + 2.0*ux*uz2*k110 + 4.0*ux_uz*k111 + + 2.0*ux*k112 + uz2*k210 + 2.0*uz*k211); + + k222 = m222 - (ux2*m022 + + 4.0* ux*uy2*uz*k101 + + 2.0* ux*uy2*k102 + 4.0* ux_uy*uz2*k110+ + 8.0* ux_uy_uz*k111 + 4.0* ux_uy*k112 + + 2.0* ux*uz2*k120 + 4.0* ux_uz*k121 + 2.0*ux*k122 + + uy2*uz2*k200 + 2.0* uy2*uz*k201 + + uy2*k202 + 2.0* uy*uz2*k210 + 4.0*uy_uz*k211 + + 2.0* uy*k212 + uz2*k220 +2.0* uz*k221); + + //////////////// Central moments to Cumulants \\\\\\\\\\\\\\\\\\\\\\\\\ + + c200 = k200; + c020 = k020; + c002 = k002; + c110 = k110; + c101 = k101; + c011 = k011; + + c021 = k021; + c012 = k012; + c102 = k102; + c201 = k201; + c210 = k210; + c120 = k120; + c111 = k111; + + c121 = k121 - (k020*k101 + 2*k011*k110)/m000; + c211 = k211 - (k200*k011 + 2*k110*k101)/m000; + c112 = k112 - (k002*k110 + 2*k011*k101)/m000; + + c220 = k220 - (k200*k020 + 2*k110*k110)/m000; + c202 = k202 - (k200*k002 + 2*k101*k101)/m000; + c022 = k022 - (k020*k002 + 2*k011*k011)/m000; + + c122 = k122 - (k002*k120 + k020*k102 + 4*k011*k111 + 2*(k101*k021 + k110*k012))/m000; + c212 = k212 - (k200*k012 + k002*k210 + 4*k101*k111 + 2*(k110*k102 + k011*k201))/m000; + c221 = k221 - (k200*k021 + k020*k201 + 4*k110*k111 + 2*(k101*k120 + k011*k210))/m000; + + c222 = k222 - (4*k111*k111 + k200*k022 + k020*k202 + k002*k220 + 4*(k011*k211 + k101*k121 + k110*k112) + + 2*(k120*k102 + k210*k012 + k201*k021))/m000 + + (16*k110*k101*k011 + 4*(k101*k101*k020 + k011*k011*k200 + k110*k110*k002) + 2*k200*k020*k002)/(m000*m000); + + c200_pl_c020_pl_c002 = c200 + c020 + c002; + c200_mi_c020 = c200 - c020; + c200_mi_c002 = c200 - c002; + + c210_pl_c012 = c210+c012; + c210_mi_c012 = c210-c012; + c201_pl_c021 = c201+c021; + c201_mi_c021 = c201-c021; + c120_pl_c102 = c120+c102; + c120_mi_c102 = c120-c102; + + c220_pl_c202_pl_c022 = c220 + c202 + c022; + c220_mi2_c202_pl_c022 = c220 - 2.0*c202 + c022; + c220_pl_c202_mi2_c022 = c220 + c202 - 2.0*c022; + + /////////////////////////// Relaxation \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ + + c110 = c110*(1-w1); + c101 = c101*(1-w1); + c011 = c011*(1-w1); + + c200_mi_c020 = c200_mi_c020*(1-w1); + c200_mi_c002 = c200_mi_c002*(1-w1); + + c200_pl_c020_pl_c002 = c200_pl_c020_pl_c002*(1-w2) + m000*w2; + + c120_pl_c102 = c120_pl_c102*(1-w3); + c210_pl_c012 = c210_pl_c012*(1-w3); + c201_pl_c021 = c201_pl_c021*(1-w3); + + + c120_mi_c102 = c120_mi_c102*(1-w4); + c210_mi_c012 = c210_mi_c012*(1-w4); + c201_mi_c021 = c201_mi_c021*(1-w4); + + c111 = c111*(1-w5); + + c220_mi2_c202_pl_c022 = c220_mi2_c202_pl_c022*(1-w6); + c220_pl_c202_mi2_c022 = c220_pl_c202_mi2_c022*(1-w6); + + c220_pl_c202_pl_c022 = c220_pl_c202_pl_c022*(1-w7); + + c211 = c211*(1-w8); + c121 = c121*(1-w8); + c112 = c112*(1-w8); + + + c221 = c221*(1-w9); + c212 = c212*(1-w9); + c122 = c122*(1-w9); + + c222 = c222*(1-w10); + + + c200 = c1o3 *c200_mi_c020 + c1o3 *c200_mi_c002 + c1o3* c200_pl_c020_pl_c002; + c020 = -2*c1o3* c200_mi_c020+ c1o3* c200_mi_c002 + c1o3* c200_pl_c020_pl_c002; + c002 = c1o3 * c200_mi_c020 -2*c1o3 *c200_mi_c002 + c1o3* c200_pl_c020_pl_c002; + + c210 = (c210_mi_c012 + c210_pl_c012)*0.5; + c012 = 0.5*(-c210_mi_c012 + c210_pl_c012); + c120 =(c120_mi_c102 + c120_pl_c102)*0.5; + c102 = 0.5*(-c120_mi_c102 + c120_pl_c102); + c201 = (c201_mi_c021 + c201_pl_c021)*0.5; + c021 = 0.5*(-c201_mi_c021 + c201_pl_c021); + + c220 = c1o3* c220_mi2_c202_pl_c022 + c1o3* c220_pl_c202_mi2_c022 + c1o3*c220_pl_c202_pl_c022; + c202 = -c1o3* c220_mi2_c202_pl_c022 + c1o3* c220_pl_c202_pl_c022; + c022 = -c1o3* c220_pl_c202_mi2_c022 + c1o3* c220_pl_c202_pl_c022; + + + ////////////////////// Cumulants to Central moments \\\\\\\\\\\\\\\\\\\\\\\\\ + + k200 = c200; + k020 = c020; + k002 = c002; + k110 = c110; + k101 = c101; + k011 = c011; + + k021 = c021; + k012 = c012; + k102 = c102; + k201 = c201; + k210 = c210; + k120 = c120; + k111 = c111; + + k121 = c121 + (k020*k101 + 2*k011*k110)/m000; + k211 = c211 + (k200*k011 + 2*k110*k101)/m000; + k112 = c112 + (k002*k110 + 2*k011*k101)/m000; + + k220 = c220 + (k200*k020 + 2*k110*k110)/m000; + k202 = c202 + (k200*k002 + 2*k101*k101)/m000; + k022 = c022 + (k020*k002 + 2*k011*k011)/m000; + + k122 = c122 + (k002*k120 + k020*k102 + 4*k011*k111 + 2*(k101*k021 + k110*k012))/m000; + k212 = c212 + (k200*k012 + k002*k210 + 4*k101*k111 + 2*(k110*k102 + k011*k201))/m000; + k221 = c221 + (k200*k021 + k020*k201 + 4*k110*k111 + 2*(k101*k120 + k011*k210))/m000; + + k222 = c222 + (4*k111*k111 + k200*k022 + k020*k202 + k002*k220 + 4*(k011*k211 + k101*k121 + k110*k112) + + 2*(k120*k102 + k210*k012 + k201*k021))/m000 + - (16*k110*k101*k011 + 4*(k101*k101*k020 + k011*k011*k200 + k110*k110*k002) + 2*k200*k020*k002)/(m000*m000); + + /////////////////////////////////////////////////////////////////////////////// + + + m200 = k200 + m000*ux2; + m020 = k020 + m000*uy2; + m002 = k002 + m000*uz2; + m110 = k110 + m000*ux_uy; + m101 = k101 + m000*ux_uz; + m011 = k011 + m000*uy_uz; + + m021 = m020*uz + 2.0*uy*k011 + k021; + m012 = uy*m002 + 2.0*uz*k011 + k012; + m102 = ux*m002 + 2.0*uz*k101 + k102; + m112 = uy*m102 + 2.0*ux_uz*k011+ux*k012+uz2*k110+2.0*uz*k111+k112; + + m201 = m200*uz + 2.0*ux*k101 + k201; + m210 = m200*uy + 2.0*ux*k110 + k210; + m211 = uz*m210 + 2.0*ux_uy*k101+uy*k201+ux2*k011+2.0*ux*k111+k211; + + m120 = ux*m020 + 2.0*uy*k110 + k120; + m121 = uz*m120 + 2.0*ux_uy*k011+ux*k021+uy2*k101+2.0*uy*k111+ k121; + + m111 = ux_uy_uz + ux*k011 + uy*k101 + uz*k110+k111; + + m220 = ux2*m020 + 4.0*ux_uy*k110 + 2.0*ux*k120 + uy2*k200 + 2.0*uy*k210 + k220; + + m221 = uz*m220 + 2.0*ux2*uy*k011 + ux2*k021 + 2.0*ux*uy2*k101 +4.0*ux_uy*k111+ + 2.0*ux*k121 + uy2*k201 + 2.0*uy*k211 + k221; + + m022 = uy2*m002 + 4.0*uy_uz*k011 +2.0*uy*k012+ uz2*k020+ 2.0*uz*k021 + k022; + + m122 = ux*m022 + 2.0*uy2*uz*k101 + uy2*k102 + + 2.0*uy*uz2*k110 + 4.0*uy_uz*k111 + 2.0*uy*k112 +uz2*k120 + 2.0*uz*k121 + k122; + + m202 = ux2*m002 + 4.0*ux_uz*k101+ 2.0*ux*k102 + uz2*k200+ 2.0*uz*k201 + k202; + + m212 = uy*m202 + 2.0*ux2*uz*k011 +ux2*k012 + 2.0*ux*uz2*k110 + 4.0*ux_uz*k111 + + 2.0*ux*k112 + uz2*k210 + 2.0*uz*k211 + k212; + + m222 = ux2*m022 + + 4.0* ux*uy2*uz*k101 + + 2.0* ux*uy2*k102 + 4.0* ux_uy*uz2*k110+ + 8.0* ux_uy_uz*k111 + 4.0* ux_uy*k112 + + 2.0* ux*uz2*k120 + 4.0* ux_uz*k121 + 2.0*ux*k122 + + uy2*uz2*k200 + 2.0* uy2*uz*k201 + + uy2*k202 + 2.0* uy*uz2*k210 + 4.0*uy_uz*k211 + + 2.0* uy*k212 + uz2*k220 +2.0* uz*k221 + k222; + + f1[ZERO] = (-m200 + m220 - m222 + m202 - m020 + m022 - m002 + m000); + f1[E] = 0.5* (m200 - m220 + m222 - m202 - m120 + m122 - m102 +m100); + f1[W] = 0.5* (m200 - m220 + m222 - m202 + m120 - m122 + m102 -m100); + f1[N] = 0.5* (-m210 - m220 + m222 + m212 + m020 - m022 - m012 +m010); + f1[S] = 0.5* (m210 - m220 + m222 - m212 + m020 - m022 + m012 -m010); + f1[T] = 0.5* (m221 + m222 - m201 - m202 - m021 - m022 + m002 +m001); + f1[B] = 0.5* (-m221 + m222 + m201 - m202 + m021 - m022 + m002-m001); + + f1[NE] = 0.25*( m210 + m220- m222 - m212 + m110+ m120- m122 -m112); + f1[SW] = 0.25*(-m210 + m220- m222 + m212 + m110- m120+ m122 -m112); + f1[SE] = 0.25*(-m210 + m220- m222 + m212 - m110+ m120- m122 +m112); + f1[NW] = 0.25*( m210 + m220- m222 - m212 - m110- m120+ m122 + m112); + f1[TE] = 0.25*(-m221 - m222 + m201 + m202 - m121 - m122 + m101 + m102); + f1[BW] = 0.25*( m221 -m222 - m201 + m202 - m121 + m122 + m101 - m102); + f1[BE] = 0.25*(m221 - m222 - m201 + m202 + m121 - m122 - m101 +m102); + f1[TW] = 0.25*(-m221 - m222 + m201 + m202 + m121 + m122 - m101 -m102); + f1[TN] = 0.25*(-m221 - m222 - m211 - m212 + m021 + m022 + m011+m012); + f1[BS] = 0.25*( m221 - m222 - m211 + m212 - m021 + m022 + m011 - m012); + f1[BN] = 0.25*( m221 - m222 + m211 - m212 - m021 + m022 - m011 + m012); + f1[TS] = 0.25*(-m221 - m222 + m211 + m212 + m021 + m022 - m011 -m012); + + f1[TNE]=0.125*( m221 + m222 + m211 + m212 + m121 + m122 + m111 + m112); + f1[BNE]=0.125*(-m221 + m222 -m211 + m212 -m121 + m122 -m111 + m112); + f1[TSE]=0.125*( m221 + m222 - m211 - m212 + m121 + m122 - m111 - m112); + f1[BSE]=0.125*(-m221 + m222 +m211 - m212 -m121 + m122 +m111 - m112); + f1[TNW]=0.125*( m221 + m222 + m211 + m212 - m121 - m122 - m111 - m112); + f1[BNW]=0.125*(-m221 + m222 -m211 + m212 +m121 - m122 +m111 - m112); + f1[TSW]=0.125*( m221 + m222 - m211 - m212 - m121 - m122 + m111 + m112); + f1[BSW]=0.125*(-m221 + m222+m211 - m212+m121 - m122-m111 + m112); + +*/ + ////////////////////////////////////////////////////////////////////////// + //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 rho_post = f1[ZERO] + f1[E] + f1[W] + f1[N] + f1[S] + f1[T] + f1[B] + f1[NE] + f1[SW] + f1[SE] + f1[NW] + f1[TE] + f1[BW] + + f1[BE] + f1[TW] + f1[TN] + f1[BS] + f1[BN] + f1[TS] + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW]; */ + //LBMReal dif = fabs(rho - rho_post); + LBMReal dif = rho1 - rho_post; +#ifdef SINGLEPRECISION + if(dif > 10.0E-7 || dif < -10.0E-7) +#else + if(dif > 10.0E-15 || dif < -10.0E-15) +#endif + { + UB_THROW(UbException(UB_EXARGS,"rho="+UbSystem::toString(rho)+", rho_post="+UbSystem::toString(rho_post) + +" dif="+UbSystem::toString(dif) + +" rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3))); + //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3)); + //exit(EXIT_FAILURE); + } +#endif + + + mfcbb = rho*c1o3*(mfcbb ) + 0.5*forcingTerm[E ] ; + mfbcb = rho*c1o3*(mfbcb ) + 0.5*forcingTerm[N ] ; + mfbbc = rho*c1o3*(mfbbc ) + 0.5*forcingTerm[T ] ; + mfccb = rho*c1o3*(mfccb ) + 0.5*forcingTerm[NE ] ; + mfacb = rho*c1o3*(mfacb ) + 0.5*forcingTerm[NW ] ; + mfcbc = rho*c1o3*(mfcbc ) + 0.5*forcingTerm[TE ] ; + mfabc = rho*c1o3*(mfabc ) + 0.5*forcingTerm[TW ] ; + mfbcc = rho*c1o3*(mfbcc ) + 0.5*forcingTerm[TN ] ; + mfbac = rho*c1o3*(mfbac ) + 0.5*forcingTerm[TS ] ; + mfccc = rho*c1o3*(mfccc ) + 0.5*forcingTerm[TNE] ; + mfacc = rho*c1o3*(mfacc ) + 0.5*forcingTerm[TNW] ; + mfcac = rho*c1o3*(mfcac ) + 0.5*forcingTerm[TSE] ; + mfaac = rho*c1o3*(mfaac ) + 0.5*forcingTerm[TSW] ; + mfabb = rho*c1o3*(mfabb ) + 0.5*forcingTerm[W ] ; + mfbab = rho*c1o3*(mfbab ) + 0.5*forcingTerm[S ] ; + mfbba = rho*c1o3*(mfbba ) + 0.5*forcingTerm[B ] ; + mfaab = rho*c1o3*(mfaab ) + 0.5*forcingTerm[SW ] ; + mfcab = rho*c1o3*(mfcab ) + 0.5*forcingTerm[SE ] ; + mfaba = rho*c1o3*(mfaba ) + 0.5*forcingTerm[BW ] ; + mfcba = rho*c1o3*(mfcba ) + 0.5*forcingTerm[BE ] ; + mfbaa = rho*c1o3*(mfbaa ) + 0.5*forcingTerm[BS ] ; + mfbca = rho*c1o3*(mfbca ) + 0.5*forcingTerm[BN ] ; + mfaaa = rho*c1o3*(mfaaa ) + 0.5*forcingTerm[BSW] ; + mfcaa = rho*c1o3*(mfcaa ) + 0.5*forcingTerm[BSE] ; + mfaca = rho*c1o3*(mfaca ) + 0.5*forcingTerm[BNW] ; + mfcca = rho*c1o3*(mfcca ) + 0.5*forcingTerm[BNE] ; + mfbbb = rho*c1o3*(mfbbb ) + 0.5*forcingTerm[ZERO]; + + ////////////////////////////////////////////////////////////////////////// + //write distribution for F + ////////////////////////////////////////////////////////////////////////// + + (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb; + (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab; + (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba; + (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab; + (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab; + (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba; + (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba; + (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa; + (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca; + (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa; + (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa; + (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca; + (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca; + + (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3 ) = mfcbb; + (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3 ) = mfbcb; + (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3 ) = mfccb; + (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3 ) = mfacb; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac; + + (*this->zeroDistributionsF)(x1,x2,x3) = mfbbb; + + + +///////////////////// P H A S E - F I E L D S O L V E R ///////////////////////////////////////// +/* + + mfcbb = (*this->localDistributionsH)(D3Q27System::ET_E, x1,x2,x3); + mfbcb = (*this->localDistributionsH)(D3Q27System::ET_N,x1,x2,x3); + mfbbc = (*this->localDistributionsH)(D3Q27System::ET_T,x1,x2,x3); + mfccb = (*this->localDistributionsH)(D3Q27System::ET_NE,x1,x2,x3); + mfacb = (*this->localDistributionsH)(D3Q27System::ET_NW,x1p,x2,x3); + mfcbc = (*this->localDistributionsH)(D3Q27System::ET_TE,x1,x2,x3); + mfabc = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p,x2,x3); + mfbcc = (*this->localDistributionsH)(D3Q27System::ET_TN,x1,x2,x3); + mfbac = (*this->localDistributionsH)(D3Q27System::ET_TS,x1,x2p,x3); + mfccc = (*this->localDistributionsH)(D3Q27System::ET_TNE,x1,x2,x3); + mfacc = (*this->localDistributionsH)(D3Q27System::ET_TNW,x1p,x2,x3); + mfcac = (*this->localDistributionsH)(D3Q27System::ET_TSE,x1,x2p,x3); + mfaac = (*this->localDistributionsH)(D3Q27System::ET_TSW,x1p,x2p,x3); + mfabb = (*this->nonLocalDistributionsH)(D3Q27System::ET_W,x1p,x2,x3 ); + mfbab = (*this->nonLocalDistributionsH)(D3Q27System::ET_S,x1,x2p,x3 ); + mfbba = (*this->nonLocalDistributionsH)(D3Q27System::ET_B,x1,x2,x3p ); + mfaab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW,x1p,x2p,x3 ); + mfcab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE,x1,x2p,x3 ); + mfaba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW,x1p,x2,x3p ); + mfcba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE,x1,x2,x3p ); + mfbaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS,x1,x2p,x3p ); + mfbca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN,x1,x2,x3p ); + mfaaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW,x1p,x2p,x3p); + mfcaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE,x1,x2p,x3p); + mfaca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW,x1p,x2,x3p); + mfcca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE,x1,x2,x3p); + mfbbb = (*this->zeroDistributionsH)(x1,x2,x3); + + + LBMReal hSource = ( (tauH - 0.5)*(1.0 - phi[ZERO])*(phi[ZERO])/denom ); // + phi[ZERO]*(dxux + dyuy + dzuz); + + + LBMReal drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + + (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + + ((mfabb + mfcbb) + (mfbab + mfbcb)) + (mfbba + mfbbc)) + mfbbb; + + + LBMReal collFactorPhi = 1.0 / tauH; + oMdrho = one; // comp special + //////////////////////////////////////////////////////////////////////////////////// + + // LBMReal wadjust; + // LBMReal qudricLimitP = 0.01f;// * 0.0001f; + // LBMReal qudricLimitM = 0.01f;// * 0.0001f; + // LBMReal qudricLimitD = 0.01f;// * 0.001f; + //LBMReal s9 = minusomega; + //test + //s9 = 0.; + //////////////////////////////////////////////////////////////////////////////////// + //Hin + //////////////////////////////////////////////////////////////////////////////////// + // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Z - Dir + m2 = mfaaa + mfaac; // 2nd raw moment + m1 = mfaac - mfaaa; // 1st raw moment + m0 = m2 + mfaab; // zeroth raw moment + mfaaa = m0; + m0 += c1o36 * oMdrho; + mfaab = m1 - m0 * uz; // this corresponds to a (central moment of order 1 = first raw moment - velocity * zeroth moment) + mfaac = m2 - two* m1 * uz + uz2 * m0; // this corresponds to a (central moment of order 2 = second raw moment - 2* velocity * 1st raw moment + velocity^2 * zeroth moment) + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaba + mfabc; + m1 = mfabc - mfaba; + m0 = m2 + mfabb; + mfaba = m0; + m0 += c1o9 * oMdrho; + mfabb = m1 - m0 * uz; + mfabc = m2 - two* m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaca + mfacc; + m1 = mfacc - mfaca; + m0 = m2 + mfacb; + mfaca = m0; + m0 += c1o36 * oMdrho; + mfacb = m1 - m0 * uz; + mfacc = m2 - two* m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbaa + mfbac; + m1 = mfbac - mfbaa; + m0 = m2 + mfbab; + mfbaa = m0; + m0 += c1o9 * oMdrho; + mfbab = m1 - m0 * uz; + mfbac = m2 - two* m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbba + mfbbc; + m1 = mfbbc - mfbba; + m0 = m2 + mfbbb; + mfbba = m0; + m0 += c4o9 * oMdrho; + mfbbb = m1 - m0 * uz; + mfbbc = m2 - two* m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbca + mfbcc; + m1 = mfbcc - mfbca; + m0 = m2 + mfbcb; + mfbca = m0; + m0 += c1o9 * oMdrho; + mfbcb = m1 - m0 * uz; + mfbcc = m2 - two* m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcaa + mfcac; + m1 = mfcac - mfcaa; + m0 = m2 + mfcab; + mfcaa = m0; + m0 += c1o36 * oMdrho; + mfcab = m1 - m0 * uz; + mfcac = m2 - two* m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcba + mfcbc; + m1 = mfcbc - mfcba; + m0 = m2 + mfcbb; + mfcba = m0; + m0 += c1o9 * oMdrho; + mfcbb = m1 - m0 * uz; + mfcbc = m2 - two* m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcca + mfccc; + m1 = mfccc - mfcca; + m0 = m2 + mfccb; + mfcca = m0; + m0 += c1o36 * oMdrho; + mfccb = m1 - m0 * uz; + mfccc = m2 - two* m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Y - Dir + m2 = mfaaa + mfaca; + m1 = mfaca - mfaaa; + m0 = m2 + mfaba; + mfaaa = m0; + m0 += c1o6 * oMdrho; + mfaba = m1 - m0 * uy; + mfaca = m2 - two* m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaab + mfacb; + m1 = mfacb - mfaab; + m0 = m2 + mfabb; + mfaab = m0; + mfabb = m1 - m0 * uy; + mfacb = m2 - two* m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaac + mfacc; + m1 = mfacc - mfaac; + m0 = m2 + mfabc; + mfaac = m0; + m0 += c1o18 * oMdrho; + mfabc = m1 - m0 * uy; + mfacc = m2 - two* m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbaa + mfbca; + m1 = mfbca - mfbaa; + m0 = m2 + mfbba; + mfbaa = m0; + m0 += c2o3 * oMdrho; + mfbba = m1 - m0 * uy; + mfbca = m2 - two* m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbab + mfbcb; + m1 = mfbcb - mfbab; + m0 = m2 + mfbbb; + mfbab = m0; + mfbbb = m1 - m0 * uy; + mfbcb = m2 - two* m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbac + mfbcc; + m1 = mfbcc - mfbac; + m0 = m2 + mfbbc; + mfbac = m0; + m0 += c2o9 * oMdrho; + mfbbc = m1 - m0 * uy; + mfbcc = m2 - two* m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcaa + mfcca; + m1 = mfcca - mfcaa; + m0 = m2 + mfcba; + mfcaa = m0; + m0 += c1o6 * oMdrho; + mfcba = m1 - m0 * uy; + mfcca = m2 - two* m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcab + mfccb; + m1 = mfccb - mfcab; + m0 = m2 + mfcbb; + mfcab = m0; + mfcbb = m1 - m0 * uy; + mfccb = m2 - two* m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcac + mfccc; + m1 = mfccc - mfcac; + m0 = m2 + mfcbc; + mfcac = m0; + m0 += c1o18 * oMdrho; + mfcbc = m1 - m0 * uy; + mfccc = m2 - two* m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // X - Dir + m2 = mfaaa + mfcaa; + m1 = mfcaa - mfaaa; + m0 = m2 + mfbaa; + mfaaa = m0; + m0 += one* oMdrho; + mfbaa = m1 - m0 * ux; + mfcaa = m2 - two* m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaba + mfcba; + m1 = mfcba - mfaba; + m0 = m2 + mfbba; + mfaba = m0; + mfbba = m1 - m0 * ux; + mfcba = m2 - two* m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaca + mfcca; + m1 = mfcca - mfaca; + m0 = m2 + mfbca; + mfaca = m0; + m0 += c1o3 * oMdrho; + mfbca = m1 - m0 * ux; + mfcca = m2 - two* m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaab + mfcab; + m1 = mfcab - mfaab; + m0 = m2 + mfbab; + mfaab = m0; + mfbab = m1 - m0 * ux; + mfcab = m2 - two* m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfabb + mfcbb; + m1 = mfcbb - mfabb; + m0 = m2 + mfbbb; + mfabb = m0; + mfbbb = m1 - m0 * ux; + mfcbb = m2 - two* m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfacb + mfccb; + m1 = mfccb - mfacb; + m0 = m2 + mfbcb; + mfacb = m0; + mfbcb = m1 - m0 * ux; + mfccb = m2 - two* m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaac + mfcac; + m1 = mfcac - mfaac; + m0 = m2 + mfbac; + mfaac = m0; + m0 += c1o3 * oMdrho; + mfbac = m1 - m0 * ux; + mfcac = m2 - two* m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfabc + mfcbc; + m1 = mfcbc - mfabc; + m0 = m2 + mfbbc; + mfabc = m0; + mfbbc = m1 - m0 * ux; + mfcbc = m2 - two* m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfacc + mfccc; + m1 = mfccc - mfacc; + m0 = m2 + mfbcc; + mfacc = m0; + m0 += c1o9 * oMdrho; + mfbcc = m1 - m0 * ux; + mfccc = m2 - two* m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + + + //////////////////////////////////////////////////////////////////////////////////// + // Collision + //////////////////////////////////////////////////////////////////////////////////// + LBMReal m000 = mfaaa; + LBMReal m100 = mfbaa; + LBMReal m010 = mfaba; + LBMReal m001 = mfaab; + LBMReal m110 = mfbba; + LBMReal m101 = mfbab; + LBMReal m011 = mfabb; + LBMReal m111 = mfbbb; + LBMReal m200 = mfcaa - m000 / 3.0; + LBMReal m020 = mfaca - m000 / 3.0; + LBMReal m002 = mfaac - m000 / 3.0; + LBMReal m210 = mfcba - m010 / 3.0; + LBMReal m012 = mfabc - m010 / 3.0; + LBMReal m201 = mfcab - m001 / 3.0; + LBMReal m021 = mfacb - m001 / 3.0; + LBMReal m120 = mfbca - m100 / 3.0; + LBMReal m102 = mfbac - m100 / 3.0; + LBMReal m220 = mfcca - m000 / 9.0; + LBMReal m202 = mfcac - m000 / 9.0; + LBMReal m022 = mfacc - m000 / 9.0; + LBMReal m221 = mfccb - m001 / 9.0; + LBMReal m212 = mfcbc - m010 / 9.0; + LBMReal m122 = mfbcc - m100 / 9.0; + LBMReal m211 = mfcbb - m011 / 3.0; + LBMReal m121 = mfbcb - m101 / 3.0; + LBMReal m112 = mfbbc - m110 / 3.0; + LBMReal m222 = mfccc - m000 / 27.0; + + + m100 = (1.0 - collFactorPhi)*m100 + hSource*dX1_phi*collFactorPhi / 3.0; + m010 = (1.0 - collFactorPhi)*m010 + hSource*dX2_phi*collFactorPhi / 3.0; + m001 = (1.0 - collFactorPhi)*m001 + hSource*dX3_phi*collFactorPhi / 3.0; + + m110 = 0.0; + m101 = 0.0; + m011 = 0.0; + + m111 = 0.0; + + //(200)// + m200 = m000 / 3.0; + m020 = m000 / 3.0; + m002 = m000 / 3.0; + //// + + //(210)// + m210 = m010 / 3.0; + m201 = m001 / 3.0; + m120 = m100 / 3.0; + + + m102 = m100 / 3.0; + m021 = m001 / 3.0; + m012 = m010 / 3.0; + //// + + + //(220)// + m220 = m000 / 9.0; + m202 = m000 / 9.0; + m022 = m000 / 9.0; + //// + + //(221)// + m221 = m001 / 9.0; + m212 = m010 / 9.0; + m122 = m100 / 9.0; + //// + + //(211)// + m211 = m011 / 3.0; + m121 = m101 / 3.0; + m112 = m110 / 3.0; + //// + + //(222)// + m222 = m000 / 27.0; + //// + mfaaa = m000 ; + mfbaa = m100; + mfaba = m010; + mfaab = m001; + mfbba = m110; + mfbab = m101; + mfabb = m011; + mfbbb = m111; + mfcaa = m200; + mfaca = m020; + mfaac = m002; + mfcba = m210; + mfabc = m012; + mfcab = m201; + mfacb = m021; + mfbca = m120; + mfbac = m102; + mfcca = m220; + mfcac = m202; + mfacc = m022; + mfccb = m221; + mfcbc = m212; + mfbcc = m122; + mfcbb = m211; + mfbcb = m121; + mfbbc = m112; + mfccc = m222; + //////////////////////////////////////////////////////////////////////////////////// + //back + //////////////////////////////////////////////////////////////////////////////////// + //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Z - Dir + m0 = mfaac * c1o2 + mfaab * (uz - c1o2) + (mfaaa + one* oMdrho) * (uz2 - uz) * c1o2; + m1 = -mfaac - two* mfaab * uz + mfaaa * (one - uz2) - one* oMdrho * uz2; + m2 = mfaac * c1o2 + mfaab * (uz + c1o2) + (mfaaa + one* oMdrho) * (uz2 + uz) * c1o2; + mfaaa = m0; + mfaab = m1; + mfaac = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfabc * c1o2 + mfabb * (uz - c1o2) + mfaba * (uz2 - uz) * c1o2; + m1 = -mfabc - two* mfabb * uz + mfaba * (one - uz2); + m2 = mfabc * c1o2 + mfabb * (uz + c1o2) + mfaba * (uz2 + uz) * c1o2; + mfaba = m0; + mfabb = m1; + mfabc = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfacc * c1o2 + mfacb * (uz - c1o2) + (mfaca + c1o3 * oMdrho) * (uz2 - uz) * c1o2; + m1 = -mfacc - two* mfacb * uz + mfaca * (one - uz2) - c1o3 * oMdrho * uz2; + m2 = mfacc * c1o2 + mfacb * (uz + c1o2) + (mfaca + c1o3 * oMdrho) * (uz2 + uz) * c1o2; + mfaca = m0; + mfacb = m1; + mfacc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfbac * c1o2 + mfbab * (uz - c1o2) + mfbaa * (uz2 - uz) * c1o2; + m1 = -mfbac - two* mfbab * uz + mfbaa * (one - uz2); + m2 = mfbac * c1o2 + mfbab * (uz + c1o2) + mfbaa * (uz2 + uz) * c1o2; + mfbaa = m0; + mfbab = m1; + mfbac = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbbc * c1o2 + mfbbb * (uz - c1o2) + mfbba * (uz2 - uz) * c1o2; + m1 = -mfbbc - two* mfbbb * uz + mfbba * (one - uz2); + m2 = mfbbc * c1o2 + mfbbb * (uz + c1o2) + mfbba * (uz2 + uz) * c1o2; + mfbba = m0; + mfbbb = m1; + mfbbc = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbcc * c1o2 + mfbcb * (uz - c1o2) + mfbca * (uz2 - uz) * c1o2; + m1 = -mfbcc - two* mfbcb * uz + mfbca * (one - uz2); + m2 = mfbcc * c1o2 + mfbcb * (uz + c1o2) + mfbca * (uz2 + uz) * c1o2; + mfbca = m0; + mfbcb = m1; + mfbcc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcac * c1o2 + mfcab * (uz - c1o2) + (mfcaa + c1o3 * oMdrho) * (uz2 - uz) * c1o2; + m1 = -mfcac - two* mfcab * uz + mfcaa * (one - uz2) - c1o3 * oMdrho * uz2; + m2 = mfcac * c1o2 + mfcab * (uz + c1o2) + (mfcaa + c1o3 * oMdrho) * (uz2 + uz) * c1o2; + mfcaa = m0; + mfcab = m1; + mfcac = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfcbc * c1o2 + mfcbb * (uz - c1o2) + mfcba * (uz2 - uz) * c1o2; + m1 = -mfcbc - two* mfcbb * uz + mfcba * (one - uz2); + m2 = mfcbc * c1o2 + mfcbb * (uz + c1o2) + mfcba * (uz2 + uz) * c1o2; + mfcba = m0; + mfcbb = m1; + mfcbc = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfccc * c1o2 + mfccb * (uz - c1o2) + (mfcca + c1o9 * oMdrho) * (uz2 - uz) * c1o2; + m1 = -mfccc - two* mfccb * uz + mfcca * (one - uz2) - c1o9 * oMdrho * uz2; + m2 = mfccc * c1o2 + mfccb * (uz + c1o2) + (mfcca + c1o9 * oMdrho) * (uz2 + uz) * c1o2; + mfcca = m0; + mfccb = m1; + mfccc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Y - Dir + m0 = mfaca * c1o2 + mfaba * (uy - c1o2) + (mfaaa + c1o6 * oMdrho) * (uy2 - uy) * c1o2; + m1 = -mfaca - two* mfaba * uy + mfaaa * (one - uy2) - c1o6 * oMdrho * uy2; + m2 = mfaca * c1o2 + mfaba * (uy + c1o2) + (mfaaa + c1o6 * oMdrho) * (uy2 + uy) * c1o2; + mfaaa = m0; + mfaba = m1; + mfaca = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfacb * c1o2 + mfabb * (uy - c1o2) + (mfaab + c2o3 * oMdrho) * (uy2 - uy) * c1o2; + m1 = -mfacb - two* mfabb * uy + mfaab * (one - uy2) - c2o3 * oMdrho * uy2; + m2 = mfacb * c1o2 + mfabb * (uy + c1o2) + (mfaab + c2o3 * oMdrho) * (uy2 + uy) * c1o2; + mfaab = m0; + mfabb = m1; + mfacb = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfacc * c1o2 + mfabc * (uy - c1o2) + (mfaac + c1o6 * oMdrho) * (uy2 - uy) * c1o2; + m1 = -mfacc - two* mfabc * uy + mfaac * (one - uy2) - c1o6 * oMdrho * uy2; + m2 = mfacc * c1o2 + mfabc * (uy + c1o2) + (mfaac + c1o6 * oMdrho) * (uy2 + uy) * c1o2; + mfaac = m0; + mfabc = m1; + mfacc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfbca * c1o2 + mfbba * (uy - c1o2) + mfbaa * (uy2 - uy) * c1o2; + m1 = -mfbca - two* mfbba * uy + mfbaa * (one - uy2); + m2 = mfbca * c1o2 + mfbba * (uy + c1o2) + mfbaa * (uy2 + uy) * c1o2; + mfbaa = m0; + mfbba = m1; + mfbca = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbcb * c1o2 + mfbbb * (uy - c1o2) + mfbab * (uy2 - uy) * c1o2; + m1 = -mfbcb - two* mfbbb * uy + mfbab * (one - uy2); + m2 = mfbcb * c1o2 + mfbbb * (uy + c1o2) + mfbab * (uy2 + uy) * c1o2; + mfbab = m0; + mfbbb = m1; + mfbcb = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbcc * c1o2 + mfbbc * (uy - c1o2) + mfbac * (uy2 - uy) * c1o2; + m1 = -mfbcc - two* mfbbc * uy + mfbac * (one - uy2); + m2 = mfbcc * c1o2 + mfbbc * (uy + c1o2) + mfbac * (uy2 + uy) * c1o2; + mfbac = m0; + mfbbc = m1; + mfbcc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcca * c1o2 + mfcba * (uy - c1o2) + (mfcaa + c1o18 * oMdrho) * (uy2 - uy) * c1o2; + m1 = -mfcca - two* mfcba * uy + mfcaa * (one - uy2) - c1o18 * oMdrho * uy2; + m2 = mfcca * c1o2 + mfcba * (uy + c1o2) + (mfcaa + c1o18 * oMdrho) * (uy2 + uy) * c1o2; + mfcaa = m0; + mfcba = m1; + mfcca = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfccb * c1o2 + mfcbb * (uy - c1o2) + (mfcab + c2o9 * oMdrho) * (uy2 - uy) * c1o2; + m1 = -mfccb - two* mfcbb * uy + mfcab * (one - uy2) - c2o9 * oMdrho * uy2; + m2 = mfccb * c1o2 + mfcbb * (uy + c1o2) + (mfcab + c2o9 * oMdrho) * (uy2 + uy) * c1o2; + mfcab = m0; + mfcbb = m1; + mfccb = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfccc * c1o2 + mfcbc * (uy - c1o2) + (mfcac + c1o18 * oMdrho) * (uy2 - uy) * c1o2; + m1 = -mfccc - two* mfcbc * uy + mfcac * (one - uy2) - c1o18 * oMdrho * uy2; + m2 = mfccc * c1o2 + mfcbc * (uy + c1o2) + (mfcac + c1o18 * oMdrho) * (uy2 + uy) * c1o2; + mfcac = m0; + mfcbc = m1; + mfccc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // X - Dir + m0 = mfcaa * c1o2 + mfbaa * (ux - c1o2) + (mfaaa + c1o36 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfcaa - two* mfbaa * ux + mfaaa * (one - ux2) - c1o36 * oMdrho * ux2; + m2 = mfcaa * c1o2 + mfbaa * (ux + c1o2) + (mfaaa + c1o36 * oMdrho) * (ux2 + ux) * c1o2; + mfaaa = m0; + mfbaa = m1; + mfcaa = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcba * c1o2 + mfbba * (ux - c1o2) + (mfaba + c1o9 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfcba - two* mfbba * ux + mfaba * (one - ux2) - c1o9 * oMdrho * ux2; + m2 = mfcba * c1o2 + mfbba * (ux + c1o2) + (mfaba + c1o9 * oMdrho) * (ux2 + ux) * c1o2; + mfaba = m0; + mfbba = m1; + mfcba = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcca * c1o2 + mfbca * (ux - c1o2) + (mfaca + c1o36 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfcca - two* mfbca * ux + mfaca * (one - ux2) - c1o36 * oMdrho * ux2; + m2 = mfcca * c1o2 + mfbca * (ux + c1o2) + (mfaca + c1o36 * oMdrho) * (ux2 + ux) * c1o2; + mfaca = m0; + mfbca = m1; + mfcca = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcab * c1o2 + mfbab * (ux - c1o2) + (mfaab + c1o9 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfcab - two* mfbab * ux + mfaab * (one - ux2) - c1o9 * oMdrho * ux2; + m2 = mfcab * c1o2 + mfbab * (ux + c1o2) + (mfaab + c1o9 * oMdrho) * (ux2 + ux) * c1o2; + mfaab = m0; + mfbab = m1; + mfcab = m2; + ///////////b//////////////////////////////////////////////////////////////////////// + m0 = mfcbb * c1o2 + mfbbb * (ux - c1o2) + (mfabb + c4o9 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfcbb - two* mfbbb * ux + mfabb * (one - ux2) - c4o9 * oMdrho * ux2; + m2 = mfcbb * c1o2 + mfbbb * (ux + c1o2) + (mfabb + c4o9 * oMdrho) * (ux2 + ux) * c1o2; + mfabb = m0; + mfbbb = m1; + mfcbb = m2; + ///////////b//////////////////////////////////////////////////////////////////////// + m0 = mfccb * c1o2 + mfbcb * (ux - c1o2) + (mfacb + c1o9 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfccb - two* mfbcb * ux + mfacb * (one - ux2) - c1o9 * oMdrho * ux2; + m2 = mfccb * c1o2 + mfbcb * (ux + c1o2) + (mfacb + c1o9 * oMdrho) * (ux2 + ux) * c1o2; + mfacb = m0; + mfbcb = m1; + mfccb = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcac * c1o2 + mfbac * (ux - c1o2) + (mfaac + c1o36 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfcac - two* mfbac * ux + mfaac * (one - ux2) - c1o36 * oMdrho * ux2; + m2 = mfcac * c1o2 + mfbac * (ux + c1o2) + (mfaac + c1o36 * oMdrho) * (ux2 + ux) * c1o2; + mfaac = m0; + mfbac = m1; + mfcac = m2; + ///////////c//////////////////////////////////////////////////////////////////////// + m0 = mfcbc * c1o2 + mfbbc * (ux - c1o2) + (mfabc + c1o9 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfcbc - two* mfbbc * ux + mfabc * (one - ux2) - c1o9 * oMdrho * ux2; + m2 = mfcbc * c1o2 + mfbbc * (ux + c1o2) + (mfabc + c1o9 * oMdrho) * (ux2 + ux) * c1o2; + mfabc = m0; + mfbbc = m1; + mfcbc = m2; + ///////////c//////////////////////////////////////////////////////////////////////// + m0 = mfccc * c1o2 + mfbcc * (ux - c1o2) + (mfacc + c1o36 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfccc - two* mfbcc * ux + mfacc * (one - ux2) - c1o36 * oMdrho * ux2; + m2 = mfccc * c1o2 + mfbcc * (ux + c1o2) + (mfacc + c1o36 * oMdrho) * (ux2 + ux) * c1o2; + mfacc = m0; + mfbcc = m1; + mfccc = m2; + + //////////////////////////////////////////////////////////////////////////////////// + + ////////////////////////////////////////////////////////////////////////// + //proof correctness + ////////////////////////////////////////////////////////////////////////// +#ifdef PROOF_CORRECTNESS + LBMReal drho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) + + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) + + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; + //LBMReal dif = fabs(rho - rho_post); + dif = drho - drho_post; +#ifdef SINGLEPRECISION + if (dif > 10.0E-7 || dif < -10.0E-7) +#else + if (dif > 10.0E-15 || dif < -10.0E-15) +#endif + { + UB_THROW(UbException(UB_EXARGS, "rho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(drho_post) + + " dif=" + UbSystem::toString(dif) + + " rho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3))); + //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3)); + //exit(EXIT_FAILURE); + } +#endif + + + ////////////////////////////////////////////////////////////////////////// + //write distribution for H + ////////////////////////////////////////////////////////////////////////// + + //(*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3) = mfabb; + //(*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3) = mfbab; + //(*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3) = mfbba; + //(*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3) = mfaab; + //(*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab; + //(*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3) = mfaba; + //(*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba; + //(*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa; + //(*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca; + //(*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa; + //(*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa; + //(*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca; + //(*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca; + + //(*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3 ) = mfcbb; + //(*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3 ) = mfbcb; + //(*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc; + //(*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3 ) = mfccb; + //(*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3 ) = mfacb; + //(*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc; + //(*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc; + //(*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc; + //(*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac; + //(*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc; + //(*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc; + //(*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac; + //(*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac; + + //(*this->zeroDistributionsH)(x1,x2,x3) = mfbbb; + +*/ + + +///////////////////// 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[ZERO] = (*this->zeroDistributionsH)(x1,x2,x3); + + + //LBMReal denom = sqrt(dX1_phi*dX1_phi + dX2_phi*dX2_phi + dX3_phi*dX3_phi) + 1e-15; + //LBMReal di = sqrt(8*kappa/beta); + LBMReal tauH1 = 3.0*mob + 0.5; + 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 != ZERO) + { + //LBMReal dirGrad_phi = DX1[dir]*dX1_phi+DX2[dir]*dX2_phi+DX3[dir]*dX3_phi; + LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0; + LBMReal hSource = (tauH - 0.5)*(1.0 - phi[ZERO])*(phi[ZERO])*(dirGrad_phi)/denom; // + phi[ZERO]*(dxux + dyuy + dzuz); + + //LBMReal hSource =((phi[ZERO]>phiH || phi[ZERO]<phiL) ? 0.1 : 1.0) * 3.0*mob*(-4.0)/di*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)*(dirGrad_phi)/denom; + //LBMReal hSource = 3.0*mob*(-4.0)/di*(phi[ZERO] - phiL)*(phi[ZERO] - phiH)*(dirGrad_phi)/denom; + hEq = phi[ZERO]*WEIGTH[dir]*(1.0 + 3.0*velProd + 4.5*velSq1 - 1.5*(ux2+uy2+uz2)) + hSource*WEIGTH[dir]; + //gEq = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx2+vy2+vz2))*c1o3 + (p1-rho*c1o3)*WEIGTH[dir]; + //h[dir] = hEq; //h[dir] - (h[dir] - hEq)/(tauH + 0.5)); /// This corresponds with the collision factor of 1.0 which equals (tauH + 0.5). + h[dir] = h[dir] - (h[dir] - hEq)/(tauH); // + WEIGTH[dir]*phi[ZERO]*(dxux + dyuy + dzuz); + //h[dir] = h[dir] - (h[dir] - hEq)/(tauH1); + //g[dir] = g[dir] - collFactorM*(g[dir]-gEq) + 0.5*forcingTerm[dir]; + + } + else + { + hEq = phi[ZERO]*WEIGTH[ZERO]*(1.0 - 1.5*(ux2+uy2+uz2)); + //gEq = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx2+vy2+vz2))*c1o3 + (p1-rho*c1o3)*WEIGTH[dir]; + //h[dir] = hEq; + h[ZERO] = h[ZERO] - (h[ZERO] - hEq)/(tauH); // + WEIGTH[ZERO]*phi[ZERO]*(dxux + dyuy + dzuz); + //g[dir] = g[dir] - collFactorM*(g[dir]-gEq) + 0.5*forcingTerm[dir]; + } + } + + + (*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::ZERO]; + + +///////////////////// END OF OLD BGK SOLVER /////////////////////////////// + + + + + + + ////////////////////////////////////////////////////////////////////////// + + } + } + } + } + dataSet->setPhaseField(divU); + + } +} +////////////////////////////////////////////////////////////////////////// +double MultiphaseCumulantLBMKernel::getCallculationTime() +{ + //return timer.getDuration(); + return timer.getTotalTime(); +} +////////////////////////////////////////////////////////////////////////// + +LBMReal MultiphaseCumulantLBMKernel::gradX1_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*DX1[k]*phi[k]; + } + return 3.0*sum; +} + +LBMReal MultiphaseCumulantLBMKernel::gradX2_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*DX2[k]*phi[k]; + } + return 3.0*sum; +} + +LBMReal MultiphaseCumulantLBMKernel::gradX3_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*DX3[k]*phi[k]; + } + return 3.0*sum; +} + +LBMReal MultiphaseCumulantLBMKernel::nabla2_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + sum += WEIGTH[k]*(phi[k] - phi[ZERO]); + } + return 6.0*sum; +} +///// Commnets neeeded //////// + +void MultiphaseCumulantLBMKernel::computePhasefield() +{ + using namespace D3Q27System; + DistributionArray3DPtr distributionsH = dataSet->getHdistributions(); + + //const int bcArrayMaxX1 = (int)distributionsH->getNX1(); + //const int bcArrayMaxX2 = (int)distributionsH->getNX2(); + //const int bcArrayMaxX3 = (int)distributionsH->getNX3(); + + int minX1 = ghostLayerWidth; + int minX2 = ghostLayerWidth; + int minX3 = ghostLayerWidth; + int maxX1 = (int)distributionsH->getNX1() - ghostLayerWidth; + int maxX2 = (int)distributionsH->getNX2() - ghostLayerWidth; + int maxX3 = (int)distributionsH->getNX3() - ghostLayerWidth; + + //------------- Computing the phase-field ------------------ + for(int x3 = minX3; x3 < maxX3; x3++) + { + for(int x2 = minX2; x2 < maxX2; x2++) + { + for(int x1 = minX1; x1 < maxX1; x1++) + { + //if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3)) + { + int x1p = x1 + 1; + int x2p = x2 + 1; + int x3p = x3 + 1; + + 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[ZERO] = (*this->zeroDistributionsH)(x1,x2,x3); + + /*(*this->phaseField)(x1,x2,x3) = h[ZERO] + h[E] + h[W] + h[N] + h[S] + h[T] + h[B] + h[NE] + h[SW] + h[SE] + h[NW] + h[TE] + h[BW] + + h[BE] + h[TW] + h[TN] + h[BS] + h[BN] + h[TS] + h[TNE] + h[TNW] + h[TSE] + h[TSW] + h[BNE] + h[BNW] + h[BSE] + h[BSW];*/ + + } + } + } + } + //---------------------------------------------------------- + +/* + /////// Filling ghost nodes for FD computations ////////// + for(int x1 = minX1; x1 < maxX1; x1++) + { + for(int x2 = minX2; x2 < maxX2; x2++) + { + int x3 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, x2, maxX3-1); + x3 = maxX3; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, x2, minX3); + } + } + for(int x2 = minX2; x2 < maxX2; x2++) + { + for(int x3 = minX3; x3 < maxX3; x3++) + { + int x1 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(maxX1-1, x2, x3); + x1 = maxX1; + (*phaseField)(x1, x2, x3) = (*phaseField)(minX1, x2, x3); + } + } + for(int x1 = minX1; x1 < maxX1; x1++) + { + for(int x3 = minX3; x3 < maxX3; x3++) + { + int x2 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, maxX2-1, x3); + x2 = maxX2; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, minX2, x3); + } + } + (*phaseField)(0, 0, 0 ) = (*phaseField)(maxX1-1, maxX2-1, maxX3-1); + (*phaseField)(0, 0, maxX3) = (*phaseField)(maxX1-1, maxX2-1, minX3 ); + (*phaseField)(0, maxX2, 0 ) = (*phaseField)(maxX1-1, minX2, maxX3-1 ); + (*phaseField)(0, maxX2, maxX3) = (*phaseField)(maxX1-1, minX2, minX3 ); + + (*phaseField)(maxX1, 0, 0 ) = (*phaseField)(minX1, maxX2-1, maxX3-1); + (*phaseField)(maxX1, 0, maxX3) = (*phaseField)(minX1, maxX2-1, minX3 ); + (*phaseField)(maxX1, maxX2, 0 ) = (*phaseField)(minX1, minX2, maxX3-1 ); + (*phaseField)(maxX1, maxX2, maxX3) = (*phaseField)(minX1, minX2, minX3 ); + + ///////////////////////////////////////////////////////// +*/ +} + +void MultiphaseCumulantLBMKernel::findNeighbors(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, int x3) +{ + using namespace D3Q27System; + + BCArray3DPtr bcArray = this->getBCProcessor()->getBCArray(); + + phi[ZERO] = (*ph)(x1,x2,x3); + + LBMReal a = -0.5*sqrt(2*beta/kappa)*cos(contactAngle*PI/180); + LBMReal a1 = 1 + a; + + for (int k = FSTARTDIR ; k <= FENDDIR ; k++) + { + + if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) + { + phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]); + } + else + { + /* + if (phi[ZERO] < 1e-2) + { + phi[k] = (*ph)(x1 + DX1[INVDIR[k]], x2 + DX2[INVDIR[k]], x3 + DX3[INVDIR[k]]); + } + else + { + LBMReal phi_f = (*ph)(x1 + DX1[k], x2, x3 + DX3[k]); + phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f; + } + */ + + phi[k] = (*ph)(x1, x2, x3); + + //if (bcArray->isSolid(x1 + DX1[k], x2, x3)) + //{ + // phi[k] = (*ph)(x1, x2, x3); + // //if (!bcArray->isSolid(x1 , x2 + DX2[k], x3 + DX3[k])) + // //{ + // // //phi[k] = (*ph)(x1 , x2 + DX2[k], x3 + DX3[k]); + // // LBMReal phi_f = (*ph)(x1 , x2 + DX2[k], x3 + DX3[k]); + // // phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f; + // //} + // //else + // //{ + // // phi[k] = (*ph)(x1, x2, x3); + // //} + //} + // + //if (bcArray->isSolid(x1 , x2 + DX2[k], x3)) + //{ + // phi[k] = (*ph)(x1, x2, x3); + // //if (!bcArray->isSolid(x1 + DX1[k], x2 , x3 + DX3[k])) + // //{ + // // //phi[k] = (*ph)(x1 + DX1[k], x2 , x3 + DX3[k]); + // // LBMReal phi_f = (*ph)(x1 + DX1[k], x2 , x3 + DX3[k]); + // // phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f; + // //} + // //else + // //{ + // // phi[k] = (*ph)(x1, x2, x3); + // //} + //} + + + //if (bcArray->isSolid(x1 , x2, x3+ DX3[k])) + //{ + // if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3)) + // { + // //phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3); + // LBMReal phi_f = (*ph)(x1 + DX1[k], x2 + DX2[k], x3); + // phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f; + // } + // else + // { + // phi[k] = (*ph)(x1, x2, x3); + // } + //} + + + /*if (bcArray->isSolid(x1 + DX1[k], x2, x3)) phi[k] = (*ph)(x1 , x2 + DX2[k], x3 + DX3[k]); + if (bcArray->isSolid(x1 , x2 + DX2[k], x3)) phi[k] = (*ph)(x1 + DX1[k], x2 , x3 + DX3[k]); + if (bcArray->isSolid(x1 , x2, x3+ DX3[k])) phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 );*/ + + /*if (phi[ZERO] < 0.00001) + { + phi[k] = 0.0; + } + else + { + phi[k] = 0.5; + }*/ + + //phi[k] = 0.5; + //phi[k] = (*ph)(x1, x2, x3); + //phi[k] = (*ph)(x1 + DX1[INVDIR[k]], x2 + DX2[INVDIR[k]], x3 + DX3[INVDIR[k]]); + + + } + } + + /* + phi[E ] = (*ph)(x1 + DX1[E ], x2 + DX2[E ], x3 + DX3[E ]); + phi[N ] = (*ph)(x1 + DX1[N ], x2 + DX2[N ], x3 + DX3[N ]); + phi[T ] = (*ph)(x1 + DX1[T ], x2 + DX2[T ], x3 + DX3[T ]); + phi[W ] = (*ph)(x1 + DX1[W ], x2 + DX2[W ], x3 + DX3[W ]); + phi[S ] = (*ph)(x1 + DX1[S ], x2 + DX2[S ], x3 + DX3[S ]); + phi[B ] = (*ph)(x1 + DX1[B ], x2 + DX2[B ], x3 + DX3[B ]); + phi[NE ] = (*ph)(x1 + DX1[NE ], x2 + DX2[NE ], x3 + DX3[NE ]); + phi[NW ] = (*ph)(x1 + DX1[NW ], x2 + DX2[NW ], x3 + DX3[NW ]); + phi[TE ] = (*ph)(x1 + DX1[TE ], x2 + DX2[TE ], x3 + DX3[TE ]); + phi[TW ] = (*ph)(x1 + DX1[TW ], x2 + DX2[TW ], x3 + DX3[TW ]); + phi[TN ] = (*ph)(x1 + DX1[TN ], x2 + DX2[TN ], x3 + DX3[TN ]); + phi[TS ] = (*ph)(x1 + DX1[TS ], x2 + DX2[TS ], x3 + DX3[TS ]); + phi[SW ] = (*ph)(x1 + DX1[SW ], x2 + DX2[SW ], x3 + DX3[SW ]); + phi[SE ] = (*ph)(x1 + DX1[SE ], x2 + DX2[SE ], x3 + DX3[SE ]); + phi[BW ] = (*ph)(x1 + DX1[BW ], x2 + DX2[BW ], x3 + DX3[BW ]); + phi[BE ] = (*ph)(x1 + DX1[BE ], x2 + DX2[BE ], x3 + DX3[BE ]); + phi[BS ] = (*ph)(x1 + DX1[BS ], x2 + DX2[BS ], x3 + DX3[BS ]); + phi[BN ] = (*ph)(x1 + DX1[BN ], x2 + DX2[BN ], x3 + DX3[BN ]); + phi[BSW] = (*ph)(x1 + DX1[BSW], x2 + DX2[BSW], x3 + DX3[BSW]); + phi[BSE] = (*ph)(x1 + DX1[BSE], x2 + DX2[BSE], x3 + DX3[BSE]); + phi[BNW] = (*ph)(x1 + DX1[BNW], x2 + DX2[BNW], x3 + DX3[BNW]); + phi[BNE] = (*ph)(x1 + DX1[BNE], x2 + DX2[BNE], x3 + DX3[BNE]); + phi[TNE] = (*ph)(x1 + DX1[TNE], x2 + DX2[TNE], x3 + DX3[TNE]); + phi[TNW] = (*ph)(x1 + DX1[TNW], x2 + DX2[TNW], x3 + DX3[TNW]); + phi[TSE] = (*ph)(x1 + DX1[TSE], x2 + DX2[TSE], x3 + DX3[TSE]); + phi[TSW] = (*ph)(x1 + DX1[TSW], x2 + DX2[TSW], x3 + DX3[TSW]); + */ +} + +void MultiphaseCumulantLBMKernel::swapDistributions() +{ + dataSet->getFdistributions()->swap(); + dataSet->getHdistributions()->swap(); + //computePhasefield(); +} \ No newline at end of file diff --git a/apps/cpu/Multiphase/backup/Multiphase_Jet.cfg b/apps/cpu/Multiphase/backup/Multiphase_Jet.cfg new file mode 100644 index 0000000000000000000000000000000000000000..caa02fe7ad8048a5f658f6a74ea69a044307b90f --- /dev/null +++ b/apps/cpu/Multiphase/backup/Multiphase_Jet.cfg @@ -0,0 +1,75 @@ +pathname = /work/hessafar/MultiphaseWOInletTest +pathGeo = /home/hessafar/projects/VitualFluids/source +geoFile = JetBreakup2.ast +#geoFile = FlowFocusingS2_Small.ast +numOfThreads = 1 +availMem = 10e9 + +#Grid +#length = 50 50 50 +#length = 21 6 13 +#boundingBox = x1min x1max x2min x2max x3min x3max [mm] +#boundingBox = 0.5 219.5 -30 30 -30 30 +#boundingBox = -1 121 -30 30 -30 30 +#boundingBox = -32 128 -12 14 3 58 (FlowFocusingSS , FlowFocusingS) (X1 extendable until 128) +#blocknx = 10 13 11 +#boundingBox = 0.5 165.5 -17.5 17.5 -29.5 30.5 (FlowFocusing) +#blocknx = 11 7 10 +#boundingBox = -32 128 -12 14 -27 88 (FlowFocusingSL) +#blocknx = 10 13 5 +#boundingBox = 1 179 -21 21 -21 59 (T-Junction) +#blocknx = 8 7 8 +#boundingBox = -23 79 0 26 3 59 (FlowFocusingSq0-1) +#blocknx = 6 13 7 +#boundingBox = -23 179 0 26 3 59 (FlowFocusingSq2) +#blocknx = 6 13 7 +#boundingBox = -24 181 0 18 1 101 (FlowFocusingS2) +#blocknx = 5 9 10 + +#boundingBox = -24.5 180.5 2.5 4.5 1.5 64.5 (FlowFocusingS2_Small) (Periodic X2) +#blocknx = 5 2 9 + + +#boundingBox = -24.5 180.5 -1.5 11.5 1.5 64.5 (FlowFocusingS2_Small) (Original was 180.5) +#blocknx = 5 6 9 + +#boundingBox = -1.0 121.0 0.5 629.0 -1.0 121.0 (Jet Breakup) (Original with inlet length) +boundingBox = -60.5 60.5 -1.0 -201.0 -60.5 60.5 (Jet Breakup2) (Original without inlet length) +blocknx = 22 20 22 + +#boundingBox = 0.5 50.5 0.5 50.5 0.5 50.5 (Droplet test) +#blocknx = 10 10 10 + +dx = 0.5 +refineLevel = 0 + +#Simulation +uLB = 0.05 +uF2 = 0.0001 +Re = 10 +nuL = 1.0e-5 +nuG = 1.16e-4 +densityRatio = 30 +sigma = 4.66e-3 +interfaceThickness = 5 +#radius = -5.0 (FlowFocusing2D) +radius = 615.0 (Jet Breakup) +contactAngle = 110.0 +gravity = 0.0 +#gravity = -5.04e-6 +phi_L = 0.0 +phi_H = 1.0 +Phase-field Relaxation = 0.6 +Mobility = 0.02 + + +logToFile = false + +newStart = true +restartStep = 100000 + +cpStart = 100000 +cpStep = 100000 + +outTime = 500 +endTime = 200000000 diff --git a/apps/cpu/Multiphase/backup/T-Junction.FCStd b/apps/cpu/Multiphase/backup/T-Junction.FCStd new file mode 100644 index 0000000000000000000000000000000000000000..7546324577b48ee195aaa8a3172721be4e4d562b Binary files /dev/null and b/apps/cpu/Multiphase/backup/T-Junction.FCStd differ diff --git a/apps/cpu/Multiphase/backup/T-Junction.FCStd1 b/apps/cpu/Multiphase/backup/T-Junction.FCStd1 new file mode 100644 index 0000000000000000000000000000000000000000..f42334cd9105ab78edc27ba44171436be705389a Binary files /dev/null and b/apps/cpu/Multiphase/backup/T-Junction.FCStd1 differ diff --git a/apps/cpu/Multiphase/backup/T-Junction.ast b/apps/cpu/Multiphase/backup/T-Junction.ast new file mode 100644 index 0000000000000000000000000000000000000000..9abee7d99250850d8b52ec708994ac822a0fe665 --- /dev/null +++ b/apps/cpu/Multiphase/backup/T-Junction.ast @@ -0,0 +1,2088 @@ +solid Mesh + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 41.548100 -5.344658 60.000000 + vertex 42.514893 -6.631227 60.000000 + vertex 43.675545 -7.746049 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 55.680649 8.229838 60.000000 + vertex 54.286926 9.034504 60.000000 + vertex 52.782173 9.605181 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 55.680649 8.229838 60.000000 + vertex 52.782173 9.605181 60.000000 + vertex 51.205368 9.927089 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 55.680649 8.229838 60.000000 + vertex 43.675545 7.746049 60.000000 + vertex 59.485363 3.166680 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 55.680649 8.229838 60.000000 + vertex 47.999744 9.797907 60.000000 + vertex 43.675545 7.746049 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 55.680649 8.229838 60.000000 + vertex 51.205368 9.927089 60.000000 + vertex 47.999744 9.797907 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 57.994427 6.007422 60.000000 + vertex 59.485363 3.166680 60.000000 + vertex 58.854561 4.647232 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 40.800205 -3.919666 60.000000 + vertex 43.675545 -7.746049 60.000000 + vertex 45.000000 -8.660254 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 57.994427 6.007422 60.000000 + vertex 55.680649 8.229838 60.000000 + vertex 59.485363 3.166680 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 40.800205 -3.919666 60.000000 + vertex 41.548100 -5.344658 60.000000 + vertex 43.675545 -7.746049 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 56.927242 7.212025 60.000000 + vertex 55.680649 8.229838 60.000000 + vertex 57.994427 6.007422 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 47.999744 -9.797907 60.000000 + vertex 45.000000 -8.660254 60.000000 + vertex 46.453953 -9.350163 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 40.032429 -0.804666 60.000000 + vertex 40.290581 -2.393157 60.000000 + vertex 40.800205 -3.919666 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 40.032429 -0.804666 60.000000 + vertex 40.800205 -3.919666 60.000000 + vertex 45.000000 -8.660254 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 51.205368 -9.927089 60.000000 + vertex 47.999744 -9.797907 60.000000 + vertex 49.597340 -9.991890 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 40.290581 2.393157 60.000000 + vertex 40.032429 0.804666 60.000000 + vertex 40.032429 -0.804666 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 52.782173 -9.605181 60.000000 + vertex 45.000000 -8.660254 60.000000 + vertex 47.999744 -9.797907 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 52.782173 -9.605181 60.000000 + vertex 47.999744 -9.797907 60.000000 + vertex 51.205368 -9.927089 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 42.514893 6.631227 60.000000 + vertex 41.548100 5.344658 60.000000 + vertex 40.800205 3.919666 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 56.927242 -7.212025 60.000000 + vertex 52.782173 -9.605181 60.000000 + vertex 54.286926 -9.034504 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 56.927242 -7.212025 60.000000 + vertex 54.286926 -9.034504 60.000000 + vertex 55.680649 -8.229838 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 43.675545 7.746049 60.000000 + vertex 40.800205 3.919666 60.000000 + vertex 40.290581 2.393157 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 43.675545 7.746049 60.000000 + vertex 40.290581 2.393157 60.000000 + vertex 40.032429 -0.804666 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 43.675545 7.746049 60.000000 + vertex 42.514893 6.631227 60.000000 + vertex 40.800205 3.919666 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 46.453953 9.350163 60.000000 + vertex 45.000000 8.660254 60.000000 + vertex 43.675545 7.746049 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 59.485363 -3.166680 60.000000 + vertex 56.927242 -7.212025 60.000000 + vertex 57.994427 -6.007422 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 59.485363 -3.166680 60.000000 + vertex 57.994427 -6.007422 60.000000 + vertex 58.854561 -4.647232 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 47.999744 9.797907 60.000000 + vertex 46.453953 9.350163 60.000000 + vertex 43.675545 7.746049 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 51.205368 9.927089 60.000000 + vertex 49.597340 9.991890 60.000000 + vertex 47.999744 9.797907 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 59.485363 3.166680 60.000000 + vertex 60.000000 -0.000000 60.000000 + vertex 59.870502 1.604113 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 59.485363 3.166680 60.000000 + vertex 59.485363 -3.166680 60.000000 + vertex 59.870502 -1.604113 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 59.485363 3.166680 60.000000 + vertex 59.870502 -1.604113 60.000000 + vertex 60.000000 -0.000000 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 59.485363 3.166680 60.000000 + vertex 40.032429 -0.804666 60.000000 + vertex 45.000000 -8.660254 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 59.485363 3.166680 60.000000 + vertex 45.000000 -8.660254 60.000000 + vertex 52.782173 -9.605181 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 59.485363 3.166680 60.000000 + vertex 43.675545 7.746049 60.000000 + vertex 40.032429 -0.804666 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 59.485363 3.166680 60.000000 + vertex 52.782173 -9.605181 60.000000 + vertex 56.927242 -7.212025 60.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 59.485363 3.166680 60.000000 + vertex 56.927242 -7.212025 60.000000 + vertex 59.485363 -3.166680 60.000000 + endloop + endfacet + facet normal 0.354604 -0.935016 0.000507 + outer loop + vertex 54.286926 -9.034504 60.000000 + vertex 52.782173 -9.605181 60.000000 + vertex 53.865475 -9.222695 7.677362 + endloop + endfacet + facet normal 0.455679 -0.890144 -0.000469 + outer loop + vertex 54.286926 -9.034504 60.000000 + vertex 53.865475 -9.222695 7.677362 + vertex 55.217609 -8.530917 8.439399 + endloop + endfacet + facet normal -0.981788 0.189978 -0.000491 + outer loop + vertex 40.290581 2.393157 60.000000 + vertex 40.380032 2.730610 11.685194 + vertex 40.055984 1.056659 11.953387 + endloop + endfacet + facet normal -0.948536 0.316668 0.000456 + outer loop + vertex 40.290581 2.393157 60.000000 + vertex 40.800205 3.919666 60.000000 + vertex 40.380032 2.730610 11.685194 + endloop + endfacet + facet normal 0.500000 -0.866025 0.000567 + outer loop + vertex 55.680649 -8.229838 60.000000 + vertex 54.286926 -9.034504 60.000000 + vertex 55.217609 -8.530917 8.439399 + endloop + endfacet + facet normal 0.597108 -0.802161 -0.000678 + outer loop + vertex 55.680649 -8.229838 60.000000 + vertex 55.217609 -8.530917 8.439399 + vertex 56.669765 -7.450787 9.406688 + endloop + endfacet + facet normal 0.632446 -0.774604 0.000437 + outer loop + vertex 56.927242 -7.212025 60.000000 + vertex 55.680649 -8.229838 60.000000 + vertex 56.669765 -7.450787 9.406688 + endloop + endfacet + facet normal 0.733897 -0.679260 -0.000529 + outer loop + vertex 56.927242 -7.212025 60.000000 + vertex 56.669765 -7.450787 9.406688 + vertex 57.940296 -6.078792 10.346415 + endloop + endfacet + facet normal -0.999691 0.024856 -0.000360 + outer loop + vertex 40.032429 0.804666 60.000000 + vertex 40.055984 1.056659 11.953387 + vertex 40.015751 -0.561047 11.986877 + endloop + endfacet + facet normal -0.987050 0.160410 0.000357 + outer loop + vertex 40.032429 0.804666 60.000000 + vertex 40.290581 2.393157 60.000000 + vertex 40.055984 1.056659 11.953387 + endloop + endfacet + facet normal 0.996738 0.080699 -0.000008 + outer loop + vertex 59.870502 1.604113 60.000000 + vertex 60.000000 -0.000000 12.000000 + vertex 59.869751 1.608730 11.891677 + endloop + endfacet + facet normal 0.748511 -0.663123 0.000137 + outer loop + vertex 57.994427 -6.007422 60.000000 + vertex 56.927242 -7.212025 60.000000 + vertex 57.940296 -6.078792 10.346415 + endloop + endfacet + facet normal 0.973621 0.228173 0.000007 + outer loop + vertex 59.870502 1.604113 60.000000 + vertex 59.869751 1.608730 11.891677 + vertex 59.556835 2.943959 11.633276 + endloop + endfacet + facet normal 0.838390 -0.545070 -0.000131 + outer loop + vertex 57.994427 -6.007422 60.000000 + vertex 57.940296 -6.078792 10.346415 + vertex 58.777405 -4.791364 11.001946 + endloop + endfacet + facet normal 0.996757 0.080467 0.000000 + outer loop + vertex 59.870502 1.604113 60.000000 + vertex 60.000000 -0.000000 60.000000 + vertex 60.000000 -0.000000 12.000000 + endloop + endfacet + facet normal 0.845190 -0.534467 0.000241 + outer loop + vertex 58.854561 -4.647232 60.000000 + vertex 57.994427 -6.007422 60.000000 + vertex 58.777405 -4.791364 11.001946 + endloop + endfacet + facet normal 0.936599 0.350403 -0.000230 + outer loop + vertex 59.485363 3.166680 60.000000 + vertex 59.556835 2.943959 11.633276 + vertex 59.141815 4.053054 11.294811 + endloop + endfacet + facet normal 0.917731 -0.397203 -0.000277 + outer loop + vertex 58.854561 -4.647232 60.000000 + vertex 58.777405 -4.791364 11.001946 + vertex 59.500378 -3.121356 11.586938 + endloop + endfacet + facet normal 0.970942 0.239316 0.000333 + outer loop + vertex 59.485363 3.166680 60.000000 + vertex 59.870502 1.604113 60.000000 + vertex 59.556835 2.943959 11.633276 + endloop + endfacet + facet normal 0.919980 -0.391966 -0.000082 + outer loop + vertex 59.485363 -3.166680 60.000000 + vertex 58.854561 -4.647232 60.000000 + vertex 59.500378 -3.121356 11.586938 + endloop + endfacet + facet normal -0.991290 -0.131696 -0.000324 + outer loop + vertex 40.032429 -0.804666 60.000000 + vertex 40.015751 -0.561047 11.986877 + vertex 40.215744 -2.066004 11.820813 + endloop + endfacet + facet normal 0.883824 0.467820 -0.000495 + outer loop + vertex 58.854561 4.647232 60.000000 + vertex 59.141815 4.053054 11.294811 + vertex 58.490032 5.283877 10.774073 + endloop + endfacet + facet normal 0.970137 -0.242556 0.000074 + outer loop + vertex 59.485363 -3.166680 60.000000 + vertex 59.500378 -3.121356 11.586938 + vertex 59.851536 -1.716760 11.876562 + endloop + endfacet + facet normal -1.000000 0.000000 0.000347 + outer loop + vertex 40.032429 -0.804666 60.000000 + vertex 40.032429 0.804666 60.000000 + vertex 40.015751 -0.561047 11.986877 + endloop + endfacet + facet normal 0.919980 0.391966 0.000644 + outer loop + vertex 58.854561 4.647232 60.000000 + vertex 59.485363 3.166680 60.000000 + vertex 59.141815 4.053054 11.294811 + endloop + endfacet + facet normal 0.845189 0.534466 0.000654 + outer loop + vertex 57.994427 6.007422 60.000000 + vertex 58.854561 4.647232 60.000000 + vertex 58.490032 5.283877 10.774073 + endloop + endfacet + facet normal 0.809745 0.586781 -0.000472 + outer loop + vertex 57.994427 6.007422 60.000000 + vertex 58.490032 5.283877 10.774073 + vertex 57.662033 6.425983 10.134433 + endloop + endfacet + facet normal 0.970942 -0.239316 0.000178 + outer loop + vertex 59.870502 -1.604113 60.000000 + vertex 59.485363 -3.166680 60.000000 + vertex 59.851536 -1.716760 11.876562 + endloop + endfacet + facet normal 0.996283 -0.086144 -0.000191 + outer loop + vertex 59.870502 -1.604113 60.000000 + vertex 59.851536 -1.716760 11.876562 + vertex 60.000000 -0.000000 12.000000 + endloop + endfacet + facet normal -0.964233 -0.265056 -0.000302 + outer loop + vertex 40.290581 -2.393157 60.000000 + vertex 40.215744 -2.066004 11.820813 + vertex 40.534901 -3.226747 11.558032 + endloop + endfacet + facet normal -0.987050 -0.160410 0.000444 + outer loop + vertex 40.290581 -2.393157 60.000000 + vertex 40.032429 -0.804666 60.000000 + vertex 40.215744 -2.066004 11.820813 + endloop + endfacet + facet normal 0.996757 -0.080467 0.000000 + outer loop + vertex 60.000000 -0.000000 60.000000 + vertex 59.870502 -1.604113 60.000000 + vertex 60.000000 -0.000000 12.000000 + endloop + endfacet + facet normal 0.748511 0.663123 0.000577 + outer loop + vertex 56.927242 7.212025 60.000000 + vertex 57.994427 6.007422 60.000000 + vertex 57.662033 6.425983 10.134433 + endloop + endfacet + facet normal 0.708406 0.705805 -0.000687 + outer loop + vertex 56.927242 7.212025 60.000000 + vertex 57.662033 6.425983 10.134433 + vertex 56.448730 7.642896 9.251278 + endloop + endfacet + facet normal -0.921845 -0.387558 -0.000495 + outer loop + vertex 40.800205 -3.919666 60.000000 + vertex 40.534901 -3.226747 11.558032 + vertex 41.074001 -4.508494 11.120858 + endloop + endfacet + facet normal -0.948536 -0.316668 0.000665 + outer loop + vertex 40.800205 -3.919666 60.000000 + vertex 40.290581 -2.393157 60.000000 + vertex 40.534901 -3.226747 11.558032 + endloop + endfacet + facet normal 0.567662 0.823261 -0.000930 + outer loop + vertex 55.680649 8.229838 60.000000 + vertex 56.448730 7.642896 9.251278 + vertex 54.842255 8.749433 8.212639 + endloop + endfacet + facet normal 0.632446 0.774604 0.000613 + outer loop + vertex 55.680649 8.229838 60.000000 + vertex 56.927242 7.212025 60.000000 + vertex 56.448730 7.642896 9.251278 + endloop + endfacet + facet normal 0.404679 0.914459 -0.000694 + outer loop + vertex 54.286926 9.034504 60.000000 + vertex 54.842255 8.749433 8.212639 + vertex 53.213177 9.469715 7.370516 + endloop + endfacet + facet normal -0.859338 -0.511408 -0.000413 + outer loop + vertex 41.548100 -5.344658 60.000000 + vertex 41.074001 -4.508494 11.120858 + vertex 41.782188 -5.698035 10.560890 + endloop + endfacet + facet normal 0.500000 0.866025 0.000594 + outer loop + vertex 54.286926 9.034504 60.000000 + vertex 55.680649 8.229838 60.000000 + vertex 54.842255 8.749433 8.212639 + endloop + endfacet + facet normal -0.885456 -0.464723 0.000638 + outer loop + vertex 41.548100 -5.344658 60.000000 + vertex 40.800205 -3.919666 60.000000 + vertex 41.074001 -4.508494 11.120858 + endloop + endfacet + facet normal 0.263490 0.964662 -0.000325 + outer loop + vertex 52.782173 9.605181 60.000000 + vertex 53.213177 9.469715 7.370516 + vertex 52.044731 9.788722 6.941248 + endloop + endfacet + facet normal 0.354604 0.935016 0.000497 + outer loop + vertex 52.782173 9.605181 60.000000 + vertex 54.286926 9.034504 60.000000 + vertex 53.213177 9.469715 7.370516 + endloop + endfacet + facet normal -0.771350 -0.636411 -0.000581 + outer loop + vertex 42.514893 -6.631227 60.000000 + vertex 41.782188 -5.698035 10.560890 + vertex 42.848557 -6.989770 9.754133 + endloop + endfacet + facet normal -0.799443 -0.600742 0.000509 + outer loop + vertex 42.514893 -6.631227 60.000000 + vertex 41.548100 -5.344658 60.000000 + vertex 41.782188 -5.698035 10.560890 + endloop + endfacet + facet normal 0.132345 0.991204 -0.000491 + outer loop + vertex 51.205368 9.927089 60.000000 + vertex 52.044731 9.788722 6.941248 + vertex 50.593201 9.982390 6.659721 + endloop + endfacet + facet normal 0.200026 0.979790 0.000609 + outer loop + vertex 51.205368 9.927089 60.000000 + vertex 52.782173 9.605181 60.000000 + vertex 52.044731 9.788722 6.941248 + endloop + endfacet + facet normal -0.646138 -0.763221 -0.000853 + outer loop + vertex 43.675545 -7.746049 60.000000 + vertex 42.848557 -6.989770 9.754133 + vertex 44.293537 -8.211959 8.750070 + endloop + endfacet + facet normal -0.692725 -0.721202 0.000546 + outer loop + vertex 43.675545 -7.746049 60.000000 + vertex 42.514893 -6.631227 60.000000 + vertex 42.848557 -6.989770 9.754133 + endloop + endfacet + facet normal -0.009882 0.999951 -0.000363 + outer loop + vertex 49.597340 9.991890 60.000000 + vertex 50.593201 9.982390 6.659721 + vertex 49.209751 9.968726 6.680157 + endloop + endfacet + facet normal 0.040266 0.999189 0.000574 + outer loop + vertex 49.597340 9.991890 60.000000 + vertex 51.205368 9.927089 60.000000 + vertex 50.593201 9.982390 6.659721 + endloop + endfacet + facet normal -0.495631 -0.868533 -0.000765 + outer loop + vertex 45.000000 -8.660254 60.000000 + vertex 44.293537 -8.211959 8.750070 + vertex 45.840042 -9.093665 7.829767 + endloop + endfacet + facet normal -0.137559 0.990494 0.000052 + outer loop + vertex 47.999744 9.797907 60.000000 + vertex 49.209751 9.968726 6.680157 + vertex 48.043625 9.806763 6.915736 + endloop + endfacet + facet normal -0.568064 -0.822984 0.000632 + outer loop + vertex 45.000000 -8.660254 60.000000 + vertex 43.675545 -7.746049 60.000000 + vertex 44.293537 -8.211959 8.750070 + endloop + endfacet + facet normal -0.249430 0.968393 -0.000045 + outer loop + vertex 47.999744 9.797907 60.000000 + vertex 48.043625 9.806763 6.915736 + vertex 46.975643 9.531698 7.290181 + endloop + endfacet + facet normal -0.120537 0.992709 0.000445 + outer loop + vertex 47.999744 9.797907 60.000000 + vertex 49.597340 9.991890 60.000000 + vertex 49.209751 9.968726 6.680157 + endloop + endfacet + facet normal -0.368876 0.929478 -0.000450 + outer loop + vertex 46.453953 9.350163 60.000000 + vertex 46.975643 9.531698 7.290181 + vertex 45.668846 9.013384 7.922052 + endloop + endfacet + facet normal -0.335392 -0.942078 -0.000685 + outer loop + vertex 46.453953 -9.350163 60.000000 + vertex 45.840042 -9.093665 7.829767 + vertex 47.483089 -9.678077 7.094705 + endloop + endfacet + facet normal -0.278218 0.960518 0.000554 + outer loop + vertex 46.453953 9.350163 60.000000 + vertex 47.999744 9.797907 60.000000 + vertex 46.975643 9.531698 7.290181 + endloop + endfacet + facet normal -0.428692 -0.903451 0.000603 + outer loop + vertex 46.453953 -9.350163 60.000000 + vertex 45.000000 -8.660254 60.000000 + vertex 45.840042 -9.093665 7.829767 + endloop + endfacet + facet normal -0.502281 0.864704 -0.000588 + outer loop + vertex 45.000000 8.660254 60.000000 + vertex 45.668846 9.013384 7.922052 + vertex 44.321312 8.231192 8.731980 + endloop + endfacet + facet normal -0.428692 0.903451 0.000620 + outer loop + vertex 45.000000 8.660254 60.000000 + vertex 46.453953 9.350163 60.000000 + vertex 45.668846 9.013384 7.922052 + endloop + endfacet + facet normal -0.641328 0.767266 -0.000818 + outer loop + vertex 43.675545 7.746049 60.000000 + vertex 44.321312 8.231192 8.731980 + vertex 42.912872 7.054971 9.707079 + endloop + endfacet + facet normal -0.278218 -0.960518 0.000541 + outer loop + vertex 47.999744 -9.797907 60.000000 + vertex 46.453953 -9.350163 60.000000 + vertex 47.483089 -9.678077 7.094705 + endloop + endfacet + facet normal -0.568064 0.822984 0.000632 + outer loop + vertex 43.675545 7.746049 60.000000 + vertex 45.000000 8.660254 60.000000 + vertex 44.321312 8.231192 8.731980 + endloop + endfacet + facet normal -0.190108 -0.981763 -0.000367 + outer loop + vertex 47.999744 -9.797907 60.000000 + vertex 47.483089 -9.678077 7.094705 + vertex 48.724289 -9.918295 6.754808 + endloop + endfacet + facet normal -0.771686 0.636003 -0.000748 + outer loop + vertex 42.514893 6.631227 60.000000 + vertex 42.912872 7.054971 9.707079 + vertex 41.725323 5.615130 10.605202 + endloop + endfacet + facet normal -0.692725 0.721202 0.000595 + outer loop + vertex 42.514893 6.631227 60.000000 + vertex 43.675545 7.746049 60.000000 + vertex 42.912872 7.054971 9.707079 + endloop + endfacet + facet normal -0.120537 -0.992709 0.000604 + outer loop + vertex 49.597340 -9.991890 60.000000 + vertex 47.999744 -9.797907 60.000000 + vertex 48.724289 -9.918295 6.754808 + endloop + endfacet + facet normal -0.085718 -0.996319 0.000028 + outer loop + vertex 49.597340 -9.991890 60.000000 + vertex 48.724289 -9.918295 6.754808 + vertex 49.562771 -9.990437 6.647644 + endloop + endfacet + facet normal -0.000150 -1.000000 -0.000027 + outer loop + vertex 49.597340 -9.991890 60.000000 + vertex 49.562771 -9.990437 6.647644 + vertex 50.434238 -9.990567 6.647448 + endloop + endfacet + facet normal -0.869310 0.494268 -0.000413 + outer loop + vertex 41.548100 5.344658 60.000000 + vertex 41.725323 5.615130 10.605202 + vertex 40.944370 4.242121 11.225168 + endloop + endfacet + facet normal -0.799443 0.600742 0.000421 + outer loop + vertex 41.548100 5.344658 60.000000 + vertex 42.514893 6.631227 60.000000 + vertex 41.725323 5.615130 10.605202 + endloop + endfacet + facet normal 0.040266 -0.999189 0.000607 + outer loop + vertex 51.205368 -9.927089 60.000000 + vertex 49.597340 -9.991890 60.000000 + vertex 50.434238 -9.990567 6.647448 + endloop + endfacet + facet normal 0.095514 -0.995428 -0.000196 + outer loop + vertex 51.205368 -9.927089 60.000000 + vertex 50.434238 -9.990567 6.647448 + vertex 51.472881 -9.890936 6.794806 + endloop + endfacet + facet normal 0.201349 -0.979520 0.000347 + outer loop + vertex 51.205368 -9.927089 60.000000 + vertex 51.472881 -9.890936 6.794806 + vertex 52.549927 -9.669430 7.106485 + endloop + endfacet + facet normal -0.936879 0.349654 -0.000458 + outer loop + vertex 40.800205 3.919666 60.000000 + vertex 40.944370 4.242121 11.225168 + vertex 40.380032 2.730610 11.685194 + endloop + endfacet + facet normal -0.885456 0.464723 0.000455 + outer loop + vertex 40.800205 3.919666 60.000000 + vertex 41.548100 5.344658 60.000000 + vertex 40.944370 4.242121 11.225168 + endloop + endfacet + facet normal 0.200026 -0.979791 0.000312 + outer loop + vertex 52.782173 -9.605181 60.000000 + vertex 51.205368 -9.927089 60.000000 + vertex 52.549927 -9.669430 7.106485 + endloop + endfacet + facet normal 0.321649 -0.946859 -0.000262 + outer loop + vertex 52.782173 -9.605181 60.000000 + vertex 52.549927 -9.669430 7.106485 + vertex 53.865475 -9.222695 7.677362 + endloop + endfacet + facet normal 0.000000 0.995974 0.089639 + outer loop + vertex 180.000000 11.807155 2.142683 + vertex 0.000000 12.000000 -0.000000 + vertex 0.000000 11.807155 2.142683 + endloop + endfacet + facet normal 0.000000 0.995974 0.089639 + outer loop + vertex 180.000000 11.807155 2.142683 + vertex 180.000000 12.000000 -0.000000 + vertex 0.000000 12.000000 -0.000000 + endloop + endfacet + facet normal 0.000000 0.963963 0.266037 + outer loop + vertex 180.000000 11.234818 4.216498 + vertex 0.000000 11.807155 2.142683 + vertex 0.000000 11.234818 4.216498 + endloop + endfacet + facet normal 0.000000 0.963963 0.266037 + outer loop + vertex 180.000000 11.234818 4.216498 + vertex 180.000000 11.807155 2.142683 + vertex 0.000000 11.807155 2.142683 + endloop + endfacet + facet normal 0.001350 0.900968 0.433883 + outer loop + vertex 50.593201 9.982390 6.659721 + vertex 0.000000 11.234818 4.216498 + vertex 0.000000 10.301386 6.154791 + endloop + endfacet + facet normal 0.000000 0.889892 0.456170 + outer loop + vertex 50.593201 9.982390 6.659721 + vertex 180.000000 11.234818 4.216498 + vertex 0.000000 11.234818 4.216498 + endloop + endfacet + facet normal -0.000184 0.836995 0.547211 + outer loop + vertex 49.209751 9.968726 6.680157 + vertex 50.593201 9.982390 6.659721 + vertex 0.000000 10.301386 6.154791 + endloop + endfacet + facet normal -0.000454 0.825086 0.565007 + outer loop + vertex 48.043625 9.806763 6.915736 + vertex 49.209751 9.968726 6.680157 + vertex 0.000000 10.301386 6.154791 + endloop + endfacet + facet normal -0.000981 0.809017 0.587785 + outer loop + vertex 0.000000 9.036858 7.895265 + vertex 48.043625 9.806763 6.915736 + vertex 0.000000 10.301386 6.154791 + endloop + endfacet + facet normal -0.000898 0.807141 0.590358 + outer loop + vertex 46.975643 9.531698 7.290181 + vertex 48.043625 9.806763 6.915736 + vertex 0.000000 9.036858 7.895265 + endloop + endfacet + facet normal 0.000025 0.773134 0.634243 + outer loop + vertex 45.668846 9.013384 7.922052 + vertex 46.975643 9.531698 7.290181 + vertex 0.000000 9.036858 7.895265 + endloop + endfacet + facet normal -0.000528 0.900969 0.433884 + outer loop + vertex 180.000000 10.301386 6.154791 + vertex 180.000000 11.234818 4.216498 + vertex 50.593201 9.982390 6.659721 + endloop + endfacet + facet normal 0.000177 0.824306 0.566145 + outer loop + vertex 180.000000 10.301386 6.154791 + vertex 50.593201 9.982390 6.659721 + vertex 52.044731 9.788722 6.941248 + endloop + endfacet + facet normal -0.001083 0.691062 0.722794 + outer loop + vertex 0.000000 7.481878 9.381978 + vertex 44.321312 8.231192 8.731980 + vertex 0.000000 9.036858 7.895265 + endloop + endfacet + facet normal 0.000371 0.809017 0.587785 + outer loop + vertex 180.000000 9.036858 7.895265 + vertex 180.000000 10.301386 6.154791 + vertex 52.044731 9.788722 6.941248 + endloop + endfacet + facet normal -0.000096 0.759849 0.650099 + outer loop + vertex 180.000000 9.036858 7.895265 + vertex 53.213177 9.469715 7.370516 + vertex 54.842255 8.749433 8.212639 + endloop + endfacet + facet normal 0.000275 0.802992 0.595989 + outer loop + vertex 180.000000 9.036858 7.895265 + vertex 52.044731 9.788722 6.941248 + vertex 53.213177 9.469715 7.370516 + endloop + endfacet + facet normal -0.000842 0.550897 0.834573 + outer loop + vertex 0.000000 5.686424 10.567146 + vertex 42.912872 7.054971 9.707079 + vertex 0.000000 7.481878 9.381978 + endloop + endfacet + facet normal 0.000246 0.691063 0.722795 + outer loop + vertex 180.000000 7.481878 9.381978 + vertex 180.000000 9.036858 7.895265 + vertex 54.842255 8.749433 8.212639 + endloop + endfacet + facet normal -0.000914 0.393025 0.919527 + outer loop + vertex 40.944370 4.242121 11.225168 + vertex 0.000000 5.686424 10.567146 + vertex 0.000000 3.708204 11.412678 + endloop + endfacet + facet normal 0.000378 0.550897 0.834573 + outer loop + vertex 180.000000 5.686424 10.567146 + vertex 180.000000 7.481878 9.381978 + vertex 57.662033 6.425983 10.134433 + endloop + endfacet + facet normal -0.000133 0.488565 0.872527 + outer loop + vertex 180.000000 5.686424 10.567146 + vertex 57.662033 6.425983 10.134433 + vertex 58.490032 5.283877 10.774073 + endloop + endfacet + facet normal -0.001192 0.222521 0.974927 + outer loop + vertex 0.000000 1.610799 11.891397 + vertex 40.380032 2.730610 11.685194 + vertex 0.000000 3.708204 11.412678 + endloop + endfacet + facet normal -0.000100 0.291849 0.956464 + outer loop + vertex 180.000000 3.708204 11.412678 + vertex 59.141815 4.053054 11.294811 + vertex 59.556835 2.943959 11.633276 + endloop + endfacet + facet normal 0.000214 0.389740 0.920925 + outer loop + vertex 180.000000 3.708204 11.412678 + vertex 58.490032 5.283877 10.774073 + vertex 59.141815 4.053054 11.294811 + endloop + endfacet + facet normal 0.000264 0.393025 0.919528 + outer loop + vertex 180.000000 3.708204 11.412678 + vertex 180.000000 5.686424 10.567146 + vertex 58.490032 5.283877 10.774073 + endloop + endfacet + facet normal -0.000925 0.044865 0.998993 + outer loop + vertex 0.000000 -0.538378 11.987917 + vertex 40.055984 1.056659 11.953387 + vertex 0.000000 1.610799 11.891397 + endloop + endfacet + facet normal 0.000001 0.067182 0.997741 + outer loop + vertex 180.000000 1.610799 11.891397 + vertex 59.869751 1.608730 11.891677 + vertex 60.000000 -0.000000 12.000000 + endloop + endfacet + facet normal -0.000001 0.190000 0.981784 + outer loop + vertex 180.000000 1.610799 11.891397 + vertex 59.556835 2.943959 11.633276 + vertex 59.869751 1.608730 11.891677 + endloop + endfacet + facet normal 0.000374 0.222521 0.974928 + outer loop + vertex 180.000000 1.610799 11.891397 + vertex 180.000000 3.708204 11.412678 + vertex 59.556835 2.943959 11.633276 + endloop + endfacet + facet normal -0.000981 -0.134233 0.990949 + outer loop + vertex 40.215744 -2.066004 11.820813 + vertex 0.000000 -0.538378 11.987917 + vertex 0.000000 -2.670251 11.699135 + endloop + endfacet + facet normal 0.000302 0.044865 0.998993 + outer loop + vertex 180.000000 -0.538378 11.987917 + vertex 180.000000 1.610799 11.891397 + vertex 60.000000 -0.000000 12.000000 + endloop + endfacet + facet normal -0.000221 -0.071697 0.997426 + outer loop + vertex 180.000000 -0.538378 11.987917 + vertex 60.000000 -0.000000 12.000000 + vertex 59.851536 -1.716760 11.876562 + endloop + endfacet + facet normal 0.000365 -0.220707 0.975340 + outer loop + vertex 40.534901 -3.226747 11.558032 + vertex 40.215744 -2.066004 11.820813 + vertex 0.000000 -2.670251 11.699135 + endloop + endfacet + facet normal -0.000932 -0.309017 0.951056 + outer loop + vertex 0.000000 -4.716300 11.034333 + vertex 40.534901 -3.226747 11.558032 + vertex 0.000000 -2.670251 11.699135 + endloop + endfacet + facet normal -0.000360 -0.322951 0.946416 + outer loop + vertex 41.074001 -4.508494 11.120858 + vertex 40.534901 -3.226747 11.558032 + vertex 0.000000 -4.716300 11.034333 + endloop + endfacet + facet normal 0.000398 -0.134233 0.990950 + outer loop + vertex 180.000000 -2.670251 11.699135 + vertex 180.000000 -0.538378 11.987917 + vertex 59.851536 -1.716760 11.876562 + endloop + endfacet + facet normal -0.000156 -0.201912 0.979404 + outer loop + vertex 180.000000 -2.670251 11.699135 + vertex 59.851536 -1.716760 11.876562 + vertex 59.500378 -3.121356 11.586938 + endloop + endfacet + facet normal -0.001156 -0.473868 0.880595 + outer loop + vertex 0.000000 -6.610764 10.014879 + vertex 41.782188 -5.698035 10.560890 + vertex 0.000000 -4.716300 11.034333 + endloop + endfacet + facet normal 0.000043 -0.453768 0.891120 + outer loop + vertex 180.000000 -4.716300 11.034333 + vertex 58.777405 -4.791364 11.001946 + vertex 57.940296 -6.078792 10.346415 + endloop + endfacet + facet normal -0.000047 -0.330578 0.943779 + outer loop + vertex 180.000000 -4.716300 11.034333 + vertex 59.500378 -3.121356 11.586938 + vertex 58.777405 -4.791364 11.001946 + endloop + endfacet + facet normal 0.000271 -0.309017 0.951057 + outer loop + vertex 180.000000 -4.716300 11.034333 + vertex 180.000000 -2.670251 11.699135 + vertex 59.500378 -3.121356 11.586938 + endloop + endfacet + facet normal -0.000757 -0.623490 0.781831 + outer loop + vertex 0.000000 -8.292751 8.673538 + vertex 42.848557 -6.989770 9.754133 + vertex 0.000000 -6.610764 10.014879 + endloop + endfacet + facet normal 0.000327 -0.473869 0.880596 + outer loop + vertex 180.000000 -6.610764 10.014879 + vertex 180.000000 -4.716300 11.034333 + vertex 57.940296 -6.078792 10.346415 + endloop + endfacet + facet normal -0.001047 -0.753071 0.657939 + outer loop + vertex 0.000000 -9.708204 7.053423 + vertex 45.840042 -9.093665 7.829767 + vertex 0.000000 -8.292751 8.673538 + endloop + endfacet + facet normal 0.000153 -0.740550 0.672002 + outer loop + vertex 180.000000 -8.292751 8.673538 + vertex 55.217609 -8.530917 8.439399 + vertex 53.865475 -9.222695 7.677362 + endloop + endfacet + facet normal 0.000391 -0.623490 0.781831 + outer loop + vertex 180.000000 -8.292751 8.673538 + vertex 180.000000 -6.610764 10.014879 + vertex 56.669765 -7.450787 9.406688 + endloop + endfacet + facet normal 0.000016 -0.816610 0.577190 + outer loop + vertex 48.724289 -9.918295 6.754808 + vertex 47.483089 -9.678077 7.094705 + vertex 0.000000 -9.708204 7.053423 + endloop + endfacet + facet normal -0.000162 -0.830133 0.557565 + outer loop + vertex 49.562771 -9.990437 6.647644 + vertex 48.724289 -9.918295 6.754808 + vertex 0.000000 -9.708204 7.053423 + endloop + endfacet + facet normal -0.000019 -0.868552 0.495599 + outer loop + vertex 0.000000 -10.811626 5.206605 + vertex 50.434238 -9.990567 6.647448 + vertex 49.562771 -9.990437 6.647644 + endloop + endfacet + facet normal -0.000689 -0.858449 0.512899 + outer loop + vertex 0.000000 -10.811626 5.206605 + vertex 49.562771 -9.990437 6.647644 + vertex 0.000000 -9.708204 7.053423 + endloop + endfacet + facet normal 0.000052 -0.828587 0.559861 + outer loop + vertex 180.000000 -9.708204 7.053423 + vertex 51.472881 -9.890936 6.794806 + vertex 50.434238 -9.990567 6.647448 + endloop + endfacet + facet normal -0.000007 -0.815108 0.579309 + outer loop + vertex 180.000000 -9.708204 7.053423 + vertex 52.549927 -9.669430 7.106485 + vertex 51.472881 -9.890936 6.794806 + endloop + endfacet + facet normal 0.000017 -0.787550 0.616251 + outer loop + vertex 180.000000 -9.708204 7.053423 + vertex 53.865475 -9.222695 7.677362 + vertex 52.549927 -9.669430 7.106485 + endloop + endfacet + facet normal 0.000356 -0.753071 0.657939 + outer loop + vertex 180.000000 -9.708204 7.053423 + vertex 180.000000 -8.292751 8.673538 + vertex 53.865475 -9.222695 7.677362 + endloop + endfacet + facet normal 0.000000 -0.868835 0.495102 + outer loop + vertex 180.000000 -10.811626 5.206605 + vertex 50.434238 -9.990567 6.647448 + vertex 0.000000 -10.811626 5.206605 + endloop + endfacet + facet normal 0.000264 -0.858449 0.512899 + outer loop + vertex 180.000000 -10.811626 5.206605 + vertex 180.000000 -9.708204 7.053423 + vertex 50.434238 -9.990567 6.647448 + endloop + endfacet + facet normal 0.000000 -0.936235 0.351375 + outer loop + vertex 180.000000 -11.567554 3.192442 + vertex 0.000000 -10.811626 5.206605 + vertex 0.000000 -11.567554 3.192442 + endloop + endfacet + facet normal 0.000000 -0.936235 0.351375 + outer loop + vertex 180.000000 -11.567554 3.192442 + vertex 180.000000 -10.811626 5.206605 + vertex 0.000000 -10.811626 5.206605 + endloop + endfacet + facet normal 0.000000 -0.983930 0.178557 + outer loop + vertex 180.000000 -11.951692 1.075672 + vertex 0.000000 -11.567554 3.192442 + vertex 0.000000 -11.951692 1.075672 + endloop + endfacet + facet normal 0.000000 -0.983930 0.178557 + outer loop + vertex 180.000000 -11.951692 1.075672 + vertex 180.000000 -11.567554 3.192442 + vertex 0.000000 -11.567554 3.192442 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 180.000000 -11.951692 -1.075672 + vertex 0.000000 -11.951692 1.075672 + vertex 0.000000 -11.951692 -1.075672 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 180.000000 -11.951692 -1.075672 + vertex 180.000000 -11.951692 1.075672 + vertex 0.000000 -11.951692 1.075672 + endloop + endfacet + facet normal -0.000000 -0.983930 -0.178557 + outer loop + vertex 180.000000 -11.567554 -3.192442 + vertex 0.000000 -11.951692 -1.075672 + vertex 0.000000 -11.567554 -3.192442 + endloop + endfacet + facet normal 0.000000 -0.983930 -0.178557 + outer loop + vertex 180.000000 -11.567554 -3.192442 + vertex 180.000000 -11.951692 -1.075672 + vertex 0.000000 -11.951692 -1.075672 + endloop + endfacet + facet normal -0.000000 -0.936235 -0.351375 + outer loop + vertex 180.000000 -10.811626 -5.206605 + vertex 0.000000 -11.567554 -3.192442 + vertex 0.000000 -10.811626 -5.206605 + endloop + endfacet + facet normal 0.000000 -0.936235 -0.351375 + outer loop + vertex 180.000000 -10.811626 -5.206605 + vertex 180.000000 -11.567554 -3.192442 + vertex 0.000000 -11.567554 -3.192442 + endloop + endfacet + facet normal 0.000000 -0.858449 -0.512899 + outer loop + vertex 180.000000 -9.708204 -7.053423 + vertex 180.000000 -10.811626 -5.206605 + vertex 0.000000 -10.811626 -5.206605 + endloop + endfacet + facet normal -0.000000 -0.858449 -0.512899 + outer loop + vertex 180.000000 -9.708204 -7.053423 + vertex 0.000000 -10.811626 -5.206605 + vertex 0.000000 -9.708204 -7.053423 + endloop + endfacet + facet normal 0.000000 -0.753071 -0.657939 + outer loop + vertex 180.000000 -8.292751 -8.673538 + vertex 180.000000 -9.708204 -7.053423 + vertex 0.000000 -9.708204 -7.053423 + endloop + endfacet + facet normal -0.000000 -0.753071 -0.657939 + outer loop + vertex 180.000000 -8.292751 -8.673538 + vertex 0.000000 -9.708204 -7.053423 + vertex 0.000000 -8.292751 -8.673538 + endloop + endfacet + facet normal 0.000000 -0.623490 -0.781831 + outer loop + vertex 180.000000 -6.610764 -10.014879 + vertex 180.000000 -8.292751 -8.673538 + vertex 0.000000 -8.292751 -8.673538 + endloop + endfacet + facet normal -0.000000 -0.623490 -0.781831 + outer loop + vertex 180.000000 -6.610764 -10.014879 + vertex 0.000000 -8.292751 -8.673538 + vertex 0.000000 -6.610764 -10.014879 + endloop + endfacet + facet normal 0.000000 -0.473869 -0.880596 + outer loop + vertex 180.000000 -4.716300 -11.034333 + vertex 180.000000 -6.610764 -10.014879 + vertex 0.000000 -6.610764 -10.014879 + endloop + endfacet + facet normal -0.000000 -0.473869 -0.880596 + outer loop + vertex 180.000000 -4.716300 -11.034333 + vertex 0.000000 -6.610764 -10.014879 + vertex 0.000000 -4.716300 -11.034333 + endloop + endfacet + facet normal 0.000000 -0.309017 -0.951056 + outer loop + vertex 180.000000 -2.670251 -11.699135 + vertex 180.000000 -4.716300 -11.034333 + vertex 0.000000 -4.716300 -11.034333 + endloop + endfacet + facet normal -0.000000 -0.309017 -0.951056 + outer loop + vertex 180.000000 -2.670251 -11.699135 + vertex 0.000000 -4.716300 -11.034333 + vertex 0.000000 -2.670251 -11.699135 + endloop + endfacet + facet normal 0.000000 -0.134233 -0.990950 + outer loop + vertex 180.000000 -0.538378 -11.987917 + vertex 180.000000 -2.670251 -11.699135 + vertex 0.000000 -2.670251 -11.699135 + endloop + endfacet + facet normal -0.000000 -0.134233 -0.990950 + outer loop + vertex 180.000000 -0.538378 -11.987917 + vertex 0.000000 -2.670251 -11.699135 + vertex 0.000000 -0.538378 -11.987917 + endloop + endfacet + facet normal 0.000000 0.044865 -0.998993 + outer loop + vertex 180.000000 1.610799 -11.891397 + vertex 180.000000 -0.538378 -11.987917 + vertex 0.000000 -0.538378 -11.987917 + endloop + endfacet + facet normal 0.000000 0.044865 -0.998993 + outer loop + vertex 180.000000 1.610799 -11.891397 + vertex 0.000000 -0.538378 -11.987917 + vertex 0.000000 1.610799 -11.891397 + endloop + endfacet + facet normal 0.000000 0.222521 -0.974928 + outer loop + vertex 180.000000 3.708204 -11.412678 + vertex 0.000000 1.610799 -11.891397 + vertex 0.000000 3.708204 -11.412678 + endloop + endfacet + facet normal 0.000000 0.222521 -0.974928 + outer loop + vertex 180.000000 3.708204 -11.412678 + vertex 180.000000 1.610799 -11.891397 + vertex 0.000000 1.610799 -11.891397 + endloop + endfacet + facet normal 0.000000 0.393025 -0.919528 + outer loop + vertex 180.000000 5.686424 -10.567146 + vertex 0.000000 3.708204 -11.412678 + vertex 0.000000 5.686424 -10.567146 + endloop + endfacet + facet normal 0.000000 0.393025 -0.919528 + outer loop + vertex 180.000000 5.686424 -10.567146 + vertex 180.000000 3.708204 -11.412678 + vertex 0.000000 3.708204 -11.412678 + endloop + endfacet + facet normal 0.000000 0.550897 -0.834573 + outer loop + vertex 180.000000 7.481878 -9.381978 + vertex 0.000000 5.686424 -10.567146 + vertex 0.000000 7.481878 -9.381978 + endloop + endfacet + facet normal 0.000000 0.550897 -0.834573 + outer loop + vertex 180.000000 7.481878 -9.381978 + vertex 180.000000 5.686424 -10.567146 + vertex 0.000000 5.686424 -10.567146 + endloop + endfacet + facet normal 0.000000 0.691063 -0.722795 + outer loop + vertex 180.000000 9.036858 -7.895265 + vertex 0.000000 7.481878 -9.381978 + vertex 0.000000 9.036858 -7.895265 + endloop + endfacet + facet normal 0.000000 0.691063 -0.722795 + outer loop + vertex 180.000000 9.036858 -7.895265 + vertex 180.000000 7.481878 -9.381978 + vertex 0.000000 7.481878 -9.381978 + endloop + endfacet + facet normal 0.000000 0.809017 -0.587785 + outer loop + vertex 180.000000 10.301386 -6.154791 + vertex 0.000000 9.036858 -7.895265 + vertex 0.000000 10.301386 -6.154791 + endloop + endfacet + facet normal 0.000000 0.809017 -0.587785 + outer loop + vertex 180.000000 10.301386 -6.154791 + vertex 180.000000 9.036858 -7.895265 + vertex 0.000000 9.036858 -7.895265 + endloop + endfacet + facet normal 0.000000 0.900969 -0.433884 + outer loop + vertex 180.000000 11.234818 -4.216498 + vertex 0.000000 10.301386 -6.154791 + vertex 0.000000 11.234818 -4.216498 + endloop + endfacet + facet normal 0.000000 0.900969 -0.433884 + outer loop + vertex 180.000000 11.234818 -4.216498 + vertex 180.000000 10.301386 -6.154791 + vertex 0.000000 10.301386 -6.154791 + endloop + endfacet + facet normal 0.000000 0.963963 -0.266037 + outer loop + vertex 180.000000 11.807155 -2.142683 + vertex 0.000000 11.234818 -4.216498 + vertex 0.000000 11.807155 -2.142683 + endloop + endfacet + facet normal 0.000000 0.963963 -0.266037 + outer loop + vertex 180.000000 11.807155 -2.142683 + vertex 180.000000 11.234818 -4.216498 + vertex 0.000000 11.234818 -4.216498 + endloop + endfacet + facet normal 0.000000 0.995974 -0.089639 + outer loop + vertex 180.000000 12.000000 -0.000000 + vertex 0.000000 11.807155 -2.142683 + vertex 0.000000 12.000000 -0.000000 + endloop + endfacet + facet normal 0.000000 0.995974 -0.089639 + outer loop + vertex 180.000000 12.000000 -0.000000 + vertex 180.000000 11.807155 -2.142683 + vertex 0.000000 11.807155 -2.142683 + endloop + endfacet + facet normal -0.000091 0.587298 0.809371 + outer loop + vertex 56.448730 7.642896 9.251278 + vertex 57.662033 6.425983 10.134433 + vertex 180.000000 7.481878 9.381978 + endloop + endfacet + facet normal 0.000121 0.684477 0.729035 + outer loop + vertex 54.842255 8.749433 8.212639 + vertex 56.448730 7.642896 9.251278 + vertex 180.000000 7.481878 9.381978 + endloop + endfacet + facet normal -0.000038 0.719347 0.694650 + outer loop + vertex 44.321312 8.231192 8.731980 + vertex 45.668846 9.013384 7.922052 + vertex 0.000000 9.036858 7.895265 + endloop + endfacet + facet normal 0.000511 0.637855 0.770156 + outer loop + vertex 42.912872 7.054971 9.707079 + vertex 44.321312 8.231192 8.731980 + vertex 0.000000 7.481878 9.381978 + endloop + endfacet + facet normal 0.000130 0.529168 0.848517 + outer loop + vertex 41.725323 5.615130 10.605202 + vertex 42.912872 7.054971 9.707079 + vertex 0.000000 5.686424 10.567146 + endloop + endfacet + facet normal -0.000128 0.411591 0.911369 + outer loop + vertex 40.944370 4.242121 11.225168 + vertex 41.725323 5.615130 10.605202 + vertex 0.000000 5.686424 10.567146 + endloop + endfacet + facet normal 0.000587 0.290961 0.956735 + outer loop + vertex 40.380032 2.730610 11.685194 + vertex 40.944370 4.242121 11.225168 + vertex 0.000000 3.708204 11.412678 + endloop + endfacet + facet normal 0.000659 0.158074 0.987427 + outer loop + vertex 40.055984 1.056659 11.953387 + vertex 40.380032 2.730610 11.685194 + vertex 0.000000 1.610799 11.891397 + endloop + endfacet + facet normal 0.000038 0.020697 0.999786 + outer loop + vertex 40.015751 -0.561047 11.986877 + vertex 40.055984 1.056659 11.953387 + vertex 0.000000 -0.538378 11.987917 + endloop + endfacet + facet normal -0.000036 -0.109684 0.993966 + outer loop + vertex 40.215744 -2.066004 11.820813 + vertex 40.015751 -0.561047 11.986877 + vertex 0.000000 -0.538378 11.987917 + endloop + endfacet + facet normal 0.000248 -0.425791 0.904822 + outer loop + vertex 41.782188 -5.698035 10.560890 + vertex 41.074001 -4.508494 11.120858 + vertex 0.000000 -4.716300 11.034333 + endloop + endfacet + facet normal 0.000479 -0.529441 0.848346 + outer loop + vertex 42.848557 -6.989770 9.754133 + vertex 41.782188 -5.698035 10.560890 + vertex 0.000000 -6.610764 10.014879 + endloop + endfacet + facet normal -0.000177 -0.634911 0.772586 + outer loop + vertex 44.293537 -8.211959 8.750070 + vertex 42.848557 -6.989770 9.754133 + vertex 0.000000 -8.292751 8.673538 + endloop + endfacet + facet normal 0.000121 -0.721984 0.691909 + outer loop + vertex 45.840042 -9.093665 7.829767 + vertex 44.293537 -8.211959 8.750070 + vertex 0.000000 -8.292751 8.673538 + endloop + endfacet + facet normal -0.000044 -0.782803 0.622269 + outer loop + vertex 47.483089 -9.678077 7.094705 + vertex 45.840042 -9.093665 7.829767 + vertex 0.000000 -9.708204 7.053423 + endloop + endfacet + facet normal -0.000125 -0.667030 0.745031 + outer loop + vertex 56.669765 -7.450787 9.406688 + vertex 55.217609 -8.530917 8.439399 + vertex 180.000000 -8.292751 8.673538 + endloop + endfacet + facet normal -0.000221 -0.564951 0.825124 + outer loop + vertex 57.940296 -6.078792 10.346415 + vertex 56.669765 -7.450787 9.406688 + vertex 180.000000 -6.610764 10.014879 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 9.036858 -7.895265 + vertex 0.000000 7.481878 9.381978 + vertex 0.000000 11.234818 4.216498 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 11.234818 4.216498 + vertex 0.000000 7.481878 9.381978 + vertex 0.000000 10.301386 6.154791 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex 0.000000 5.686424 10.567146 + vertex 0.000000 7.481878 9.381978 + vertex 0.000000 3.708204 11.412678 + endloop + endfacet + facet normal -1.000000 -0.000000 -0.000000 + outer loop + vertex 0.000000 3.708204 11.412678 + vertex 0.000000 7.481878 9.381978 + vertex 0.000000 1.610799 11.891397 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 -11.951692 -1.075672 + vertex 0.000000 7.481878 9.381978 + vertex 0.000000 -10.811626 -5.206605 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 -9.708204 -7.053423 + vertex 0.000000 -4.716300 -11.034333 + vertex 0.000000 -8.292751 -8.673538 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.000000 -10.811626 5.206605 + vertex 0.000000 7.481878 9.381978 + vertex 0.000000 -11.951692 -1.075672 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 -8.292751 -8.673538 + vertex 0.000000 -4.716300 -11.034333 + vertex 0.000000 -6.610764 -10.014879 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 -10.811626 -5.206605 + vertex 0.000000 7.481878 9.381978 + vertex 0.000000 9.036858 -7.895265 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.000000 1.610799 11.891397 + vertex 0.000000 7.481878 9.381978 + vertex 0.000000 -10.811626 5.206605 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 7.481878 9.381978 + vertex 0.000000 9.036858 7.895265 + vertex 0.000000 10.301386 6.154791 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 -11.567554 -3.192442 + vertex 0.000000 -11.951692 -1.075672 + vertex 0.000000 -10.811626 -5.206605 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 -4.716300 -11.034333 + vertex 0.000000 -0.538378 -11.987917 + vertex 0.000000 -2.670251 -11.699135 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 -9.708204 -7.053423 + vertex 0.000000 -0.538378 -11.987917 + vertex 0.000000 -4.716300 -11.034333 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 -0.538378 -11.987917 + vertex 0.000000 3.708204 -11.412678 + vertex 0.000000 1.610799 -11.891397 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.000000 -11.567554 3.192442 + vertex 0.000000 -10.811626 5.206605 + vertex 0.000000 -11.951692 1.075672 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 -11.951692 1.075672 + vertex 0.000000 -10.811626 5.206605 + vertex 0.000000 -11.951692 -1.075672 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.000000 -9.708204 7.053423 + vertex 0.000000 -8.292751 8.673538 + vertex 0.000000 -10.811626 5.206605 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 -10.811626 -5.206605 + vertex 0.000000 9.036858 -7.895265 + vertex 0.000000 -9.708204 -7.053423 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 3.708204 -11.412678 + vertex 0.000000 9.036858 -7.895265 + vertex 0.000000 5.686424 -10.567146 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 5.686424 -10.567146 + vertex 0.000000 9.036858 -7.895265 + vertex 0.000000 7.481878 -9.381978 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 -9.708204 -7.053423 + vertex 0.000000 9.036858 -7.895265 + vertex 0.000000 -0.538378 -11.987917 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 -0.538378 -11.987917 + vertex 0.000000 9.036858 -7.895265 + vertex 0.000000 3.708204 -11.412678 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 9.036858 -7.895265 + vertex 0.000000 11.234818 -4.216498 + vertex 0.000000 10.301386 -6.154791 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.000000 -2.670251 11.699135 + vertex 0.000000 -0.538378 11.987917 + vertex 0.000000 -4.716300 11.034333 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.000000 -4.716300 11.034333 + vertex 0.000000 -0.538378 11.987917 + vertex 0.000000 -6.610764 10.014879 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.000000 -6.610764 10.014879 + vertex 0.000000 1.610799 11.891397 + vertex 0.000000 -8.292751 8.673538 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.000000 -8.292751 8.673538 + vertex 0.000000 1.610799 11.891397 + vertex 0.000000 -10.811626 5.206605 + endloop + endfacet + facet normal -1.000000 0.000000 -0.000000 + outer loop + vertex 0.000000 -0.538378 11.987917 + vertex 0.000000 1.610799 11.891397 + vertex 0.000000 -6.610764 10.014879 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 11.807155 -2.142683 + vertex 0.000000 11.807155 2.142683 + vertex 0.000000 12.000000 -0.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 11.234818 -4.216498 + vertex 0.000000 11.234818 4.216498 + vertex 0.000000 11.807155 -2.142683 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 9.036858 -7.895265 + vertex 0.000000 11.234818 4.216498 + vertex 0.000000 11.234818 -4.216498 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 11.807155 -2.142683 + vertex 0.000000 11.234818 4.216498 + vertex 0.000000 11.807155 2.142683 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 7.481878 9.381978 + vertex 180.000000 11.234818 4.216498 + vertex 180.000000 10.301386 6.154791 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 7.481878 9.381978 + vertex 180.000000 5.686424 10.567146 + vertex 180.000000 3.708204 11.412678 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 7.481878 9.381978 + vertex 180.000000 3.708204 11.412678 + vertex 180.000000 1.610799 11.891397 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 7.481878 9.381978 + vertex 180.000000 1.610799 11.891397 + vertex 180.000000 -6.610764 10.014879 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 7.481878 9.381978 + vertex 180.000000 -6.610764 10.014879 + vertex 180.000000 11.234818 4.216498 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 -4.716300 -11.034333 + vertex 180.000000 -9.708204 -7.053423 + vertex 180.000000 -8.292751 -8.673538 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 9.036858 7.895265 + vertex 180.000000 7.481878 9.381978 + vertex 180.000000 10.301386 6.154791 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 -4.716300 -11.034333 + vertex 180.000000 -8.292751 -8.673538 + vertex 180.000000 -6.610764 -10.014879 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 -11.951692 -1.075672 + vertex 180.000000 -11.567554 -3.192442 + vertex 180.000000 -10.811626 -5.206605 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 -0.538378 -11.987917 + vertex 180.000000 -4.716300 -11.034333 + vertex 180.000000 -2.670251 -11.699135 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 -0.538378 -11.987917 + vertex 180.000000 -9.708204 -7.053423 + vertex 180.000000 -4.716300 -11.034333 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 3.708204 -11.412678 + vertex 180.000000 -0.538378 -11.987917 + vertex 180.000000 1.610799 -11.891397 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 -10.811626 5.206605 + vertex 180.000000 -11.567554 3.192442 + vertex 180.000000 -11.951692 1.075672 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 -10.811626 5.206605 + vertex 180.000000 -11.951692 1.075672 + vertex 180.000000 -11.951692 -1.075672 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 -8.292751 8.673538 + vertex 180.000000 -9.708204 7.053423 + vertex 180.000000 -10.811626 5.206605 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 9.036858 -7.895265 + vertex 180.000000 -10.811626 -5.206605 + vertex 180.000000 -9.708204 -7.053423 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 9.036858 -7.895265 + vertex 180.000000 3.708204 -11.412678 + vertex 180.000000 5.686424 -10.567146 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 9.036858 -7.895265 + vertex 180.000000 5.686424 -10.567146 + vertex 180.000000 7.481878 -9.381978 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 9.036858 -7.895265 + vertex 180.000000 -9.708204 -7.053423 + vertex 180.000000 -0.538378 -11.987917 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 9.036858 -7.895265 + vertex 180.000000 -0.538378 -11.987917 + vertex 180.000000 3.708204 -11.412678 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 11.234818 -4.216498 + vertex 180.000000 9.036858 -7.895265 + vertex 180.000000 10.301386 -6.154791 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 -0.538378 11.987917 + vertex 180.000000 -2.670251 11.699135 + vertex 180.000000 -4.716300 11.034333 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 -0.538378 11.987917 + vertex 180.000000 -4.716300 11.034333 + vertex 180.000000 -6.610764 10.014879 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 1.610799 11.891397 + vertex 180.000000 -0.538378 11.987917 + vertex 180.000000 -6.610764 10.014879 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 11.807155 2.142683 + vertex 180.000000 11.807155 -2.142683 + vertex 180.000000 12.000000 -0.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 11.234818 4.216498 + vertex 180.000000 -6.610764 10.014879 + vertex 180.000000 -8.292751 8.673538 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 11.234818 4.216498 + vertex 180.000000 11.234818 -4.216498 + vertex 180.000000 11.807155 -2.142683 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 11.234818 4.216498 + vertex 180.000000 -11.951692 -1.075672 + vertex 180.000000 -10.811626 -5.206605 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 11.234818 4.216498 + vertex 180.000000 -8.292751 8.673538 + vertex 180.000000 -10.811626 5.206605 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 11.234818 4.216498 + vertex 180.000000 -10.811626 5.206605 + vertex 180.000000 -11.951692 -1.075672 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 11.234818 4.216498 + vertex 180.000000 -10.811626 -5.206605 + vertex 180.000000 9.036858 -7.895265 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 11.234818 4.216498 + vertex 180.000000 9.036858 -7.895265 + vertex 180.000000 11.234818 -4.216498 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 180.000000 11.234818 4.216498 + vertex 180.000000 11.807155 -2.142683 + vertex 180.000000 11.807155 2.142683 + endloop + endfacet +endsolid Mesh diff --git a/apps/cpu/Multiphase/backup/T-Junction.stl b/apps/cpu/Multiphase/backup/T-Junction.stl new file mode 100644 index 0000000000000000000000000000000000000000..87c59e91572cedafd98f2b21053d09011e80a623 Binary files /dev/null and b/apps/cpu/Multiphase/backup/T-Junction.stl differ diff --git a/apps/cpu/Multiphase/backup/Thermal - Cfg_file.txt b/apps/cpu/Multiphase/backup/Thermal - Cfg_file.txt new file mode 100644 index 0000000000000000000000000000000000000000..34aa746a2c05e1f6dbfa38631f84b5dd99c2b12c --- /dev/null +++ b/apps/cpu/Multiphase/backup/Thermal - Cfg_file.txt @@ -0,0 +1,72 @@ +pathname = d:/temp/Thermal +pathGeo = d:/Hesam/VirtualFluids/source/Applications/Multiphase +geoFile = FlowFocusingS2_Small.ast +#geoFile = T-Junction.ast +numOfThreads = 4 +availMem = 10e9 + +#Grid +#length = 50 50 50 +#length = 21 6 13 +#boundingBox = x1min x1max x2min x2max x3min x3max [mm] +#boundingBox = 0.5 219.5 -30 30 -30 30 +#boundingBox = -1 121 -30 30 -30 30 +#boundingBox = -32 128 -12 14 3 58 (FlowFocusingSS , FlowFocusingS) (X1 extendable until 128) +#blocknx = 10 13 11 +#boundingBox = 0.5 165.5 -17.5 17.5 -29.5 30.5 (FlowFocusing) +#blocknx = 11 7 10 +#boundingBox = -32 128 -12 14 -27 88 (FlowFocusingSL) +#blocknx = 10 13 5 +#boundingBox = 1 179 -21 21 -21 59 (T-Junction) +#blocknx = 8 7 8 +#boundingBox = -23 79 0 26 3 59 (FlowFocusingSq0-1) +#blocknx = 6 13 7 +#boundingBox = -23 179 0 26 3 59 (FlowFocusingSq2) +#blocknx = 6 13 7 +#boundingBox = -24 181 0 18 1 101 (FlowFocusingS2) +#blocknx = 5 9 10 + +#boundingBox = -24.5 180.5 2.5 4.5 1.5 64.5 (FlowFocusingS2_Small) +#blocknx = 5 2 9 + +boundingBox = 0.5 200.5 0.5 100.5 0.5 3.5 (Droplet test) +blocknx = 10 10 3 +dx = 1.0 +refineLevel = 0 + +#Simulation +uLB = 0.001 +uF2 = 0.001 +Re = 10 +#nuL = 3.3e-3 +nuL = 3.33e-5 +nuG = 3.33e-5 +Phase-field Relaxation = 0.500141 +#nuL = 0.16666 +#nuG = 0.16666 +densityRatio = 1.0495 +#densityRatio = 10.0 +sigma = 7.4e-4 +interfaceThickness = 3 +#radius = 10.0 (Droplet test) +#radius = -20.0 (FlowFocusingSS , FlowFocusingS) +radius = -5.0 (FlowFocusingSq) +#radius = 10.0 (FlowFocusing) +#radius = 20.0 (T-Junction) +contactAngle = 120.0 +gravity = -2.7e-4 +phi_L = 1.0 +phi_H = 4.0 +Mobility = 0.05 + + +logToFile = false + +newStart = true +restartStep = 100000 + +cpStart = 100000 +cpStep = 100000 + +outTime = 200 +endTime = 20000000 \ No newline at end of file diff --git a/apps/cpu/Multiphase/backup/Tube_jet.FCStd b/apps/cpu/Multiphase/backup/Tube_jet.FCStd new file mode 100644 index 0000000000000000000000000000000000000000..a496c4b14043a3d397f70a479205f7d23139c991 Binary files /dev/null and b/apps/cpu/Multiphase/backup/Tube_jet.FCStd differ diff --git a/apps/cpu/Multiphase/backup/Tube_jet.stl b/apps/cpu/Multiphase/backup/Tube_jet.stl new file mode 100644 index 0000000000000000000000000000000000000000..8b9fa2cb33db4762af84b2e7da4d46a01d3c0184 Binary files /dev/null and b/apps/cpu/Multiphase/backup/Tube_jet.stl differ diff --git a/apps/cpu/Multiphase/backup/Tube_jet1.FCStd b/apps/cpu/Multiphase/backup/Tube_jet1.FCStd new file mode 100644 index 0000000000000000000000000000000000000000..a009fabad2296f3a56ef31b8122ccb60341a76a6 Binary files /dev/null and b/apps/cpu/Multiphase/backup/Tube_jet1.FCStd differ diff --git a/apps/cpu/Multiphase/backup/Tube_jet1.stl b/apps/cpu/Multiphase/backup/Tube_jet1.stl new file mode 100644 index 0000000000000000000000000000000000000000..416bdd4d9e81be88dfc2164c97a67577812ebdd3 Binary files /dev/null and b/apps/cpu/Multiphase/backup/Tube_jet1.stl differ diff --git a/apps/cpu/Multiphase/backup/Tube_jet_s.stl b/apps/cpu/Multiphase/backup/Tube_jet_s.stl new file mode 100644 index 0000000000000000000000000000000000000000..8cdc56a34427f1dbea876038a43b0fea78de2d09 Binary files /dev/null and b/apps/cpu/Multiphase/backup/Tube_jet_s.stl differ diff --git a/apps/cpu/Multiphase/backup/aaaa.stl b/apps/cpu/Multiphase/backup/aaaa.stl new file mode 100644 index 0000000000000000000000000000000000000000..012423f0625912bb76dcae9c5040a1dcad1d2bda Binary files /dev/null and b/apps/cpu/Multiphase/backup/aaaa.stl differ diff --git a/apps/cpu/Multiphase/backup/dd.ast b/apps/cpu/Multiphase/backup/dd.ast new file mode 100644 index 0000000000000000000000000000000000000000..b95f8748a8bc6e4fdb3f94f61521a27fb392d073 --- /dev/null +++ b/apps/cpu/Multiphase/backup/dd.ast @@ -0,0 +1,198 @@ +solid Mesh + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 5.000000 -5.000000 + vertex 0.000000 -5.000000 -5.000000 + vertex 0.000000 5.000000 5.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 0.000000 -5.000000 -5.000000 + vertex 0.000000 -5.000000 5.000000 + vertex 0.000000 5.000000 5.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 20.000000 -5.000000 -5.000000 + vertex 0.000000 -5.000000 -5.000000 + vertex 20.000000 5.000000 -5.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 0.000000 -5.000000 -5.000000 + vertex 0.000000 5.000000 -5.000000 + vertex 20.000000 5.000000 -5.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 20.000000 5.000000 -5.000000 + vertex 0.000000 5.000000 -5.000000 + vertex 20.000000 5.000000 5.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 0.000000 5.000000 -5.000000 + vertex 0.000000 5.000000 5.000000 + vertex 20.000000 5.000000 5.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 0.000000 5.000000 5.000000 + vertex 0.000000 -5.000000 5.000000 + vertex 20.000000 5.000000 5.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 20.000000 5.000000 5.000000 + vertex 0.000000 -5.000000 5.000000 + vertex 20.000000 -5.000000 5.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 0.000000 -5.000000 5.000000 + vertex 0.000000 -5.000000 -5.000000 + vertex 20.000000 -5.000000 5.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 20.000000 -5.000000 5.000000 + vertex 0.000000 -5.000000 -5.000000 + vertex 20.000000 -5.000000 -5.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 20.000000 5.000000 5.000000 + vertex 20.000000 25.000000 25.000000 + vertex 20.000000 5.000000 -5.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 20.000000 5.000000 -5.000000 + vertex 20.000000 25.000000 25.000000 + vertex 20.000000 25.000000 -25.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 20.000000 25.000000 -25.000000 + vertex 20.000000 -25.000000 -25.000000 + vertex 20.000000 5.000000 -5.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 20.000000 -25.000000 -25.000000 + vertex 20.000000 -5.000000 -5.000000 + vertex 20.000000 5.000000 -5.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 20.000000 5.000000 5.000000 + vertex 20.000000 -5.000000 5.000000 + vertex 20.000000 25.000000 25.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 20.000000 -25.000000 -25.000000 + vertex 20.000000 -5.000000 5.000000 + vertex 20.000000 -5.000000 -5.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 20.000000 -5.000000 5.000000 + vertex 20.000000 -25.000000 25.000000 + vertex 20.000000 25.000000 25.000000 + endloop + endfacet + facet normal -1.000000 0.000000 0.000000 + outer loop + vertex 20.000000 -25.000000 -25.000000 + vertex 20.000000 -25.000000 25.000000 + vertex 20.000000 -5.000000 5.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 120.000000 -25.000000 -25.000000 + vertex 20.000000 -25.000000 -25.000000 + vertex 120.000000 25.000000 -25.000000 + endloop + endfacet + facet normal 0.000000 0.000000 -1.000000 + outer loop + vertex 20.000000 -25.000000 -25.000000 + vertex 20.000000 25.000000 -25.000000 + vertex 120.000000 25.000000 -25.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 20.000000 -25.000000 25.000000 + vertex 20.000000 -25.000000 -25.000000 + vertex 120.000000 -25.000000 25.000000 + endloop + endfacet + facet normal 0.000000 -1.000000 0.000000 + outer loop + vertex 120.000000 -25.000000 25.000000 + vertex 20.000000 -25.000000 -25.000000 + vertex 120.000000 -25.000000 -25.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 120.000000 25.000000 -25.000000 + vertex 20.000000 25.000000 -25.000000 + vertex 120.000000 25.000000 25.000000 + endloop + endfacet + facet normal 0.000000 1.000000 0.000000 + outer loop + vertex 20.000000 25.000000 -25.000000 + vertex 20.000000 25.000000 25.000000 + vertex 120.000000 25.000000 25.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 20.000000 25.000000 25.000000 + vertex 20.000000 -25.000000 25.000000 + vertex 120.000000 25.000000 25.000000 + endloop + endfacet + facet normal 0.000000 0.000000 1.000000 + outer loop + vertex 120.000000 25.000000 25.000000 + vertex 20.000000 -25.000000 25.000000 + vertex 120.000000 -25.000000 25.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 120.000000 -25.000000 -25.000000 + vertex 120.000000 25.000000 -25.000000 + vertex 120.000000 25.000000 25.000000 + endloop + endfacet + facet normal 1.000000 0.000000 0.000000 + outer loop + vertex 120.000000 -25.000000 25.000000 + vertex 120.000000 -25.000000 -25.000000 + vertex 120.000000 25.000000 25.000000 + endloop + endfacet +endsolid Mesh diff --git a/apps/cpu/Multiphase/backup/dd.stl b/apps/cpu/Multiphase/backup/dd.stl new file mode 100644 index 0000000000000000000000000000000000000000..c72bd5e4cc997a156f43cc526b38d7fb49077aa1 Binary files /dev/null and b/apps/cpu/Multiphase/backup/dd.stl differ diff --git a/src/basics/geometry3d/GbTriFaceMesh3D.cpp b/src/basics/geometry3d/GbTriFaceMesh3D.cpp index 9c098f14c802a5ac7fba4328d99e412cc6b453f4..3615cff63bba077b72f02280854531b9be34df2d 100644 --- a/src/basics/geometry3d/GbTriFaceMesh3D.cpp +++ b/src/basics/geometry3d/GbTriFaceMesh3D.cpp @@ -67,8 +67,8 @@ GbTriFaceMesh3D::~GbTriFaceMesh3D() /*======================================================================*/ void GbTriFaceMesh3D::init() { - nodes = NULL; - triangles = NULL; + //nodes = NULL; + //triangles = NULL; x1min = 0.0; x1max = 0.0; x1center = 0.0; @@ -787,7 +787,7 @@ bool GbTriFaceMesh3D::isPointInGbObject3D(const double &x1, const double &x2, co timer.start(); if (kdtreeSplitAlg == KDTREE_SAHPLIT) { UBLOG(logDEBUG3, "GbTriFaceMesh3D::calculateValues - build KdTree with SAHSplit"); - cout << "GbTriFaceMesh3D::calculateValues - build KdTree with SAHSplit" << std::endl; + //cout << "GbTriFaceMesh3D::calculateValues - build KdTree with SAHSplit" << std::endl; this->kdTree = new Kd::Tree<double>(*this, Kd::SAHSplit<double>()); } else if (kdtreeSplitAlg == KDTREE_SPATIALSPLIT) { UBLOG(logDEBUG3, "GbTriFaceMesh3D::calculateValues - build KdTree with SpatialMedianSplit"); @@ -795,7 +795,7 @@ bool GbTriFaceMesh3D::isPointInGbObject3D(const double &x1, const double &x2, co } else throw UbException(UB_EXARGS, "unknown kdtree split option)"); UBLOG(logDEBUG3, "GbTriFaceMesh3D::calculateValues - built kdTree in " << timer.stop() << "seconds"); - cout << "GbTriFaceMesh3D::calculateValues - built kdTree in " << timer.stop() << "seconds" << std::endl; + //cout << "GbTriFaceMesh3D::calculateValues - built kdTree in " << timer.stop() << "seconds" << std::endl; } // eigentlicher PIO-Test @@ -1005,48 +1005,44 @@ void GbTriFaceMesh3D::writeMeshPly(const std::string &filename) out << "3 " << (*triangles)[i].v1 << " " << (*triangles)[i].v2 << " " << (*triangles)[i].v3 << endl; } /*======================================================================*/ -void GbTriFaceMesh3D::readMeshFromSTLFile(string filename, bool removeRedundantNodes) +void GbTriFaceMesh3D::readMeshFromSTLFileASCII(string filename, bool removeRedundantNodes) { UBLOG(logDEBUG1, "GbTriFaceMesh3DCreator::readMeshFromSTLFile !!! Dieses Format hat leider redundante Knoten ..."); - UbFileInputASCII in(filename); - // this->nodes = new vector<GbTriFaceMesh3D::Vertex>; - // this->triangles = new vector<GbTriFaceMesh3D::TriFace>; - string dummy; - - double x, y, z; int nr = 0; - 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; + ifstream in(filename.c_str()); + if (!in.good()) { + (*nodes).clear(); + (*triangles).clear(); + UB_THROW(UbException(UB_EXARGS, "Can not open STL file: " + filename)); } + char title[80]; + std::string s0, s1; + float n0, n1, n2, f0, f1, f2, f3, f4, f5, f6, f7, f8; + in.read(title, 80); + while (!in.eof()) { + in >> s0; // facet || endsolid + if (s0 == "facet") { + in >> s1 >> n0 >> n1 >> n2; // normal x y z + in >> s0 >> s1; // outer loop + in >> s0 >> f0 >> f1 >> f2; // vertex x y z + in >> s0 >> f3 >> f4 >> f5; // vertex x y z + in >> s0 >> f6 >> f7 >> f8; // vertex x y z + in >> s0; // endloop + in >> s0; // endfacet + // Generate a new Triangle without Normal as 3 Vertices + nodes->push_back(GbTriFaceMesh3D::Vertex(f0, f1, f2)); + nodes->push_back(GbTriFaceMesh3D::Vertex(f3, f4, f5)); + nodes->push_back(GbTriFaceMesh3D::Vertex(f6, f7, f8)); + triangles->push_back(GbTriFaceMesh3D::TriFace(nr, nr + 1, nr + 2)); + nr += 3; + } else if (s0 == "endsolid") { + break; + } + } + in.close(); + if (removeRedundantNodes) { this->deleteRedundantNodes(); // dort wird autoamtisch calculateValues() aufgerufen } else { @@ -1056,13 +1052,11 @@ void GbTriFaceMesh3D::readMeshFromSTLFile(string filename, bool removeRedundantN /*======================================================================*/ void GbTriFaceMesh3D::readMeshFromSTLFileBinary(string filename, bool removeRedundantNodes) { - // vector<GbTriFaceMesh3D::Vertex> *nodes = new vector<GbTriFaceMesh3D::Vertex>; - // vector<GbTriFaceMesh3D::TriFace> *triangles = new vector<GbTriFaceMesh3D::TriFace>; int nr = 0; FILE *f = fopen(filename.c_str(), "rb"); if (!f) { - delete nodes; - delete triangles; + (*nodes).clear(); + (*triangles).clear(); UB_THROW(UbException(UB_EXARGS, "Can not open STL file: " + filename)); } char title[80]; diff --git a/src/basics/geometry3d/GbTriFaceMesh3D.h b/src/basics/geometry3d/GbTriFaceMesh3D.h index 7f574bdf0ca8ef4f5e1027e8021d6b3ad939c3f8..eb7fc1a9f2119493287052d6a593e39a4e967e9d 100644 --- a/src/basics/geometry3d/GbTriFaceMesh3D.h +++ b/src/basics/geometry3d/GbTriFaceMesh3D.h @@ -269,7 +269,7 @@ public: this->transX2 = transX2; this->transX3 = transX3; } - void readMeshFromSTLFile(std::string filename, bool removeRedundantNodes); + void readMeshFromSTLFileASCII(std::string filename, bool removeRedundantNodes); void readMeshFromSTLFileBinary(std::string filename, bool removeRedundantNodes); double getX1Minimum() override @@ -344,7 +344,7 @@ public: void rotateAroundPoint(const double &px1, const double &px2, const double &px3, const double &alpha, const double &beta, const double &gamma); void translate(const double &x1, const double &x2, const double &x3) override; - void reflectAcrossXYLine(const double &alpha); + //void reflectAcrossXYLine(const double &alpha); bool isPointInGbObject3D(const double &x1, const double &x2, const double &x3) override; bool isPointInGbObject3D(const double &x1, const double &x2, const double &x3, int counter); @@ -378,8 +378,8 @@ protected: KDTREE_SPLITAGORITHM kdtreeSplitAlg; void init(); - std::vector<Vertex> *nodes; - std::vector<TriFace> *triangles; + std::vector<Vertex> * nodes; + std::vector<TriFace> * triangles; // for transfer std::string filename; bool transferViaFilename{ false }; diff --git a/src/cpu/VirtualFluids.h b/src/cpu/VirtualFluids.h index f90e05e07a78f1376caea529480e2e050de70c0c..0a666a932f8b3e3fba0e5f24d5220becb603b564 100644 --- a/src/cpu/VirtualFluids.h +++ b/src/cpu/VirtualFluids.h @@ -133,6 +133,10 @@ #include <BoundaryConditions/SimpleSlipBCAlgorithm.h> #include <BoundaryConditions/PowellEyringModelNoSlipBCAlgorithm.h> #include <BoundaryConditions/BinghamModelVelocityBCAlgorithm.h> +#include <BoundaryConditions/NoSlipBCAlgorithmMultiphase.h> +#include <BoundaryConditions/NonReflectingOutflowBCAlgorithmMultiphase.h> +#include <BoundaryConditions/VelocityBCAdapterMultiphase.h> +#include <BoundaryConditions/VelocityBCAlgorithmMultiphase.h> #include <Connectors/Block3DConnector.h> #include <Connectors/Block3DConnectorFactory.h> @@ -231,6 +235,7 @@ #include <LBM/ThixotropyInterpolationProcessor.h> #include <LBM/RheologyK17LBMKernel.h> #include <LBM/PowellEyringModelLBMKernel.h> +#include <LBM/MultiphaseCumulantLBMKernel.h> @@ -322,6 +327,9 @@ #include <CheckRatioBlockVisitor.h> #include <SpongeLayerBlockVisitor.h> #include <ZoltanPartitioningGridVisitor.h> +#include <Visitors/SetKernelBlockVisitorMultiphase.h> +#include <Visitors/BoundaryConditionsBlockVisitorMultiphase.h> +#include <Visitors/InitDistributionsBlockVisitorMultiphase.h> #include <RefineAroundGbObjectHelper.h> #include <Visitors/RefineCrossAndInsideGbObjectHelper.h> diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.cpp index 61b427e323dce214240f439eb0ff45c62029e05f..69543bc6dce034c9c878711013d0297180c3d99f 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.cpp +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.cpp @@ -65,7 +65,20 @@ void BCAlgorithm::setCompressible(bool c) } ////////////////////////////////////////////////////////////////////////// void BCAlgorithm::setCollFactor(LBMReal cf) { collFactor = cf; } - +////////////////////////////////////////////////////////////////////////// +void BCAlgorithm::setCollFactorL(LBMReal cf) { collFactorL = cf; } +////////////////////////////////////////////////////////////////////////// +void BCAlgorithm::setCollFactorG(LBMReal cf) { collFactorG = cf; } +////////////////////////////////////////////////////////////////////////// +void BCAlgorithm::setCollFactorPh(LBMReal cf) { collFactorPh = cf; } +////////////////////////////////////////////////////////////////////////// +void BCAlgorithm::setDensityRatio(LBMReal dr) { densityRatio = dr; } +////////////////////////////////////////////////////////////////////////// +void BCAlgorithm::setPhiBound(LBMReal phiL, LBMReal phiH) +{ + this->phiL = phiL; + this->phiH = phiH; +} ////////////////////////////////////////////////////////////////////////// char BCAlgorithm::getType() { return type; } ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.h index 734aa9342df011846ce345ba7c37a181383e8828..518ea9fac1898912f16d3c83d18bb1ff722c21a3 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.h +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/BCAlgorithm.h @@ -47,37 +47,46 @@ class BoundaryConditions; class BCAlgorithm { public: - static const char VelocityBCAlgorithm = 0; - static const char EqDensityBCAlgorithm = 1; - static const char NonEqDensityBCAlgorithm = 2; - static const char NoSlipBCAlgorithm = 3; - static const char SlipBCAlgorithm = 4; - static const char HighViscosityNoSlipBCAlgorithm = 5; - static const char ThinWallNoSlipBCAlgorithm = 6; - static const char VelocityWithDensityBCAlgorithm = 7; - static const char NonReflectingOutflowBCAlgorithm = 8; - static const char VelocityAndThixotropyBCAlgorithm = 9; - static const char DensityAndThixotropyBCAlgorithm = 10; - static const char NoSlipAndThixotropyBCAlgorithm = 11; + static const char VelocityBCAlgorithm = 0; + static const char EqDensityBCAlgorithm = 1; + static const char NonEqDensityBCAlgorithm = 2; + static const char NoSlipBCAlgorithm = 3; + static const char SlipBCAlgorithm = 4; + static const char HighViscosityNoSlipBCAlgorithm = 5; + static const char ThinWallNoSlipBCAlgorithm = 6; + static const char VelocityWithDensityBCAlgorithm = 7; + static const char NonReflectingOutflowBCAlgorithm = 8; + static const char VelocityAndThixotropyBCAlgorithm = 9; + static const char DensityAndThixotropyBCAlgorithm = 10; + static const char NoSlipAndThixotropyBCAlgorithm = 11; static const char NonReflectingOutflowAndThixotropyBCAlgorithm = 12; - static const char VelocityWithDensityAndThixotropyBCAlgorithm = 13; - static const char BinghamModelNoSlipBCAlgorithm = 14; - static const char HerschelBulkleyModelNoSlipBCAlgorithm = 15; - static const char SimpleVelocityBCAlgorithm = 16; - static const char SimpleSlipBCAlgorithm = 17; - static const char PowellEyringModelNoSlipBCAlgorithm = 18; - static const char BinghamModelVelocityBCAlgorithm = 19; + static const char VelocityWithDensityAndThixotropyBCAlgorithm = 13; + static const char BinghamModelNoSlipBCAlgorithm = 14; + static const char HerschelBulkleyModelNoSlipBCAlgorithm = 15; + static const char SimpleVelocityBCAlgorithm = 16; + static const char SimpleSlipBCAlgorithm = 17; + static const char PowellEyringModelNoSlipBCAlgorithm = 18; + static const char BinghamModelVelocityBCAlgorithm = 19; + static const char NoSlipBCAlgorithmMultiphase = 20; public: BCAlgorithm() = default; virtual ~BCAlgorithm() = default; - virtual void addDistributions(SPtr<DistributionArray3D> distributions) = 0; + virtual void addDistributions(SPtr<DistributionArray3D> distributions) = 0; + virtual void addDistributionsH(SPtr<DistributionArray3D> distributionsH) {} void setNodeIndex(int x1, int x2, int x3); void setBcPointer(SPtr<BoundaryConditions> bcPtr); void setCompressible(bool c); void setCollFactor(LBMReal cf); + + void setCollFactorL(LBMReal cf); + void setCollFactorG(LBMReal cf); + void setCollFactorPh(LBMReal cf); + void setDensityRatio(LBMReal dr); + void setPhiBound(LBMReal phiL, LBMReal phiH); + char getType(); bool isPreCollision(); virtual SPtr<BCAlgorithm> clone() = 0; @@ -94,9 +103,13 @@ protected: SPtr<BoundaryConditions> bcPtr; SPtr<DistributionArray3D> distributions; + SPtr<DistributionArray3D> distributionsH; SPtr<BCArray3D> bcArray; LBMReal collFactor; + LBMReal collFactorL, collFactorG, collFactorPh; + LBMReal densityRatio; + LBMReal phiL, phiH; int x1, x2, x3; LBMReal compressibleFactor; diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.h index 84ba7a6041d38546da03323f35a23f7084df9809..f59a899495c72a3f401b238de871e47a0282590b 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.h +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.h @@ -251,6 +251,10 @@ public: throw UbException(UB_EXARGS, "unknown error"); } } + + //Multiphase + void setBoundaryPhaseField(const float &phiBC) { this->bcPhaseField = phiBC; } + float getBoundaryPhaseField() { return this->bcPhaseField; } /*============== Density Boundary ========================*/ void setDensityBoundaryFlag(const int &direction, const short &secOpt = 0) @@ -348,8 +352,9 @@ protected: float bcVelocityX2{ 0.0f }; float bcVelocityX3{ 0.0f }; float bcDensity{ 0.0f }; - // float bcThixotropy{ 0.0f }; + float bcPhaseField{ 0.0f }; + //FIXME: remove LODI variables, don't forget to adjust MPIIOCoProcessors float bcLodiDensity{ 0.0f }; float bcLodiVelocityX1{ 0.0f }; float bcLodiVelocityX2{ 0.0f }; diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCAlgorithmMultiphase.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCAlgorithmMultiphase.cpp new file mode 100644 index 0000000000000000000000000000000000000000..7ea78b5269565bb2e6030f9736b7dd3e4e163f9d --- /dev/null +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCAlgorithmMultiphase.cpp @@ -0,0 +1,111 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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 NoSlipBCAlgorithmMultiphase.cpp +//! \ingroup BoundarConditions +//! \author Hesameddin Safari +//======================================================================================= + +#include "NoSlipBCAlgorithmMultiphase.h" +#include "DistributionArray3D.h" +#include "BoundaryConditions.h" + +NoSlipBCAlgorithmMultiphase::NoSlipBCAlgorithmMultiphase() +{ + BCAlgorithm::type = BCAlgorithm::NoSlipBCAlgorithmMultiphase; + BCAlgorithm::preCollision = false; +} +////////////////////////////////////////////////////////////////////////// +NoSlipBCAlgorithmMultiphase::~NoSlipBCAlgorithmMultiphase() +{ + +} +////////////////////////////////////////////////////////////////////////// +SPtr<BCAlgorithm> NoSlipBCAlgorithmMultiphase::clone() +{ + SPtr<BCAlgorithm> bc(new NoSlipBCAlgorithmMultiphase()); + return bc; +} +////////////////////////////////////////////////////////////////////////// +void NoSlipBCAlgorithmMultiphase::addDistributions(SPtr<DistributionArray3D> distributions) +{ + this->distributions = distributions; +} +////////////////////////////////////////////////////////////////////////// +void NoSlipBCAlgorithmMultiphase::addDistributionsH(SPtr<DistributionArray3D> distributionsH) +{ + this->distributionsH = distributionsH; +} +////////////////////////////////////////////////////////////////////////// +void NoSlipBCAlgorithmMultiphase::applyBC() +{ + LBMReal f[D3Q27System::ENDF+1]; + LBMReal h[D3Q27System::ENDF+1]; + LBMReal feq[D3Q27System::ENDF+1]; + LBMReal heq[D3Q27System::ENDF+1]; + distributions ->getDistributionInv(f, x1, x2, x3); + distributionsH->getDistributionInv(h, x1, x2, x3); + LBMReal phi, rho, vx1, vx2, vx3, p1; + + D3Q27System::calcDensity(h, phi); + + //LBMReal collFactorM = phi*collFactorL + (1-phi)*collFactorG; + //LBMReal collFactorM = collFactorL + (collFactorL - collFactorG)*(phi - phiH)/(phiH - phiL); + + //rho = phi + (1.0 - phi)*1.0/densityRatio; + LBMReal rhoH = 1.0; + LBMReal rhoL = 1.0/densityRatio; + rho = rhoH + (rhoH - rhoL)*(phi - phiH)/(phiH - phiL); + + calcMacrosFct(f, p1, vx1, vx2, vx3); + /*vx1/=(rho*c1o3); + vx2/=(rho*c1o3); + vx3/=(rho*c1o3);*/ + + //calcFeqFct(feq, rho, vx1, vx2, vx3); + //D3Q27System::calcMultiphaseFeq(feq, rho, p1, vx1, vx2, vx3); + D3Q27System::calcMultiphaseFeqVB(feq, p1, vx1, vx2, vx3); + D3Q27System::calcMultiphaseHeq(heq, phi, vx1, vx2, vx3); + //LBMReal collFactorM1 = 0.9; + for (int fdir = D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++) + { + if (bcPtr->hasNoSlipBoundaryFlag(fdir)) + { + //quadratic bounce back + const int invDir = D3Q27System::INVDIR[fdir]; + //LBMReal q = bcPtr->getQ(invDir); + //LBMReal fReturn = ((1.0-q)/(1.0+q))*((f[invDir]-feq[invDir])/(1.0-collFactorM)+feq[invDir])+((q/(1.0+q))*(f[invDir]+f[fdir])); + LBMReal fReturn = f[invDir]; + distributions->setDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); + + //LBMReal hReturn = ((1.0-q)/(1.0+q))*((h[invDir]-heq[invDir])/(1.0-collFactorPh)+heq[invDir])+((q/(1.0+q))*(h[invDir]+h[fdir])); + LBMReal hReturn = h[invDir]; + distributionsH->setDistributionForDirection(hReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); + } + } +} diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCAlgorithmMultiphase.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCAlgorithmMultiphase.h new file mode 100644 index 0000000000000000000000000000000000000000..037ee6f50551b7700ccd70deae7c25d1ba83a0af --- /dev/null +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCAlgorithmMultiphase.h @@ -0,0 +1,50 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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 NoSlipBCAlgorithmMultiphase.h +//! \ingroup BoundarConditions +//! \author Hesameddin Safari +//======================================================================================= + +#ifndef NoSlipBCAlgorithmMultiphase_h__ +#define NoSlipBCAlgorithmMultiphase_h__ + +#include "BCAlgorithm.h" + +//! A class implements no-slip boundary condition for multiphase simulations +class NoSlipBCAlgorithmMultiphase : public BCAlgorithm +{ +public: + NoSlipBCAlgorithmMultiphase(); + virtual ~NoSlipBCAlgorithmMultiphase(); + SPtr<BCAlgorithm> clone() override; + void addDistributions(SPtr<DistributionArray3D> distributions) override; + void addDistributionsH(SPtr<DistributionArray3D> distributionsH) override; + void applyBC(); +}; +#endif // NoSlipBCAlgorithmMultiphase_h__ diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowBCAlgorithmMultiphase.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowBCAlgorithmMultiphase.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e8a3fa794d579e9149f2f600027e0a30ddf0a54d --- /dev/null +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowBCAlgorithmMultiphase.cpp @@ -0,0 +1,372 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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 NonReflectingOutflowBCAlgorithmMultiphase.cpp +//! \ingroup BoundarConditions +//! \author Hesameddin Safari +//======================================================================================= + +#include "NonReflectingOutflowBCAlgorithmMultiphase.h" +#include "D3Q27System.h" +#include "DistributionArray3D.h" +#include "BoundaryConditions.h" + +NonReflectingOutflowBCAlgorithmMultiphase::NonReflectingOutflowBCAlgorithmMultiphase() +{ + BCAlgorithm::type = BCAlgorithm::NonReflectingOutflowBCAlgorithm; + BCAlgorithm::preCollision = true; +} +////////////////////////////////////////////////////////////////////////// +NonReflectingOutflowBCAlgorithmMultiphase::~NonReflectingOutflowBCAlgorithmMultiphase() +{ +} +////////////////////////////////////////////////////////////////////////// +SPtr<BCAlgorithm> NonReflectingOutflowBCAlgorithmMultiphase::clone() +{ + SPtr<BCAlgorithm> bc(new NonReflectingOutflowBCAlgorithmMultiphase()); + return bc; +} +////////////////////////////////////////////////////////////////////////// +void NonReflectingOutflowBCAlgorithmMultiphase::addDistributions(SPtr<DistributionArray3D> distributions) +{ + this->distributions = distributions; +} +////////////////////////////////////////////////////////////////////////// +void NonReflectingOutflowBCAlgorithmMultiphase::addDistributionsH(SPtr<DistributionArray3D> distributionsH) +{ + this->distributionsH = distributionsH; +} +////////////////////////////////////////////////////////////////////////// +void NonReflectingOutflowBCAlgorithmMultiphase::applyBC() +{ + using namespace D3Q27System; + using namespace UbMath; + LBMReal f[ENDF+1]; + LBMReal ftemp[ENDF+1]; + LBMReal h[D3Q27System::ENDF+1]; + //LBMReal heq[D3Q27System::ENDF+1]; + LBMReal htemp[ENDF+1]; + + int nx1 = x1; + int nx2 = x2; + int nx3 = x3; + int direction = -1; + + //flag points in direction of fluid + if (bcPtr->hasDensityBoundaryFlag(E)) { nx1 += 1; direction = E; } + else if (bcPtr->hasDensityBoundaryFlag(W)) { nx1 -= 1; direction = W; } + else if (bcPtr->hasDensityBoundaryFlag(N)) { nx2 += 1; direction = N; } + else if (bcPtr->hasDensityBoundaryFlag(S)) { nx2 -= 1; direction = S; } + else if (bcPtr->hasDensityBoundaryFlag(T)) { nx3 += 1; direction = T; } + else if (bcPtr->hasDensityBoundaryFlag(B)) { nx3 -= 1; direction = B; } + else UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary...")); + + distributions->getDistribution(f, x1, x2, x3); + distributions->getDistribution(ftemp, nx1, nx2, nx3); + distributionsH->getDistribution(h, x1, x2, x3); + distributionsH->getDistribution(htemp, nx1, nx2, nx3); + + LBMReal phi, rho, p1, vx1, vx2, vx3; + + D3Q27System::calcDensity(h, phi); + + //LBMReal collFactorM = phi*collFactorL + (1-phi)*collFactorG; + //LBMReal collFactorM = collFactorL + (collFactorL - collFactorG)*(phi - phiH)/(phiH - phiL); + + //rho = phi + (1.0 - phi)*1.0/densityRatio; + LBMReal rhoH = 1.0; + LBMReal rhoL = 1.0/densityRatio; + rho = rhoH + (rhoH - rhoL)*(phi - phiH)/(phiH - phiL); + + + + calcMacrosFct(f, p1, vx1, vx2, vx3); + /*vx1/=(rho*c1o3); + vx2/=(rho*c1o3); + vx3/=(rho*c1o3);*/ + + + switch (direction) + { + case E: + f[E] = ftemp[E] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[E] ; + f[NE] = ftemp[NE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[NE] ; + f[SE] = ftemp[SE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[SE] ; + f[TE] = ftemp[TE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[TE] ; + f[BE] = ftemp[BE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[BE] ; + f[TNE] = ftemp[TNE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[TNE] ; + f[TSE] = ftemp[TSE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[TSE] ; + f[BNE] = ftemp[BNE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[BNE] ; + f[BSE] = ftemp[BSE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*f[BSE] ; + + distributions->setDistributionInvForDirection(f[E], x1+DX1[W], x2+DX2[W], x3+DX3[W], W); + distributions->setDistributionInvForDirection(f[NE], x1+DX1[SW], x2+DX2[SW], x3+DX3[SW], SW); + distributions->setDistributionInvForDirection(f[SE], x1+DX1[NW], x2+DX2[NW], x3+DX3[NW], NW); + distributions->setDistributionInvForDirection(f[TE], x1+DX1[BW], x2+DX2[BW], x3+DX3[BW], BW); + distributions->setDistributionInvForDirection(f[BE], x1+DX1[TW], x2+DX2[TW], x3+DX3[TW], TW); + distributions->setDistributionInvForDirection(f[TNE], x1+DX1[BSW], x2+DX2[BSW], x3+DX3[BSW], BSW); + distributions->setDistributionInvForDirection(f[TSE], x1+DX1[BNW], x2+DX2[BNW], x3+DX3[BNW], BNW); + distributions->setDistributionInvForDirection(f[BNE], x1+DX1[TSW], x2+DX2[TSW], x3+DX3[TSW], TSW); + distributions->setDistributionInvForDirection(f[BSE], x1+DX1[TNW], x2+DX2[TNW], x3+DX3[TNW], TNW); + + h[E] = htemp[E] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[E] ; + h[NE] = htemp[NE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[NE] ; + h[SE] = htemp[SE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[SE] ; + h[TE] = htemp[TE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[TE] ; + h[BE] = htemp[BE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[BE] ; + h[TNE] = htemp[TNE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[TNE] ; + h[TSE] = htemp[TSE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[TSE] ; + h[BNE] = htemp[BNE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[BNE] ; + h[BSE] = htemp[BSE] * (one_over_sqrt3 + vx1) + (1.0 - one_over_sqrt3 - vx1)*h[BSE] ; + + distributionsH->setDistributionInvForDirection(h[E], x1+DX1[W], x2+DX2[W], x3+DX3[W], W); + distributionsH->setDistributionInvForDirection(h[NE], x1+DX1[SW], x2+DX2[SW], x3+DX3[SW], SW); + distributionsH->setDistributionInvForDirection(h[SE], x1+DX1[NW], x2+DX2[NW], x3+DX3[NW], NW); + distributionsH->setDistributionInvForDirection(h[TE], x1+DX1[BW], x2+DX2[BW], x3+DX3[BW], BW); + distributionsH->setDistributionInvForDirection(h[BE], x1+DX1[TW], x2+DX2[TW], x3+DX3[TW], TW); + distributionsH->setDistributionInvForDirection(h[TNE], x1+DX1[BSW], x2+DX2[BSW], x3+DX3[BSW], BSW); + distributionsH->setDistributionInvForDirection(h[TSE], x1+DX1[BNW], x2+DX2[BNW], x3+DX3[BNW], BNW); + distributionsH->setDistributionInvForDirection(h[BNE], x1+DX1[TSW], x2+DX2[TSW], x3+DX3[TSW], TSW); + distributionsH->setDistributionInvForDirection(h[BSE], x1+DX1[TNW], x2+DX2[TNW], x3+DX3[TNW], TNW); + + break; + case W: + f[W] = ftemp[W] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*f[W] ; + f[NW] = ftemp[NW] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*f[NW] ; + f[SW] = ftemp[SW] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*f[SW] ; + f[TW] = ftemp[TW] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*f[TW] ; + f[BW] = ftemp[BW] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*f[BW] ; + f[TNW] = ftemp[TNW] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*f[TNW]; + f[TSW] = ftemp[TSW] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*f[TSW]; + f[BNW] = ftemp[BNW] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*f[BNW]; + f[BSW] = ftemp[BSW] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*f[BSW]; + + distributions->setDistributionInvForDirection(f[W], x1+DX1[E], x2+DX2[E], x3+DX3[E], E); + distributions->setDistributionInvForDirection(f[NW], x1+DX1[SE], x2+DX2[SE], x3+DX3[SE], SE); + distributions->setDistributionInvForDirection(f[SW], x1+DX1[NE], x2+DX2[NE], x3+DX3[NE], NE); + distributions->setDistributionInvForDirection(f[TW], x1+DX1[BE], x2+DX2[BE], x3+DX3[BE], BE); + distributions->setDistributionInvForDirection(f[BW], x1+DX1[TE], x2+DX2[TE], x3+DX3[TE], TE); + distributions->setDistributionInvForDirection(f[TNW], x1+DX1[BSE], x2+DX2[BSE], x3+DX3[BSE], BSE); + distributions->setDistributionInvForDirection(f[TSW], x1+DX1[BNE], x2+DX2[BNE], x3+DX3[BNE], BNE); + distributions->setDistributionInvForDirection(f[BNW], x1+DX1[TSE], x2+DX2[TSE], x3+DX3[TSE], TSE); + distributions->setDistributionInvForDirection(f[BSW], x1+DX1[TNE], x2+DX2[TNE], x3+DX3[TNE], TNE); + + h[W] = htemp[W] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*h[W] ; + h[NW] = htemp[NW] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*h[NW] ; + h[SW] = htemp[SW] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*h[SW] ; + h[TW] = htemp[TW] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*h[TW] ; + h[BW] = htemp[BW] * (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*h[BW] ; + h[TNW] = htemp[TNW]* (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*h[TNW]; + h[TSW] = htemp[TSW]* (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*h[TSW]; + h[BNW] = htemp[BNW]* (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*h[BNW]; + h[BSW] = htemp[BSW]* (one_over_sqrt3 - vx1) + (1.0 - one_over_sqrt3 + vx1)*h[BSW]; + + distributionsH->setDistributionInvForDirection(h[W], x1+DX1[E], x2+DX2[E], x3+DX3[E], E); + distributionsH->setDistributionInvForDirection(h[NW], x1+DX1[SE], x2+DX2[SE], x3+DX3[SE], SE); + distributionsH->setDistributionInvForDirection(h[SW], x1+DX1[NE], x2+DX2[NE], x3+DX3[NE], NE); + distributionsH->setDistributionInvForDirection(h[TW], x1+DX1[BE], x2+DX2[BE], x3+DX3[BE], BE); + distributionsH->setDistributionInvForDirection(h[BW], x1+DX1[TE], x2+DX2[TE], x3+DX3[TE], TE); + distributionsH->setDistributionInvForDirection(h[TNW], x1+DX1[BSE], x2+DX2[BSE], x3+DX3[BSE], BSE); + distributionsH->setDistributionInvForDirection(h[TSW], x1+DX1[BNE], x2+DX2[BNE], x3+DX3[BNE], BNE); + distributionsH->setDistributionInvForDirection(h[BNW], x1+DX1[TSE], x2+DX2[TSE], x3+DX3[TSE], TSE); + distributionsH->setDistributionInvForDirection(h[BSW], x1+DX1[TNE], x2+DX2[TNE], x3+DX3[TNE], TNE); + + break; + case N: + f[N] = ftemp[N] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*f[N] ; + f[NE] = ftemp[NE] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*f[NE] ; + f[NW] = ftemp[NW] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*f[NW] ; + f[TN] = ftemp[TN] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*f[TN] ; + f[BN] = ftemp[BN] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*f[BN] ; + f[TNE] = ftemp[TNE] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*f[TNE] ; + f[TNW] = ftemp[TNW] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*f[TNW] ; + f[BNE] = ftemp[BNE] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*f[BNE] ; + f[BNW] = ftemp[BNW] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*f[BNW] ; + + distributions->setDistributionInvForDirection(f[N], x1+DX1[S], x2+DX2[S], x3+DX3[S], S); + distributions->setDistributionInvForDirection(f[NE], x1+DX1[SW], x2+DX2[SW], x3+DX3[SW], SW); + distributions->setDistributionInvForDirection(f[NW], x1+DX1[SE], x2+DX2[SE], x3+DX3[SE], SE); + distributions->setDistributionInvForDirection(f[TN], x1+DX1[BS], x2+DX2[BS], x3+DX3[BS], BS); + distributions->setDistributionInvForDirection(f[BN], x1+DX1[TS], x2+DX2[TS], x3+DX3[TS], TS); + distributions->setDistributionInvForDirection(f[TNE], x1+DX1[BSW], x2+DX2[BSW], x3+DX3[BSW], BSW); + distributions->setDistributionInvForDirection(f[TNW], x1+DX1[BSE], x2+DX2[BSE], x3+DX3[BSE], BSE); + distributions->setDistributionInvForDirection(f[BNE], x1+DX1[TSW], x2+DX2[TSW], x3+DX3[TSW], TSW); + distributions->setDistributionInvForDirection(f[BNW], x1+DX1[TSE], x2+DX2[TSE], x3+DX3[TSE], TSE); + + h[N] = htemp[N] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*h[N] ; + h[NE] = htemp[NE] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*h[NE] ; + h[NW] = htemp[NW] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*h[NW] ; + h[TN] = htemp[TN] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*h[TN] ; + h[BN] = htemp[BN] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*h[BN] ; + h[TNE] = htemp[TNE] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*h[TNE] ; + h[TNW] = htemp[TNW] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*h[TNW] ; + h[BNE] = htemp[BNE] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*h[BNE] ; + h[BNW] = htemp[BNW] * (one_over_sqrt3 + vx2) + (1.0 - one_over_sqrt3 - vx2)*h[BNW] ; + + distributionsH->setDistributionInvForDirection(h[N], x1+DX1[S], x2+DX2[S], x3+DX3[S], S); + distributionsH->setDistributionInvForDirection(h[NE], x1+DX1[SW], x2+DX2[SW], x3+DX3[SW], SW); + distributionsH->setDistributionInvForDirection(h[NW], x1+DX1[SE], x2+DX2[SE], x3+DX3[SE], SE); + distributionsH->setDistributionInvForDirection(h[TN], x1+DX1[BS], x2+DX2[BS], x3+DX3[BS], BS); + distributionsH->setDistributionInvForDirection(h[BN], x1+DX1[TS], x2+DX2[TS], x3+DX3[TS], TS); + distributionsH->setDistributionInvForDirection(h[TNE], x1+DX1[BSW], x2+DX2[BSW], x3+DX3[BSW], BSW); + distributionsH->setDistributionInvForDirection(h[TNW], x1+DX1[BSE], x2+DX2[BSE], x3+DX3[BSE], BSE); + distributionsH->setDistributionInvForDirection(h[BNE], x1+DX1[TSW], x2+DX2[TSW], x3+DX3[TSW], TSW); + distributionsH->setDistributionInvForDirection(h[BNW], x1+DX1[TSE], x2+DX2[TSE], x3+DX3[TSE], TSE); + + break; + case S: + f[S] = ftemp[S] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*f[S] ; + f[SE] = ftemp[SE] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*f[SE] ; + f[SW] = ftemp[SW] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*f[SW] ; + f[TS] = ftemp[TS] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*f[TS] ; + f[BS] = ftemp[BS] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*f[BS] ; + f[TSE] = ftemp[TSE] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*f[TSE] ; + f[TSW] = ftemp[TSW] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*f[TSW] ; + f[BSE] = ftemp[BSE] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*f[BSE] ; + f[BSW] = ftemp[BSW] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*f[BSW] ; + + distributions->setDistributionInvForDirection(f[S], x1+DX1[N], x2+DX2[N], x3+DX3[N], N); + distributions->setDistributionInvForDirection(f[SE], x1+DX1[NW], x2+DX2[NW], x3+DX3[NW], NW); + distributions->setDistributionInvForDirection(f[SW], x1+DX1[NE], x2+DX2[NE], x3+DX3[NE], NE); + distributions->setDistributionInvForDirection(f[TS], x1+DX1[BN], x2+DX2[BN], x3+DX3[BN], BN); + distributions->setDistributionInvForDirection(f[BS], x1+DX1[TN], x2+DX2[TN], x3+DX3[TN], TN); + distributions->setDistributionInvForDirection(f[TSE], x1+DX1[BNW], x2+DX2[BNW], x3+DX3[BNW], BNW); + distributions->setDistributionInvForDirection(f[TSW], x1+DX1[BNE], x2+DX2[BNE], x3+DX3[BNE], BNE); + distributions->setDistributionInvForDirection(f[BSE], x1+DX1[TNW], x2+DX2[TNW], x3+DX3[TNW], TNW); + distributions->setDistributionInvForDirection(f[BSW], x1+DX1[TNE], x2+DX2[TNE], x3+DX3[TNE], TNE); + + h[S] = htemp[S] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*h[S] ; + h[SE] = htemp[SE] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*h[SE] ; + h[SW] = htemp[SW] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*h[SW] ; + h[TS] = htemp[TS] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*h[TS] ; + h[BS] = htemp[BS] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*h[BS] ; + h[TSE] = htemp[TSE] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*h[TSE] ; + h[TSW] = htemp[TSW] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*h[TSW] ; + h[BSE] = htemp[BSE] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*h[BSE] ; + h[BSW] = htemp[BSW] * (one_over_sqrt3 - vx2) + (1.0 - one_over_sqrt3 + vx2)*h[BSW] ; + + distributionsH->setDistributionInvForDirection(h[S], x1+DX1[N], x2+DX2[N], x3+DX3[N], N); + distributionsH->setDistributionInvForDirection(h[SE], x1+DX1[NW], x2+DX2[NW], x3+DX3[NW], NW); + distributionsH->setDistributionInvForDirection(h[SW], x1+DX1[NE], x2+DX2[NE], x3+DX3[NE], NE); + distributionsH->setDistributionInvForDirection(h[TS], x1+DX1[BN], x2+DX2[BN], x3+DX3[BN], BN); + distributionsH->setDistributionInvForDirection(h[BS], x1+DX1[TN], x2+DX2[TN], x3+DX3[TN], TN); + distributionsH->setDistributionInvForDirection(h[TSE], x1+DX1[BNW], x2+DX2[BNW], x3+DX3[BNW], BNW); + distributionsH->setDistributionInvForDirection(h[TSW], x1+DX1[BNE], x2+DX2[BNE], x3+DX3[BNE], BNE); + distributionsH->setDistributionInvForDirection(h[BSE], x1+DX1[TNW], x2+DX2[TNW], x3+DX3[TNW], TNW); + distributionsH->setDistributionInvForDirection(h[BSW], x1+DX1[TNE], x2+DX2[TNE], x3+DX3[TNE], TNE); + + break; + case T: + f[T] = ftemp[T] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*f[T] ; + f[TE] = ftemp[TE] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*f[TE] ; + f[TW] = ftemp[TW] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*f[TW] ; + f[TN] = ftemp[TN] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*f[TN] ; + f[TS] = ftemp[TS] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*f[TS] ; + f[TNE] = ftemp[TNE] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*f[TNE] ; + f[TNW] = ftemp[TNW] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*f[TNW] ; + f[TSE] = ftemp[TSE] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*f[TSE] ; + f[TSW] = ftemp[TSW] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*f[TSW] ; + + distributions->setDistributionInvForDirection(f[T], x1+DX1[B], x2+DX2[B], x3+DX3[B], B); + distributions->setDistributionInvForDirection(f[TE], x1+DX1[BW], x2+DX2[BW], x3+DX3[BW], BW); + distributions->setDistributionInvForDirection(f[TW], x1+DX1[BE], x2+DX2[BE], x3+DX3[BE], BE); + distributions->setDistributionInvForDirection(f[TN], x1+DX1[BS], x2+DX2[BS], x3+DX3[BS], BS); + distributions->setDistributionInvForDirection(f[TS], x1+DX1[BN], x2+DX2[BN], x3+DX3[BN], BN); + distributions->setDistributionInvForDirection(f[TNE], x1+DX1[BSW], x2+DX2[BSW], x3+DX3[BSW], BSW); + distributions->setDistributionInvForDirection(f[TNW], x1+DX1[BSE], x2+DX2[BSE], x3+DX3[BSE], BSE); + distributions->setDistributionInvForDirection(f[TSE], x1+DX1[BNW], x2+DX2[BNW], x3+DX3[BNW], BNW); + distributions->setDistributionInvForDirection(f[TSW], x1+DX1[BNE], x2+DX2[BNE], x3+DX3[BNE], BNE); + + h[T] = htemp[T] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*h[T] ; + h[TE] = htemp[TE] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*h[TE] ; + h[TW] = htemp[TW] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*h[TW] ; + h[TN] = htemp[TN] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*h[TN] ; + h[TS] = htemp[TS] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*h[TS] ; + h[TNE] = htemp[TNE] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*h[TNE] ; + h[TNW] = htemp[TNW] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*h[TNW] ; + h[TSE] = htemp[TSE] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*h[TSE] ; + h[TSW] = htemp[TSW] * (one_over_sqrt3 + vx3) + (1.0 - one_over_sqrt3 - vx3)*h[TSW] ; + + distributionsH->setDistributionInvForDirection(h[T], x1+DX1[B], x2+DX2[B], x3+DX3[B], B); + distributionsH->setDistributionInvForDirection(h[TE], x1+DX1[BW], x2+DX2[BW], x3+DX3[BW], BW); + distributionsH->setDistributionInvForDirection(h[TW], x1+DX1[BE], x2+DX2[BE], x3+DX3[BE], BE); + distributionsH->setDistributionInvForDirection(h[TN], x1+DX1[BS], x2+DX2[BS], x3+DX3[BS], BS); + distributionsH->setDistributionInvForDirection(h[TS], x1+DX1[BN], x2+DX2[BN], x3+DX3[BN], BN); + distributionsH->setDistributionInvForDirection(h[TNE], x1+DX1[BSW], x2+DX2[BSW], x3+DX3[BSW], BSW); + distributionsH->setDistributionInvForDirection(h[TNW], x1+DX1[BSE], x2+DX2[BSE], x3+DX3[BSE], BSE); + distributionsH->setDistributionInvForDirection(h[TSE], x1+DX1[BNW], x2+DX2[BNW], x3+DX3[BNW], BNW); + distributionsH->setDistributionInvForDirection(h[TSW], x1+DX1[BNE], x2+DX2[BNE], x3+DX3[BNE], BNE); + + break; + case B: + f[B] = ftemp[B] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*f[B] ; + f[BE] = ftemp[BE] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*f[BE] ; + f[BW] = ftemp[BW] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*f[BW] ; + f[BN] = ftemp[BN] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*f[BN] ; + f[BS] = ftemp[BS] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*f[BS] ; + f[BNE] = ftemp[BNE] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*f[BNE] ; + f[BNW] = ftemp[BNW] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*f[BNW] ; + f[BSE] = ftemp[BSE] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*f[BSE] ; + f[BSW] = ftemp[BSW] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*f[BSW] ; + + distributions->setDistributionInvForDirection(f[B], x1+DX1[T], x2+DX2[T], x3+DX3[T], T); + distributions->setDistributionInvForDirection(f[BE], x1+DX1[TW], x2+DX2[TW], x3+DX3[TW], TW); + distributions->setDistributionInvForDirection(f[BW], x1+DX1[TE], x2+DX2[TE], x3+DX3[TE], TE); + distributions->setDistributionInvForDirection(f[BN], x1+DX1[TS], x2+DX2[TS], x3+DX3[TS], TS); + distributions->setDistributionInvForDirection(f[BS], x1+DX1[TN], x2+DX2[TN], x3+DX3[TN], TN); + distributions->setDistributionInvForDirection(f[BNE], x1+DX1[TSW], x2+DX2[TSW], x3+DX3[TSW], TSW); + distributions->setDistributionInvForDirection(f[BNW], x1+DX1[TSE], x2+DX2[TSE], x3+DX3[TSE], TSE); + distributions->setDistributionInvForDirection(f[BSE], x1+DX1[TNW], x2+DX2[TNW], x3+DX3[TNW], TNW); + distributions->setDistributionInvForDirection(f[BSW], x1+DX1[TNE], x2+DX2[TNE], x3+DX3[TNE], TNE); + + h[B] = htemp[B] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*h[B] ; + h[BE] = htemp[BE] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*h[BE] ; + h[BW] = htemp[BW] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*h[BW] ; + h[BN] = htemp[BN] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*h[BN] ; + h[BS] = htemp[BS] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*h[BS] ; + h[BNE] = htemp[BNE] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*h[BNE] ; + h[BNW] = htemp[BNW] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*h[BNW] ; + h[BSE] = htemp[BSE] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*h[BSE] ; + h[BSW] = htemp[BSW] * (one_over_sqrt3 - vx3) + (1.0 - one_over_sqrt3 + vx3)*h[BSW] ; + + distributionsH->setDistributionInvForDirection(h[B], x1+DX1[T], x2+DX2[T], x3+DX3[T], T); + distributionsH->setDistributionInvForDirection(h[BE], x1+DX1[TW], x2+DX2[TW], x3+DX3[TW], TW); + distributionsH->setDistributionInvForDirection(h[BW], x1+DX1[TE], x2+DX2[TE], x3+DX3[TE], TE); + distributionsH->setDistributionInvForDirection(h[BN], x1+DX1[TS], x2+DX2[TS], x3+DX3[TS], TS); + distributionsH->setDistributionInvForDirection(h[BS], x1+DX1[TN], x2+DX2[TN], x3+DX3[TN], TN); + distributionsH->setDistributionInvForDirection(h[BNE], x1+DX1[TSW], x2+DX2[TSW], x3+DX3[TSW], TSW); + distributionsH->setDistributionInvForDirection(h[BNW], x1+DX1[TSE], x2+DX2[TSE], x3+DX3[TSE], TSE); + distributionsH->setDistributionInvForDirection(h[BSE], x1+DX1[TNW], x2+DX2[TNW], x3+DX3[TNW], TNW); + distributionsH->setDistributionInvForDirection(h[BSW], x1+DX1[TNE], x2+DX2[TNE], x3+DX3[TNE], TNE); + + break; + default: + UB_THROW(UbException(UB_EXARGS, "It isn't implemented non reflecting density boundary for this direction!")); + } +} + diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowBCAlgorithmMultiphase.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowBCAlgorithmMultiphase.h new file mode 100644 index 0000000000000000000000000000000000000000..1a34c931dd87c46554ede2de27bbd1403d85424e --- /dev/null +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowBCAlgorithmMultiphase.h @@ -0,0 +1,49 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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 NonReflectingOutflowBCAlgorithmMultiphase.h +//! \ingroup BoundarConditions +//! \author Hesameddin Safari +//======================================================================================= + +#ifndef NonReflectingOutflowBCAlgorithmMultiphase_h__ +#define NonReflectingOutflowBCAlgorithmMultiphase_h__ + +#include "BCAlgorithm.h" +//! A class implements non reflecting outflow boundary condition for multiphase simulations +class NonReflectingOutflowBCAlgorithmMultiphase : public BCAlgorithm +{ +public: + NonReflectingOutflowBCAlgorithmMultiphase(); + ~NonReflectingOutflowBCAlgorithmMultiphase(); + SPtr<BCAlgorithm> clone(); + void addDistributions(SPtr<DistributionArray3D> distributions); + void addDistributionsH(SPtr<DistributionArray3D> distributionsH); + void applyBC(); +}; +#endif // NonReflectingOutflowBCAlgorithmMultiphase_h__ diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBCAlgorithmMultiphase.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBCAlgorithmMultiphase.cpp new file mode 100644 index 0000000000000000000000000000000000000000..436f67229dc6651915eeb7f9db9102508f9398ca --- /dev/null +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBCAlgorithmMultiphase.cpp @@ -0,0 +1,141 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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 SlipBCAlgorithmMultiphase.cpp +//! \ingroup BoundarConditions +//! \author Hesameddin Safari +//======================================================================================= + +#include "SlipBCAlgorithmMultiphase.h" +#include "DistributionArray3D.h" +#include "BoundaryConditions.h" + +SlipBCAlgorithmMultiphase::SlipBCAlgorithmMultiphase() +{ + BCAlgorithm::type = BCAlgorithm::SlipBCAlgorithm; + BCAlgorithm::preCollision = false; +} +////////////////////////////////////////////////////////////////////////// +SlipBCAlgorithmMultiphase::~SlipBCAlgorithmMultiphase() +{ + +} +////////////////////////////////////////////////////////////////////////// +SPtr<BCAlgorithm> SlipBCAlgorithmMultiphase::clone() +{ + SPtr<BCAlgorithm> bc(new SlipBCAlgorithmMultiphase()); + return bc; +} +////////////////////////////////////////////////////////////////////////// +void SlipBCAlgorithmMultiphase::addDistributions(SPtr<DistributionArray3D> distributions) +{ + this->distributions = distributions; +} +////////////////////////////////////////////////////////////////////////// +void SlipBCAlgorithmMultiphase::addDistributionsH(SPtr<DistributionArray3D> distributionsH) +{ + this->distributionsH = distributionsH; +} +////////////////////////////////////////////////////////////////////////// +void SlipBCAlgorithmMultiphase::applyBC() +{ + LBMReal f[D3Q27System::ENDF+1]; + LBMReal h[D3Q27System::ENDF+1]; + LBMReal feq[D3Q27System::ENDF+1]; + LBMReal heq[D3Q27System::ENDF+1]; + distributions->getDistributionInv(f, x1, x2, x3); + distributionsH->getDistributionInv(h, x1, x2, x3); + + LBMReal p1, vx1, vx2, vx3, phi, rho; + + D3Q27System::calcDensity(h, phi); + //LBMReal collFactorM = collFactorL + (collFactorL - collFactorG)*(phi - phiH)/(phiH - phiL); + + + calcMacrosFct(f, p1, vx1, vx2, vx3); + D3Q27System::calcMultiphaseFeqVB(feq, p1, vx1, vx2, vx3); + D3Q27System::calcMultiphaseHeq(heq, phi, vx1, vx2, vx3); + + UbTupleFloat3 normale = bcPtr->getNormalVector(); + LBMReal amp = vx1*val<1>(normale)+vx2*val<2>(normale)+vx3*val<3>(normale); + + vx1 = vx1 - amp * val<1>(normale); //normale zeigt von struktur weg! + vx2 = vx2 - amp * val<2>(normale); //normale zeigt von struktur weg! + vx3 = vx3 - amp * val<3>(normale); //normale zeigt von struktur weg! + + //rho = 1.0+drho*compressibleFactor; + rho = 1.0; // In multiphase model set to 1.0! + + for (int fdir = D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++) + { + if (bcPtr->hasSlipBoundaryFlag(fdir)) + { + //quadratic bounce back + const int invDir = D3Q27System::INVDIR[fdir]; + LBMReal q = bcPtr->getQ(invDir);// m+m q=0 stabiler + //vx3=0; + LBMReal velocity = 0.0; + switch (invDir) + { + case D3Q27System::E: velocity = (UbMath::c4o9*(+vx1)); break; //(2/cs^2)(=6)*rho_0(=1 bei imkompr)*wi*u*ei mit cs=1/sqrt(3) + case D3Q27System::W: velocity = (UbMath::c4o9*(-vx1)); break; //z.B. aus paper manfred MRT LB models in three dimensions (2002) + case D3Q27System::N: velocity = (UbMath::c4o9*(+vx2)); break; + case D3Q27System::S: velocity = (UbMath::c4o9*(-vx2)); break; + case D3Q27System::T: velocity = (UbMath::c4o9*(+vx3)); break; + case D3Q27System::B: velocity = (UbMath::c4o9*(-vx3)); break; + case D3Q27System::NE: velocity = (UbMath::c1o9*(+vx1+vx2)); break; + case D3Q27System::SW: velocity = (UbMath::c1o9*(-vx1-vx2)); break; + case D3Q27System::SE: velocity = (UbMath::c1o9*(+vx1-vx2)); break; + case D3Q27System::NW: velocity = (UbMath::c1o9*(-vx1+vx2)); break; + case D3Q27System::TE: velocity = (UbMath::c1o9*(+vx1 +vx3)); break; + case D3Q27System::BW: velocity = (UbMath::c1o9*(-vx1 -vx3)); break; + case D3Q27System::BE: velocity = (UbMath::c1o9*(+vx1 -vx3)); break; + case D3Q27System::TW: velocity = (UbMath::c1o9*(-vx1 +vx3)); break; + case D3Q27System::TN: velocity = (UbMath::c1o9*(+vx2+vx3)); break; + case D3Q27System::BS: velocity = (UbMath::c1o9*(-vx2-vx3)); break; + case D3Q27System::BN: velocity = (UbMath::c1o9*(+vx2-vx3)); break; + case D3Q27System::TS: velocity = (UbMath::c1o9*(-vx2+vx3)); break; + case D3Q27System::TNE: velocity = (UbMath::c1o36*(+vx1+vx2+vx3)); break; + case D3Q27System::BSW: velocity = (UbMath::c1o36*(-vx1-vx2-vx3)); break; + case D3Q27System::BNE: velocity = (UbMath::c1o36*(+vx1+vx2-vx3)); break; + case D3Q27System::TSW: velocity = (UbMath::c1o36*(-vx1-vx2+vx3)); break; + case D3Q27System::TSE: velocity = (UbMath::c1o36*(+vx1-vx2+vx3)); break; + case D3Q27System::BNW: velocity = (UbMath::c1o36*(-vx1+vx2-vx3)); break; + case D3Q27System::BSE: velocity = (UbMath::c1o36*(+vx1-vx2-vx3)); break; + case D3Q27System::TNW: velocity = (UbMath::c1o36*(-vx1+vx2+vx3)); break; + default: throw UbException(UB_EXARGS, "unknown error"); + } + LBMReal fReturn = ((1.0-q)/(1.0+q))*((f[invDir]-feq[invDir])/(1.0-collFactor)+feq[invDir])+((q*(f[invDir]+f[fdir])-velocity*rho)/(1.0+q)); + distributions->setDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); + + LBMReal hReturn = ((1.0-q)/(1.0+q))*((h[invDir]-heq[invDir])/(1.0-collFactorPh)+heq[invDir])+((q/(1.0+q))*(h[invDir]+h[fdir])); + //LBMReal hReturn = h[invDir]; + distributionsH->setDistributionForDirection(hReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); + } + } +} \ No newline at end of file diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBCAlgorithmMultiphase.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBCAlgorithmMultiphase.h new file mode 100644 index 0000000000000000000000000000000000000000..3d89df9279291bf8cc626560ed58efbeb19d3371 --- /dev/null +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBCAlgorithmMultiphase.h @@ -0,0 +1,51 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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 SlipBCAlgorithmMultiphase.h +//! \ingroup BoundarConditions +//! \author Hesameddin Safari +//======================================================================================= + +#ifndef SlipBCAlgorithmMultiphase_h__ +#define SlipBCAlgorithmMultiphase_h__ + +#include "BCAlgorithm.h" + +//! A class implements slip boundary condition for multiphase simulation +class SlipBCAlgorithmMultiphase : public BCAlgorithm +{ +public: + SlipBCAlgorithmMultiphase(); + virtual ~SlipBCAlgorithmMultiphase(); + SPtr<BCAlgorithm> clone() override; + void addDistributions(SPtr<DistributionArray3D> distributions) override; + void addDistributionsH(SPtr<DistributionArray3D> distributionsH) override; + void applyBC() override; + +}; +#endif // SlipBCAlgorithm_h__ diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAdapterMultiphase.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAdapterMultiphase.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c288aff3e94df04f389c80204efb294d6cf22ebb --- /dev/null +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAdapterMultiphase.cpp @@ -0,0 +1,344 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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 VelocityBCAdapterMultiphase.cpp +//! \ingroup BoundarConditions +//! \author Hesameddin Safari +//======================================================================================= + +#include "VelocityBCAdapterMultiphase.h" +#include "basics/utilities/UbLogger.h" +#include "basics/utilities/UbMath.h" +#include "basics/utilities/UbTuple.h" + +using namespace std; + + +VelocityBCAdapterMultiphase::VelocityBCAdapterMultiphase(const bool& vx1, const bool& vx2, const bool& vx3, const BCFunction& velVxBC) +{ + if(vx1) this->vx1BCs.push_back(velVxBC); + if(vx2) this->vx2BCs.push_back(velVxBC); + if(vx3) this->vx3BCs.push_back(velVxBC); + this->init(); +} +/*==========================================================*/ +VelocityBCAdapterMultiphase::VelocityBCAdapterMultiphase(const bool& vx1, const bool& vx2, const bool& vx3, const mu::Parser& function, const LBMReal& phiBC, const double& startTime, const double& endTime ) +{ + if(vx1) this->vx1BCs.push_back(BCFunction(function,startTime,endTime)); + if(vx2) this->vx2BCs.push_back(BCFunction(function,startTime,endTime)); + if(vx3) this->vx3BCs.push_back(BCFunction(function,startTime,endTime)); + this->phiBC = phiBC; + this->init(); + //this->init(vx3BCs); + +} +/*==========================================================*/ +VelocityBCAdapterMultiphase::VelocityBCAdapterMultiphase(const bool& vx1, const bool& vx2, const bool& vx3, const mu::Parser& function1, const mu::Parser& function2, const mu::Parser& function3, const LBMReal& phiBC, const double& startTime, const double& endTime ) +{ + if(vx1) this->vx1BCs.push_back(BCFunction(function1,startTime,endTime)); + if(vx2) this->vx2BCs.push_back(BCFunction(function2,startTime,endTime)); + if(vx3) this->vx3BCs.push_back(BCFunction(function3,startTime,endTime)); + this->phiBC = phiBC; + this->init(); +} +/*==========================================================*/ +VelocityBCAdapterMultiphase::VelocityBCAdapterMultiphase(const bool& vx1, const bool& vx2, const bool& vx3, const string& functionstring, const double& startTime, const double& endTime ) +{ + if(vx1) this->vx1BCs.push_back(BCFunction(functionstring,startTime,endTime)); + if(vx2) this->vx2BCs.push_back(BCFunction(functionstring,startTime,endTime)); + if(vx3) this->vx3BCs.push_back(BCFunction(functionstring,startTime,endTime)); + this->init(); +} +/*==========================================================*/ +VelocityBCAdapterMultiphase::VelocityBCAdapterMultiphase(const BCFunction& velBC, bool x1Dir, bool x2Dir, bool x3Dir) +{ + if(x1Dir) this->vx1BCs.push_back(velBC); + if(x2Dir) this->vx2BCs.push_back(velBC); + if(x3Dir) this->vx3BCs.push_back(velBC); + this->init(); +} +/*==========================================================*/ +VelocityBCAdapterMultiphase::VelocityBCAdapterMultiphase(const BCFunction& velVx1BC, const BCFunction& velVx2BC, const BCFunction& velVx3BC) +{ + if( velVx1BC.getEndTime()!=-Ub::inf ) this->vx1BCs.push_back(velVx1BC); + if( velVx2BC.getEndTime()!=-Ub::inf ) this->vx2BCs.push_back(velVx2BC); + if( velVx3BC.getEndTime()!=-Ub::inf ) this->vx3BCs.push_back(velVx3BC); + this->init(); +} +/*==========================================================*/ +VelocityBCAdapterMultiphase::VelocityBCAdapterMultiphase(const vector< BCFunction >& velVx1BCs, const vector< BCFunction >& velVx2BCs, const vector< BCFunction >& velVx3BCs) +{ + this->vx1BCs = velVx1BCs; + this->vx2BCs = velVx2BCs; + this->vx3BCs = velVx3BCs; + this->init(); +} +/*==========================================================*/ +VelocityBCAdapterMultiphase::VelocityBCAdapterMultiphase(const double& vx1, const double& vx1StartTime, const double& vx1EndTime, + const double& vx2, const double& vx2StartTime, const double& vx2EndTime, + const double& vx3, const double& vx3StartTime, const double& vx3EndTime ) +{ + this->vx1BCs.push_back(BCFunction(vx1,vx1StartTime,vx1EndTime)); + this->vx2BCs.push_back(BCFunction(vx2,vx2StartTime,vx2EndTime)); + this->vx3BCs.push_back(BCFunction(vx3,vx3StartTime,vx3EndTime)); + this->init(); +} +/*==========================================================*/ +VelocityBCAdapterMultiphase::VelocityBCAdapterMultiphase(const string& vx1Function, const double& vx1StartTime, const double& vx1EndTime, + const string& vx2Function, const double& vx2StartTime, const double& vx2EndTime, + const string& vx3Function, const double& vx3StartTime, const double& vx3EndTime ) +{ + if(vx1Function.size()) this->vx1BCs.push_back(BCFunction(vx1Function,vx1StartTime,vx1EndTime)); + if(vx2Function.size()) this->vx2BCs.push_back(BCFunction(vx2Function,vx2StartTime,vx2EndTime)); + if(vx3Function.size()) this->vx3BCs.push_back(BCFunction(vx3Function,vx3StartTime,vx3EndTime)); + this->init(); +} +/*==========================================================*/ +void VelocityBCAdapterMultiphase::setNewVelocities(const double& vx1, const double& vx1StartTime, const double& vx1EndTime, + const double& vx2, const double& vx2StartTime, const double& vx2EndTime, + const double& vx3, const double& vx3StartTime, const double& vx3EndTime ) +{ + this->clear(); + this->vx1BCs.push_back(BCFunction(vx1,vx1StartTime,vx1EndTime)); + this->vx2BCs.push_back(BCFunction(vx2,vx2StartTime,vx2EndTime)); + this->vx3BCs.push_back(BCFunction(vx3,vx3StartTime,vx3EndTime)); + this->init(); +} +/*==========================================================*/ +void VelocityBCAdapterMultiphase::init() +{ + this->unsetTimeDependent(); + + this->timeStep = 0.0; + + this->x1 = 0.0; + this->x2 = 0.0; + this->x3 = 0.0; + + this->tmpVx1Function = NULL; + this->tmpVx2Function = NULL; + this->tmpVx3Function = NULL; + + try //initilialization and validation of functions + { + this->init(vx1BCs); + this->init(vx2BCs); + this->init(vx3BCs); + } + catch(mu::Parser::exception_type& e){ stringstream error; error<<"mu::parser exception occurs, message("<<e.GetMsg()<<"), formula("<<e.GetExpr()+"), token("+e.GetToken()<<")" + <<", pos("<<e.GetPos()<<"), error code("<<e.GetCode(); throw UbException(error.str()); } + catch(...) { throw UbException(UB_EXARGS,"unknown exception" ); } +} +/*==========================================================*/ +void VelocityBCAdapterMultiphase::init(std::vector<BCFunction>& vxBCs) +{ + for(size_t pos=0; pos<vxBCs.size(); ++pos) + { + if( !( UbMath::equal( BCFunction::INFCONST, vxBCs[pos].getEndTime() ) + && UbMath::greaterEqual( this->timeStep, vxBCs[pos].getStartTime() ) ) ) + { + this->setTimeDependent(); + } + + vxBCs[pos].getFunction().DefineVar("t" , &this->timeStep); + vxBCs[pos].getFunction().DefineVar("x1", &this->x1 ); + vxBCs[pos].getFunction().DefineVar("x2", &this->x2 ); + vxBCs[pos].getFunction().DefineVar("x3", &this->x3 ); + + vxBCs[pos].getFunction().Eval(); //<-- validation + } +} +/*==========================================================*/ +void VelocityBCAdapterMultiphase::init(const D3Q27Interactor* const& interactor, const double& time) +{ + this->timeStep = time; + this->tmpVx1Function = this->tmpVx2Function = this->tmpVx3Function = NULL; + + //aktuelle velocityfunction bestimmen + double maxEndtime = -Ub::inf; + + for(size_t pos=0; pos<vx1BCs.size(); ++pos) + { + if( UbMath::equal(vx1BCs[pos].getEndTime(),BCFunction::INFTIMEDEPENDENT) ) maxEndtime=Ub::inf; + maxEndtime = UbMath::max(maxEndtime,vx1BCs[pos].getStartTime(),vx1BCs[pos].getEndTime()); //startTime abfragen, da INFCONST=-10 + + if( UbMath::greaterEqual(this->timeStep,vx1BCs[pos].getStartTime()) ) + { + if( UbMath::lessEqual( this->timeStep , vx1BCs[pos].getEndTime() ) + || UbMath::equal( vx1BCs[pos].getEndTime(), (double)BCFunction::INFCONST ) + || UbMath::equal( vx1BCs[pos].getEndTime(), (double)BCFunction::INFTIMEDEPENDENT) ) + { + tmpVx1Function = &vx1BCs[pos].getFunction(); + break; + } + } + } + for(size_t pos=0; pos<vx2BCs.size(); ++pos) + { + if( UbMath::equal(vx2BCs[pos].getEndTime(),BCFunction::INFTIMEDEPENDENT)) maxEndtime=Ub::inf; + maxEndtime = UbMath::max(maxEndtime,vx2BCs[pos].getStartTime(),vx2BCs[pos].getEndTime()); //startTime abfragen, da INFCONST=-10 + + if( UbMath::greaterEqual(this->timeStep,vx2BCs[pos].getStartTime()) ) + { + if( UbMath::lessEqual( this->timeStep , vx2BCs[pos].getEndTime() ) + || UbMath::equal( vx2BCs[pos].getEndTime(), (double)BCFunction::INFCONST ) + || UbMath::equal( vx2BCs[pos].getEndTime(), (double)BCFunction::INFTIMEDEPENDENT ) ) + { + tmpVx2Function = &vx2BCs[pos].getFunction(); + break; + } + } + } + for(size_t pos=0; pos<vx3BCs.size(); ++pos) + { + if( UbMath::equal(vx3BCs[pos].getEndTime(),BCFunction::INFTIMEDEPENDENT)) maxEndtime=Ub::inf; + maxEndtime = UbMath::max(maxEndtime,vx3BCs[pos].getStartTime(),vx3BCs[pos].getEndTime()); //startTime abfragen, da INFCONST=-10 + + if( UbMath::greaterEqual(this->timeStep,vx3BCs[pos].getStartTime()) ) + { + if( UbMath::lessEqual( this->timeStep , vx3BCs[pos].getEndTime() ) + || UbMath::equal( vx3BCs[pos].getEndTime(), (double)BCFunction::INFCONST ) + || UbMath::equal( vx3BCs[pos].getEndTime(), (double)BCFunction::INFTIMEDEPENDENT ) ) + { + tmpVx3Function = &vx3BCs[pos].getFunction(); + break; + } + } + } + + if( UbMath::greaterEqual(time,maxEndtime) ) + { + if( !this->isTimePeriodic() ) this->unsetTimeDependent(); + else //bei peridoic die interavalle neu setzen: + { + if( UbMath::equal(maxEndtime,BCFunction::INFCONST) ) + for(size_t pos=0; pos<vx1BCs.size(); ++pos) + { + vx1BCs[pos].setStartTime( vx1BCs[pos].getStartTime() + timeStep ); + vx1BCs[pos].setEndTime( vx1BCs[pos].getEndTime() + timeStep ); + } + if( UbMath::equal(maxEndtime,BCFunction::INFCONST) ) + for(size_t pos=0; pos<vx2BCs.size(); ++pos) + { + vx2BCs[pos].setStartTime( vx2BCs[pos].getStartTime() + timeStep ); + vx2BCs[pos].setEndTime( vx2BCs[pos].getEndTime() + timeStep ); + } + if( UbMath::equal(maxEndtime,BCFunction::INFCONST) ) + for(size_t pos=0; pos<vx3BCs.size(); ++pos) + { + vx3BCs[pos].setStartTime( vx3BCs[pos].getStartTime() + timeStep ); + vx3BCs[pos].setEndTime( vx3BCs[pos].getEndTime() + timeStep ); + } + this->init(interactor,time); + } + } + + UBLOG(logDEBUG4,"D3Q27VelocityBCAdapter::init(time="<<time<<") " + <<", vx1= \""<<(tmpVx1Function ? tmpVx1Function->GetExpr() : "-")<<"\"" + <<", vx2= \""<<(tmpVx2Function ? tmpVx2Function->GetExpr() : "-")<<"\"" + <<", vx3= \""<<(tmpVx3Function ? tmpVx3Function->GetExpr() : "-")<<"\"" + <<", timedependent="<<boolalpha<<this->isTimeDependent() ); +} +/*==========================================================*/ +void VelocityBCAdapterMultiphase::update( const D3Q27Interactor* const& interactor, const double& time ) +{ + this->init(interactor,time); +} +/*==========================================================*/ +void VelocityBCAdapterMultiphase::adaptBCForDirection( const D3Q27Interactor& interactor, SPtr<BoundaryConditions> bc, const double& worldX1, const double& worldX2, const double& worldX3, const double& q, const int& fdirection, const double& time ) +{ + bc->setVelocityBoundaryFlag(D3Q27System::INVDIR[fdirection],secondaryBcOption); + bc->setQ((float)q,fdirection); +} +/*==========================================================*/ +void VelocityBCAdapterMultiphase::adaptBC( const D3Q27Interactor& interactor, SPtr<BoundaryConditions> bc, const double& worldX1, const double& worldX2, const double& worldX3, const double& time ) +{ + this->setNodeVelocity(interactor,bc,worldX1,worldX2,worldX3,time); + bc->setBcAlgorithmType(algorithmType); +} +/*==========================================================*/ +void VelocityBCAdapterMultiphase::setNodeVelocity( const D3Q27Interactor& interactor, SPtr<BoundaryConditions> bc, const double& worldX1, const double& worldX2, const double& worldX3, const double& timestep) +{ + //Geschwindigkeiten setzen + try + { + //PunktKoordinaten bestimmen + this->x1 = worldX1; + this->x2 = worldX2; + this->x3 = worldX3; + this->timeStep = timestep; + + if(tmpVx1Function) bc->setBoundaryVelocityX1((float)tmpVx1Function->Eval()); + if(tmpVx2Function) bc->setBoundaryVelocityX2((float)tmpVx2Function->Eval()); + if(tmpVx3Function) bc->setBoundaryVelocityX3((float)tmpVx3Function->Eval()); + bc->setBoundaryPhaseField(this->phiBC); + } + catch(mu::Parser::exception_type& e){ stringstream error; error<<"mu::parser exception occurs, message("<<e.GetMsg()<<"), formula("<<e.GetExpr()+"), token("+e.GetToken()<<")" + <<", pos("<<e.GetPos()<<"), error code("<<e.GetCode(); throw UbException(error.str()); } + catch(...) { throw UbException(UB_EXARGS,"unknown exception" ); } +} +/*==========================================================*/ +UbTupleDouble3 VelocityBCAdapterMultiphase::getVelocity(const double& x1, const double& x2, const double& x3, const double& timeStep) const +{ + double vx1 = 0.0; + double vx2 = 0.0; + double vx3 = 0.0; + this->x1 = x1; + this->x2 = x2; + this->x3 = x3; + this->timeStep = timeStep; + + if(tmpVx1Function) vx1 = tmpVx1Function->Eval(); + if(tmpVx2Function) vx2 = tmpVx2Function->Eval(); + if(tmpVx3Function) vx3 = tmpVx3Function->Eval(); + + return UbTupleDouble3(vx1,vx2,vx3); +} +/*==========================================================*/ +string VelocityBCAdapterMultiphase::toString() +{ + stringstream info; + info<<"D3Q27VelocityBCAdapter:\n"; + info<<" #vx1-functions = "<<(int)vx1BCs.size()<<endl; + info<<" #vx2-functions = "<<(int)vx2BCs.size()<<endl; + info<<" #vx3-functions = "<<(int)vx3BCs.size()<<endl; + info<<" protected variables: x1, x2, x3, t"<<endl; + + const vector<BCFunction>* bcvecs[3] = { &vx1BCs, &vx2BCs, &vx3BCs }; + for(int i=0; i<3; i++) + { + for(size_t pos=0; pos<bcvecs[i]->size(); ++pos) + { + info<<"\n vx"<<(i+1)<<"-function nr."<<pos<<":"<<endl; + info<<(*bcvecs[i])[pos]<<endl; + } + } + return info.str(); +} + + diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAdapterMultiphase.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAdapterMultiphase.h new file mode 100644 index 0000000000000000000000000000000000000000..29025a89d7f100f2f5c8de36cf772c47ebf90d07 --- /dev/null +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAdapterMultiphase.h @@ -0,0 +1,169 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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 VelocityBCAdapterMultiphase.h +//! \ingroup BoundarConditions +//! \author Hesameddin Safari +//======================================================================================= +#ifndef VelocityBCAdapterMultiphase_H +#define VelocityBCAdapterMultiphase_H + +#include <iostream> +#include <string> +#include <sstream> +#include <vector> + +#include <basics/utilities/UbInfinity.h> +#include <basics/utilities/UbFileOutput.h> +#include <basics/utilities/UbFileInput.h> + +class UbFileOutput; +class UbFileInput; + +#include <BCAdapter.h> +#include <BCFunction.h> + +//! \brief A class provides an interface for velocity boundary condition for multiphase simulation in grid generator. + +//! \details +//! Example: +//! \code{.cpp} vector<BCFunction> vx1BCs,vx2BCs,vx3BCs; +//! vx1BCs.push_back(BCFunction(0.01 , 0 , 100) ); //t=[0 ..100[ -> vx1 = 0.01 +//! vx1BCs.push_back(BCFunction(0.004, 100, 200) ); //t=[100..200[ -> vx1 = 0.004 +//! vx1BCs.push_back(BCFunction(0.03 , 200, 400) ); //t=[200..400] -> vx1 = 0.03 +//! +//! vx2BCs.push_back(BCFunction(0.02 , 0 , 200) ); //t=[0 ..200[ -> vx2 = 0.02 +//! vx2BCs.push_back(BCFunction(0.002, 200, 300) ); //t=[200..300[ -> vx2 = 0.002 +//! vx2BCs.push_back(BCFunction(0.043, 300, 600) ); //t=[300..600] -> vx2 = 0.043 +//! +//! VelocityBCAdapter bcAdapter(vx1BCs,vx2BCs,vx3BCs); +//! bcAdapter.setTimePeriodic(); //-> t=[0 ..100[ -> vx1 = 0.01 +//! // t=[100..200[ -> vx1 = 0.004 +//! // t=[200..400[ -> vx1 = 0.03 +//! // t=[400..500[ -> vx1 = 0.01 +//! // t=[500..600[ -> vx1 = 0.004 +//! // t=[600..800[ -> vx1 = 0.03 ... +//! // t=[0 ..200[ -> vx2 = 0.02 +//! // t=[200..300[ -> vx2 = 0.002 +//! // t=[300..600] -> vx2 = 0.043 +//! // t=[600..800[ -> vx2 = 0.02 +//! // t=[800..900[ -> vx2 = 0.002 +//! // t=[900..1200]-> vx2 = 0.043 ... +//! \endcode +//! Example of parabolic inflow: +//! \code{.cpp} +//! mu::Parser fct; +//! fct.SetExpr("max(vmax*(1.0-4.0*((x2-x2_vmax)^2+(x3-x3_vmax)^2)/H^2),0.0)"); //paraboloid (with vmax for +//! (0/x2_vmax/x3_vmax) fct.DefineConst("x2Vmax", 0.0 ); //x2-Pos für vmax fct.DefineConst("x3Vmax", 0.0 +//! ); //x3-Pos für vmax fct.DefineConst("H" , diameterOfPipe); fct.DefineConst("vmax" , vmax ); +//! VelocityBCAdapter velBC(true, false ,false ,fct, 0, BCFunction::INFCONST); +//! \endcode + +class VelocityBCAdapterMultiphase : public BCAdapter +{ +public: + //constructors + VelocityBCAdapterMultiphase() { this->init(); } + + VelocityBCAdapterMultiphase(const bool& vx1, const bool& vx2, const bool& vx3, const BCFunction& velVxBC ); + + VelocityBCAdapterMultiphase(const bool& vx1, const bool& vx2, const bool& vx3, const mu::Parser& function, const LBMReal& phiBC, const double& startTime, const double& endTime ); + + VelocityBCAdapterMultiphase(const bool& vx1, const bool& vx2, const bool& vx3, const mu::Parser& function1, const mu::Parser& function2, const mu::Parser& function3, const LBMReal& phiBC, const double& startTime, const double& endTime ); + + VelocityBCAdapterMultiphase(const bool& vx1, const bool& vx2, const bool& vx3, const std::string& functionstring, const double& startTime, const double& endTime ); + + VelocityBCAdapterMultiphase(const BCFunction& velBC, bool x1Dir, bool x2Dir, bool x3Dir); + + VelocityBCAdapterMultiphase(const BCFunction& velVx1BC, const BCFunction& velVx2BC, const BCFunction& velVx3BC); + + VelocityBCAdapterMultiphase(const std::vector< BCFunction >& velVx1BCs, const std::vector< BCFunction >& velVx2BCs, const std::vector< BCFunction >& velVx3BCs); + + VelocityBCAdapterMultiphase(const double& vx1, const double& vx1StartTime, const double& vx1EndTime, + const double& vx2, const double& vx2StartTime, const double& vx2EndTime, + const double& vx3, const double& vx3StartTime, const double& vx3EndTime); + + VelocityBCAdapterMultiphase(const std::string& vx1Function, const double& vx1StartTime, const double& vx1EndTime, + const std::string& vx2Function, const double& vx2StartTime, const double& vx2EndTime, + const std::string& vx3Function, const double& vx3StartTime, const double& vx3EndTime ); + + //methods + void setTimePeriodic() { (this->type |= TIMEPERIODIC); } + void unsetTimePeriodic() { (this->type &= ~TIMEPERIODIC); } + bool isTimePeriodic() { return ((this->type & TIMEPERIODIC) == TIMEPERIODIC); } + + //folgendes ist fuer moving objects gedadacht... + void setNewVelocities(const double& vx1, const double& vx1StartTime, const double& vx1EndTime, + const double& vx2, const double& vx2StartTime, const double& vx2EndTime, + const double& vx3, const double& vx3StartTime, const double& vx3EndTime); + + + //------------- implements D3Q27BoundaryConditionAdapter ----- start + std::string toString(); + + void init(const D3Q27Interactor* const& interactor, const double& time=0); + void update(const D3Q27Interactor* const& interactor, const double& time=0); + + void adaptBCForDirection(const D3Q27Interactor &interactor, SPtr<BoundaryConditions> bc, const double &worldX1, + const double &worldX2, const double &worldX3, const double &q, const int &fdirection, + const double &time = 0); + void adaptBC(const D3Q27Interactor &interactor, SPtr<BoundaryConditions> bc, const double &worldX1, + const double &worldX2, const double &worldX3, const double &time = 0); + + //------------- implements D3Q27BoundaryConditionAdapter ----- end + + UbTupleDouble3 getVelocity(const double& x1, const double& x2, const double& x3, const double& timeStep) const; + + +protected: + void init(); + void init(std::vector<BCFunction>& vxBCs); + + //time dependency wird automatisch ueber D3Q27BCFunction Intervalle ermittelt! + void setTimeDependent() { (this->type |= TIMEDEPENDENT); } + void unsetTimeDependent() { (this->type &= ~TIMEDEPENDENT); } + + void clear() { vx1BCs.clear(); vx2BCs.clear(); vx3BCs.clear(); this->init(); } + void setNodeVelocity(const D3Q27Interactor& interactor, SPtr<BoundaryConditions> bc, const double& worldX1, const double& worldX2, const double& worldX3, const double& timestep); + +private: + mutable mu::value_type x1, x2, x3; + mutable mu::value_type timeStep; + + mu::Parser* tmpVx1Function; + mu::Parser* tmpVx2Function; + mu::Parser* tmpVx3Function; + + std::vector<BCFunction> vx1BCs; + std::vector<BCFunction> vx2BCs; + std::vector<BCFunction> vx3BCs; + + LBMReal phiBC; +}; + +#endif diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAlgorithmMultiphase.cpp b/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAlgorithmMultiphase.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c840f1cb8489d58fe1726a5b599590d3663f079f --- /dev/null +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAlgorithmMultiphase.cpp @@ -0,0 +1,148 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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 VelocityBCAlgorithmMultiphase.cpp +//! \ingroup BoundarConditions +//! \author Hesameddin Safari +//======================================================================================= + +#include "VelocityBCAlgorithmMultiphase.h" +#include "DistributionArray3D.h" +#include "BoundaryConditions.h" + +VelocityBCAlgorithmMultiphase::VelocityBCAlgorithmMultiphase() +{ + BCAlgorithm::type = BCAlgorithm::VelocityBCAlgorithm; + BCAlgorithm::preCollision = false; +} +////////////////////////////////////////////////////////////////////////// +VelocityBCAlgorithmMultiphase::~VelocityBCAlgorithmMultiphase() +{ +} +////////////////////////////////////////////////////////////////////////// +SPtr<BCAlgorithm> VelocityBCAlgorithmMultiphase::clone() +{ + SPtr<BCAlgorithm> bc(new VelocityBCAlgorithmMultiphase()); + return bc; +} +////////////////////////////////////////////////////////////////////////// +void VelocityBCAlgorithmMultiphase::addDistributions(SPtr<DistributionArray3D> distributions) +{ + this->distributions = distributions; +} +////////////////////////////////////////////////////////////////////////// +void VelocityBCAlgorithmMultiphase::addDistributionsH(SPtr<DistributionArray3D> distributionsH) +{ + this->distributionsH = distributionsH; +} +////////////////////////////////////////////////////////////////////////// +void VelocityBCAlgorithmMultiphase::applyBC() +{ + LBMReal f[D3Q27System::ENDF+1]; + LBMReal h[D3Q27System::ENDF+1]; + LBMReal feq[D3Q27System::ENDF+1]; + LBMReal heq[D3Q27System::ENDF+1]; + LBMReal htemp[D3Q27System::ENDF+1]; + + distributions->getDistributionInv(f, x1, x2, x3); + distributionsH->getDistributionInv(h, x1, x2, x3); + LBMReal phi, rho, vx1, vx2, vx3, p1, phiBC; + + D3Q27System::calcDensity(h, phi); + + //LBMReal collFactorM = phi*collFactorL + (1-phi)*collFactorG; + //LBMReal collFactorM = collFactorL + (collFactorL - collFactorG)*(phi - phiH)/(phiH - phiL); + + + + //rho = phi + (1.0 - phi)*1.0/densityRatio; + LBMReal rhoH = 1.0; + LBMReal rhoL = 1.0/densityRatio; + rho = rhoH + (rhoH - rhoL)*(phi - phiH)/(phiH - phiL); + + + calcMacrosFct(f, p1, vx1, vx2, vx3); + /*vx1/=(rho*c1o3); + vx2/=(rho*c1o3); + vx3/=(rho*c1o3);*/ + + //D3Q27System::calcMultiphaseFeq(feq, rho, p1, vx1, vx2, vx3); + D3Q27System::calcMultiphaseFeqVB(feq, p1, vx1, vx2, vx3); + D3Q27System::calcMultiphaseHeq(heq, phi, vx1, vx2, vx3); + + ///// added for phase field ////// + + int nx1 = x1; + int nx2 = x2; + int nx3 = x3; + int direction = -1; + //flag points in direction of fluid + if (bcPtr->hasVelocityBoundaryFlag(D3Q27System::E)) { nx1 -= 1; direction = D3Q27System::E; } + else if (bcPtr->hasVelocityBoundaryFlag(D3Q27System::W)) { nx1 += 1; direction = D3Q27System::W; } + else if (bcPtr->hasVelocityBoundaryFlag(D3Q27System::N)) { nx2 -= 1; direction = D3Q27System::N; } + else if (bcPtr->hasVelocityBoundaryFlag(D3Q27System::S)) { nx2 += 1; direction = D3Q27System::S; } + else if (bcPtr->hasVelocityBoundaryFlag(D3Q27System::T)) { nx3 -= 1; direction = D3Q27System::T; } + else if (bcPtr->hasVelocityBoundaryFlag(D3Q27System::B)) { nx3 += 1; direction = D3Q27System::B; } + else UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on velocity boundary...")); + + phiBC = bcPtr->getBoundaryPhaseField(); + + D3Q27System::calcMultiphaseHeq(htemp, phiBC, vx1, vx2, vx3); + + for (int fdir = D3Q27System::STARTF; fdir<=D3Q27System::ENDF; fdir++) + { + if (bcPtr->hasVelocityBoundaryFlag(fdir)) + { + LBMReal hReturn = htemp[fdir]+h[fdir]-heq[fdir]; + distributionsH->setDistributionForDirection(hReturn, nx1, nx2, nx3, fdir); + } + } + + ////////////////////////////////// + + + + + for (int fdir = D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++) + { + if (bcPtr->hasVelocityBoundaryFlag(fdir)) + { + const int invDir = D3Q27System::INVDIR[fdir]; + LBMReal q = bcPtr->getQ(invDir);// m+m q=0 stabiler + LBMReal velocity = bcPtr->getBoundaryVelocity(invDir); + //LBMReal fReturn = ((1.0-q)/(1.0+q))*((f[invDir]-feq[invDir])/(1.0-collFactor)+feq[invDir])+((q*(f[invDir]+f[fdir])-velocity*rho*c1o3)/(1.0+q)); + LBMReal fReturn = ((1.0-q)/(1.0+q))*((f[invDir]-feq[invDir])/(1.0-collFactor)+feq[invDir])+((q*(f[invDir]+f[fdir])-velocity)/(1.0+q)); + distributions->setDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); + + //LBMReal hReturn = ((1.0-q)/(1.0+q))*((h[invDir]-heq[invDir])/(1.0-collFactorM)+heq[invDir])+((q/(1.0+q))*(h[invDir]+h[fdir])); + //distributionsH->setDistributionForDirection(hReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); + } + } + +} + diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAlgorithmMultiphase.h b/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAlgorithmMultiphase.h new file mode 100644 index 0000000000000000000000000000000000000000..869940099429c1bcf3f178644835e154c489e29f --- /dev/null +++ b/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCAlgorithmMultiphase.h @@ -0,0 +1,51 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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 VelocityBCAlgorithmMultiphase.h +//! \ingroup BoundarConditions +//! \author Hesameddin Safari +//======================================================================================= + +#ifndef VelocityBoundaryConditionMultiphase_h__ +#define VelocityBoundaryConditionMultiphase_h__ + +#include "BCAlgorithm.h" +//! A class implements velocity boundary condition for multiphase simulations +class VelocityBCAlgorithmMultiphase : public BCAlgorithm +{ +public: + VelocityBCAlgorithmMultiphase(); + ~VelocityBCAlgorithmMultiphase(); + SPtr<BCAlgorithm> clone() override; + void addDistributions(SPtr<DistributionArray3D> distributions) override; + void addDistributionsH(SPtr<DistributionArray3D> distributionsH) override; + void applyBC() override; +}; + +#endif // VelocityBoundaryConditionMultiphase_h__ + diff --git a/src/cpu/VirtualFluidsCore/Connectors/D3Q27ETFullVectorConnector.cpp b/src/cpu/VirtualFluidsCore/Connectors/D3Q27ETFullVectorConnector.cpp index 70d7c438e0b0a8eb32ffcf7b097ab3148d76e270..b9ec6597416e6db70bf02b52f32cce8c25737530 100644 --- a/src/cpu/VirtualFluidsCore/Connectors/D3Q27ETFullVectorConnector.cpp +++ b/src/cpu/VirtualFluidsCore/Connectors/D3Q27ETFullVectorConnector.cpp @@ -21,7 +21,7 @@ void D3Q27ETFullVectorConnector::init() int anz = 27; switch (sendDir) { - case D3Q27System::ZERO: + case D3Q27System::REST: UB_THROW(UbException(UB_EXARGS, "ZERO not allowed")); break; case D3Q27System::E: diff --git a/src/cpu/VirtualFluidsCore/Connectors/ThixotropyFullVectorConnector.cpp b/src/cpu/VirtualFluidsCore/Connectors/ThixotropyFullVectorConnector.cpp index 89950b25e872fd07cd71847407926d3fbb413318..9d4cb41aa6d37555f2ad8396f494597be99c9ba1 100644 --- a/src/cpu/VirtualFluidsCore/Connectors/ThixotropyFullVectorConnector.cpp +++ b/src/cpu/VirtualFluidsCore/Connectors/ThixotropyFullVectorConnector.cpp @@ -30,7 +30,7 @@ void ThixotropyFullVectorConnector::init() int anz = 2*27; switch (sendDir) { - case D3Q27System::ZERO: UB_THROW(UbException(UB_EXARGS, "ZERO not allowed")); break; + case D3Q27System::REST: UB_THROW(UbException(UB_EXARGS, "ZERO not allowed")); break; case D3Q27System::E: case D3Q27System::W: sender->getData().resize(maxX2*maxX3*anz, 0.0); break; case D3Q27System::N: diff --git a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSoA.cpp b/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSoA.cpp index d75c90c9dc74a19296950d58f08d05d8a982c791..bd6d46c2bdaeb72244578b4e3f3625cd2dfe7ff1 100644 --- a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSoA.cpp +++ b/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSoA.cpp @@ -62,7 +62,7 @@ D3Q27EsoTwist3DSoA::D3Q27EsoTwist3DSoA(const size_t &nx1, const size_t &nx2, con new CbArray3D<LBMReal, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value)); d.BSW = CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr( new CbArray3D<LBMReal, IndexerX3X2X1>(nx1 + 1, nx2 + 1, nx3 + 1, value)); - d.ZERO = + d.REST = CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<LBMReal, IndexerX3X2X1>(nx1, nx2, nx3, value)); } ////////////////////////////////////////////////////////////////////////// @@ -119,7 +119,7 @@ void D3Q27EsoTwist3DSoA::getDistribution(LBMReal *const f, size_t x1, size_t x2, f[D3Q27System::BNW] = (*d.BNW)(x1p, x2, x3p); f[D3Q27System::BNE] = (*d.BNE)(x1, x2, x3p); - f[D3Q27System::ZERO] = (*d.ZERO)(x1, x2, x3); + f[D3Q27System::REST] = (*d.REST)(x1, x2, x3); } ////////////////////////////////////////////////////////////////////////// void D3Q27EsoTwist3DSoA::setDistribution(const LBMReal *const f, size_t x1, size_t x2, size_t x3) @@ -156,7 +156,7 @@ void D3Q27EsoTwist3DSoA::setDistribution(const LBMReal *const f, size_t x1, size (*d.BNW)(x1p, x2, x3p) = f[D3Q27System::INV_BNW]; (*d.BNE)(x1, x2, x3p) = f[D3Q27System::INV_BNE]; - (*d.ZERO)(x1, x2, x3) = f[D3Q27System::ZERO]; + (*d.REST)(x1, x2, x3) = f[D3Q27System::REST]; } ////////////////////////////////////////////////////////////////////////// void D3Q27EsoTwist3DSoA::getDistributionInv(LBMReal *const f, size_t x1, size_t x2, size_t x3) @@ -189,7 +189,7 @@ void D3Q27EsoTwist3DSoA::getDistributionInv(LBMReal *const f, size_t x1, size_t f[D3Q27System::INV_BNW] = (*d.BNW)(x1 + 1, x2, x3 + 1); f[D3Q27System::INV_BNE] = (*d.BNE)(x1, x2, x3 + 1); - f[D3Q27System::ZERO] = (*d.ZERO)(x1, x2, x3); + f[D3Q27System::REST] = (*d.REST)(x1, x2, x3); } ////////////////////////////////////////////////////////////////////////// void D3Q27EsoTwist3DSoA::setDistributionInv(const LBMReal *const f, size_t x1, size_t x2, size_t x3) @@ -222,7 +222,7 @@ void D3Q27EsoTwist3DSoA::setDistributionInv(const LBMReal *const f, size_t x1, s //(*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1+1,x2, x3+1) = f[D3Q27System::BNW]; //(*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1, x2, x3+1) = f[D3Q27System::BNE]; - //(*this->zeroDistributions)(x1,x2,x3) = f[D3Q27System::ZERO]; + //(*this->zeroDistributions)(x1,x2,x3) = f[D3Q27System::REST]; } ////////////////////////////////////////////////////////////////////////// void D3Q27EsoTwist3DSoA::setDistributionForDirection(const LBMReal *const f, size_t x1, size_t x2, size_t x3, @@ -281,8 +281,8 @@ void D3Q27EsoTwist3DSoA::setDistributionForDirection(const LBMReal *const f, siz // (*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3) = f[D3Q27System::BNE]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etTSW) == EsoTwistD3Q27System::etTSW) // (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1, x2, x3+1) = f[D3Q27System::TSW]; directionFlag=true; - // if ((direction & EsoTwistD3Q27System::ZERO) == EsoTwistD3Q27System::ZERO) - // (*this->zeroDistributions)(x1,x2,x3) = f[D3Q27System::ZERO]; directionFlag=true; + // if ((direction & EsoTwistD3Q27System::REST) == EsoTwistD3Q27System::REST) + // (*this->zeroDistributions)(x1,x2,x3) = f[D3Q27System::REST]; directionFlag=true; //#ifdef _DEBUG // if(!directionFlag)UB_THROW( UbException(UB_EXARGS, "Direction didn't find") ); //#endif //DEBUG @@ -370,7 +370,7 @@ void D3Q27EsoTwist3DSoA::setDistributionForDirection(LBMReal f, size_t x1, size_ // case D3Q27System::TSW : // (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1, x2, x3+1) = f; // break; - // case D3Q27System::ZERO : + // case D3Q27System::REST : // (*this->zeroDistributions)(x1,x2,x3) = f; // break; // default: @@ -437,8 +437,8 @@ void D3Q27EsoTwist3DSoA::setDistributionInvForDirection(const LBMReal *const f, // (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1, x2, x3+1)= f[D3Q27System::BNE]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etTSW) == EsoTwistD3Q27System::etTSW) // (*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3) = f[D3Q27System::TSW]; directionFlag=true; - // if ((direction & EsoTwistD3Q27System::ZERO) == EsoTwistD3Q27System::ZERO) - // (*this->zeroDistributions)(x1,x2,x3) = f[D3Q27System::ZERO]; directionFlag=true; + // if ((direction & EsoTwistD3Q27System::REST) == EsoTwistD3Q27System::REST) + // (*this->zeroDistributions)(x1,x2,x3) = f[D3Q27System::REST]; directionFlag=true; //#ifdef _DEBUG // if(!directionFlag)UB_THROW( UbException(UB_EXARGS, "Direction didn't find") ); //#endif //DEBUG @@ -527,7 +527,7 @@ void D3Q27EsoTwist3DSoA::setDistributionInvForDirection(LBMReal f, size_t x1, si // case D3Q27System::TSW : // (*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3) = f; // break; - // case D3Q27System::ZERO : + // case D3Q27System::REST : // (*this->zeroDistributions)(x1,x2,x3) = f; // break; // default: @@ -592,7 +592,7 @@ LBMReal D3Q27EsoTwist3DSoA::getDistributionInvForDirection(size_t /*x1*/, size_t // return (*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3); // case D3Q27System::TSW : // return (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1, x2, x3+1); - // case D3Q27System::ZERO : + // case D3Q27System::REST : // return (*this->zeroDistributions)(x1,x2,x3); // default: // UB_THROW( UbException(UB_EXARGS, "Direction didn't find") ); diff --git a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSoA.h b/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSoA.h index 72951922a3580c9c4b00379e2eb6f79eefad4ef9..a3eb85e378051871a018066a5aabe58969790b73 100644 --- a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSoA.h +++ b/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSoA.h @@ -35,7 +35,7 @@ struct Distributions { CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr BNW; CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr BSE; CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr BSW; - CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr ZERO; + CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr REST; }; class D3Q27EsoTwist3DSoA : public EsoTwist3D diff --git a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVector.cpp b/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVector.cpp index 6f8a6e74664cf82a550b9000071d4f6beb9ebac2..5e762c68bab806ee7c892c000869bce8c76431af 100644 --- a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVector.cpp +++ b/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVector.cpp @@ -84,7 +84,7 @@ void D3Q27EsoTwist3DSplittedVector::getDistribution(LBMReal *const f, size_t x1, f[D3Q27System::BNW] = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1); f[D3Q27System::BNE] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1); - f[D3Q27System::ZERO] = (*this->zeroDistributions)(x1, x2, x3); + f[D3Q27System::REST] = (*this->zeroDistributions)(x1, x2, x3); } ////////////////////////////////////////////////////////////////////////// void D3Q27EsoTwist3DSplittedVector::setDistribution(const LBMReal *const f, size_t x1, size_t x2, size_t x3) @@ -117,7 +117,7 @@ void D3Q27EsoTwist3DSplittedVector::setDistribution(const LBMReal *const f, size (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = f[D3Q27System::INV_BNW]; (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = f[D3Q27System::INV_BNE]; - (*this->zeroDistributions)(x1, x2, x3) = f[D3Q27System::ZERO]; + (*this->zeroDistributions)(x1, x2, x3) = f[D3Q27System::REST]; } ////////////////////////////////////////////////////////////////////////// void D3Q27EsoTwist3DSplittedVector::getDistributionInv(LBMReal *const f, size_t x1, size_t x2, size_t x3) @@ -150,7 +150,7 @@ void D3Q27EsoTwist3DSplittedVector::getDistributionInv(LBMReal *const f, size_t f[D3Q27System::INV_BNW] = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1); f[D3Q27System::INV_BNE] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1); - f[D3Q27System::ZERO] = (*this->zeroDistributions)(x1, x2, x3); + f[D3Q27System::REST] = (*this->zeroDistributions)(x1, x2, x3); } ////////////////////////////////////////////////////////////////////////// void D3Q27EsoTwist3DSplittedVector::setDistributionInv(const LBMReal *const f, size_t x1, size_t x2, size_t x3) @@ -183,7 +183,7 @@ void D3Q27EsoTwist3DSplittedVector::setDistributionInv(const LBMReal *const f, s (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = f[D3Q27System::BNW]; (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = f[D3Q27System::BNE]; - (*this->zeroDistributions)(x1, x2, x3) = f[D3Q27System::ZERO]; + (*this->zeroDistributions)(x1, x2, x3) = f[D3Q27System::REST]; } ////////////////////////////////////////////////////////////////////////// void D3Q27EsoTwist3DSplittedVector::setDistributionForDirection(const LBMReal *const f, size_t x1, size_t x2, size_t x3, @@ -241,8 +241,8 @@ void D3Q27EsoTwist3DSplittedVector::setDistributionForDirection(const LBMReal *c (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = f[D3Q27System::BNE]; if ((direction & EsoTwistD3Q27System::etTSW) == EsoTwistD3Q27System::etTSW) (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = f[D3Q27System::TSW]; - if ((direction & EsoTwistD3Q27System::ZERO) == EsoTwistD3Q27System::ZERO) - (*this->zeroDistributions)(x1, x2, x3) = f[D3Q27System::ZERO]; + if ((direction & EsoTwistD3Q27System::REST) == EsoTwistD3Q27System::REST) + (*this->zeroDistributions)(x1, x2, x3) = f[D3Q27System::REST]; } ////////////////////////////////////////////////////////////////////////// void D3Q27EsoTwist3DSplittedVector::setDistributionForDirection(LBMReal f, size_t x1, size_t x2, size_t x3, @@ -327,7 +327,7 @@ void D3Q27EsoTwist3DSplittedVector::setDistributionForDirection(LBMReal f, size_ case D3Q27System::TSW: (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = f; break; - case D3Q27System::ZERO: + case D3Q27System::REST: (*this->zeroDistributions)(x1, x2, x3) = f; break; default: @@ -390,8 +390,8 @@ void D3Q27EsoTwist3DSplittedVector::setDistributionInvForDirection(const LBMReal (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = f[D3Q27System::BNE]; if ((direction & EsoTwistD3Q27System::etTSW) == EsoTwistD3Q27System::etTSW) (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = f[D3Q27System::TSW]; - if ((direction & EsoTwistD3Q27System::ZERO) == EsoTwistD3Q27System::ZERO) - (*this->zeroDistributions)(x1, x2, x3) = f[D3Q27System::ZERO]; + if ((direction & EsoTwistD3Q27System::REST) == EsoTwistD3Q27System::REST) + (*this->zeroDistributions)(x1, x2, x3) = f[D3Q27System::REST]; } ////////////////////////////////////////////////////////////////////////// void D3Q27EsoTwist3DSplittedVector::setDistributionInvForDirection(LBMReal f, size_t x1, size_t x2, size_t x3, @@ -476,7 +476,7 @@ void D3Q27EsoTwist3DSplittedVector::setDistributionInvForDirection(LBMReal f, si case D3Q27System::TSW: (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = f; break; - case D3Q27System::ZERO: + case D3Q27System::REST: (*this->zeroDistributions)(x1, x2, x3) = f; break; default: @@ -539,7 +539,7 @@ LBMReal D3Q27EsoTwist3DSplittedVector::getDistributionForDirection(size_t x1, si return (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3); case D3Q27System::BNE: return (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1); - case D3Q27System::ZERO: + case D3Q27System::REST: return (*this->zeroDistributions)(x1, x2, x3); default: UB_THROW(UbException(UB_EXARGS, "Direction didn't find")); @@ -601,7 +601,7 @@ LBMReal D3Q27EsoTwist3DSplittedVector::getDistributionInvForDirection(size_t x1, return (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3); case D3Q27System::TSW: return (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1); - case D3Q27System::ZERO: + case D3Q27System::REST: return (*this->zeroDistributions)(x1, x2, x3); default: UB_THROW(UbException(UB_EXARGS, "Direction didn't find")); diff --git a/src/cpu/VirtualFluidsCore/Data/DataSet3D.h b/src/cpu/VirtualFluidsCore/Data/DataSet3D.h index 4930beeab491caf541c436a2e60b326b7cd54c64..9b8c36817c3fbebf4dd8acdbc8d6399acf99cd02 100644 --- a/src/cpu/VirtualFluidsCore/Data/DataSet3D.h +++ b/src/cpu/VirtualFluidsCore/Data/DataSet3D.h @@ -43,6 +43,7 @@ using AverageValuesArray3D = CbArray4D<LBMReal, IndexerX4X3X2X1>; using ShearStressValuesArray3D = CbArray4D<LBMReal, IndexerX4X3X2X1>; using RelaxationFactorArray3D = CbArray3D<LBMReal, IndexerX3X2X1>; +using PhaseFieldArray3D = CbArray3D<LBMReal, IndexerX3X2X1>; //! A class provides an interface for data structures in the kernel. class DataSet3D @@ -74,6 +75,10 @@ public: SPtr<RelaxationFactorArray3D> getRelaxationFactor() const; void setRelaxationFactor(SPtr<RelaxationFactorArray3D> values); + + SPtr<PhaseFieldArray3D> getPhaseField() const; + void setPhaseField(SPtr<PhaseFieldArray3D> values); + protected: private: SPtr<DistributionArray3D> fdistributions; @@ -91,95 +96,50 @@ private: SPtr<RelaxationFactorArray3D> relaxationFactor; + SPtr<PhaseFieldArray3D> phaseField; }; -inline SPtr<DistributionArray3D> DataSet3D::getFdistributions() const -{ - return fdistributions; -} +inline SPtr<DistributionArray3D> DataSet3D::getFdistributions() const { return fdistributions; } -inline void DataSet3D::setFdistributions(SPtr<DistributionArray3D> distributions) -{ - fdistributions = distributions; -} +inline void DataSet3D::setFdistributions(SPtr<DistributionArray3D> distributions) { fdistributions = distributions; } -inline SPtr<DistributionArray3D> DataSet3D::getHdistributions() const -{ - return hdistributions; -} +inline SPtr<DistributionArray3D> DataSet3D::getHdistributions() const { return hdistributions; } -inline void DataSet3D::setHdistributions(SPtr<DistributionArray3D> distributions) -{ - hdistributions = distributions; -} +inline void DataSet3D::setHdistributions(SPtr<DistributionArray3D> distributions) { hdistributions = distributions; } -inline SPtr<AverageValuesArray3D> DataSet3D::getAverageValues() const -{ - return averageValues; -} +inline SPtr<AverageValuesArray3D> DataSet3D::getAverageValues() const { return averageValues; } -inline void DataSet3D::setAverageValues(SPtr<AverageValuesArray3D> values) -{ - averageValues = values; -} +inline void DataSet3D::setAverageValues(SPtr<AverageValuesArray3D> values) { averageValues = values; } -inline SPtr<AverageValuesArray3D> DataSet3D::getAverageDensity() const -{ - return averageDensity; -} +inline SPtr<AverageValuesArray3D> DataSet3D::getAverageDensity() const { return averageDensity; } -inline void DataSet3D::setAverageDensity(SPtr<AverageValuesArray3D> values) -{ - averageDensity = values; -} +inline void DataSet3D::setAverageDensity(SPtr<AverageValuesArray3D> values) { averageDensity = values; } -inline SPtr<AverageValuesArray3D> DataSet3D::getAverageVelocity() const -{ - return averageVelocity; -} +inline SPtr<AverageValuesArray3D> DataSet3D::getAverageVelocity() const { return averageVelocity; } -inline void DataSet3D::setAverageVelocity(SPtr<AverageValuesArray3D> values) -{ - averageVelocity = values; -} +inline void DataSet3D::setAverageVelocity(SPtr<AverageValuesArray3D> values) { averageVelocity = values; } -inline SPtr<AverageValuesArray3D> DataSet3D::getAverageFluctuations() const -{ - return averageFluktuations; -} +inline SPtr<AverageValuesArray3D> DataSet3D::getAverageFluctuations() const { return averageFluktuations; } -inline void DataSet3D::setAverageFluctuations(SPtr<AverageValuesArray3D> values) -{ - averageFluktuations = values; -} +inline void DataSet3D::setAverageFluctuations(SPtr<AverageValuesArray3D> values) { averageFluktuations = values; } -inline SPtr<AverageValuesArray3D> DataSet3D::getAverageTriplecorrelations() const -{ - return averageTriplecorrelations; -} +inline SPtr<AverageValuesArray3D> DataSet3D::getAverageTriplecorrelations() const { return averageTriplecorrelations; } inline void DataSet3D::setAverageTriplecorrelations(SPtr<AverageValuesArray3D> values) { averageTriplecorrelations = values; } -inline SPtr<ShearStressValuesArray3D> DataSet3D::getShearStressValues() const -{ - return shearStressValues; -} +inline SPtr<ShearStressValuesArray3D> DataSet3D::getShearStressValues() const { return shearStressValues; } -inline void DataSet3D::setShearStressValues(SPtr<ShearStressValuesArray3D> values) -{ - shearStressValues = values; -} +inline void DataSet3D::setShearStressValues(SPtr<ShearStressValuesArray3D> values) { shearStressValues = values; } -inline SPtr<RelaxationFactorArray3D> DataSet3D::getRelaxationFactor() const -{ - return relaxationFactor; -} +inline SPtr<RelaxationFactorArray3D> DataSet3D::getRelaxationFactor() const { return relaxationFactor; } + +inline void DataSet3D::setRelaxationFactor(SPtr<RelaxationFactorArray3D> values) { relaxationFactor = values; } + +inline SPtr<PhaseFieldArray3D> DataSet3D::getPhaseField() const { return phaseField; } + +inline void DataSet3D::setPhaseField(SPtr<PhaseFieldArray3D> values) { phaseField = values; } -inline void DataSet3D::setRelaxationFactor(SPtr<RelaxationFactorArray3D> values) -{ - relaxationFactor = values; -} #endif diff --git a/src/cpu/VirtualFluidsCore/Data/EsoTwistD3Q27System.cpp b/src/cpu/VirtualFluidsCore/Data/EsoTwistD3Q27System.cpp index 1a13aa008ab49a48f1d16c7a2a71ea39dfb191ab..c456be678449744475a0ac6932850dceb0ee6f1c 100644 --- a/src/cpu/VirtualFluidsCore/Data/EsoTwistD3Q27System.cpp +++ b/src/cpu/VirtualFluidsCore/Data/EsoTwistD3Q27System.cpp @@ -35,7 +35,7 @@ // index 0 1 2 3 4 5 6 7 8 9 10 11 12 // 13 14 15 16 17 18 19 20 21 22 23 24 25 26 f: E, W, N, S, T, B, NE, SW, SE, NW, TE, BW, BE, TW, TN, -// BS, BN, TS, TNE TNW TSE TSW BNE BNW BSE BSW ZERO +// BS, BN, TS, TNE TNW TSE TSW BNE BNW BSE BSW REST const int EsoTwistD3Q27System::ETX1[EsoTwistD3Q27System::ENDF + 1] = { 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0 }; const int EsoTwistD3Q27System::ETX2[EsoTwistD3Q27System::ENDF + 1] = { 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0, 0, 0, 0, @@ -49,7 +49,7 @@ const int EsoTwistD3Q27System::etINVDIR[EsoTwistD3Q27System::ENDF + 1] = { D3Q27System::INV_TE, D3Q27System::INV_BW, D3Q27System::INV_BE, D3Q27System::INV_TW, D3Q27System::INV_TN, D3Q27System::INV_BS, D3Q27System::INV_BN, D3Q27System::INV_TS, D3Q27System::INV_TNE, D3Q27System::INV_TNW, D3Q27System::INV_TSE, D3Q27System::INV_TSW, D3Q27System::INV_BNE, D3Q27System::INV_BNW, D3Q27System::INV_BSE, - D3Q27System::INV_BSW, D3Q27System::ZERO + D3Q27System::INV_BSW, D3Q27System::REST }; const unsigned long int EsoTwistD3Q27System::etDIR[EsoTwistD3Q27System::ENDF + 1] = { diff --git a/src/cpu/VirtualFluidsCore/Data/EsoTwistD3Q27System.h b/src/cpu/VirtualFluidsCore/Data/EsoTwistD3Q27System.h index a9214673ec4b4a66a52fa53f9b625ead0180768b..21752cc48a84b02bc24cb7efe9e3c5912f476dfd 100644 --- a/src/cpu/VirtualFluidsCore/Data/EsoTwistD3Q27System.h +++ b/src/cpu/VirtualFluidsCore/Data/EsoTwistD3Q27System.h @@ -47,7 +47,7 @@ struct EsoTwistD3Q27System { const static int STARTDIR = D3Q27System::STARTDIR; const static int ENDDIR = D3Q27System::ENDDIR; - static const int ZERO = D3Q27System::ZERO; /*f0 */ + static const int REST = D3Q27System::REST; /*f0 */ static const int E = D3Q27System::E; /*f1 */ static const int W = D3Q27System::W; /*f2 */ static const int N = D3Q27System::N; /*f3 */ diff --git a/src/cpu/VirtualFluidsCore/Grid/Grid3D.cpp b/src/cpu/VirtualFluidsCore/Grid/Grid3D.cpp index 199d2cf87851160a4fc36e9a90ae2b199f1fce7e..1d37e4a09f5c45967a76eb7ff1abc7999788c8b9 100644 --- a/src/cpu/VirtualFluidsCore/Grid/Grid3D.cpp +++ b/src/cpu/VirtualFluidsCore/Grid/Grid3D.cpp @@ -1341,7 +1341,7 @@ void Grid3D::getNeighborBlocksForDirectionWithDirZero(int dir, int ix1, int ix2, case Grid3DSystem::BSW: this->getNeighborsBottomSouthWest(ix1, ix2, ix3, level, levelDepth, blocks); break; - case Grid3DSystem::ZERO: + case Grid3DSystem::REST: this->getNeighborsZero(ix1, ix2, ix3, level, levelDepth, blocks); break; default: diff --git a/src/cpu/VirtualFluidsCore/Grid/Grid3DSystem.h b/src/cpu/VirtualFluidsCore/Grid/Grid3DSystem.h index ee61b8f7327e76a9393d4d3caa13c3a796470c08..94c3bf2a75bf8e7137b08c113c1caa878d8c0896 100644 --- a/src/cpu/VirtualFluidsCore/Grid/Grid3DSystem.h +++ b/src/cpu/VirtualFluidsCore/Grid/Grid3DSystem.h @@ -71,7 +71,7 @@ static const int BNE = 22; static const int BNW = 23; static const int BSE = 24; static const int BSW = 25; -static const int ZERO /*f0 */ = 26; +static const int REST /*f0 */ = 26; static const int ENDDIR = 25; diff --git a/src/cpu/VirtualFluidsCore/LBM/BGKLBMKernel.cpp b/src/cpu/VirtualFluidsCore/LBM/BGKLBMKernel.cpp index 365373c09053c3e3292276ac39908e6bd66a26fd..280562ebfaff7ccaa61055fa7caed0a4cac4d666 100644 --- a/src/cpu/VirtualFluidsCore/LBM/BGKLBMKernel.cpp +++ b/src/cpu/VirtualFluidsCore/LBM/BGKLBMKernel.cpp @@ -87,7 +87,7 @@ void BGKLBMKernel::calculate(int /*step*/) ////////////////////////////////////////////////////////////////////////// // read distribution //////////////////////////////////////////////////////////////////////////// - f[ZERO] = (*this->zeroDistributions)(x1, x2, x3); + f[REST] = (*this->zeroDistributions)(x1, x2, x3); f[E] = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3); f[N] = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3); @@ -118,7 +118,7 @@ void BGKLBMKernel::calculate(int /*step*/) f[BNE] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p); ////////////////////////////////////////////////////////////////////////// - drho = f[ZERO] + f[E] + f[W] + f[N] + f[S] + f[T] + f[B] + f[NE] + f[SW] + f[SE] + f[NW] + f[TE] + + drho = f[REST] + f[E] + f[W] + f[N] + f[S] + f[T] + f[B] + f[NE] + f[SW] + f[SE] + f[NW] + f[TE] + f[BW] + f[BE] + f[TW] + f[TN] + f[BS] + f[BN] + f[TS] + f[TNE] + f[TSW] + f[TSE] + f[TNW] + f[BNE] + f[BSW] + f[BSE] + f[BNW]; @@ -133,7 +133,7 @@ void BGKLBMKernel::calculate(int /*step*/) LBMReal cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); - feq[ZERO] = c8o27 * (drho - cu_sq); + feq[REST] = c8o27 * (drho - cu_sq); feq[E] = c2o27 * (drho + 3.0 * (vx1) + c9o2 * (vx1) * (vx1)-cu_sq); feq[W] = c2o27 * (drho + 3.0 * (-vx1) + c9o2 * (-vx1) * (-vx1) - cu_sq); feq[N] = c2o27 * (drho + 3.0 * (vx2) + c9o2 * (vx2) * (vx2)-cu_sq); @@ -170,7 +170,7 @@ void BGKLBMKernel::calculate(int /*step*/) c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq); // Relaxation - f[ZERO] += (feq[ZERO] - f[ZERO]) * collFactor; + f[REST] += (feq[REST] - f[REST]) * collFactor; f[E] += (feq[E] - f[E]) * collFactor; f[W] += (feq[W] - f[W]) * collFactor; f[N] += (feq[N] - f[N]) * collFactor; @@ -210,7 +210,7 @@ void BGKLBMKernel::calculate(int /*step*/) forcingX2 = muForcingX2.Eval(); forcingX3 = muForcingX3.Eval(); - f[ZERO] += 0.0; + f[REST] += 0.0; f[E] += 3.0 * c2o27 * (forcingX1); f[W] += 3.0 * c2o27 * (-forcingX1); f[N] += 3.0 * c2o27 * (forcingX2); @@ -240,7 +240,7 @@ void BGKLBMKernel::calculate(int /*step*/) } ////////////////////////////////////////////////////////////////////////// #ifdef PROOF_CORRECTNESS - LBMReal rho_post = f[ZERO] + f[E] + f[W] + f[N] + f[S] + f[T] + f[B] + f[NE] + f[SW] + f[SE] + + LBMReal rho_post = f[REST] + f[E] + f[W] + f[N] + f[S] + f[T] + f[B] + f[NE] + f[SW] + f[SE] + f[NW] + f[TE] + f[BW] + f[BE] + f[TW] + f[TN] + f[BS] + f[BN] + f[TS] + f[TNE] + f[TSW] + f[TSE] + f[TNW] + f[BNE] + f[BSW] + f[BSE] + f[BNW]; LBMReal dif = drho - rho_post; @@ -284,7 +284,7 @@ void BGKLBMKernel::calculate(int /*step*/) (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[D3Q27System::INV_BNW]; (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p) = f[D3Q27System::INV_BNE]; - (*this->zeroDistributions)(x1, x2, x3) = f[D3Q27System::ZERO]; + (*this->zeroDistributions)(x1, x2, x3) = f[D3Q27System::REST]; ////////////////////////////////////////////////////////////////////////// } } diff --git a/src/cpu/VirtualFluidsCore/LBM/CompressibleOffsetInterpolationProcessor.cpp b/src/cpu/VirtualFluidsCore/LBM/CompressibleOffsetInterpolationProcessor.cpp index 04e9fe233bd42da3cfc7e156f080f57b9be505c1..036b35379ec218585a43a67d03f2a03deb79d6e5 100644 --- a/src/cpu/VirtualFluidsCore/LBM/CompressibleOffsetInterpolationProcessor.cpp +++ b/src/cpu/VirtualFluidsCore/LBM/CompressibleOffsetInterpolationProcessor.cpp @@ -497,7 +497,7 @@ void CompressibleOffsetInterpolationProcessor::calcInterpolatedNodeCF(LBMReal* f f[BSW] = f_TNE + xs*x_TNE + ys*y_TNE + zs*z_TNE + xs*ys*xy_TNE + xs*zs*xz_TNE + ys*zs*yz_TNE + feq[BSW]; f[BSE] = f_TNW + xs*x_TNW + ys*y_TNW + zs*z_TNW + xs*ys*xy_TNW + xs*zs*xz_TNW + ys*zs*yz_TNW + feq[BSE]; f[BNW] = f_TSE + xs*x_TSE + ys*y_TSE + zs*z_TSE + xs*ys*xy_TSE + xs*zs*xz_TSE + ys*zs*yz_TSE + feq[BNW]; - f[ZERO] = f_ZERO + xs*x_ZERO + ys*y_ZERO + zs*z_ZERO + feq[ZERO]; + f[REST] = f_ZERO + xs*x_ZERO + ys*y_ZERO + zs*z_ZERO + feq[REST]; } ////////////////////////////////////////////////////////////////////////// //Position SWB -0.25, -0.25, -0.25 @@ -691,7 +691,7 @@ void CompressibleOffsetInterpolationProcessor::calcInterpolatedNodeFC(LBMReal* f f[BNW] = f_TSE + feq[BNW]; f[BSE] = f_TNW + feq[BSE]; f[BSW] = f_TNE + feq[BSW]; - f[ZERO] = f_ZERO + feq[ZERO]; + f[REST] = f_ZERO + feq[REST]; } ////////////////////////////////////////////////////////////////////////// void CompressibleOffsetInterpolationProcessor::calcInterpolatedVelocity(LBMReal x, LBMReal y, LBMReal z, LBMReal& vx1, LBMReal& vx2, LBMReal& vx3) diff --git a/src/cpu/VirtualFluidsCore/LBM/CompressibleOffsetMomentsInterpolationProcessor.cpp b/src/cpu/VirtualFluidsCore/LBM/CompressibleOffsetMomentsInterpolationProcessor.cpp index 54d3b32b26cea7f597b0c487668ca74cb99193ad..4dec637580458cfa77d151b810df04a853116de8 100644 --- a/src/cpu/VirtualFluidsCore/LBM/CompressibleOffsetMomentsInterpolationProcessor.cpp +++ b/src/cpu/VirtualFluidsCore/LBM/CompressibleOffsetMomentsInterpolationProcessor.cpp @@ -803,7 +803,7 @@ void CompressibleOffsetMomentsInterpolationProcessor::calcInterpolatedNodeCF(LBM f[BS] = mfbaa; f[BN] = mfbca; f[TS] = mfbac; - f[ZERO] = mfbbb; + f[REST] = mfbbb; f[TNE] = mfccc; f[TSE] = mfcac; f[BNE] = mfcca; @@ -1251,7 +1251,7 @@ void CompressibleOffsetMomentsInterpolationProcessor::calcInterpolatedNodeFC(LBM f[BS] = mfbaa; f[BN] = mfbca; f[TS] = mfbac; - f[ZERO] = mfbbb; + f[REST] = mfbbb; f[TNE] = mfccc; f[TSE] = mfcac; f[BNE] = mfcca; diff --git a/src/cpu/VirtualFluidsCore/LBM/CompressibleOffsetSquarePressureInterpolationProcessor.cpp b/src/cpu/VirtualFluidsCore/LBM/CompressibleOffsetSquarePressureInterpolationProcessor.cpp index 3436dd58471605b08e6cbfdc676474c4418cedfe..7a19f156e4447acd9d4451ce4c1a1de7bf5c990d 100644 --- a/src/cpu/VirtualFluidsCore/LBM/CompressibleOffsetSquarePressureInterpolationProcessor.cpp +++ b/src/cpu/VirtualFluidsCore/LBM/CompressibleOffsetSquarePressureInterpolationProcessor.cpp @@ -798,7 +798,7 @@ void CompressibleOffsetSquarePressureInterpolationProcessor::calcInterpolatedNod f[BS] = mfbaa; f[BN] = mfbca; f[TS] = mfbac; - f[ZERO] = mfbbb; + f[REST] = mfbbb; f[TNE] = mfccc; f[TSE] = mfcac; f[BNE] = mfcca; @@ -1251,7 +1251,7 @@ void CompressibleOffsetSquarePressureInterpolationProcessor::calcInterpolatedNod f[BS] = mfbaa; f[BN] = mfbca; f[TS] = mfbac; - f[ZERO] = mfbbb; + f[REST] = mfbbb; f[TNE] = mfccc; f[TSE] = mfcac; f[BNE] = mfcca; diff --git a/src/cpu/VirtualFluidsCore/LBM/D3Q27System.cpp b/src/cpu/VirtualFluidsCore/LBM/D3Q27System.cpp index 874a24fbb0e18dcd963048ca3dbe0548131acf56..5e88242fa23bdf37386f4f4d293ed7c2c33750ee 100644 --- a/src/cpu/VirtualFluidsCore/LBM/D3Q27System.cpp +++ b/src/cpu/VirtualFluidsCore/LBM/D3Q27System.cpp @@ -4,23 +4,12 @@ namespace D3Q27System { using namespace UbMath; -// index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18//falsch -// f: ZERO, E, W, N, S, T, B, NE, SW, SE, NW, TE, BW, BE, TW, TN, BS, BN, TS, TNE TNW TSE TSW BNE BNW -// BSE BSW const int EX1[] = { 0, 1, -1, 0, 0, 0, 0, 1, -1, 1, -1, 1, -1, 1, -1, 0, 0, 0, 0, 1, -1, 1, -1, -// 1, -1, 1, -1 }; const int EX2[] = { 0, 0, 0, 1, -1, 0, 0, 1, -1, -1, 1, 0, 0, 0, 0, 1, -1, 1, -1, 1, 1, -// -1, -1, 1, 1, -1, -1 }; const int EX3[] = { 0, 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 1, -1, -1, 1, 1, -1, -1, -// 1, 1, 1, 1, 1, -1, -1, -1, -1 }; - -// index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 -// f: E, W, N, S, T, B, NE, SW, SE, NW, TE, BW, BE, TW, TN, BS, BN, TS, TNE TNW TSE TSW BNE BNW BSE -// BSW +// index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 20 21 22 23 24 25 26 +// f: E, W, N, S, T, B, NE, SW, SE, NW, TE, BW, BE, TW, TN, BS, BN, TS, TNE TNW TSE TSW BNE BNW BSE BSW const int DX1[] = { 1, -1, 0, 0, 0, 0, 1, -1, 1, -1, 1, -1, 1, -1, 0, 0, 0, 0, 1, -1, 1, -1, 1, -1, 1, -1 }; const int DX2[] = { 0, 0, 1, -1, 0, 0, 1, -1, -1, 1, 0, 0, 0, 0, 1, -1, 1, -1, 1, 1, -1, -1, 1, 1, -1, -1 }; const int DX3[] = { 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 1, -1, -1, 1, 1, -1, -1, 1, 1, 1, 1, 1, -1, -1, -1, -1 }; -////index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 -////f: E, W, N, S, T, B, NE, SW, SE, NW, TE, BW, BE, TW, TN, BS, BN, TS, TNE TNW TSE TSW BNE BNW -///BSE BSW const double WEIGTH[] = { c2o27, c2o27, c2o27, c2o27, c2o27, c2o27, c1o54, c1o54, c1o54, c1o54, c1o54, c1o54, c1o54, c1o54, c1o54, c1o54, c1o54, c1o54, c1o216, c1o216, c1o216, c1o216, c1o216, c1o216, c1o216, c1o216, c8o27 }; @@ -29,181 +18,4 @@ const int INVDIR[] = { INV_E, INV_W, INV_N, INV_S, INV_T, INV_B, INV INV_NW, INV_TE, INV_BW, INV_BE, INV_TW, INV_TN, INV_BS, INV_BN, INV_TS, INV_TNE, INV_TNW, INV_TSE, INV_TSW, INV_BNE, INV_BNW, INV_BSE, INV_BSW }; -//// The x,y,z component for each normalized direction -//const double cNorm[3][ENDDIR] = { { double(DX1[0]), -// double(DX1[1]), -// double(DX1[2]), -// double(DX1[3]), -// double(DX1[4]), -// double(DX1[5]), -// double(DX1[6]) / std::sqrt(double(2)), -// double(DX1[7]) / std::sqrt(double(2)), -// double(DX1[8]) / std::sqrt(double(2)), -// double(DX1[9]) / std::sqrt(double(2)), -// double(DX1[10]) / std::sqrt(double(2)), -// double(DX1[11]) / std::sqrt(double(2)), -// double(DX1[12]) / std::sqrt(double(2)), -// double(DX1[13]) / std::sqrt(double(2)), -// double(DX1[14]), -// double(DX1[15]), -// double(DX1[16]), -// double(DX1[17]), -// double(DX1[18]) / std::sqrt(double(3)), -// double(DX1[19]) / std::sqrt(double(3)), -// double(DX1[20]) / std::sqrt(double(3)), -// double(DX1[21]) / std::sqrt(double(3)), -// double(DX1[22]) / std::sqrt(double(3)), -// double(DX1[23]) / std::sqrt(double(3)), -// double(DX1[24]) / std::sqrt(double(3)), -// double(DX1[25]) / std::sqrt(double(3)) }, -// { double(DX2[0]), -// double(DX2[1]), -// double(DX2[2]), -// double(DX2[3]), -// double(DX2[4]), -// double(DX2[5]), -// double(DX2[6]) / std::sqrt(double(2)), -// double(DX2[7]) / std::sqrt(double(2)), -// double(DX2[8]) / std::sqrt(double(2)), -// double(DX2[9]) / std::sqrt(double(2)), -// double(DX2[10]), -// double(DX2[11]), -// double(DX2[12]), -// double(DX2[13]), -// double(DX2[14]) / std::sqrt(double(2)), -// double(DX2[15]) / std::sqrt(double(2)), -// double(DX2[16]) / std::sqrt(double(2)), -// double(DX2[17]) / std::sqrt(double(2)), -// double(DX2[18]) / std::sqrt(double(3)), -// double(DX2[19]) / std::sqrt(double(3)), -// double(DX2[20]) / std::sqrt(double(3)), -// double(DX2[21]) / std::sqrt(double(3)), -// double(DX2[22]) / std::sqrt(double(3)), -// double(DX2[23]) / std::sqrt(double(3)), -// double(DX2[24]) / std::sqrt(double(3)), -// double(DX2[25]) / std::sqrt(double(3)) }, -// { double(DX3[0]), -// double(DX3[1]), -// double(DX3[2]), -// double(DX3[3]), -// double(DX3[4]), -// double(DX3[5]), -// double(DX3[6]), -// double(DX3[7]), -// double(DX3[8]), -// double(DX3[9]), -// double(DX3[10]) / std::sqrt(double(2)), -// double(DX3[11]) / std::sqrt(double(2)), -// double(DX3[12]) / std::sqrt(double(2)), -// double(DX3[13]) / std::sqrt(double(2)), -// double(DX3[14]) / std::sqrt(double(2)), -// double(DX3[15]) / std::sqrt(double(2)), -// double(DX3[16]) / std::sqrt(double(2)), -// double(DX3[17]) / std::sqrt(double(2)), -// double(DX3[18]) / std::sqrt(double(3)), -// double(DX3[19]) / std::sqrt(double(3)), -// double(DX3[20]) / std::sqrt(double(3)), -// double(DX3[21]) / std::sqrt(double(3)), -// double(DX3[22]) / std::sqrt(double(3)), -// double(DX3[23]) / std::sqrt(double(3)), -// double(DX3[24]) / std::sqrt(double(3)), -// double(DX3[25]) / std::sqrt(double(3)) } }; - -} // namespace D3Q27System - -// const int FSTARTDIR = 0; -// const int FENDDIR = 25; //D3Q27 - -// const int STARTF = 0; -// const int ENDF = 26; //D3Q27 - -// const int EX1[ENDF+1]; -// const int EX2[ENDF+1]; -// const int EX3[ENDF+1]; - -// const int STARTDIR = 0; -// const int ENDDIR = 26; //alle geometrischen richtungen - -// const int DX1[ENDDIR+1]; -// const int DX2[ENDDIR+1]; -// const int DX3[ENDDIR+1]; - -// const int E /*f1 */ = 0; -// const int W /*f2 */ = 1; -// const int N /*f3 */ = 2; -// const int S /*f4 */ = 3; -// const int T /*f5 */ = 4; -// const int B /*f6 */ = 5; -// const int NE /*f7 */ = 6; -// const int SW /*f8 */ = 7; -// const int SE /*f9 */ = 8; -// const int NW /*f10*/ = 9; -// const int TE /*f11*/ = 10; -// const int BW /*f12*/ = 11; -// const int BE /*f13*/ = 12; -// const int TW /*f14*/ = 13; -// const int TN /*f15*/ = 14; -// const int BS /*f16*/ = 15; -// const int BN /*f17*/ = 16; -// const int TS /*f18*/ = 17; -// const int TNE = 18; -// const int TNW = 19; -// const int TSE = 20; -// const int TSW = 21; -// const int BNE = 22; -// const int BNW = 23; -// const int BSE = 24; -// const int BSW = 25; -// const int ZERO /*f0 */ = 26; - -// const int INV_E = W; -// const int INV_W = E; -// const int INV_N = S; -// const int INV_S = N; -// const int INV_T = B; -// const int INV_B = T; -// const int INV_NE = SW; -// const int INV_SW = NE; -// const int INV_SE = NW; -// const int INV_NW = SE; -// const int INV_TE = BW; -// const int INV_BW = TE; -// const int INV_BE = TW; -// const int INV_TW = BE; -// const int INV_TN = BS; -// const int INV_BS = TN; -// const int INV_BN = TS; -// const int INV_TS = BN; -// const int INV_TNE = BSW; -// const int INV_TNW = BSE; -// const int INV_TSE = BNW; -// const int INV_TSW = BNE; -// const int INV_BNE = TSW; -// const int INV_BNW = TSE; -// const int INV_BSE = TNW; -// const int INV_BSW = TNE; - -// const int INVDIR[ENDDIR+1]; - -// const int M_RHO = 0; -// const int M_EN = 1; -// const int M_EPS = 2; -// const int M_JX1 = 3; -// const int M_QX1 = 4; -// const int M_JX2 = 5; -// const int M_QX2 = 6; -// const int M_JX3 = 7; -// const int M_QX3 = 8; -// const int M_3PX1X1 = 9; -// const int M_3PIX1X1 = 10; -// const int M_PWW = 11; -// const int M_PIWW = 12; -// const int M_PX1X2 = 13; -// const int M_PX2X3 = 14; -// const int M_PX1X3 = 15; -// const int M_MX1 = 16; -// const int M_MX2 = 17; -// const int M_MX3 = 18; - -// const int STARTM = 0; -// const int ENDM = 18; //D3Q27 +} // namespace D3Q27System \ No newline at end of file diff --git a/src/cpu/VirtualFluidsCore/LBM/D3Q27System.h b/src/cpu/VirtualFluidsCore/LBM/D3Q27System.h index 7b3e1e4ccbab55ba088bc8d6b3c4d62f56a6cc03..8f8c376459ce0b9bd4d0b7691655c173a6d4e149 100644 --- a/src/cpu/VirtualFluidsCore/LBM/D3Q27System.h +++ b/src/cpu/VirtualFluidsCore/LBM/D3Q27System.h @@ -35,1101 +35,1207 @@ #define D3Q27SYSTEM_H #include <cmath> -#include <string> #include <iostream> +#include <string> -#include <basics/utilities/UbException.h> -#include <basics/utilities/UbTuple.h> -#include <basics/utilities/UbMath.h> -#include <basics/utilities/UbSystem.h> -//#include "Patch3DSystem.h" #include "LBMSystem.h" +#include "UbException.h" +#include "UbMath.h" -/*=========================================================================*/ -/* D3Q27System */ -/* */ -/** -class for global system-functions -<BR><BR> -@author <A HREF="mailto:kucher@irmb.tu-bs.de">K. Kucher</A> -@version 1.0 - 22.10.09 -*/ - -/* -usage: ... -*/ - +//! \brief namespace for global system-functions namespace D3Q27System { - //enum COLLISIONMODEL { UNDEFINED, INCOMPLBGKMODEL, COMPLBGKMODEL, COMPLBGKWTMODEL, INCOMPLBGKLESMODEL, INCOMPLBGKNONNEWTONIANMODEL - // , INCOMPGLBEJTMODEL, COMPGLBEJTMODEL, COMPGLBEJTWTMODEL, INCOMPGLBEJTLESMODEL, INCOMPGLBEJTWALEMODEL - // , CASCADEDMODEL}; - // - // #if defined(RCF_USE_SF_SERIALIZATION) && (CAB_RCF <= 903) - // SF_SERIALIZE_ENUM(COLLISIONMODEL) //muss im namespace stehen, sonst funzt es nicht! - // #endif - - ///*=====================================================================*/ - //std::string toString(const COLLISIONMODEL& model); - ///*=====================================================================*/ - //COLLISIONMODEL getCollModelByString(const std::string& str); - ///*=====================================================================*/ - - ///*=====================================================================*/ - //static bool isCompModel(const COLLISIONMODEL& model) - //{ - // switch(model) - // { - // case COMPLBGKMODEL : return true; - // case COMPLBGKWTMODEL : return true; - // case COMPGLBEJTWTMODEL : return true; - // case COMPGLBEJTMODEL : return true; - // case CASCADEDMODEL : return true; - // - // case INCOMPLBGKMODEL : return false; - // case INCOMPGLBEJTMODEL : return false; - // case INCOMPLBGKLESMODEL : return false; - // case INCOMPGLBEJTLESMODEL : return false; - // case INCOMPGLBEJTWALEMODEL : return false; - // case INCOMPLBGKNONNEWTONIANMODEL : return false; - - // default: throw UbException(UB_EXARGS,"unknown model"); - // } - //} - ///*=====================================================================*/ - //static bool isGLBEModel(const COLLISIONMODEL& model) - //{ - // switch(model) - // { - // case COMPGLBEJTWTMODEL : return true; - // case COMPGLBEJTMODEL : return true; - // case INCOMPGLBEJTMODEL : return true; - // case INCOMPGLBEJTLESMODEL : return true; - // case INCOMPGLBEJTWALEMODEL : return false; - - // case COMPLBGKMODEL : return false; - // case COMPLBGKWTMODEL : return false; - // case INCOMPLBGKMODEL : return false; - // case INCOMPLBGKLESMODEL : return false; - // case INCOMPLBGKNONNEWTONIANMODEL : return false; - - // default: throw UbException(UB_EXARGS,"unknown model"); - // } - //} - //static bool isLESModel(const COLLISIONMODEL& model) - //{ - // switch(model) - // { - // case INCOMPGLBEJTLESMODEL : return true; - // case INCOMPLBGKLESMODEL : return true; - // case INCOMPGLBEJTWALEMODEL : return true; - // - // case COMPGLBEJTWTMODEL : return false; - // case COMPGLBEJTMODEL : return false; - // case INCOMPGLBEJTMODEL : return false; - // case COMPLBGKMODEL : return false; - // case COMPLBGKWTMODEL : return false; - // case INCOMPLBGKMODEL : return false; - // case INCOMPLBGKNONNEWTONIANMODEL : return false; - - // default: throw UbException(UB_EXARGS,"unknown model"); - // } - //} - - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - //DIRECTION STUFF - static const int FSTARTDIR = 0; - static const int FENDDIR = 25; //D3Q27 - - //static const int FSTARTDIR = 1; - //static const int FENDDIR = 26; //D3Q27 +////////////////////////////////////////////////////////////////////////// +// DIRECTION STUFF +static const int FSTARTDIR = 0; +static const int FENDDIR = 25; // D3Q27 - static const int STARTF = 0; - static const int ENDF = 26; //D3Q27 +static const int STARTF = 0; +static const int ENDF = 26; // D3Q27 - //extern const int EX1[ENDF+1]; - //extern const int EX2[ENDF+1]; - //extern const int EX3[ENDF+1]; +static const int STARTDIR = 0; +static const int ENDDIR = 26; // all geometric directions - static const int STARTDIR = 0; - static const int ENDDIR = 26; //alle geometrischen richtungen +extern const int DX1[ENDDIR + 1]; +extern const int DX2[ENDDIR + 1]; +extern const int DX3[ENDDIR + 1]; +extern const double WEIGTH[ENDDIR + 1]; - extern const int DX1[ENDDIR + 1]; - extern const int DX2[ENDDIR + 1]; - extern const int DX3[ENDDIR + 1]; - extern const double WEIGTH[ENDDIR + 1]; +extern const double cNorm[3][ENDDIR]; - //static const int ZERO /*f0 */ = 0; - //static const int E /*f1 */ = 1; - //static const int W /*f2 */ = 2; - //static const int N /*f3 */ = 3; - //static const int S /*f4 */ = 4; - //static const int T /*f5 */ = 5; - //static const int B /*f6 */ = 6; - //static const int NE /*f7 */ = 7; - //static const int SW /*f8 */ = 8; - //static const int SE /*f9 */ = 9; - //static const int NW /*f10*/ = 10; - //static const int TE /*f11*/ = 11; - //static const int BW /*f12*/ = 12; - //static const int BE /*f13*/ = 13; - //static const int TW /*f14*/ = 14; - //static const int TN /*f15*/ = 15; - //static const int BS /*f16*/ = 16; - //static const int BN /*f17*/ = 17; - //static const int TS /*f18*/ = 18; - //static const int TNE = 19; - //static const int TNW = 20; - //static const int TSE = 21; - //static const int TSW = 22; - //static const int BNE = 23; - //static const int BNW = 24; - //static const int BSE = 25; - //static const int BSW = 26; +static const int E = 0; +static const int W = 1; +static const int N = 2; +static const int S = 3; +static const int T = 4; +static const int B = 5; +static const int NE = 6; +static const int SW = 7; +static const int SE = 8; +static const int NW = 9; +static const int TE = 10; +static const int BW = 11; +static const int BE = 12; +static const int TW = 13; +static const int TN = 14; +static const int BS = 15; +static const int BN = 16; +static const int TS = 17; +static const int TNE = 18; +static const int TNW = 19; +static const int TSE = 20; +static const int TSW = 21; +static const int BNE = 22; +static const int BNW = 23; +static const int BSE = 24; +static const int BSW = 25; +static const int REST = 26; - static const int E /*f1 */ = 0; - static const int W /*f2 */ = 1; - static const int N /*f3 */ = 2; - static const int S /*f4 */ = 3; - static const int T /*f5 */ = 4; - static const int B /*f6 */ = 5; - static const int NE /*f7 */ = 6; - static const int SW /*f8 */ = 7; - static const int SE /*f9 */ = 8; - static const int NW /*f10*/ = 9; - static const int TE /*f11*/ = 10; - static const int BW /*f12*/ = 11; - static const int BE /*f13*/ = 12; - static const int TW /*f14*/ = 13; - static const int TN /*f15*/ = 14; - static const int BS /*f16*/ = 15; - static const int BN /*f17*/ = 16; - static const int TS /*f18*/ = 17; - static const int TNE = 18; - static const int TNW = 19; - static const int TSE = 20; - static const int TSW = 21; - static const int BNE = 22; - static const int BNW = 23; - static const int BSE = 24; - static const int BSW = 25; - static const int ZERO /*f0 */ = 26; +static const int INV_E = W; +static const int INV_W = E; +static const int INV_N = S; +static const int INV_S = N; +static const int INV_T = B; +static const int INV_B = T; +static const int INV_NE = SW; +static const int INV_SW = NE; +static const int INV_SE = NW; +static const int INV_NW = SE; +static const int INV_TE = BW; +static const int INV_BW = TE; +static const int INV_BE = TW; +static const int INV_TW = BE; +static const int INV_TN = BS; +static const int INV_BS = TN; +static const int INV_BN = TS; +static const int INV_TS = BN; +static const int INV_TNE = BSW; +static const int INV_TNW = BSE; +static const int INV_TSE = BNW; +static const int INV_TSW = BNE; +static const int INV_BNE = TSW; +static const int INV_BNW = TSE; +static const int INV_BSE = TNW; +static const int INV_BSW = TNE; - static const int INV_E = W; - static const int INV_W = E; - static const int INV_N = S; - static const int INV_S = N; - static const int INV_T = B; - static const int INV_B = T; - static const int INV_NE = SW; - static const int INV_SW = NE; - static const int INV_SE = NW; - static const int INV_NW = SE; - static const int INV_TE = BW; - static const int INV_BW = TE; - static const int INV_BE = TW; - static const int INV_TW = BE; - static const int INV_TN = BS; - static const int INV_BS = TN; - static const int INV_BN = TS; - static const int INV_TS = BN; - static const int INV_TNE = BSW; - static const int INV_TNW = BSE; - static const int INV_TSE = BNW; - static const int INV_TSW = BNE; - static const int INV_BNE = TSW; - static const int INV_BNW = TSE; - static const int INV_BSE = TNW; - static const int INV_BSW = TNE; +extern const int INVDIR[ENDDIR + 1]; - extern const int INVDIR[ENDDIR + 1]; +static const int ET_E = 0; +static const int ET_W = 0; +static const int ET_N = 1; +static const int ET_S = 1; +static const int ET_T = 2; +static const int ET_B = 2; +static const int ET_NE = 3; +static const int ET_SW = 3; +static const int ET_SE = 4; +static const int ET_NW = 4; +static const int ET_TE = 5; +static const int ET_BW = 5; +static const int ET_BE = 6; +static const int ET_TW = 6; +static const int ET_TN = 7; +static const int ET_BS = 7; +static const int ET_BN = 8; +static const int ET_TS = 8; +static const int ET_TNE = 9; +static const int ET_BSW = 9; +static const int ET_TNW = 10; +static const int ET_BSE = 10; +static const int ET_TSE = 11; +static const int ET_BNW = 11; +static const int ET_TSW = 12; +static const int ET_BNE = 12; - static const int ET_E = 0; - static const int ET_W = 0; - static const int ET_N = 1; - static const int ET_S = 1; - static const int ET_T = 2; - static const int ET_B = 2; - static const int ET_NE = 3; - static const int ET_SW = 3; - static const int ET_SE = 4; - static const int ET_NW = 4; - static const int ET_TE = 5; - static const int ET_BW = 5; - static const int ET_BE = 6; - static const int ET_TW = 6; - static const int ET_TN = 7; - static const int ET_BS = 7; - static const int ET_BN = 8; - static const int ET_TS = 8; - static const int ET_TNE = 9; - static const int ET_BSW = 9; - static const int ET_TNW = 10; - static const int ET_BSE = 10; - static const int ET_TSE = 11; - static const int ET_BNW = 11; - static const int ET_TSW = 12; - static const int ET_BNE = 12; - - - ////////////////////////////////////////////////////////////////////////// - //MACROSCOPIC VALUES - /*=====================================================================*/ - static LBMReal getDensity(const LBMReal* const& f/*[27]*/) - { - return ((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]))) + ((f[E] + f[W]) + (f[N] + f[S]) - + (f[T] + f[B])) + f[ZERO]; - } - /*=====================================================================*/ - //ACHTUNG: gilt nicht fuer alle modelle -> praedikat verwenden anstelle static! toDo - static LBMReal getPressure(const LBMReal* const& f/*[27]*/) - { - return REAL_CAST(UbMath::c1o3) * getDensity(f); - } - /*=====================================================================*/ - static LBMReal getIncompVelocityX1(const LBMReal* const& f/*[27]*/) - { - return ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[BSE] - f[TNW]) + (f[BNE] - f[TSW]))) + - (((f[BE] - f[TW]) + (f[TE] - f[BW])) + ((f[SE] - f[NW]) + (f[NE] - f[SW]))) + - (f[E] - f[W])); - } - /*=====================================================================*/ - static LBMReal getIncompVelocityX2(const LBMReal* const& f/*[27]*/) - { - return ((((f[TNE] - f[BSW]) + (f[BNW] - f[TSE])) + ((f[TNW] - f[BSE]) + (f[BNE] - f[TSW]))) + - (((f[BN] - f[TS]) + (f[TN] - f[BS])) + ((f[NW] - f[SE]) + (f[NE] - f[SW]))) + - (f[N] - f[S])); - } - /*=====================================================================*/ - static LBMReal getIncompVelocityX3(const LBMReal* const& f/*[27]*/) - { - return ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[TNW] - f[BSE]) + (f[TSW] - f[BNE]))) + - (((f[TS] - f[BN]) + (f[TN] - f[BS])) + ((f[TW] - f[BE]) + (f[TE] - f[BW]))) + - (f[T] - f[B])); - } - /*=====================================================================*/ - static void calcDensity(const LBMReal* const& f/*[27]*/, LBMReal& rho) - { - rho = ((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]))) + ((f[E] + f[W]) + (f[N] + f[S]) - + (f[T] + f[B])) + f[ZERO]; - - } - /*=====================================================================*/ - static void calcIncompVelocityX1(const LBMReal* const& f/*[27]*/, LBMReal& vx1) - { - vx1 = ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[BSE] - f[TNW]) + (f[BNE] - f[TSW]))) + - (((f[BE] - f[TW]) + (f[TE] - f[BW])) + ((f[SE] - f[NW]) + (f[NE] - f[SW]))) + - (f[E] - f[W])); - } - /*=====================================================================*/ - static void calcIncompVelocityX2(const LBMReal* const& f/*[27]*/, LBMReal& vx2) - { - vx2 = ((((f[TNE] - f[BSW]) + (f[BNW] - f[TSE])) + ((f[TNW] - f[BSE]) + (f[BNE] - f[TSW]))) + - (((f[BN] - f[TS]) + (f[TN] - f[BS])) + ((f[NW] - f[SE]) + (f[NE] - f[SW]))) + - (f[N] - f[S])); - } - /*=====================================================================*/ - static void calcIncompVelocityX3(const LBMReal* const& f/*[27]*/, LBMReal& vx3) - { - vx3 = ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[TNW] - f[BSE]) + (f[TSW] - f[BNE]))) + - (((f[TS] - f[BN]) + (f[TN] - f[BS])) + ((f[TW] - f[BE]) + (f[TE] - f[BW]))) + - (f[T] - f[B])); - } - /*=====================================================================*/ - static LBMReal getCompVelocityX1(const LBMReal* const& f/*[27]*/) - { - return ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[BSE] - f[TNW]) + (f[BNE] - f[TSW]))) + - (((f[BE] - f[TW]) + (f[TE] - f[BW])) + ((f[SE] - f[NW]) + (f[NE] - f[SW]))) + - (f[E] - f[W])) / getDensity(f); - } - /*=====================================================================*/ - static LBMReal getCompVelocityX2(const LBMReal* const& f/*[27]*/) - { - return ((((f[TNE] - f[BSW]) + (f[BNW] - f[TSE])) + ((f[TNW] - f[BSE]) + (f[BNE] - f[TSW]))) + - (((f[BN] - f[TS]) + (f[TN] - f[BS])) + ((f[NW] - f[SE]) + (f[NE] - f[SW]))) + - (f[N] - f[S])) / getDensity(f); - } - /*=====================================================================*/ - static LBMReal getCompVelocityX3(const LBMReal* const& f/*[27]*/) - { - return ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[TNW] - f[BSE]) + (f[TSW] - f[BNE]))) + - (((f[TS] - f[BN]) + (f[TN] - f[BS])) + ((f[TW] - f[BE]) + (f[TE] - f[BW]))) + - (f[T] - f[B])) / getDensity(f); - } - /*=====================================================================*/ - static void calcCompVelocityX1(const LBMReal* const& f/*[27]*/, LBMReal& vx1) - { - vx1 = ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[BSE] - f[TNW]) + (f[BNE] - f[TSW]))) + - (((f[BE] - f[TW]) + (f[TE] - f[BW])) + ((f[SE] - f[NW]) + (f[NE] - f[SW]))) + - (f[E] - f[W])) / getDensity(f); - } - /*=====================================================================*/ - static void calcCompVelocityX2(const LBMReal* const& f/*[27]*/, LBMReal& vx2) - { - vx2 = ((((f[TNE] - f[BSW]) + (f[BNW] - f[TSE])) + ((f[TNW] - f[BSE]) + (f[BNE] - f[TSW]))) + - (((f[BN] - f[TS]) + (f[TN] - f[BS])) + ((f[NW] - f[SE]) + (f[NE] - f[SW]))) + - (f[N] - f[S])) / getDensity(f); - } - /*=====================================================================*/ - static void calcCompVelocityX3(const LBMReal* const& f/*[27]*/, LBMReal& vx3) - { - vx3 = ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[TNW] - f[BSE]) + (f[TSW] - f[BNE]))) + - (((f[TS] - f[BN]) + (f[TN] - f[BS])) + ((f[TW] - f[BE]) + (f[TE] - f[BW]))) + - (f[T] - f[B])) / getDensity(f); - } - /*=====================================================================*/ - static void calcIncompMacroscopicValues(const LBMReal* const& f/*[27]*/, LBMReal& rho, LBMReal& vx1, LBMReal& vx2, LBMReal& vx3) - { - D3Q27System::calcDensity(f, rho); - D3Q27System::calcIncompVelocityX1(f, vx1); - D3Q27System::calcIncompVelocityX2(f, vx2); - D3Q27System::calcIncompVelocityX3(f, vx3); - } - - /*=====================================================================*/ - static void calcCompMacroscopicValues(const LBMReal* const& f/*[27]*/, LBMReal& drho, LBMReal& vx1, LBMReal& vx2, LBMReal& vx3) - { - D3Q27System::calcDensity(f, drho); - D3Q27System::calcIncompVelocityX1(f, vx1); - D3Q27System::calcIncompVelocityX2(f, vx2); - D3Q27System::calcIncompVelocityX3(f, vx3); - LBMReal rho = drho + UbMath::one; - vx1 /= rho; - vx2 /= rho; - vx3 /= rho; - } - ////////////////////////////////////////////////////////////////////////// - static LBMReal getCompFeqForDirection(const int& direction, const LBMReal& drho, const LBMReal& vx1, const LBMReal& vx2, const LBMReal& vx3) - { - LBMReal cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); - - //switch(direction) - //{ - // case ZERO : return REAL_CAST( UbMath::c8o27*rho*(1.0-cu_sq)); - // case E : return REAL_CAST( UbMath::c2o27*rho*(1.0+3.0*( vx1 )+UbMath::c9o2*( vx1 )*( vx1 )-cu_sq)); - // case W : return REAL_CAST( UbMath::c2o27*rho*(1.0+3.0*(-vx1 )+UbMath::c9o2*(-vx1 )*(-vx1 )-cu_sq)); - // case N : return REAL_CAST( UbMath::c2o27*rho*(1.0+3.0*( vx2)+UbMath::c9o2*( vx2)*( vx2)-cu_sq)); - // case S : return REAL_CAST( UbMath::c2o27*rho*(1.0+3.0*( -vx2)+UbMath::c9o2*( -vx2)*( -vx2)-cu_sq)); - // case T : return REAL_CAST( UbMath::c2o27*rho*(1.0+3.0*( vx3 )+UbMath::c9o2*( vx3)*( vx3)-cu_sq)); - // case B : return REAL_CAST( UbMath::c2o27*rho*(1.0+3.0*( -vx3)+UbMath::c9o2*( -vx3)*( -vx3)-cu_sq)); - // case NE : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*( vx1+vx2)+UbMath::c9o2*( vx1+vx2)*( vx1+vx2)-cu_sq)); - // case SW : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*(-vx1-vx2)+UbMath::c9o2*(-vx1-vx2)*(-vx1-vx2)-cu_sq)); - // case SE : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*( vx1-vx2)+UbMath::c9o2*( vx1-vx2)*( vx1-vx2)-cu_sq)); - // case NW : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*(-vx1+vx2)+UbMath::c9o2*(-vx1+vx2)*(-vx1+vx2)-cu_sq)); - // case TE : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*( vx1+vx3)+UbMath::c9o2*( vx1+vx3)*( vx1+vx3)-cu_sq)); - // case BW : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*(-vx1-vx3)+UbMath::c9o2*(-vx1-vx3)*(-vx1-vx3)-cu_sq)); - // case BE : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*( vx1-vx3)+UbMath::c9o2*( vx1-vx3)*( vx1-vx3)-cu_sq)); - // case TW : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*(-vx1+vx3)+UbMath::c9o2*(-vx1+vx3)*(-vx1+vx3)-cu_sq)); - // case TN : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*( vx2+vx3)+UbMath::c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq)); - // case BS : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*(-vx2-vx3)+UbMath::c9o2*(-vx2-vx3)*(-vx2-vx3)-cu_sq)); - // case BN : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*( vx2-vx3)+UbMath::c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq)); - // case TS : return REAL_CAST( UbMath::c1o54*rho*(1.0+3.0*(-vx2+vx3)+UbMath::c9o2*(-vx2+vx3)*(-vx2+vx3)-cu_sq)); - // case TNE : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*( vx1+vx2+vx3)+UbMath::c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq)); - // case BSW : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*(-vx1-vx2-vx3)+UbMath::c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq)); - // case BNE : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*( vx1+vx2-vx3)+UbMath::c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq)); - // case TSW : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*(-vx1-vx2+vx3)+UbMath::c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq)); - // case TSE : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*( vx1-vx2+vx3)+UbMath::c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq)); - // case BNW : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*(-vx1+vx2-vx3)+UbMath::c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq)); - // case BSE : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*( vx1-vx2-vx3)+UbMath::c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq)); - // case TNW : return REAL_CAST(UbMath::c1o216*rho*(1.0+3.0*(-vx1+vx2+vx3)+UbMath::c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq)); - // default: throw UbException(UB_EXARGS,"unknown dir"); - //} - - - ////----- - LBMReal rho = drho + UbMath::one; - switch (direction) - { - case ZERO: return REAL_CAST(UbMath::c8o27 * (drho + rho * (-cu_sq))); - case E: return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (vx1)+UbMath::c9o2 * (vx1) * (vx1)-cu_sq))); - case W: return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (-vx1) + UbMath::c9o2 * (-vx1) * (-vx1) - cu_sq))); - case N: return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (vx2)+UbMath::c9o2 * (vx2) * (vx2)-cu_sq))); - case S: return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (-vx2) + UbMath::c9o2 * (-vx2) * (-vx2) - cu_sq))); - case T: return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (vx3)+UbMath::c9o2 * (vx3) * (vx3)-cu_sq))); - case B: return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (-vx3) + UbMath::c9o2 * (-vx3) * (-vx3) - cu_sq))); - case NE: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (vx1 + vx2) + UbMath::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq))); - case SW: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 - vx2) + UbMath::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq))); - case SE: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (vx1 - vx2) + UbMath::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq))); - case NW: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 + vx2) + UbMath::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq))); - case TE: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (vx1 + vx3) + UbMath::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq))); - case BW: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 - vx3) + UbMath::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq))); - case BE: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (vx1 - vx3) + UbMath::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq))); - case TW: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 + vx3) + UbMath::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq))); - case TN: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (vx2 + vx3) + UbMath::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq))); - case BS: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (-vx2 - vx3) + UbMath::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq))); - case BN: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (vx2 - vx3) + UbMath::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq))); - case TS: return REAL_CAST(UbMath::c1o54 * (drho + rho * (3.0 * (-vx2 + vx3) + UbMath::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq))); - case TNE: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (vx1 + vx2 + vx3) + UbMath::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq))); - case BSW: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 - vx2 - vx3) + UbMath::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq))); - case BNE: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (vx1 + vx2 - vx3) + UbMath::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq))); - case TSW: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 - vx2 + vx3) + UbMath::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq))); - case TSE: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (vx1 - vx2 + vx3) + UbMath::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq))); - case BNW: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 + vx2 - vx3) + UbMath::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq))); - case BSE: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (vx1 - vx2 - vx3) + UbMath::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq))); - case TNW: return REAL_CAST(UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 + vx2 + vx3) + UbMath::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq))); - default: throw UbException(UB_EXARGS, "unknown dir"); - } - - } - ////////////////////////////////////////////////////////////////////////// - static void calcCompFeq(LBMReal* const& feq/*[27]*/, const LBMReal& drho, const LBMReal& vx1, const LBMReal& vx2, const LBMReal& vx3) - { - //LBMReal cu_sq=1.5*(vx1*vx1+vx2*vx2+vx3*vx3); - - //feq[ZERO] = UbMath::c8o27*rho*(1.0-cu_sq); - //feq[E] = UbMath::c2o27*rho*(1.0+3.0*( vx1 )+UbMath::c9o2*( vx1 )*( vx1 )-cu_sq); - //feq[W] = UbMath::c2o27*rho*(1.0+3.0*(-vx1 )+UbMath::c9o2*(-vx1 )*(-vx1 )-cu_sq); - //feq[N] = UbMath::c2o27*rho*(1.0+3.0*( vx2)+UbMath::c9o2*( vx2)*( vx2)-cu_sq); - //feq[S] = UbMath::c2o27*rho*(1.0+3.0*( -vx2)+UbMath::c9o2*( -vx2)*( -vx2)-cu_sq); - //feq[T] = UbMath::c2o27*rho*(1.0+3.0*( vx3 )+UbMath::c9o2*( vx3)*( vx3)-cu_sq); - //feq[B] = UbMath::c2o27*rho*(1.0+3.0*( -vx3)+UbMath::c9o2*( -vx3)*( -vx3)-cu_sq); - //feq[NE] = UbMath::c1o54*rho*(1.0+3.0*( vx1+vx2)+UbMath::c9o2*( vx1+vx2)*( vx1+vx2)-cu_sq); - //feq[SW] = UbMath::c1o54*rho*(1.0+3.0*(-vx1-vx2)+UbMath::c9o2*(-vx1-vx2)*(-vx1-vx2)-cu_sq); - //feq[SE] = UbMath::c1o54*rho*(1.0+3.0*( vx1-vx2)+UbMath::c9o2*( vx1-vx2)*( vx1-vx2)-cu_sq); - //feq[NW] = UbMath::c1o54*rho*(1.0+3.0*(-vx1+vx2)+UbMath::c9o2*(-vx1+vx2)*(-vx1+vx2)-cu_sq); - //feq[TE] = UbMath::c1o54*rho*(1.0+3.0*( vx1+vx3)+UbMath::c9o2*( vx1+vx3)*( vx1+vx3)-cu_sq); - //feq[BW] = UbMath::c1o54*rho*(1.0+3.0*(-vx1-vx3)+UbMath::c9o2*(-vx1-vx3)*(-vx1-vx3)-cu_sq); - //feq[BE] = UbMath::c1o54*rho*(1.0+3.0*( vx1-vx3)+UbMath::c9o2*( vx1-vx3)*( vx1-vx3)-cu_sq); - //feq[TW] = UbMath::c1o54*rho*(1.0+3.0*(-vx1+vx3)+UbMath::c9o2*(-vx1+vx3)*(-vx1+vx3)-cu_sq); - //feq[TN] = UbMath::c1o54*rho*(1.0+3.0*( vx2+vx3)+UbMath::c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); - //feq[BS] = UbMath::c1o54*rho*(1.0+3.0*(-vx2-vx3)+UbMath::c9o2*(-vx2-vx3)*(-vx2-vx3)-cu_sq); - //feq[BN] = UbMath::c1o54*rho*(1.0+3.0*( vx2-vx3)+UbMath::c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); - //feq[TS] = UbMath::c1o54*rho*(1.0+3.0*(-vx2+vx3)+UbMath::c9o2*(-vx2+vx3)*(-vx2+vx3)-cu_sq); - //feq[TNE] = UbMath::c1o216*rho*(1.0+3.0*( vx1+vx2+vx3)+UbMath::c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - //feq[BSW] = UbMath::c1o216*rho*(1.0+3.0*(-vx1-vx2-vx3)+UbMath::c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - //feq[BNE] = UbMath::c1o216*rho*(1.0+3.0*( vx1+vx2-vx3)+UbMath::c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - //feq[TSW] = UbMath::c1o216*rho*(1.0+3.0*(-vx1-vx2+vx3)+UbMath::c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - //feq[TSE] = UbMath::c1o216*rho*(1.0+3.0*( vx1-vx2+vx3)+UbMath::c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - //feq[BNW] = UbMath::c1o216*rho*(1.0+3.0*(-vx1+vx2-vx3)+UbMath::c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - //feq[BSE] = UbMath::c1o216*rho*(1.0+3.0*( vx1-vx2-vx3)+UbMath::c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - //feq[TNW] = UbMath::c1o216*rho*(1.0+3.0*(-vx1+vx2+vx3)+UbMath::c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - - ////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// +// MACROSCOPIC VALUES +/*=====================================================================*/ +static LBMReal getDensity(const LBMReal *const &f /*[27]*/) +{ + return ((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]))) + + ((f[E] + f[W]) + (f[N] + f[S]) + (f[T] + f[B])) + f[REST]; +} +/*=====================================================================*/ +static LBMReal getPressure(const LBMReal *const &f /*[27]*/) { return REAL_CAST(UbMath::c1o3) * getDensity(f); } +/*=====================================================================*/ +static LBMReal getIncompVelocityX1(const LBMReal *const &f /*[27]*/) +{ + return ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[BSE] - f[TNW]) + (f[BNE] - f[TSW]))) + + (((f[BE] - f[TW]) + (f[TE] - f[BW])) + ((f[SE] - f[NW]) + (f[NE] - f[SW]))) + (f[E] - f[W])); +} +/*=====================================================================*/ +static LBMReal getIncompVelocityX2(const LBMReal *const &f /*[27]*/) +{ + return ((((f[TNE] - f[BSW]) + (f[BNW] - f[TSE])) + ((f[TNW] - f[BSE]) + (f[BNE] - f[TSW]))) + + (((f[BN] - f[TS]) + (f[TN] - f[BS])) + ((f[NW] - f[SE]) + (f[NE] - f[SW]))) + (f[N] - f[S])); +} +/*=====================================================================*/ +static LBMReal getIncompVelocityX3(const LBMReal *const &f /*[27]*/) +{ + return ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[TNW] - f[BSE]) + (f[TSW] - f[BNE]))) + + (((f[TS] - f[BN]) + (f[TN] - f[BS])) + ((f[TW] - f[BE]) + (f[TE] - f[BW]))) + (f[T] - f[B])); +} +/*=====================================================================*/ +static void calcDensity(const LBMReal *const &f /*[27]*/, LBMReal &rho) +{ + rho = ((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]))) + + ((f[E] + f[W]) + (f[N] + f[S]) + (f[T] + f[B])) + f[REST]; +} +/*=====================================================================*/ +static void calcIncompVelocityX1(const LBMReal *const &f /*[27]*/, LBMReal &vx1) +{ + vx1 = ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[BSE] - f[TNW]) + (f[BNE] - f[TSW]))) + + (((f[BE] - f[TW]) + (f[TE] - f[BW])) + ((f[SE] - f[NW]) + (f[NE] - f[SW]))) + (f[E] - f[W])); +} +/*=====================================================================*/ +static void calcIncompVelocityX2(const LBMReal *const &f /*[27]*/, LBMReal &vx2) +{ + vx2 = ((((f[TNE] - f[BSW]) + (f[BNW] - f[TSE])) + ((f[TNW] - f[BSE]) + (f[BNE] - f[TSW]))) + + (((f[BN] - f[TS]) + (f[TN] - f[BS])) + ((f[NW] - f[SE]) + (f[NE] - f[SW]))) + (f[N] - f[S])); +} +/*=====================================================================*/ +static void calcIncompVelocityX3(const LBMReal *const &f /*[27]*/, LBMReal &vx3) +{ + vx3 = ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[TNW] - f[BSE]) + (f[TSW] - f[BNE]))) + + (((f[TS] - f[BN]) + (f[TN] - f[BS])) + ((f[TW] - f[BE]) + (f[TE] - f[BW]))) + (f[T] - f[B])); +} +/*=====================================================================*/ +static LBMReal getCompVelocityX1(const LBMReal *const &f /*[27]*/) +{ + return ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[BSE] - f[TNW]) + (f[BNE] - f[TSW]))) + + (((f[BE] - f[TW]) + (f[TE] - f[BW])) + ((f[SE] - f[NW]) + (f[NE] - f[SW]))) + (f[E] - f[W])) / + getDensity(f); +} +/*=====================================================================*/ +static LBMReal getCompVelocityX2(const LBMReal *const &f /*[27]*/) +{ + return ((((f[TNE] - f[BSW]) + (f[BNW] - f[TSE])) + ((f[TNW] - f[BSE]) + (f[BNE] - f[TSW]))) + + (((f[BN] - f[TS]) + (f[TN] - f[BS])) + ((f[NW] - f[SE]) + (f[NE] - f[SW]))) + (f[N] - f[S])) / + getDensity(f); +} +/*=====================================================================*/ +static LBMReal getCompVelocityX3(const LBMReal *const &f /*[27]*/) +{ + return ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[TNW] - f[BSE]) + (f[TSW] - f[BNE]))) + + (((f[TS] - f[BN]) + (f[TN] - f[BS])) + ((f[TW] - f[BE]) + (f[TE] - f[BW]))) + (f[T] - f[B])) / + getDensity(f); +} +/*=====================================================================*/ +static void calcCompVelocityX1(const LBMReal *const &f /*[27]*/, LBMReal &vx1) +{ + vx1 = ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[BSE] - f[TNW]) + (f[BNE] - f[TSW]))) + + (((f[BE] - f[TW]) + (f[TE] - f[BW])) + ((f[SE] - f[NW]) + (f[NE] - f[SW]))) + (f[E] - f[W])) / + getDensity(f); +} +/*=====================================================================*/ +static void calcCompVelocityX2(const LBMReal *const &f /*[27]*/, LBMReal &vx2) +{ + vx2 = ((((f[TNE] - f[BSW]) + (f[BNW] - f[TSE])) + ((f[TNW] - f[BSE]) + (f[BNE] - f[TSW]))) + + (((f[BN] - f[TS]) + (f[TN] - f[BS])) + ((f[NW] - f[SE]) + (f[NE] - f[SW]))) + (f[N] - f[S])) / + getDensity(f); +} +/*=====================================================================*/ +static void calcCompVelocityX3(const LBMReal *const &f /*[27]*/, LBMReal &vx3) +{ + vx3 = ((((f[TNE] - f[BSW]) + (f[TSE] - f[BNW])) + ((f[TNW] - f[BSE]) + (f[TSW] - f[BNE]))) + + (((f[TS] - f[BN]) + (f[TN] - f[BS])) + ((f[TW] - f[BE]) + (f[TE] - f[BW]))) + (f[T] - f[B])) / + getDensity(f); +} +/*=====================================================================*/ +static void calcIncompMacroscopicValues(const LBMReal *const &f /*[27]*/, LBMReal &rho, LBMReal &vx1, LBMReal &vx2, + LBMReal &vx3) +{ + D3Q27System::calcDensity(f, rho); + D3Q27System::calcIncompVelocityX1(f, vx1); + D3Q27System::calcIncompVelocityX2(f, vx2); + D3Q27System::calcIncompVelocityX3(f, vx3); +} - LBMReal cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); - LBMReal rho = drho + UbMath::one; +/*=====================================================================*/ +static void calcCompMacroscopicValues(const LBMReal *const &f /*[27]*/, LBMReal &drho, LBMReal &vx1, LBMReal &vx2, + LBMReal &vx3) +{ + D3Q27System::calcDensity(f, drho); + D3Q27System::calcIncompVelocityX1(f, vx1); + D3Q27System::calcIncompVelocityX2(f, vx2); + D3Q27System::calcIncompVelocityX3(f, vx3); + LBMReal rho = drho + UbMath::one; + vx1 /= rho; + vx2 /= rho; + vx3 /= rho; +} +////////////////////////////////////////////////////////////////////////// +static LBMReal getCompFeqForDirection(const int &direction, const LBMReal &drho, const LBMReal &vx1, const LBMReal &vx2, + const LBMReal &vx3) +{ + LBMReal cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); + LBMReal rho = drho + UbMath::one; + switch (direction) { + case REST: + return REAL_CAST(UbMath::c8o27 * (drho + rho * (-cu_sq))); + case E: + return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (vx1) + UbMath::c9o2 * (vx1) * (vx1)-cu_sq))); + case W: + return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (-vx1) + UbMath::c9o2 * (-vx1) * (-vx1) - cu_sq))); + case N: + return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (vx2) + UbMath::c9o2 * (vx2) * (vx2)-cu_sq))); + case S: + return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (-vx2) + UbMath::c9o2 * (-vx2) * (-vx2) - cu_sq))); + case T: + return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (vx3) + UbMath::c9o2 * (vx3) * (vx3)-cu_sq))); + case B: + return REAL_CAST(UbMath::c2o27 * (drho + rho * (3.0 * (-vx3) + UbMath::c9o2 * (-vx3) * (-vx3) - cu_sq))); + case NE: + return REAL_CAST(UbMath::c1o54 * + (drho + rho * (3.0 * (vx1 + vx2) + UbMath::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq))); + case SW: + return REAL_CAST(UbMath::c1o54 * + (drho + rho * (3.0 * (-vx1 - vx2) + UbMath::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq))); + case SE: + return REAL_CAST(UbMath::c1o54 * + (drho + rho * (3.0 * (vx1 - vx2) + UbMath::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq))); + case NW: + return REAL_CAST(UbMath::c1o54 * + (drho + rho * (3.0 * (-vx1 + vx2) + UbMath::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq))); + case TE: + return REAL_CAST(UbMath::c1o54 * + (drho + rho * (3.0 * (vx1 + vx3) + UbMath::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq))); + case BW: + return REAL_CAST(UbMath::c1o54 * + (drho + rho * (3.0 * (-vx1 - vx3) + UbMath::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq))); + case BE: + return REAL_CAST(UbMath::c1o54 * + (drho + rho * (3.0 * (vx1 - vx3) + UbMath::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq))); + case TW: + return REAL_CAST(UbMath::c1o54 * + (drho + rho * (3.0 * (-vx1 + vx3) + UbMath::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq))); + case TN: + return REAL_CAST(UbMath::c1o54 * + (drho + rho * (3.0 * (vx2 + vx3) + UbMath::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq))); + case BS: + return REAL_CAST(UbMath::c1o54 * + (drho + rho * (3.0 * (-vx2 - vx3) + UbMath::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq))); + case BN: + return REAL_CAST(UbMath::c1o54 * + (drho + rho * (3.0 * (vx2 - vx3) + UbMath::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq))); + case TS: + return REAL_CAST(UbMath::c1o54 * + (drho + rho * (3.0 * (-vx2 + vx3) + UbMath::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq))); + case TNE: + return REAL_CAST(UbMath::c1o216 * + (drho + rho * (3.0 * (vx1 + vx2 + vx3) + + UbMath::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq))); + case BSW: + return REAL_CAST(UbMath::c1o216 * + (drho + rho * (3.0 * (-vx1 - vx2 - vx3) + + UbMath::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq))); + case BNE: + return REAL_CAST(UbMath::c1o216 * + (drho + rho * (3.0 * (vx1 + vx2 - vx3) + + UbMath::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq))); + case TSW: + return REAL_CAST(UbMath::c1o216 * + (drho + rho * (3.0 * (-vx1 - vx2 + vx3) + + UbMath::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq))); + case TSE: + return REAL_CAST(UbMath::c1o216 * + (drho + rho * (3.0 * (vx1 - vx2 + vx3) + + UbMath::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq))); + case BNW: + return REAL_CAST(UbMath::c1o216 * + (drho + rho * (3.0 * (-vx1 + vx2 - vx3) + + UbMath::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq))); + case BSE: + return REAL_CAST(UbMath::c1o216 * + (drho + rho * (3.0 * (vx1 - vx2 - vx3) + + UbMath::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq))); + case TNW: + return REAL_CAST(UbMath::c1o216 * + (drho + rho * (3.0 * (-vx1 + vx2 + vx3) + + UbMath::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq))); + default: + throw UbException(UB_EXARGS, "unknown dir"); + } +} +////////////////////////////////////////////////////////////////////////// +static void calcCompFeq(LBMReal *const &feq /*[27]*/, const LBMReal &drho, const LBMReal &vx1, const LBMReal &vx2, + const LBMReal &vx3) +{ + LBMReal cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); + LBMReal rho = drho + UbMath::one; - feq[ZERO] = UbMath::c8o27 * (drho + rho * (-cu_sq)); - feq[E] = UbMath::c2o27 * (drho + rho * (3.0 * (vx1)+UbMath::c9o2 * (vx1) * (vx1)-cu_sq)); - feq[W] = UbMath::c2o27 * (drho + rho * (3.0 * (-vx1) + UbMath::c9o2 * (-vx1) * (-vx1) - cu_sq)); - feq[N] = UbMath::c2o27 * (drho + rho * (3.0 * (vx2)+UbMath::c9o2 * (vx2) * (vx2)-cu_sq)); - feq[S] = UbMath::c2o27 * (drho + rho * (3.0 * (-vx2) + UbMath::c9o2 * (-vx2) * (-vx2) - cu_sq)); - feq[T] = UbMath::c2o27 * (drho + rho * (3.0 * (vx3)+UbMath::c9o2 * (vx3) * (vx3)-cu_sq)); - feq[B] = UbMath::c2o27 * (drho + rho * (3.0 * (-vx3) + UbMath::c9o2 * (-vx3) * (-vx3) - cu_sq)); - feq[NE] = UbMath::c1o54 * (drho + rho * (3.0 * (vx1 + vx2) + UbMath::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq)); - feq[SW] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 - vx2) + UbMath::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq)); - feq[SE] = UbMath::c1o54 * (drho + rho * (3.0 * (vx1 - vx2) + UbMath::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq)); - feq[NW] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 + vx2) + UbMath::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq)); - feq[TE] = UbMath::c1o54 * (drho + rho * (3.0 * (vx1 + vx3) + UbMath::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq)); - feq[BW] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 - vx3) + UbMath::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq)); - feq[BE] = UbMath::c1o54 * (drho + rho * (3.0 * (vx1 - vx3) + UbMath::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq)); - feq[TW] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 + vx3) + UbMath::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq)); - feq[TN] = UbMath::c1o54 * (drho + rho * (3.0 * (vx2 + vx3) + UbMath::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq)); - feq[BS] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx2 - vx3) + UbMath::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq)); - feq[BN] = UbMath::c1o54 * (drho + rho * (3.0 * (vx2 - vx3) + UbMath::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq)); - feq[TS] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx2 + vx3) + UbMath::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq)); - feq[TNE] = UbMath::c1o216 * (drho + rho * (3.0 * (vx1 + vx2 + vx3) + UbMath::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq)); - feq[BSW] = UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 - vx2 - vx3) + UbMath::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq)); - feq[BNE] = UbMath::c1o216 * (drho + rho * (3.0 * (vx1 + vx2 - vx3) + UbMath::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq)); - feq[TSW] = UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 - vx2 + vx3) + UbMath::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq)); - feq[TSE] = UbMath::c1o216 * (drho + rho * (3.0 * (vx1 - vx2 + vx3) + UbMath::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq)); - feq[BNW] = UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 + vx2 - vx3) + UbMath::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq)); - feq[BSE] = UbMath::c1o216 * (drho + rho * (3.0 * (vx1 - vx2 - vx3) + UbMath::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq)); - feq[TNW] = UbMath::c1o216 * (drho + rho * (3.0 * (-vx1 + vx2 + vx3) + UbMath::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq)); - } - ////////////////////////////////////////////////////////////////////////// - static LBMReal getIncompFeqForDirection(const int& direction, const LBMReal& drho, const LBMReal& vx1, const LBMReal& vx2, const LBMReal& vx3) - { - LBMReal cu_sq = 1.5f * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); + feq[REST] = UbMath::c8o27 * (drho + rho * (-cu_sq)); + feq[E] = UbMath::c2o27 * (drho + rho * (3.0 * (vx1) + UbMath::c9o2 * (vx1) * (vx1)-cu_sq)); + feq[W] = UbMath::c2o27 * (drho + rho * (3.0 * (-vx1) + UbMath::c9o2 * (-vx1) * (-vx1) - cu_sq)); + feq[N] = UbMath::c2o27 * (drho + rho * (3.0 * (vx2) + UbMath::c9o2 * (vx2) * (vx2)-cu_sq)); + feq[S] = UbMath::c2o27 * (drho + rho * (3.0 * (-vx2) + UbMath::c9o2 * (-vx2) * (-vx2) - cu_sq)); + feq[T] = UbMath::c2o27 * (drho + rho * (3.0 * (vx3) + UbMath::c9o2 * (vx3) * (vx3)-cu_sq)); + feq[B] = UbMath::c2o27 * (drho + rho * (3.0 * (-vx3) + UbMath::c9o2 * (-vx3) * (-vx3) - cu_sq)); + feq[NE] = UbMath::c1o54 * (drho + rho * (3.0 * (vx1 + vx2) + UbMath::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq)); + feq[SW] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 - vx2) + UbMath::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq)); + feq[SE] = UbMath::c1o54 * (drho + rho * (3.0 * (vx1 - vx2) + UbMath::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq)); + feq[NW] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 + vx2) + UbMath::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq)); + feq[TE] = UbMath::c1o54 * (drho + rho * (3.0 * (vx1 + vx3) + UbMath::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq)); + feq[BW] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 - vx3) + UbMath::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq)); + feq[BE] = UbMath::c1o54 * (drho + rho * (3.0 * (vx1 - vx3) + UbMath::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq)); + feq[TW] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx1 + vx3) + UbMath::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq)); + feq[TN] = UbMath::c1o54 * (drho + rho * (3.0 * (vx2 + vx3) + UbMath::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq)); + feq[BS] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx2 - vx3) + UbMath::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq)); + feq[BN] = UbMath::c1o54 * (drho + rho * (3.0 * (vx2 - vx3) + UbMath::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq)); + feq[TS] = UbMath::c1o54 * (drho + rho * (3.0 * (-vx2 + vx3) + UbMath::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq)); + feq[TNE] = UbMath::c1o216 * + (drho + rho * (3.0 * (vx1 + vx2 + vx3) + UbMath::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq)); + feq[BSW] = + UbMath::c1o216 * + (drho + rho * (3.0 * (-vx1 - vx2 - vx3) + UbMath::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq)); + feq[BNE] = UbMath::c1o216 * + (drho + rho * (3.0 * (vx1 + vx2 - vx3) + UbMath::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq)); + feq[TSW] = + UbMath::c1o216 * + (drho + rho * (3.0 * (-vx1 - vx2 + vx3) + UbMath::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq)); + feq[TSE] = UbMath::c1o216 * + (drho + rho * (3.0 * (vx1 - vx2 + vx3) + UbMath::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq)); + feq[BNW] = + UbMath::c1o216 * + (drho + rho * (3.0 * (-vx1 + vx2 - vx3) + UbMath::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq)); + feq[BSE] = UbMath::c1o216 * + (drho + rho * (3.0 * (vx1 - vx2 - vx3) + UbMath::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq)); + feq[TNW] = + UbMath::c1o216 * + (drho + rho * (3.0 * (-vx1 + vx2 + vx3) + UbMath::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq)); +} +////////////////////////////////////////////////////////////////////////// +static LBMReal getIncompFeqForDirection(const int &direction, const LBMReal &drho, const LBMReal &vx1, + const LBMReal &vx2, const LBMReal &vx3) +{ + LBMReal cu_sq = 1.5f * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); - switch (direction) - { - case ZERO: return REAL_CAST(UbMath::c8o27 * (drho - cu_sq)); - case E: return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (vx1)+UbMath::c9o2 * (vx1) * (vx1)-cu_sq)); - case W: return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (-vx1) + UbMath::c9o2 * (-vx1) * (-vx1) - cu_sq)); - case N: return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (vx2)+UbMath::c9o2 * (vx2) * (vx2)-cu_sq)); - case S: return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (-vx2) + UbMath::c9o2 * (-vx2) * (-vx2) - cu_sq)); - case T: return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (vx3)+UbMath::c9o2 * (vx3) * (vx3)-cu_sq)); - case B: return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (-vx3) + UbMath::c9o2 * (-vx3) * (-vx3) - cu_sq)); - case NE: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (vx1 + vx2) + UbMath::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq)); - case SW: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (-vx1 - vx2) + UbMath::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq)); - case SE: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (vx1 - vx2) + UbMath::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq)); - case NW: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (-vx1 + vx2) + UbMath::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq)); - case TE: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (vx1 + vx3) + UbMath::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq)); - case BW: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (-vx1 - vx3) + UbMath::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq)); - case BE: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (vx1 - vx3) + UbMath::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq)); - case TW: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (-vx1 + vx3) + UbMath::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq)); - case TN: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (vx2 + vx3) + UbMath::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq)); - case BS: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (-vx2 - vx3) + UbMath::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq)); - case BN: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (vx2 - vx3) + UbMath::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq)); - case TS: return REAL_CAST(UbMath::c1o54 * (drho + 3.0 * (-vx2 + vx3) + UbMath::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq)); - case TNE: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (vx1 + vx2 + vx3) + UbMath::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq)); - case BSW: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (-vx1 - vx2 - vx3) + UbMath::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq)); - case BNE: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (vx1 + vx2 - vx3) + UbMath::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq)); - case TSW: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (-vx1 - vx2 + vx3) + UbMath::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq)); - case TSE: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (vx1 - vx2 + vx3) + UbMath::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq)); - case BNW: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (-vx1 + vx2 - vx3) + UbMath::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq)); - case BSE: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (vx1 - vx2 - vx3) + UbMath::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq)); - case TNW: return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (-vx1 + vx2 + vx3) + UbMath::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq)); - default: throw UbException(UB_EXARGS, "unknown dir"); - } - } - ////////////////////////////////////////////////////////////////////////// - static void calcIncompFeq(LBMReal* const& feq/*[27]*/, const LBMReal& drho, const LBMReal& vx1, const LBMReal& vx2, const LBMReal& vx3) - { - LBMReal cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); + switch (direction) { + case REST: + return REAL_CAST(UbMath::c8o27 * (drho - cu_sq)); + case E: + return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (vx1) + UbMath::c9o2 * (vx1) * (vx1)-cu_sq)); + case W: + return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (-vx1) + UbMath::c9o2 * (-vx1) * (-vx1) - cu_sq)); + case N: + return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (vx2) + UbMath::c9o2 * (vx2) * (vx2)-cu_sq)); + case S: + return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (-vx2) + UbMath::c9o2 * (-vx2) * (-vx2) - cu_sq)); + case T: + return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (vx3) + UbMath::c9o2 * (vx3) * (vx3)-cu_sq)); + case B: + return REAL_CAST(UbMath::c2o27 * (drho + 3.0 * (-vx3) + UbMath::c9o2 * (-vx3) * (-vx3) - cu_sq)); + case NE: + return REAL_CAST(UbMath::c1o54 * + (drho + 3.0 * (vx1 + vx2) + UbMath::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq)); + case SW: + return REAL_CAST(UbMath::c1o54 * + (drho + 3.0 * (-vx1 - vx2) + UbMath::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq)); + case SE: + return REAL_CAST(UbMath::c1o54 * + (drho + 3.0 * (vx1 - vx2) + UbMath::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq)); + case NW: + return REAL_CAST(UbMath::c1o54 * + (drho + 3.0 * (-vx1 + vx2) + UbMath::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq)); + case TE: + return REAL_CAST(UbMath::c1o54 * + (drho + 3.0 * (vx1 + vx3) + UbMath::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq)); + case BW: + return REAL_CAST(UbMath::c1o54 * + (drho + 3.0 * (-vx1 - vx3) + UbMath::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq)); + case BE: + return REAL_CAST(UbMath::c1o54 * + (drho + 3.0 * (vx1 - vx3) + UbMath::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq)); + case TW: + return REAL_CAST(UbMath::c1o54 * + (drho + 3.0 * (-vx1 + vx3) + UbMath::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq)); + case TN: + return REAL_CAST(UbMath::c1o54 * + (drho + 3.0 * (vx2 + vx3) + UbMath::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq)); + case BS: + return REAL_CAST(UbMath::c1o54 * + (drho + 3.0 * (-vx2 - vx3) + UbMath::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq)); + case BN: + return REAL_CAST(UbMath::c1o54 * + (drho + 3.0 * (vx2 - vx3) + UbMath::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq)); + case TS: + return REAL_CAST(UbMath::c1o54 * + (drho + 3.0 * (-vx2 + vx3) + UbMath::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq)); + case TNE: + return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (vx1 + vx2 + vx3) + + UbMath::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq)); + case BSW: + return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (-vx1 - vx2 - vx3) + + UbMath::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq)); + case BNE: + return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (vx1 + vx2 - vx3) + + UbMath::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq)); + case TSW: + return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (-vx1 - vx2 + vx3) + + UbMath::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq)); + case TSE: + return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (vx1 - vx2 + vx3) + + UbMath::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq)); + case BNW: + return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (-vx1 + vx2 - vx3) + + UbMath::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq)); + case BSE: + return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (vx1 - vx2 - vx3) + + UbMath::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq)); + case TNW: + return REAL_CAST(UbMath::c1o216 * (drho + 3.0 * (-vx1 + vx2 + vx3) + + UbMath::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq)); + default: + throw UbException(UB_EXARGS, "unknown dir"); + } +} +////////////////////////////////////////////////////////////////////////// +static void calcIncompFeq(LBMReal *const &feq /*[27]*/, const LBMReal &drho, const LBMReal &vx1, const LBMReal &vx2, + const LBMReal &vx3) +{ + LBMReal cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); - feq[ZERO] = UbMath::c8o27 * (drho - cu_sq); - feq[E] = UbMath::c2o27 * (drho + 3.0 * (vx1)+UbMath::c9o2 * (vx1) * (vx1)-cu_sq); - feq[W] = UbMath::c2o27 * (drho + 3.0 * (-vx1) + UbMath::c9o2 * (-vx1) * (-vx1) - cu_sq); - feq[N] = UbMath::c2o27 * (drho + 3.0 * (vx2)+UbMath::c9o2 * (vx2) * (vx2)-cu_sq); - feq[S] = UbMath::c2o27 * (drho + 3.0 * (-vx2) + UbMath::c9o2 * (-vx2) * (-vx2) - cu_sq); - feq[T] = UbMath::c2o27 * (drho + 3.0 * (vx3)+UbMath::c9o2 * (vx3) * (vx3)-cu_sq); - feq[B] = UbMath::c2o27 * (drho + 3.0 * (-vx3) + UbMath::c9o2 * (-vx3) * (-vx3) - cu_sq); - feq[NE] = UbMath::c1o54 * (drho + 3.0 * (vx1 + vx2) + UbMath::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq); - feq[SW] = UbMath::c1o54 * (drho + 3.0 * (-vx1 - vx2) + UbMath::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq); - feq[SE] = UbMath::c1o54 * (drho + 3.0 * (vx1 - vx2) + UbMath::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq); - feq[NW] = UbMath::c1o54 * (drho + 3.0 * (-vx1 + vx2) + UbMath::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq); - feq[TE] = UbMath::c1o54 * (drho + 3.0 * (vx1 + vx3) + UbMath::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq); - feq[BW] = UbMath::c1o54 * (drho + 3.0 * (-vx1 - vx3) + UbMath::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq); - feq[BE] = UbMath::c1o54 * (drho + 3.0 * (vx1 - vx3) + UbMath::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq); - feq[TW] = UbMath::c1o54 * (drho + 3.0 * (-vx1 + vx3) + UbMath::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq); - feq[TN] = UbMath::c1o54 * (drho + 3.0 * (vx2 + vx3) + UbMath::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq); - feq[BS] = UbMath::c1o54 * (drho + 3.0 * (-vx2 - vx3) + UbMath::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq); - feq[BN] = UbMath::c1o54 * (drho + 3.0 * (vx2 - vx3) + UbMath::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq); - feq[TS] = UbMath::c1o54 * (drho + 3.0 * (-vx2 + vx3) + UbMath::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq); - feq[TNE] = UbMath::c1o216 * (drho + 3.0 * (vx1 + vx2 + vx3) + UbMath::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq); - feq[BSW] = UbMath::c1o216 * (drho + 3.0 * (-vx1 - vx2 - vx3) + UbMath::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq); - feq[BNE] = UbMath::c1o216 * (drho + 3.0 * (vx1 + vx2 - vx3) + UbMath::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq); - feq[TSW] = UbMath::c1o216 * (drho + 3.0 * (-vx1 - vx2 + vx3) + UbMath::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq); - feq[TSE] = UbMath::c1o216 * (drho + 3.0 * (vx1 - vx2 + vx3) + UbMath::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq); - feq[BNW] = UbMath::c1o216 * (drho + 3.0 * (-vx1 + vx2 - vx3) + UbMath::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq); - feq[BSE] = UbMath::c1o216 * (drho + 3.0 * (vx1 - vx2 - vx3) + UbMath::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq); - feq[TNW] = UbMath::c1o216 * (drho + 3.0 * (-vx1 + vx2 + vx3) + UbMath::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq); - } - ////////////////////////////////////////////////////////////////////////// - static inline float getBoundaryVelocityForDirection(const int& direction, const float& bcVelocityX1, const float& bcVelocityX2, const float& bcVelocityX3) - { - switch (direction) - { - case E: return (float)(UbMath::c4o9 * (+bcVelocityX1)); - case W: return (float)(UbMath::c4o9 * (-bcVelocityX1)); - case N: return (float)(UbMath::c4o9 * (+bcVelocityX2)); - case S: return (float)(UbMath::c4o9 * (-bcVelocityX2)); - case T: return (float)(UbMath::c4o9 * (+bcVelocityX3)); - case B: return (float)(UbMath::c4o9 * (-bcVelocityX3)); - case NE: return (float)(UbMath::c1o9 * (+bcVelocityX1 + bcVelocityX2)); - case SW: return (float)(UbMath::c1o9 * (-bcVelocityX1 - bcVelocityX2)); - case SE: return (float)(UbMath::c1o9 * (+bcVelocityX1 - bcVelocityX2)); - case NW: return (float)(UbMath::c1o9 * (-bcVelocityX1 + bcVelocityX2)); - case TE: return (float)(UbMath::c1o9 * (+bcVelocityX1 + bcVelocityX3)); - case BW: return (float)(UbMath::c1o9 * (-bcVelocityX1 - bcVelocityX3)); - case BE: return (float)(UbMath::c1o9 * (+bcVelocityX1 - bcVelocityX3)); - case TW: return (float)(UbMath::c1o9 * (-bcVelocityX1 + bcVelocityX3)); - case TN: return (float)(UbMath::c1o9 * (+bcVelocityX2 + bcVelocityX3)); - case BS: return (float)(UbMath::c1o9 * (-bcVelocityX2 - bcVelocityX3)); - case BN: return (float)(UbMath::c1o9 * (+bcVelocityX2 - bcVelocityX3)); - case TS: return (float)(UbMath::c1o9 * (-bcVelocityX2 + bcVelocityX3)); - case TNE: return (float)(UbMath::c1o36 * (+bcVelocityX1 + bcVelocityX2 + bcVelocityX3)); - case BSW: return (float)(UbMath::c1o36 * (-bcVelocityX1 - bcVelocityX2 - bcVelocityX3)); - case BNE: return (float)(UbMath::c1o36 * (+bcVelocityX1 + bcVelocityX2 - bcVelocityX3)); - case TSW: return (float)(UbMath::c1o36 * (-bcVelocityX1 - bcVelocityX2 + bcVelocityX3)); - case TSE: return (float)(UbMath::c1o36 * (+bcVelocityX1 - bcVelocityX2 + bcVelocityX3)); - case BNW: return (float)(UbMath::c1o36 * (-bcVelocityX1 + bcVelocityX2 - bcVelocityX3)); - case BSE: return (float)(UbMath::c1o36 * (+bcVelocityX1 - bcVelocityX2 - bcVelocityX3)); - case TNW: return (float)(UbMath::c1o36 * (-bcVelocityX1 + bcVelocityX2 + bcVelocityX3)); - default: throw UbException(UB_EXARGS, "unknown direction"); - } - } - /*=====================================================================*/ - static const int& getInvertDirection(const int& direction) - { + feq[REST] = UbMath::c8o27 * (drho - cu_sq); + feq[E] = UbMath::c2o27 * (drho + 3.0 * (vx1) + UbMath::c9o2 * (vx1) * (vx1)-cu_sq); + feq[W] = UbMath::c2o27 * (drho + 3.0 * (-vx1) + UbMath::c9o2 * (-vx1) * (-vx1) - cu_sq); + feq[N] = UbMath::c2o27 * (drho + 3.0 * (vx2) + UbMath::c9o2 * (vx2) * (vx2)-cu_sq); + feq[S] = UbMath::c2o27 * (drho + 3.0 * (-vx2) + UbMath::c9o2 * (-vx2) * (-vx2) - cu_sq); + feq[T] = UbMath::c2o27 * (drho + 3.0 * (vx3) + UbMath::c9o2 * (vx3) * (vx3)-cu_sq); + feq[B] = UbMath::c2o27 * (drho + 3.0 * (-vx3) + UbMath::c9o2 * (-vx3) * (-vx3) - cu_sq); + feq[NE] = UbMath::c1o54 * (drho + 3.0 * (vx1 + vx2) + UbMath::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq); + feq[SW] = UbMath::c1o54 * (drho + 3.0 * (-vx1 - vx2) + UbMath::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq); + feq[SE] = UbMath::c1o54 * (drho + 3.0 * (vx1 - vx2) + UbMath::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq); + feq[NW] = UbMath::c1o54 * (drho + 3.0 * (-vx1 + vx2) + UbMath::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq); + feq[TE] = UbMath::c1o54 * (drho + 3.0 * (vx1 + vx3) + UbMath::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq); + feq[BW] = UbMath::c1o54 * (drho + 3.0 * (-vx1 - vx3) + UbMath::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq); + feq[BE] = UbMath::c1o54 * (drho + 3.0 * (vx1 - vx3) + UbMath::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq); + feq[TW] = UbMath::c1o54 * (drho + 3.0 * (-vx1 + vx3) + UbMath::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq); + feq[TN] = UbMath::c1o54 * (drho + 3.0 * (vx2 + vx3) + UbMath::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq); + feq[BS] = UbMath::c1o54 * (drho + 3.0 * (-vx2 - vx3) + UbMath::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq); + feq[BN] = UbMath::c1o54 * (drho + 3.0 * (vx2 - vx3) + UbMath::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq); + feq[TS] = UbMath::c1o54 * (drho + 3.0 * (-vx2 + vx3) + UbMath::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq); + feq[TNE] = UbMath::c1o216 * + (drho + 3.0 * (vx1 + vx2 + vx3) + UbMath::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq); + feq[BSW] = UbMath::c1o216 * + (drho + 3.0 * (-vx1 - vx2 - vx3) + UbMath::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq); + feq[BNE] = UbMath::c1o216 * + (drho + 3.0 * (vx1 + vx2 - vx3) + UbMath::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq); + feq[TSW] = UbMath::c1o216 * + (drho + 3.0 * (-vx1 - vx2 + vx3) + UbMath::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq); + feq[TSE] = UbMath::c1o216 * + (drho + 3.0 * (vx1 - vx2 + vx3) + UbMath::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq); + feq[BNW] = UbMath::c1o216 * + (drho + 3.0 * (-vx1 + vx2 - vx3) + UbMath::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq); + feq[BSE] = UbMath::c1o216 * + (drho + 3.0 * (vx1 - vx2 - vx3) + UbMath::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq); + feq[TNW] = UbMath::c1o216 * + (drho + 3.0 * (-vx1 + vx2 + vx3) + UbMath::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq); +} +////////////////////////////////////////////////////////////////////////// +static inline float getBoundaryVelocityForDirection(const int &direction, const float &bcVelocityX1, + const float &bcVelocityX2, const float &bcVelocityX3) +{ + switch (direction) { + case E: + return (float)(UbMath::c4o9 * (+bcVelocityX1)); + case W: + return (float)(UbMath::c4o9 * (-bcVelocityX1)); + case N: + return (float)(UbMath::c4o9 * (+bcVelocityX2)); + case S: + return (float)(UbMath::c4o9 * (-bcVelocityX2)); + case T: + return (float)(UbMath::c4o9 * (+bcVelocityX3)); + case B: + return (float)(UbMath::c4o9 * (-bcVelocityX3)); + case NE: + return (float)(UbMath::c1o9 * (+bcVelocityX1 + bcVelocityX2)); + case SW: + return (float)(UbMath::c1o9 * (-bcVelocityX1 - bcVelocityX2)); + case SE: + return (float)(UbMath::c1o9 * (+bcVelocityX1 - bcVelocityX2)); + case NW: + return (float)(UbMath::c1o9 * (-bcVelocityX1 + bcVelocityX2)); + case TE: + return (float)(UbMath::c1o9 * (+bcVelocityX1 + bcVelocityX3)); + case BW: + return (float)(UbMath::c1o9 * (-bcVelocityX1 - bcVelocityX3)); + case BE: + return (float)(UbMath::c1o9 * (+bcVelocityX1 - bcVelocityX3)); + case TW: + return (float)(UbMath::c1o9 * (-bcVelocityX1 + bcVelocityX3)); + case TN: + return (float)(UbMath::c1o9 * (+bcVelocityX2 + bcVelocityX3)); + case BS: + return (float)(UbMath::c1o9 * (-bcVelocityX2 - bcVelocityX3)); + case BN: + return (float)(UbMath::c1o9 * (+bcVelocityX2 - bcVelocityX3)); + case TS: + return (float)(UbMath::c1o9 * (-bcVelocityX2 + bcVelocityX3)); + case TNE: + return (float)(UbMath::c1o36 * (+bcVelocityX1 + bcVelocityX2 + bcVelocityX3)); + case BSW: + return (float)(UbMath::c1o36 * (-bcVelocityX1 - bcVelocityX2 - bcVelocityX3)); + case BNE: + return (float)(UbMath::c1o36 * (+bcVelocityX1 + bcVelocityX2 - bcVelocityX3)); + case TSW: + return (float)(UbMath::c1o36 * (-bcVelocityX1 - bcVelocityX2 + bcVelocityX3)); + case TSE: + return (float)(UbMath::c1o36 * (+bcVelocityX1 - bcVelocityX2 + bcVelocityX3)); + case BNW: + return (float)(UbMath::c1o36 * (-bcVelocityX1 + bcVelocityX2 - bcVelocityX3)); + case BSE: + return (float)(UbMath::c1o36 * (+bcVelocityX1 - bcVelocityX2 - bcVelocityX3)); + case TNW: + return (float)(UbMath::c1o36 * (-bcVelocityX1 + bcVelocityX2 + bcVelocityX3)); + default: + throw UbException(UB_EXARGS, "unknown direction"); + } +} +/*=====================================================================*/ +static const int &getInvertDirection(const int &direction) +{ #ifdef _DEBUG - if (direction<STARTDIR || direction>ENDDIR) + if (direction < STARTDIR || direction > ENDDIR) throw UbException(UB_EXARGS, "unknown direction"); #endif - return INVDIR[direction]; - } - /*=====================================================================*/ - static void getLBMDirections(std::vector<int>& dirs, bool onlyLBdirs = false) - { - std::vector<int> D3Q27Dirs; - if (onlyLBdirs) /*FSTARTDIR->FENDDIR*/ - { + return INVDIR[direction]; +} +/*=====================================================================*/ +static void getLBMDirections(std::vector<int> &dirs, bool onlyLBdirs = false) +{ + std::vector<int> D3Q27Dirs; + if (onlyLBdirs) /*FSTARTDIR->FENDDIR*/ + { dirs.resize(FENDDIR + 1); for (int dir = FSTARTDIR; dir <= FENDDIR; ++dir) - dirs[dir] = dir; - } - else /*STARTDIR->ENDDIR*/ - { + dirs[dir] = dir; + } else /*STARTDIR->ENDDIR*/ + { dirs.resize(ENDDIR + 1); for (int dir = STARTDIR; dir <= ENDDIR; ++dir) - dirs[dir] = dir; - } - } - ////////////////////////////////////////////////////////////////////////// - static std::vector<int> getEX(const int& exn) - { - std::vector<int> ex; - ex.resize(ENDDIR + 1); - switch (exn) - { - case 1: - for (int dir = STARTDIR; dir < ENDDIR; ++dir) - ex[dir] = DX1[dir]; - break; - case 2: - for (int dir = STARTDIR; dir < ENDDIR; ++dir) - ex[dir] = DX2[dir]; - break; - case 3: - for (int dir = STARTDIR; dir < ENDDIR; ++dir) - ex[dir] = DX3[dir]; - break; - } - return ex; - } - ////////////////////////////////////////////////////////////////////////// - static inline void calcDistanceToNeighbors(std::vector<double>& distNeigh, const double& deltaX1) - { - //distNeigh.resize(FENDDIR+1, UbMath::sqrt2*deltaX1); - - distNeigh[E] = distNeigh[W] = distNeigh[N] = deltaX1; - distNeigh[S] = distNeigh[T] = distNeigh[B] = deltaX1; - distNeigh[NE] = distNeigh[NW] = distNeigh[SW] = distNeigh[SE] = UbMath::sqrt2 * deltaX1; - distNeigh[TE] = distNeigh[TN] = distNeigh[TW] = distNeigh[TS] = UbMath::sqrt2 * deltaX1; - distNeigh[BE] = distNeigh[BN] = distNeigh[BW] = distNeigh[BS] = UbMath::sqrt2 * deltaX1; - distNeigh[TNE] = distNeigh[TNW] = distNeigh[TSE] = distNeigh[TSW] = UbMath::sqrt3 * deltaX1; - distNeigh[BNE] = distNeigh[BNW] = distNeigh[BSE] = distNeigh[BSW] = UbMath::sqrt3 * deltaX1; - } - ////////////////////////////////////////////////////////////////////////// - static inline void calcDistanceToNeighbors(std::vector<double>& distNeigh, const double& deltaX1, const double& deltaX2, const double& deltaX3) - { - //distNeigh.resize(FENDDIR+1, UbMath::sqrt2*deltaX1); - distNeigh[E] = distNeigh[W] = deltaX1; - distNeigh[N] = distNeigh[S] = deltaX2; - distNeigh[T] = distNeigh[B] = deltaX3; - distNeigh[NE] = distNeigh[NW] = distNeigh[SW] = distNeigh[SE] = sqrt(deltaX1 * deltaX1 + deltaX2 * deltaX2); - distNeigh[TE] = distNeigh[TN] = distNeigh[TW] = distNeigh[TS] = sqrt(deltaX1 * deltaX1 + deltaX3 * deltaX3); - distNeigh[BE] = distNeigh[BN] = distNeigh[BW] = distNeigh[BS] = sqrt(deltaX2 * deltaX2 + deltaX3 * deltaX3); - distNeigh[TNE] = distNeigh[TNW] = distNeigh[TSE] = distNeigh[TSW] = sqrt(deltaX1 * deltaX1 + deltaX2 * deltaX2 + deltaX3 * deltaX3); - distNeigh[BNE] = distNeigh[BNW] = distNeigh[BSE] = distNeigh[BSW] = sqrt(deltaX1 * deltaX1 + deltaX2 * deltaX2 + deltaX3 * deltaX3); - } - ////////////////////////////////////////////////////////////////////////// - static inline void initRayVectors(double* const& rayX1, double* const& rayX2, double* const& rayX3) - { - int fdir; - double c1oS2 = UbMath::one_over_sqrt2; - double c1oS3 = UbMath::one_over_sqrt3; - fdir = E; rayX1[fdir] = 1.0; rayX2[fdir] = 0.0; rayX3[fdir] = 0.0; - fdir = W; rayX1[fdir] = -1.0; rayX2[fdir] = 0.0; rayX3[fdir] = 0.0; - fdir = N; rayX1[fdir] = 0.0; rayX2[fdir] = 1.0; rayX3[fdir] = 0.0; - fdir = S; rayX1[fdir] = 0.0; rayX2[fdir] = -1.0; rayX3[fdir] = 0.0; - fdir = T; rayX1[fdir] = 0.0; rayX2[fdir] = 0.0; rayX3[fdir] = 1.0; - fdir = B; rayX1[fdir] = 0.0; rayX2[fdir] = 0.0; rayX3[fdir] = -1.0; - fdir = NE; rayX1[fdir] = c1oS2; rayX2[fdir] = c1oS2; rayX3[fdir] = 0.0; - fdir = SW; rayX1[fdir] = -c1oS2; rayX2[fdir] = -c1oS2; rayX3[fdir] = 0.0; - fdir = SE; rayX1[fdir] = c1oS2; rayX2[fdir] = -c1oS2; rayX3[fdir] = 0.0; - fdir = NW; rayX1[fdir] = -c1oS2; rayX2[fdir] = c1oS2; rayX3[fdir] = 0.0; - fdir = TE; rayX1[fdir] = c1oS2; rayX2[fdir] = 0.0; rayX3[fdir] = c1oS2; - fdir = BW; rayX1[fdir] = -c1oS2; rayX2[fdir] = 0.0; rayX3[fdir] = -c1oS2; - fdir = BE; rayX1[fdir] = c1oS2; rayX2[fdir] = 0.0; rayX3[fdir] = -c1oS2; - fdir = TW; rayX1[fdir] = -c1oS2; rayX2[fdir] = 0.0; rayX3[fdir] = c1oS2; - fdir = TN; rayX1[fdir] = 0.0; rayX2[fdir] = c1oS2; rayX3[fdir] = c1oS2; - fdir = BS; rayX1[fdir] = 0.0; rayX2[fdir] = -c1oS2; rayX3[fdir] = -c1oS2; - fdir = BN; rayX1[fdir] = 0.0; rayX2[fdir] = c1oS2; rayX3[fdir] = -c1oS2; - fdir = TS; rayX1[fdir] = 0.0; rayX2[fdir] = -c1oS2; rayX3[fdir] = c1oS2; - fdir = TNE; rayX1[fdir] = c1oS3; rayX2[fdir] = c1oS3; rayX3[fdir] = c1oS3; - fdir = TNW; rayX1[fdir] = -c1oS3; rayX2[fdir] = c1oS3; rayX3[fdir] = c1oS3; - fdir = TSE; rayX1[fdir] = c1oS3; rayX2[fdir] = -c1oS3; rayX3[fdir] = c1oS3; - fdir = TSW; rayX1[fdir] = -c1oS3; rayX2[fdir] = -c1oS3; rayX3[fdir] = c1oS3; - fdir = BNE; rayX1[fdir] = c1oS3; rayX2[fdir] = c1oS3; rayX3[fdir] = -c1oS3; - fdir = BNW; rayX1[fdir] = -c1oS3; rayX2[fdir] = c1oS3; rayX3[fdir] = -c1oS3; - fdir = BSE; rayX1[fdir] = c1oS3; rayX2[fdir] = -c1oS3; rayX3[fdir] = -c1oS3; - fdir = BSW; rayX1[fdir] = -c1oS3; rayX2[fdir] = -c1oS3; rayX3[fdir] = -c1oS3; - } - ////////////////////////////////////////////////////////////////////////// - static inline LBMReal calcPress(const LBMReal* const f, LBMReal rho, LBMReal vx1, LBMReal vx2, LBMReal vx3) - { - LBMReal op = 1.0; - return ((f[E] + f[W] + f[N] + f[S] + f[T] + f[B] + 2. * (f[NE] + f[SW] + f[SE] + f[NW] + f[TE] + f[BW] + f[BE] + f[TW] + f[TN] + f[BS] + f[BN] + f[TS]) + - 3. * (f[TNE] + f[TSW] + f[TSE] + f[TNW] + f[BNE] + f[BSW] + f[BSE] + f[BNW]) - (vx1 * vx1 + vx2 * vx2 + vx3 * vx3)) * (1 - 0.5 * op) + op * 0.5 * (rho)) * UbMath::c1o3; - - } - ////////////////////////////////////////////////////////////////////////// - static inline LBMReal getShearRate(const LBMReal* const f, LBMReal collFactorF) - { - LBMReal mfcbb = f[E]; - LBMReal mfbcb = f[N]; - LBMReal mfbbc = f[T]; - LBMReal mfccb = f[NE]; - LBMReal mfacb = f[NW]; - LBMReal mfcbc = f[TE]; - LBMReal mfabc = f[TW]; - LBMReal mfbcc = f[TN]; - LBMReal mfbac = f[TS]; - LBMReal mfccc = f[TNE]; - LBMReal mfacc = f[TNW]; - LBMReal mfcac = f[TSE]; - LBMReal mfaac = f[TSW]; - - LBMReal mfabb = f[W]; - LBMReal mfbab = f[S]; - LBMReal mfbba = f[B]; - LBMReal mfaab = f[SW]; - LBMReal mfcab = f[SE]; - LBMReal mfaba = f[BW]; - LBMReal mfcba = f[BE]; - LBMReal mfbaa = f[BS]; - LBMReal mfbca = f[BN]; - LBMReal mfaaa = f[BSW]; - LBMReal mfcaa = f[BSE]; - LBMReal mfaca = f[BNW]; - LBMReal mfcca = f[BNE]; - - LBMReal mfbbb = f[ZERO]; - - LBMReal m0, m1, m2; - - LBMReal rho = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) - + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) - + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - - LBMReal vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)); - LBMReal vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)); - LBMReal vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)); - - //LBMReal OxxPyyPzz = 1.; + dirs[dir] = dir; + } +} +////////////////////////////////////////////////////////////////////////// +static std::vector<int> getEX(const int &exn) +{ + std::vector<int> ex; + ex.resize(ENDDIR + 1); + switch (exn) { + case 1: + for (int dir = STARTDIR; dir < ENDDIR; ++dir) + ex[dir] = DX1[dir]; + break; + case 2: + for (int dir = STARTDIR; dir < ENDDIR; ++dir) + ex[dir] = DX2[dir]; + break; + case 3: + for (int dir = STARTDIR; dir < ENDDIR; ++dir) + ex[dir] = DX3[dir]; + break; + } + return ex; +} +////////////////////////////////////////////////////////////////////////// +static inline void calcDistanceToNeighbors(std::vector<double> &distNeigh, const double &deltaX1) +{ + // distNeigh.resize(FENDDIR+1, UbMath::sqrt2*deltaX1); - LBMReal oMdrho; + distNeigh[E] = distNeigh[W] = distNeigh[N] = deltaX1; + distNeigh[S] = distNeigh[T] = distNeigh[B] = deltaX1; + distNeigh[NE] = distNeigh[NW] = distNeigh[SW] = distNeigh[SE] = UbMath::sqrt2 * deltaX1; + distNeigh[TE] = distNeigh[TN] = distNeigh[TW] = distNeigh[TS] = UbMath::sqrt2 * deltaX1; + distNeigh[BE] = distNeigh[BN] = distNeigh[BW] = distNeigh[BS] = UbMath::sqrt2 * deltaX1; + distNeigh[TNE] = distNeigh[TNW] = distNeigh[TSE] = distNeigh[TSW] = UbMath::sqrt3 * deltaX1; + distNeigh[BNE] = distNeigh[BNW] = distNeigh[BSE] = distNeigh[BSW] = UbMath::sqrt3 * deltaX1; +} +////////////////////////////////////////////////////////////////////////// +static inline void calcDistanceToNeighbors(std::vector<double> &distNeigh, const double &deltaX1, const double &deltaX2, + const double &deltaX3) +{ + // distNeigh.resize(FENDDIR+1, UbMath::sqrt2*deltaX1); + distNeigh[E] = distNeigh[W] = deltaX1; + distNeigh[N] = distNeigh[S] = deltaX2; + distNeigh[T] = distNeigh[B] = deltaX3; + distNeigh[NE] = distNeigh[NW] = distNeigh[SW] = distNeigh[SE] = sqrt(deltaX1 * deltaX1 + deltaX2 * deltaX2); + distNeigh[TE] = distNeigh[TN] = distNeigh[TW] = distNeigh[TS] = sqrt(deltaX1 * deltaX1 + deltaX3 * deltaX3); + distNeigh[BE] = distNeigh[BN] = distNeigh[BW] = distNeigh[BS] = sqrt(deltaX2 * deltaX2 + deltaX3 * deltaX3); + distNeigh[TNE] = distNeigh[TNW] = distNeigh[TSE] = distNeigh[TSW] = + sqrt(deltaX1 * deltaX1 + deltaX2 * deltaX2 + deltaX3 * deltaX3); + distNeigh[BNE] = distNeigh[BNW] = distNeigh[BSE] = distNeigh[BSW] = + sqrt(deltaX1 * deltaX1 + deltaX2 * deltaX2 + deltaX3 * deltaX3); +} +////////////////////////////////////////////////////////////////////////// +static inline void initRayVectors(double *const &rayX1, double *const &rayX2, double *const &rayX3) +{ + int fdir; + double c1oS2 = UbMath::one_over_sqrt2; + double c1oS3 = UbMath::one_over_sqrt3; + fdir = E; + rayX1[fdir] = 1.0; + rayX2[fdir] = 0.0; + rayX3[fdir] = 0.0; + fdir = W; + rayX1[fdir] = -1.0; + rayX2[fdir] = 0.0; + rayX3[fdir] = 0.0; + fdir = N; + rayX1[fdir] = 0.0; + rayX2[fdir] = 1.0; + rayX3[fdir] = 0.0; + fdir = S; + rayX1[fdir] = 0.0; + rayX2[fdir] = -1.0; + rayX3[fdir] = 0.0; + fdir = T; + rayX1[fdir] = 0.0; + rayX2[fdir] = 0.0; + rayX3[fdir] = 1.0; + fdir = B; + rayX1[fdir] = 0.0; + rayX2[fdir] = 0.0; + rayX3[fdir] = -1.0; + fdir = NE; + rayX1[fdir] = c1oS2; + rayX2[fdir] = c1oS2; + rayX3[fdir] = 0.0; + fdir = SW; + rayX1[fdir] = -c1oS2; + rayX2[fdir] = -c1oS2; + rayX3[fdir] = 0.0; + fdir = SE; + rayX1[fdir] = c1oS2; + rayX2[fdir] = -c1oS2; + rayX3[fdir] = 0.0; + fdir = NW; + rayX1[fdir] = -c1oS2; + rayX2[fdir] = c1oS2; + rayX3[fdir] = 0.0; + fdir = TE; + rayX1[fdir] = c1oS2; + rayX2[fdir] = 0.0; + rayX3[fdir] = c1oS2; + fdir = BW; + rayX1[fdir] = -c1oS2; + rayX2[fdir] = 0.0; + rayX3[fdir] = -c1oS2; + fdir = BE; + rayX1[fdir] = c1oS2; + rayX2[fdir] = 0.0; + rayX3[fdir] = -c1oS2; + fdir = TW; + rayX1[fdir] = -c1oS2; + rayX2[fdir] = 0.0; + rayX3[fdir] = c1oS2; + fdir = TN; + rayX1[fdir] = 0.0; + rayX2[fdir] = c1oS2; + rayX3[fdir] = c1oS2; + fdir = BS; + rayX1[fdir] = 0.0; + rayX2[fdir] = -c1oS2; + rayX3[fdir] = -c1oS2; + fdir = BN; + rayX1[fdir] = 0.0; + rayX2[fdir] = c1oS2; + rayX3[fdir] = -c1oS2; + fdir = TS; + rayX1[fdir] = 0.0; + rayX2[fdir] = -c1oS2; + rayX3[fdir] = c1oS2; + fdir = TNE; + rayX1[fdir] = c1oS3; + rayX2[fdir] = c1oS3; + rayX3[fdir] = c1oS3; + fdir = TNW; + rayX1[fdir] = -c1oS3; + rayX2[fdir] = c1oS3; + rayX3[fdir] = c1oS3; + fdir = TSE; + rayX1[fdir] = c1oS3; + rayX2[fdir] = -c1oS3; + rayX3[fdir] = c1oS3; + fdir = TSW; + rayX1[fdir] = -c1oS3; + rayX2[fdir] = -c1oS3; + rayX3[fdir] = c1oS3; + fdir = BNE; + rayX1[fdir] = c1oS3; + rayX2[fdir] = c1oS3; + rayX3[fdir] = -c1oS3; + fdir = BNW; + rayX1[fdir] = -c1oS3; + rayX2[fdir] = c1oS3; + rayX3[fdir] = -c1oS3; + fdir = BSE; + rayX1[fdir] = c1oS3; + rayX2[fdir] = -c1oS3; + rayX3[fdir] = -c1oS3; + fdir = BSW; + rayX1[fdir] = -c1oS3; + rayX2[fdir] = -c1oS3; + rayX3[fdir] = -c1oS3; +} +////////////////////////////////////////////////////////////////////////// +static inline LBMReal calcPress(const LBMReal *const f, LBMReal rho, LBMReal vx1, LBMReal vx2, LBMReal vx3) +{ + LBMReal op = 1.0; + return ((f[E] + f[W] + f[N] + f[S] + f[T] + f[B] + + 2. * (f[NE] + f[SW] + f[SE] + f[NW] + f[TE] + f[BW] + f[BE] + f[TW] + f[TN] + f[BS] + f[BN] + f[TS]) + + 3. * (f[TNE] + f[TSW] + f[TSE] + f[TNW] + f[BNE] + f[BSW] + f[BSE] + f[BNW]) - + (vx1 * vx1 + vx2 * vx2 + vx3 * vx3)) * + (1 - 0.5 * op) + + op * 0.5 * (rho)) * + UbMath::c1o3; +} +////////////////////////////////////////////////////////////////////////// +static inline LBMReal getShearRate(const LBMReal *const f, LBMReal collFactorF) +{ + LBMReal mfcbb = f[E]; + LBMReal mfbcb = f[N]; + LBMReal mfbbc = f[T]; + LBMReal mfccb = f[NE]; + LBMReal mfacb = f[NW]; + LBMReal mfcbc = f[TE]; + LBMReal mfabc = f[TW]; + LBMReal mfbcc = f[TN]; + LBMReal mfbac = f[TS]; + LBMReal mfccc = f[TNE]; + LBMReal mfacc = f[TNW]; + LBMReal mfcac = f[TSE]; + LBMReal mfaac = f[TSW]; - oMdrho = mfccc + mfaaa; - m0 = mfaca + mfcac; - m1 = mfacc + mfcaa; - m2 = mfaac + mfcca; - oMdrho += m0; - m1 += m2; - oMdrho += m1; - m0 = mfbac + mfbca; - m1 = mfbaa + mfbcc; - m0 += m1; - m1 = mfabc + mfcba; - m2 = mfaba + mfcbc; - m1 += m2; - m0 += m1; - m1 = mfacb + mfcab; - m2 = mfaab + mfccb; - m1 += m2; - m0 += m1; - oMdrho += m0; - m0 = mfabb + mfcbb; - m1 = mfbab + mfbcb; - m2 = mfbba + mfbbc; - m0 += m1 + m2; - m0 += mfbbb; //hat gefehlt - oMdrho = 1. - (oMdrho + m0); + LBMReal mfabb = f[W]; + LBMReal mfbab = f[S]; + LBMReal mfbba = f[B]; + LBMReal mfaab = f[SW]; + LBMReal mfcab = f[SE]; + LBMReal mfaba = f[BW]; + LBMReal mfcba = f[BE]; + LBMReal mfbaa = f[BS]; + LBMReal mfbca = f[BN]; + LBMReal mfaaa = f[BSW]; + LBMReal mfcaa = f[BSE]; + LBMReal mfaca = f[BNW]; + LBMReal mfcca = f[BNE]; - LBMReal vx2; - LBMReal vy2; - LBMReal vz2; - vx2 = vvx * vvx; - vy2 = vvy * vvy; - vz2 = vvz * vvz; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += UbMath::c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += UbMath::c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += UbMath::c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += UbMath::c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += UbMath::c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += UbMath::c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += UbMath::c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += UbMath::c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += UbMath::c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += UbMath::c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += UbMath::c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += UbMath::c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += UbMath::c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += UbMath::c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += UbMath::c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += 1. * oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += UbMath::c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += UbMath::c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += UbMath::c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - LBMReal OxxPyyPzz = 1.; //omega2 or bulk viscosity - // LBMReal OxyyPxzz = 1.;//-s9;//2+s9;// - // LBMReal OxyyMxzz = 1.;//2+s9;// + LBMReal mfbbb = f[REST]; - //Cum 4. - //LBMReal CUMcbb = mfcbb - ((mfcaa + UbMath::c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015 - //LBMReal CUMbcb = mfbcb - ((mfaca + UbMath::c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015 - //LBMReal CUMbbc = mfbbc - ((mfaac + UbMath::c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015 + LBMReal m0, m1, m2; - // LBMReal CUMcbb = mfcbb - ((mfcaa + UbMath::c1o3) * mfabb + 2. * mfbba * mfbab); - // LBMReal CUMbcb = mfbcb - ((mfaca + UbMath::c1o3) * mfbab + 2. * mfbba * mfabb); - // LBMReal CUMbbc = mfbbc - ((mfaac + UbMath::c1o3) * mfbba + 2. * mfbab * mfabb); + LBMReal rho = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) + (mfaab + mfacb + mfcab + mfccb) + + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) + (mfabb + mfcbb) + + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - // LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + UbMath::c1o3 * (mfcaa + mfaca) * oMdrho + UbMath::c1o9 * (oMdrho - 1) * oMdrho); - // LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + UbMath::c1o3 * (mfcaa + mfaac) * oMdrho + UbMath::c1o9 * (oMdrho - 1) * oMdrho); - // LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + UbMath::c1o3 * (mfaac + mfaca) * oMdrho + UbMath::c1o9 * (oMdrho - 1) * oMdrho); + LBMReal vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + + (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + (mfcbb - mfabb)); + LBMReal vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + + (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + (mfbcb - mfbab)); + LBMReal vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + + (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + (mfbbc - mfbba)); - //Cum 5. - // LBMReal CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - UbMath::c1o3 * (mfbca + mfbac) * oMdrho; - // LBMReal CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - UbMath::c1o3 * (mfcba + mfabc) * oMdrho; - // LBMReal CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - UbMath::c1o3 * (mfacb + mfcab) * oMdrho; + LBMReal oMdrho; - //Cum 6. -// LBMReal CUMccc = mfccc + ((-4. * mfbbb * mfbbb -// - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) -// - 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) -// - 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) -// + (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) -// + 2. * (mfcaa * mfaca * mfaac) -// + 16. * mfbba * mfbab * mfabb) -// - UbMath::c1o3 * (mfacc + mfcac + mfcca) * oMdrho - UbMath::c1o9 * oMdrho * oMdrho -// - UbMath::c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho) -// + (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) -// + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) + c1o27 * oMdrho; + oMdrho = mfccc + mfaaa; + m0 = mfaca + mfcac; + m1 = mfacc + mfcaa; + m2 = mfaac + mfcca; + oMdrho += m0; + m1 += m2; + oMdrho += m1; + m0 = mfbac + mfbca; + m1 = mfbaa + mfbcc; + m0 += m1; + m1 = mfabc + mfcba; + m2 = mfaba + mfcbc; + m1 += m2; + m0 += m1; + m1 = mfacb + mfcab; + m2 = mfaab + mfccb; + m1 += m2; + m0 += m1; + oMdrho += m0; + m0 = mfabb + mfcbb; + m1 = mfbab + mfbcb; + m2 = mfbba + mfbbc; + m0 += m1 + m2; + m0 += mfbbb; // hat gefehlt + oMdrho = 1. - (oMdrho + m0); + LBMReal vx2; + LBMReal vy2; + LBMReal vz2; + vx2 = vvx * vvx; + vy2 = vvy * vvy; + vz2 = vvz * vvz; + //////////////////////////////////////////////////////////////////////////////////// + // Hin + //////////////////////////////////////////////////////////////////////////////////// + // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Z - Dir + m2 = mfaaa + mfaac; + m1 = mfaac - mfaaa; + m0 = m2 + mfaab; + mfaaa = m0; + m0 += UbMath::c1o36 * oMdrho; + mfaab = m1 - m0 * vvz; + mfaac = m2 - 2. * m1 * vvz + vz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaba + mfabc; + m1 = mfabc - mfaba; + m0 = m2 + mfabb; + mfaba = m0; + m0 += UbMath::c1o9 * oMdrho; + mfabb = m1 - m0 * vvz; + mfabc = m2 - 2. * m1 * vvz + vz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaca + mfacc; + m1 = mfacc - mfaca; + m0 = m2 + mfacb; + mfaca = m0; + m0 += UbMath::c1o36 * oMdrho; + mfacb = m1 - m0 * vvz; + mfacc = m2 - 2. * m1 * vvz + vz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbaa + mfbac; + m1 = mfbac - mfbaa; + m0 = m2 + mfbab; + mfbaa = m0; + m0 += UbMath::c1o9 * oMdrho; + mfbab = m1 - m0 * vvz; + mfbac = m2 - 2. * m1 * vvz + vz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbba + mfbbc; + m1 = mfbbc - mfbba; + m0 = m2 + mfbbb; + mfbba = m0; + m0 += UbMath::c4o9 * oMdrho; + mfbbb = m1 - m0 * vvz; + mfbbc = m2 - 2. * m1 * vvz + vz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbca + mfbcc; + m1 = mfbcc - mfbca; + m0 = m2 + mfbcb; + mfbca = m0; + m0 += UbMath::c1o9 * oMdrho; + mfbcb = m1 - m0 * vvz; + mfbcc = m2 - 2. * m1 * vvz + vz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcaa + mfcac; + m1 = mfcac - mfcaa; + m0 = m2 + mfcab; + mfcaa = m0; + m0 += UbMath::c1o36 * oMdrho; + mfcab = m1 - m0 * vvz; + mfcac = m2 - 2. * m1 * vvz + vz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcba + mfcbc; + m1 = mfcbc - mfcba; + m0 = m2 + mfcbb; + mfcba = m0; + m0 += UbMath::c1o9 * oMdrho; + mfcbb = m1 - m0 * vvz; + mfcbc = m2 - 2. * m1 * vvz + vz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcca + mfccc; + m1 = mfccc - mfcca; + m0 = m2 + mfccb; + mfcca = m0; + m0 += UbMath::c1o36 * oMdrho; + mfccb = m1 - m0 * vvz; + mfccc = m2 - 2. * m1 * vvz + vz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Y - Dir + m2 = mfaaa + mfaca; + m1 = mfaca - mfaaa; + m0 = m2 + mfaba; + mfaaa = m0; + m0 += UbMath::c1o6 * oMdrho; + mfaba = m1 - m0 * vvy; + mfaca = m2 - 2. * m1 * vvy + vy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaab + mfacb; + m1 = mfacb - mfaab; + m0 = m2 + mfabb; + mfaab = m0; + mfabb = m1 - m0 * vvy; + mfacb = m2 - 2. * m1 * vvy + vy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaac + mfacc; + m1 = mfacc - mfaac; + m0 = m2 + mfabc; + mfaac = m0; + m0 += UbMath::c1o18 * oMdrho; + mfabc = m1 - m0 * vvy; + mfacc = m2 - 2. * m1 * vvy + vy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbaa + mfbca; + m1 = mfbca - mfbaa; + m0 = m2 + mfbba; + mfbaa = m0; + m0 += UbMath::c2o3 * oMdrho; + mfbba = m1 - m0 * vvy; + mfbca = m2 - 2. * m1 * vvy + vy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbab + mfbcb; + m1 = mfbcb - mfbab; + m0 = m2 + mfbbb; + mfbab = m0; + mfbbb = m1 - m0 * vvy; + mfbcb = m2 - 2. * m1 * vvy + vy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbac + mfbcc; + m1 = mfbcc - mfbac; + m0 = m2 + mfbbc; + mfbac = m0; + m0 += UbMath::c2o9 * oMdrho; + mfbbc = m1 - m0 * vvy; + mfbcc = m2 - 2. * m1 * vvy + vy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcaa + mfcca; + m1 = mfcca - mfcaa; + m0 = m2 + mfcba; + mfcaa = m0; + m0 += UbMath::c1o6 * oMdrho; + mfcba = m1 - m0 * vvy; + mfcca = m2 - 2. * m1 * vvy + vy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcab + mfccb; + m1 = mfccb - mfcab; + m0 = m2 + mfcbb; + mfcab = m0; + mfcbb = m1 - m0 * vvy; + mfccb = m2 - 2. * m1 * vvy + vy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcac + mfccc; + m1 = mfccc - mfcac; + m0 = m2 + mfcbc; + mfcac = m0; + m0 += UbMath::c1o18 * oMdrho; + mfcbc = m1 - m0 * vvy; + mfccc = m2 - 2. * m1 * vvy + vy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // X - Dir + m2 = mfaaa + mfcaa; + m1 = mfcaa - mfaaa; + m0 = m2 + mfbaa; + mfaaa = m0; + m0 += 1. * oMdrho; + mfbaa = m1 - m0 * vvx; + mfcaa = m2 - 2. * m1 * vvx + vx2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaba + mfcba; + m1 = mfcba - mfaba; + m0 = m2 + mfbba; + mfaba = m0; + mfbba = m1 - m0 * vvx; + mfcba = m2 - 2. * m1 * vvx + vx2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaca + mfcca; + m1 = mfcca - mfaca; + m0 = m2 + mfbca; + mfaca = m0; + m0 += UbMath::c1o3 * oMdrho; + mfbca = m1 - m0 * vvx; + mfcca = m2 - 2. * m1 * vvx + vx2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaab + mfcab; + m1 = mfcab - mfaab; + m0 = m2 + mfbab; + mfaab = m0; + mfbab = m1 - m0 * vvx; + mfcab = m2 - 2. * m1 * vvx + vx2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfabb + mfcbb; + m1 = mfcbb - mfabb; + m0 = m2 + mfbbb; + mfabb = m0; + mfbbb = m1 - m0 * vvx; + mfcbb = m2 - 2. * m1 * vvx + vx2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfacb + mfccb; + m1 = mfccb - mfacb; + m0 = m2 + mfbcb; + mfacb = m0; + mfbcb = m1 - m0 * vvx; + mfccb = m2 - 2. * m1 * vvx + vx2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaac + mfcac; + m1 = mfcac - mfaac; + m0 = m2 + mfbac; + mfaac = m0; + m0 += UbMath::c1o3 * oMdrho; + mfbac = m1 - m0 * vvx; + mfcac = m2 - 2. * m1 * vvx + vx2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfabc + mfcbc; + m1 = mfcbc - mfabc; + m0 = m2 + mfbbc; + mfabc = m0; + mfbbc = m1 - m0 * vvx; + mfcbc = m2 - 2. * m1 * vvx + vx2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfacc + mfccc; + m1 = mfccc - mfacc; + m0 = m2 + mfbcc; + mfacc = m0; + m0 += UbMath::c1o9 * oMdrho; + mfbcc = m1 - m0 * vvx; + mfccc = m2 - 2. * m1 * vvx + vx2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + // Cumulants + //////////////////////////////////////////////////////////////////////////////////// + LBMReal OxxPyyPzz = 1.; // omega2 or bulk viscosity - LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac; - LBMReal mxxMyy = mfcaa - mfaca; - LBMReal mxxMzz = mfcaa - mfaac; + LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac; + LBMReal mxxMyy = mfcaa - mfaca; + LBMReal mxxMzz = mfcaa - mfaac; - LBMReal dxux = -UbMath::c1o2 * collFactorF * (mxxMyy + mxxMzz) + UbMath::c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - LBMReal dyuy = dxux + collFactorF * UbMath::c3o2 * mxxMyy; - LBMReal dzuz = dxux + collFactorF * UbMath::c3o2 * mxxMzz; + LBMReal dxux = -UbMath::c1o2 * collFactorF * (mxxMyy + mxxMzz) + UbMath::c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); + LBMReal dyuy = dxux + collFactorF * UbMath::c3o2 * mxxMyy; + LBMReal dzuz = dxux + collFactorF * UbMath::c3o2 * mxxMzz; - LBMReal Dxy = -UbMath::three * collFactorF * mfbba; - LBMReal Dxz = -UbMath::three * collFactorF * mfbab; - LBMReal Dyz = -UbMath::three * collFactorF * mfabb; + LBMReal Dxy = -UbMath::three * collFactorF * mfbba; + LBMReal Dxz = -UbMath::three * collFactorF * mfbab; + LBMReal Dyz = -UbMath::three * collFactorF * mfabb; + return sqrt(UbMath::c2 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz) / + (rho + UbMath::one); +} +//Multiphase stuff +////////////////////////////////////////////////////////////////////////// +static void calcMultiphaseFeq(LBMReal *const &feq /*[27]*/, const LBMReal &rho, const LBMReal &p1, const LBMReal &vx1, + const LBMReal &vx2, const LBMReal &vx3) +{ + using namespace UbMath; + LBMReal cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); - //TODO: may be factor 2 - return sqrt(UbMath::c2 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz) / (rho + UbMath::one); - } + feq[REST] = c8o27 * (p1 + rho * c1o3 * (-cu_sq)); + feq[E] = c2o27 * (p1 + rho * c1o3 * (3.0 * (vx1) + c9o2 * (vx1) * (vx1)-cu_sq)); + feq[W] = c2o27 * (p1 + rho * c1o3 * (3.0 * (-vx1) + c9o2 * (-vx1) * (-vx1) - cu_sq)); + feq[N] = c2o27 * (p1 + rho * c1o3 * (3.0 * (vx2) + c9o2 * (vx2) * (vx2)-cu_sq)); + feq[S] = c2o27 * (p1 + rho * c1o3 * (3.0 * (-vx2) + c9o2 * (-vx2) * (-vx2) - cu_sq)); + feq[T] = c2o27 * (p1 + rho * c1o3 * (3.0 * (vx3) + c9o2 * (vx3) * (vx3)-cu_sq)); + feq[B] = c2o27 * (p1 + rho * c1o3 * (3.0 * (-vx3) + c9o2 * (-vx3) * (-vx3) - cu_sq)); + feq[NE] = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx1 + vx2) + c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq)); + feq[SW] = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx1 - vx2) + c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq)); + feq[SE] = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx1 - vx2) + c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq)); + feq[NW] = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx1 + vx2) + c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq)); + feq[TE] = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx1 + vx3) + c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq)); + feq[BW] = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx1 - vx3) + c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq)); + feq[BE] = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx1 - vx3) + c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq)); + feq[TW] = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx1 + vx3) + c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq)); + feq[TN] = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx2 + vx3) + c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq)); + feq[BS] = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx2 - vx3) + c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq)); + feq[BN] = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx2 - vx3) + c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq)); + feq[TS] = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx2 + vx3) + c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq)); + feq[TNE] = + c1o216 * (p1 + rho * c1o3 * (3.0 * (vx1 + vx2 + vx3) + c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq)); + feq[BSW] = c1o216 * + (p1 + rho * c1o3 * (3.0 * (-vx1 - vx2 - vx3) + c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq)); + feq[BNE] = + c1o216 * (p1 + rho * c1o3 * (3.0 * (vx1 + vx2 - vx3) + c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq)); + feq[TSW] = c1o216 * + (p1 + rho * c1o3 * (3.0 * (-vx1 - vx2 + vx3) + c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq)); + feq[TSE] = + c1o216 * (p1 + rho * c1o3 * (3.0 * (vx1 - vx2 + vx3) + c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq)); + feq[BNW] = c1o216 * + (p1 + rho * c1o3 * (3.0 * (-vx1 + vx2 - vx3) + c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq)); + feq[BSE] = + c1o216 * (p1 + rho * c1o3 * (3.0 * (vx1 - vx2 - vx3) + c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq)); + feq[TNW] = c1o216 * + (p1 + rho * c1o3 * (3.0 * (-vx1 + vx2 + vx3) + c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq)); } -#endif +////////////////////////////////////////////////////////////////////////// +static void calcMultiphaseFeqVB(LBMReal *const &feq /*[27]*/, const LBMReal &p1, const LBMReal &vx1, const LBMReal &vx2, + const LBMReal &vx3) +{ + using namespace UbMath; + LBMReal cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); + feq[REST] = p1 + c8o27 * (-cu_sq); + feq[E] = c2o27 * ((3.0 * (vx1) + c9o2 * (vx1) * (vx1)-cu_sq)); + feq[W] = c2o27 * ((3.0 * (-vx1) + c9o2 * (-vx1) * (-vx1) - cu_sq)); + feq[N] = c2o27 * ((3.0 * (vx2) + c9o2 * (vx2) * (vx2)-cu_sq)); + feq[S] = c2o27 * ((3.0 * (-vx2) + c9o2 * (-vx2) * (-vx2) - cu_sq)); + feq[T] = c2o27 * ((3.0 * (vx3) + c9o2 * (vx3) * (vx3)-cu_sq)); + feq[B] = c2o27 * ((3.0 * (-vx3) + c9o2 * (-vx3) * (-vx3) - cu_sq)); + feq[NE] = c1o54 * ((3.0 * (vx1 + vx2) + c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq)); + feq[SW] = c1o54 * ((3.0 * (-vx1 - vx2) + c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq)); + feq[SE] = c1o54 * ((3.0 * (vx1 - vx2) + c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq)); + feq[NW] = c1o54 * ((3.0 * (-vx1 + vx2) + c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq)); + feq[TE] = c1o54 * ((3.0 * (vx1 + vx3) + c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq)); + feq[BW] = c1o54 * ((3.0 * (-vx1 - vx3) + c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq)); + feq[BE] = c1o54 * ((3.0 * (vx1 - vx3) + c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq)); + feq[TW] = c1o54 * ((3.0 * (-vx1 + vx3) + c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq)); + feq[TN] = c1o54 * ((3.0 * (vx2 + vx3) + c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq)); + feq[BS] = c1o54 * ((3.0 * (-vx2 - vx3) + c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq)); + feq[BN] = c1o54 * ((3.0 * (vx2 - vx3) + c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq)); + feq[TS] = c1o54 * ((3.0 * (-vx2 + vx3) + c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq)); + feq[TNE] = c1o216 * ((3.0 * (vx1 + vx2 + vx3) + c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq)); + feq[BSW] = c1o216 * ((3.0 * (-vx1 - vx2 - vx3) + c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq)); + feq[BNE] = c1o216 * ((3.0 * (vx1 + vx2 - vx3) + c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq)); + feq[TSW] = c1o216 * ((3.0 * (-vx1 - vx2 + vx3) + c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq)); + feq[TSE] = c1o216 * ((3.0 * (vx1 - vx2 + vx3) + c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq)); + feq[BNW] = c1o216 * ((3.0 * (-vx1 + vx2 - vx3) + c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq)); + feq[BSE] = c1o216 * ((3.0 * (vx1 - vx2 - vx3) + c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq)); + feq[TNW] = c1o216 * ((3.0 * (-vx1 + vx2 + vx3) + c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq)); +} +////////////////////////////////////////////////////////////////////////// +static void calcMultiphaseHeq(LBMReal *const &heq /*[27]*/, const LBMReal &phi, const LBMReal &vx1, const LBMReal &vx2, + const LBMReal &vx3) +{ + using namespace UbMath; + LBMReal cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); + heq[REST] = c8o27 * phi * (1.0 - cu_sq); + heq[E] = c2o27 * phi * (1.0 + 3.0 * (vx1) + c9o2 * (vx1) * (vx1)-cu_sq); + heq[W] = c2o27 * phi * (1.0 + 3.0 * (-vx1) + c9o2 * (-vx1) * (-vx1) - cu_sq); + heq[N] = c2o27 * phi * (1.0 + 3.0 * (vx2) + c9o2 * (vx2) * (vx2)-cu_sq); + heq[S] = c2o27 * phi * (1.0 + 3.0 * (-vx2) + c9o2 * (-vx2) * (-vx2) - cu_sq); + heq[T] = c2o27 * phi * (1.0 + 3.0 * (vx3) + c9o2 * (vx3) * (vx3)-cu_sq); + heq[B] = c2o27 * phi * (1.0 + 3.0 * (-vx3) + c9o2 * (-vx3) * (-vx3) - cu_sq); + heq[NE] = c1o54 * phi * (1.0 + 3.0 * (vx1 + vx2) + c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq); + heq[SW] = c1o54 * phi * (1.0 + 3.0 * (-vx1 - vx2) + c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq); + heq[SE] = c1o54 * phi * (1.0 + 3.0 * (vx1 - vx2) + c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq); + heq[NW] = c1o54 * phi * (1.0 + 3.0 * (-vx1 + vx2) + c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq); + heq[TE] = c1o54 * phi * (1.0 + 3.0 * (vx1 + vx3) + c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq); + heq[BW] = c1o54 * phi * (1.0 + 3.0 * (-vx1 - vx3) + c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq); + heq[BE] = c1o54 * phi * (1.0 + 3.0 * (vx1 - vx3) + c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq); + heq[TW] = c1o54 * phi * (1.0 + 3.0 * (-vx1 + vx3) + c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq); + heq[TN] = c1o54 * phi * (1.0 + 3.0 * (vx2 + vx3) + c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq); + heq[BS] = c1o54 * phi * (1.0 + 3.0 * (-vx2 - vx3) + c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq); + heq[BN] = c1o54 * phi * (1.0 + 3.0 * (vx2 - vx3) + c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq); + heq[TS] = c1o54 * phi * (1.0 + 3.0 * (-vx2 + vx3) + c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq); + heq[TNE] = c1o216 * phi * (1.0 + 3.0 * (vx1 + vx2 + vx3) + c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq); + heq[BSW] = c1o216 * phi * (1.0 + 3.0 * (-vx1 - vx2 - vx3) + c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq); + heq[BNE] = c1o216 * phi * (1.0 + 3.0 * (vx1 + vx2 - vx3) + c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq); + heq[TSW] = c1o216 * phi * (1.0 + 3.0 * (-vx1 - vx2 + vx3) + c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq); + heq[TSE] = c1o216 * phi * (1.0 + 3.0 * (vx1 - vx2 + vx3) + c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq); + heq[BNW] = c1o216 * phi * (1.0 + 3.0 * (-vx1 + vx2 - vx3) + c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq); + heq[BSE] = c1o216 * phi * (1.0 + 3.0 * (vx1 - vx2 - vx3) + c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq); + heq[TNW] = c1o216 * phi * (1.0 + 3.0 * (-vx1 + vx2 + vx3) + c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq); +} +////////////////////////////////////////////////////////////////////////// +} // namespace D3Q27System +#endif diff --git a/src/cpu/VirtualFluidsCore/LBM/IncompressibleOffsetInterpolationProcessor.cpp b/src/cpu/VirtualFluidsCore/LBM/IncompressibleOffsetInterpolationProcessor.cpp index 979476eb4208d39f1e925c4d87d7257b3df77680..15e6f1dddb88f31e7bf57e2d3235e04b48da1080 100644 --- a/src/cpu/VirtualFluidsCore/LBM/IncompressibleOffsetInterpolationProcessor.cpp +++ b/src/cpu/VirtualFluidsCore/LBM/IncompressibleOffsetInterpolationProcessor.cpp @@ -569,7 +569,7 @@ void IncompressibleOffsetInterpolationProcessor::calcInterpolatedNode(LBMReal* f f[BSW] = f_TNE + xs*x_TNE + ys*y_TNE + zs*z_TNE + xs*ys*xy_TNE + xs*zs*xz_TNE + ys*zs*yz_TNE + feq[BSW]; f[BSE] = f_TNW + xs*x_TNW + ys*y_TNW + zs*z_TNW + xs*ys*xy_TNW + xs*zs*xz_TNW + ys*zs*yz_TNW + feq[BSE]; f[BNW] = f_TSE + xs*x_TSE + ys*y_TSE + zs*z_TSE + xs*ys*xy_TSE + xs*zs*xz_TSE + ys*zs*yz_TSE + feq[BNW]; - f[ZERO] = f_ZERO + xs*x_ZERO + ys*y_ZERO + zs*z_ZERO + feq[ZERO]; + f[REST] = f_ZERO + xs*x_ZERO + ys*y_ZERO + zs*z_ZERO + feq[REST]; } ////////////////////////////////////////////////////////////////////////// //Position SWB -0.25, -0.25, -0.25 @@ -763,7 +763,7 @@ void IncompressibleOffsetInterpolationProcessor::calcInterpolatedNodeFC(LBMReal* f[BNW] = f_TSE + feq[BNW]; f[BSE] = f_TNW + feq[BSE]; f[BSW] = f_TNE + feq[BSW]; - f[ZERO] = f_ZERO + feq[ZERO]; + f[REST] = f_ZERO + feq[REST]; } ////////////////////////////////////////////////////////////////////////// void IncompressibleOffsetInterpolationProcessor::calcInterpolatedVelocity(LBMReal x, LBMReal y, LBMReal z, LBMReal& vx1, LBMReal& vx2, LBMReal& vx3) diff --git a/src/cpu/VirtualFluidsCore/LBM/InitDensityLBMKernel.cpp b/src/cpu/VirtualFluidsCore/LBM/InitDensityLBMKernel.cpp index 6a7256997d22e9f226d6a534a7f51801f533a59d..554fc6614c11e2e8b96f5829d81d1c27e9365870 100644 --- a/src/cpu/VirtualFluidsCore/LBM/InitDensityLBMKernel.cpp +++ b/src/cpu/VirtualFluidsCore/LBM/InitDensityLBMKernel.cpp @@ -894,7 +894,7 @@ void InitDensityLBMKernel::calculate(int /*step*/) ////////////////////////////////////////////////////////////////////////// //read distribution //////////////////////////////////////////////////////////////////////////// - f[ZERO] = (*this->zeroDistributions)(x1, x2, x3); + f[REST] = (*this->zeroDistributions)(x1, x2, x3); f[E] = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3); f[N] = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3); @@ -928,7 +928,7 @@ void InitDensityLBMKernel::calculate(int /*step*/) drho = ((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])))+((f[E]+f[W])+(f[N]+f[S]) - +(f[T]+f[B]))+f[ZERO]; + +(f[T]+f[B]))+f[REST]; //vx1 = ((((f[TNE]-f[BSW])+(f[TSE]-f[BNW]))+((f[BSE]-f[TNW])+(f[BNE]-f[TSW])))+ // (((f[BE]-f[TW])+(f[TE]-f[BW]))+((f[SE]-f[NW])+(f[NE]-f[SW])))+ @@ -956,7 +956,7 @@ void InitDensityLBMKernel::calculate(int /*step*/) LBMReal cu_sq = 1.5*(vx1*vx1+vx2*vx2+vx3*vx3); - feq[ZERO] = c8o27*(drho-cu_sq); + feq[REST] = c8o27*(drho-cu_sq); feq[E] = c2o27*(drho+3.0*(vx1)+c9o2*(vx1)*(vx1)-cu_sq); feq[W] = c2o27*(drho+3.0*(-vx1)+c9o2*(-vx1)*(-vx1)-cu_sq); feq[N] = c2o27*(drho+3.0*(vx2)+c9o2*(vx2)*(vx2)-cu_sq); @@ -985,7 +985,7 @@ void InitDensityLBMKernel::calculate(int /*step*/) feq[TNW] = c1o216*(drho+3.0*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); //Relaxation - f[ZERO] += (feq[ZERO]-f[ZERO])*collFactor; + f[REST] += (feq[REST]-f[REST])*collFactor; f[E] += (feq[E]-f[E])*collFactor; f[W] += (feq[W]-f[W])*collFactor; f[N] += (feq[N]-f[N])*collFactor; @@ -1016,7 +1016,7 @@ void InitDensityLBMKernel::calculate(int /*step*/) ////////////////////////////////////////////////////////////////////////// #ifdef PROOF_CORRECTNESS - LBMReal rho_post = f[ZERO]+f[E]+f[W]+f[N]+f[S]+f[T]+f[B] + LBMReal rho_post = f[REST]+f[E]+f[W]+f[N]+f[S]+f[T]+f[B] +f[NE]+f[SW]+f[SE]+f[NW]+f[TE]+f[BW]+f[BE] +f[TW]+f[TN]+f[BS]+f[BN]+f[TS]+f[TNE]+f[TSW] +f[TSE]+f[TNW]+f[BNE]+f[BSW]+f[BSE]+f[BNW]; @@ -1061,7 +1061,7 @@ void InitDensityLBMKernel::calculate(int /*step*/) (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[D3Q27System::INV_BNW]; (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p) = f[D3Q27System::INV_BNE]; - (*this->zeroDistributions)(x1, x2, x3) = f[D3Q27System::ZERO]; + (*this->zeroDistributions)(x1, x2, x3) = f[D3Q27System::REST]; ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/VirtualFluidsCore/LBM/LBMKernel.cpp b/src/cpu/VirtualFluidsCore/LBM/LBMKernel.cpp index 1d387655bc0b177fa8f80972ac99aeee3caba6a8..f3d168733db86ea03a72a9741ba819ed6874a0c1 100644 --- a/src/cpu/VirtualFluidsCore/LBM/LBMKernel.cpp +++ b/src/cpu/VirtualFluidsCore/LBM/LBMKernel.cpp @@ -185,3 +185,49 @@ bool LBMKernel::isInsideOfDomain(const int &x1, const int &x2, const int &x3) co const SPtr<BCArray3D> bcArray = this->bcProcessor->getBCArray(); return bcArray->isInsideOfDomain(x1, x2, x3, ghostLayerWidth); } +////////////////////////////////////////////////////////////////////////// + +void LBMKernel::setCollisionFactorMultiphase(double collFactorL, double collFactorG) +{ + this->collFactorL = collFactorL; + this->collFactorG = collFactorG; +} +////////////////////////////////////////////////////////////////////////// +double LBMKernel::getCollisionFactorL() const { return collFactorL; } +////////////////////////////////////////////////////////////////////////// +double LBMKernel::getCollisionFactorG() const { return collFactorG; } +////////////////////////////////////////////////////////////////////////// +void LBMKernel::setDensityRatio(double densityRatio) { this->densityRatio = densityRatio; } +////////////////////////////////////////////////////////////////////////// +double LBMKernel::getDensityRatio() const { return densityRatio; } +////////////////////////////////////////////////////////////////////////// +void LBMKernel::setMultiphaseModelParameters(double beta, double kappa) +{ + this->beta = beta; + this->kappa = kappa; +} +////////////////////////////////////////////////////////////////////////// +void LBMKernel::getMultiphaseModelParameters(double &beta, double &kappa) +{ + beta = this->beta; + kappa = this->kappa; +} +////////////////////////////////////////////////////////////////////////// +void LBMKernel::setContactAngle(double contactAngle) { this->contactAngle = contactAngle; } +////////////////////////////////////////////////////////////////////////// +double LBMKernel::getContactAngle() const { return contactAngle; } +////////////////////////////////////////////////////////////////////////// +void LBMKernel::setPhiL(double phiL) { this->phiL = phiL; } +////////////////////////////////////////////////////////////////////////// +void LBMKernel::setPhiH(double phiH) { this->phiH = phiH; } +////////////////////////////////////////////////////////////////////////// +double LBMKernel::getPhiL() const { return phiL; } +////////////////////////////////////////////////////////////////////////// +double LBMKernel::getPhiH() const { return phiH; } +////////////////////////////////////////////////////////////////////////// +void LBMKernel::setPhaseFieldRelaxation(double tauH) { this->tauH = tauH; } +////////////////////////////////////////////////////////////////////////// +double LBMKernel::getPhaseFieldRelaxation() const { return tauH; } +////////////////////////////////////////////////////////////////////////// +void LBMKernel::setMobility(double mob) { this->mob = mob; } +////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/VirtualFluidsCore/LBM/LBMKernel.h b/src/cpu/VirtualFluidsCore/LBM/LBMKernel.h index be29589b9b7ab239bece700126ae906795c83977..5c3e067656e2fc5cb06046e28c0442b15c180050 100644 --- a/src/cpu/VirtualFluidsCore/LBM/LBMKernel.h +++ b/src/cpu/VirtualFluidsCore/LBM/LBMKernel.h @@ -110,6 +110,25 @@ public: void setNX(std::array<int, 3> nx); std::array<int, 3> getNX(); + ///////// Extra methods for the multiphase kernel //////////// + + void setCollisionFactorMultiphase(double collFactorL, double collFactorG); + double getCollisionFactorL() const; + double getCollisionFactorG() const; + void setDensityRatio(double densityRatio); + double getDensityRatio() const; + void setMultiphaseModelParameters(double beta, double kappa); + void getMultiphaseModelParameters(double &beta, double &kappa); + void setContactAngle(double contactAngle); + double getContactAngle() const; + void setPhiL(double phiL); + void setPhiH(double phiH); + double getPhiL() const; + double getPhiH() const; + void setPhaseFieldRelaxation(double tauH); + double getPhaseFieldRelaxation() const; + void setMobility(double mob); + protected: SPtr<DataSet3D> dataSet; SPtr<BCProcessor> bcProcessor; @@ -133,6 +152,18 @@ protected: std::array<int, 3> nx; + // Multiphase model + LBMReal collFactorL; + LBMReal collFactorG; + LBMReal densityRatio; + LBMReal beta; + LBMReal kappa; + LBMReal contactAngle; + LBMReal phiL; + LBMReal phiH; + LBMReal tauH; + LBMReal mob; + private: void checkFunction(mu::Parser fct); }; diff --git a/src/cpu/VirtualFluidsCore/LBM/LBMKernelETD3Q27BGK.cpp b/src/cpu/VirtualFluidsCore/LBM/LBMKernelETD3Q27BGK.cpp index 1da1a07ea4713d47c34ad75de5ba3e71fc548759..6076eb018097dc77afcf37af2d14206325be463c 100644 --- a/src/cpu/VirtualFluidsCore/LBM/LBMKernelETD3Q27BGK.cpp +++ b/src/cpu/VirtualFluidsCore/LBM/LBMKernelETD3Q27BGK.cpp @@ -88,7 +88,7 @@ void LBMKernelETD3Q27BGK::calculate(int /*step*/) ////////////////////////////////////////////////////////////////////////// //read distribution //////////////////////////////////////////////////////////////////////////// - f[ZERO] = (*this->zeroDistributions)(x1,x2,x3); + f[REST] = (*this->zeroDistributions)(x1,x2,x3); f[E] = (*this->localDistributions)(D3Q27System::ET_E, x1,x2,x3); f[N] = (*this->localDistributions)(D3Q27System::ET_N,x1,x2,x3); @@ -119,7 +119,7 @@ void LBMKernelETD3Q27BGK::calculate(int /*step*/) f[BNE] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1,x2,x3p); ////////////////////////////////////////////////////////////////////////// - drho = f[ZERO] + f[E] + f[W] + f[N] + f[S] + f[T] + f[B] + drho = f[REST] + f[E] + f[W] + f[N] + f[S] + f[T] + f[B] + f[NE] + f[SW] + f[SE] + f[NW] + f[TE] + f[BW] + f[BE] + f[TW] + f[TN] + f[BS] + f[BN] + f[TS] + f[TNE] + f[TSW] + f[TSE] + f[TNW] + f[BNE] + f[BSW] + f[BSE] + f[BNW]; @@ -138,7 +138,7 @@ void LBMKernelETD3Q27BGK::calculate(int /*step*/) LBMReal cu_sq=1.5*(vx1*vx1+vx2*vx2+vx3*vx3); - feq[ZERO] = c8o27*(drho-cu_sq); + feq[REST] = c8o27*(drho-cu_sq); feq[E] = c2o27*(drho+3.0*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); feq[W] = c2o27*(drho+3.0*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); feq[N] = c2o27*(drho+3.0*( vx2)+c9o2*( vx2)*( vx2)-cu_sq); @@ -167,7 +167,7 @@ void LBMKernelETD3Q27BGK::calculate(int /*step*/) feq[TNW]= c1o216*(drho+3.0*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); //Relaxation - f[ZERO] += (feq[ZERO]-f[ZERO])*collFactor; + f[REST] += (feq[REST]-f[REST])*collFactor; f[E] += (feq[E]-f[E])*collFactor; f[W] += (feq[W]-f[W])*collFactor; f[N] += (feq[N]-f[N])*collFactor; @@ -208,7 +208,7 @@ void LBMKernelETD3Q27BGK::calculate(int /*step*/) forcingX2 = muForcingX2.Eval(); forcingX3 = muForcingX3.Eval(); - f[ZERO] += 0.0 ; + f[REST] += 0.0 ; f[E ] += 3.0*c2o27 * (forcingX1) ; f[W ] += 3.0*c2o27 * (-forcingX1) ; f[N ] += 3.0*c2o27 * (forcingX2) ; @@ -238,7 +238,7 @@ void LBMKernelETD3Q27BGK::calculate(int /*step*/) } ////////////////////////////////////////////////////////////////////////// #ifdef PROOF_CORRECTNESS - LBMReal rho_post = f[ZERO] + f[E] + f[W] + f[N] + f[S] + f[T] + f[B] + LBMReal rho_post = f[REST] + f[E] + f[W] + f[N] + f[S] + f[T] + f[B] + f[NE] + f[SW] + f[SE] + f[NW] + f[TE] + f[BW] + f[BE] + f[TW] + f[TN] + f[BS] + f[BN] + f[TS] + f[TNE] + f[TSW] + f[TSE] + f[TNW] + f[BNE] + f[BSW] + f[BSE] + f[BNW]; @@ -283,7 +283,7 @@ void LBMKernelETD3Q27BGK::calculate(int /*step*/) (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1p,x2, x3p) = f[D3Q27System::INV_BNW]; (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1, x2, x3p) = f[D3Q27System::INV_BNE]; - (*this->zeroDistributions)(x1,x2,x3) = f[D3Q27System::ZERO]; + (*this->zeroDistributions)(x1,x2,x3) = f[D3Q27System::REST]; ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/VirtualFluidsCore/LBM/MultiphaseCumulantLBMKernel.cpp b/src/cpu/VirtualFluidsCore/LBM/MultiphaseCumulantLBMKernel.cpp new file mode 100644 index 0000000000000000000000000000000000000000..09c43e97b9b9f4ba46fb741b5f2cc2b1299d109c --- /dev/null +++ b/src/cpu/VirtualFluidsCore/LBM/MultiphaseCumulantLBMKernel.cpp @@ -0,0 +1,1748 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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 MultiphaseCumulantLBMKernel.cpp +//! \ingroup LBMKernel +//! \author Hesameddin Safari +//======================================================================================= + +#include "MultiphaseCumulantLBMKernel.h" +#include "BCArray3D.h" +#include "Block3D.h" +#include "D3Q27EsoTwist3DSplittedVector.h" +#include "D3Q27System.h" +#include "DataSet3D.h" +#include "LBMKernel.h" +#include <cmath> + +#define PROOF_CORRECTNESS + +////////////////////////////////////////////////////////////////////////// +MultiphaseCumulantLBMKernel::MultiphaseCumulantLBMKernel() { this->compressible = false; } +////////////////////////////////////////////////////////////////////////// +void MultiphaseCumulantLBMKernel::initDataSet() +{ + SPtr<DistributionArray3D> f(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9)); + SPtr<DistributionArray3D> h(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9)); // For phase-field + SPtr<PhaseFieldArray3D> divU(new PhaseFieldArray3D(nx[0] + 2, nx[1] + 2, nx[2] + 2, 0.0)); + dataSet->setFdistributions(f); + dataSet->setHdistributions(h); // For phase-field + dataSet->setPhaseField(divU); +} +////////////////////////////////////////////////////////////////////////// +SPtr<LBMKernel> MultiphaseCumulantLBMKernel::clone() +{ + SPtr<LBMKernel> kernel(new MultiphaseCumulantLBMKernel()); + kernel->setNX(nx); + dynamicPointerCast<MultiphaseCumulantLBMKernel>(kernel)->initDataSet(); + kernel->setCollisionFactorMultiphase(this->collFactorL, this->collFactorG); + kernel->setDensityRatio(this->densityRatio); + kernel->setMultiphaseModelParameters(this->beta, this->kappa); + kernel->setContactAngle(this->contactAngle); + kernel->setPhiL(this->phiL); + kernel->setPhiH(this->phiH); + kernel->setPhaseFieldRelaxation(this->tauH); + kernel->setMobility(this->mob); + + kernel->setBCProcessor(bcProcessor->clone(kernel)); + kernel->setWithForcing(withForcing); + kernel->setForcingX1(muForcingX1); + kernel->setForcingX2(muForcingX2); + kernel->setForcingX3(muForcingX3); + kernel->setIndex(ix1, ix2, ix3); + kernel->setDeltaT(deltaT); + + return kernel; +} +////////////////////////////////////////////////////////////////////////// +void MultiphaseCumulantLBMKernel::calculate(int step) +{ + using namespace D3Q27System; + using namespace UbMath; + + // initializing of forcing stuff + /*if (withForcing) + { + muForcingX1.DefineVar("x1",&muX1); muForcingX1.DefineVar("x2",&muX2); muForcingX1.DefineVar("x3",&muX3); + muForcingX2.DefineVar("x1",&muX1); muForcingX2.DefineVar("x2",&muX2); muForcingX2.DefineVar("x3",&muX3); + muForcingX3.DefineVar("x1",&muX1); muForcingX3.DefineVar("x2",&muX2); muForcingX3.DefineVar("x3",&muX3); + + muDeltaT = deltaT; + + muForcingX1.DefineVar("dt",&muDeltaT); + muForcingX2.DefineVar("dt",&muDeltaT); + muForcingX3.DefineVar("dt",&muDeltaT); + + muNu = (1.0/3.0)*(1.0/collFactor - 1.0/2.0); + + muForcingX1.DefineVar("nu",&muNu); + muForcingX2.DefineVar("nu",&muNu); + muForcingX3.DefineVar("nu",&muNu); + + LBMReal forcingX1 = 0; + LBMReal forcingX2 = 0; + LBMReal forcingX3 = 0; + }*/ + forcingX1 = 0.0; + forcingX2 = 0.0; + forcingX3 = 0.0; + ///////////////////////////////////// + + localDistributionsF = + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); + nonLocalDistributionsF = + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); + zeroDistributionsF = + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); + + localDistributionsH = + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions(); + nonLocalDistributionsH = + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions(); + zeroDistributionsH = + dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions(); + + // phaseField = dataSet->getPhaseField(); + + SPtr<BCArray3D> bcArray = this->getBCProcessor()->getBCArray(); + + const int bcArrayMaxX1 = (int)bcArray->getNX1(); + const int bcArrayMaxX2 = (int)bcArray->getNX2(); + const int bcArrayMaxX3 = (int)bcArray->getNX3(); + + int minX1 = ghostLayerWidth; + int minX2 = ghostLayerWidth; + int minX3 = ghostLayerWidth; + int maxX1 = bcArrayMaxX1 - ghostLayerWidth; + int maxX2 = bcArrayMaxX2 - ghostLayerWidth; + int maxX3 = bcArrayMaxX3 - ghostLayerWidth; + + //#pragma omp parallel num_threads(8) + { + // int i = omp_get_thread_num(); + // printf_s("Hello from thread %d\n", i); + //} + //#pragma omp for + + CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr phaseField( + new CbArray3D<LBMReal, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0)); + CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr divU( + new CbArray3D<LBMReal, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, 0.0)); + + // CbArray3D<LBMReal> phaseField(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3,-999); + + for (int x3 = 0; x3 <= maxX3; x3++) { + for (int x2 = 0; x2 <= maxX2; x2++) { + for (int x1 = 0; x1 <= maxX1; x1++) { + if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { + int x1p = x1 + 1; + int x2p = x2 + 1; + int x3p = x3 + 1; + + LBMReal mfcbb = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); + LBMReal mfbcb = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3); + LBMReal mfbbc = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3); + LBMReal mfccb = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3); + LBMReal mfacb = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3); + LBMReal mfcbc = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3); + LBMReal mfabc = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3); + LBMReal mfbcc = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3); + LBMReal mfbac = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3); + LBMReal mfccc = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3); + LBMReal mfacc = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3); + LBMReal mfcac = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3); + LBMReal mfaac = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3); + LBMReal mfabb = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3); + LBMReal mfbab = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3); + LBMReal mfbba = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p); + LBMReal mfaab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3); + LBMReal mfcab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3); + LBMReal mfaba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p); + LBMReal mfcba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p); + LBMReal mfbaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p); + LBMReal mfbca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p); + LBMReal mfaaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p); + LBMReal mfcaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p); + LBMReal mfaca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p); + LBMReal mfcca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p); + + LBMReal mfbbb = (*this->zeroDistributionsH)(x1, x2, x3); + // LBMReal phase = h[REST] + h[E] + h[W] + h[N] + h[S] + h[T] + h[B] + h[NE] + h[SW] + h[SE] + + // h[NW] + h[TE] + h[BW] + h[BE] + h[TW] + h[TN] + h[BS] + h[BN] + h[TS] + h[TNE] + h[TNW] + + //h[TSE] + h[TSW] + h[BNE] + h[BNW] + h[BSE] + h[BSW]; if (phase > 1.0) phase = 1.0e0; + //(*phaseField)(x1,x2,x3) = phase; + (*phaseField)(x1, x2, x3) = (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 collFactorM; + LBMReal forcingTerm[D3Q27System::ENDF + 1]; + // LBMReal m000, m100, m010, m001, m110, m101, m011, m200, m020, m002, m120, m102, m210, m012, m201, m021, m111, + // m220, m202, m022, m211, m121, m112, m221, m212, m122, m222; LBMReal k000, k100, k010, k001, k110, k101, k011, + // k200, k020, k002, k120, k102, k210, k012, k201, k021, k111, k220, k202, k022, k211, k121, k112, k221, k212, + // k122, k222; LBMReal c000, c100, c010, c001, c110, c101, c011, c200, c020, c002, c120, c102, c210, c012, c201, + // c021, c111, c220, c202, c022, c211, c121, c112, c221, c212, c122, c222; + + // LBMReal k200_pl_k020_pl_k002, k200_mi_k020, k200_mi_k002, k210_pl_k012, k210_mi_k012, k201_pl_k021, + // k201_mi_k021, k120_pl_k102, k120_mi_k102, k220_pl_k202_pl_k022, + // k220_mi2_k202_pl_k022, k220_pl_k202_mi2_k022; + + // LBMReal c200_pl_c020_pl_c002, c200_mi_c020, c200_mi_c002, c210_pl_c012, c210_mi_c012, c201_pl_c021, + // c201_mi_c021, c120_pl_c102, c120_mi_c102, c220_pl_c202_pl_c022, + // c220_mi2_c202_pl_c022, c220_pl_c202_mi2_c022; + + LBMReal w1, w2, w3, w4, w5, w6, w7, w8, w9, w10; + + w2 = 1.0; + w3 = 1.0; + w4 = 1.0; + w5 = 1.0; + w6 = 1.0; + w7 = 1.0; + w8 = 1.0; + w9 = 1.0; + w10 = 1.0; + + for (int x3 = minX3; x3 < maxX3; x3++) { + for (int x2 = minX2; x2 < maxX2; x2++) { + for (int x1 = minX1; x1 < maxX1; x1++) { + if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { + int x1p = x1 + 1; + int x2p = x2 + 1; + int x3p = x3 + 1; + + ////////////////////////////////////////////////////////////////////////// + // Read distributions and phase field + //////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////// + + // E N T + // c c c + ////////// + // W S B + // a a a + + // Rest ist b + + // mfxyz + // a - negative + // b - null + // c - positive + + // a b c + //-1 0 1 + + /* + phi[REST] = (phaseField)(x1,x2,x3); + phi[E ] = (phaseField)(x1 + DX1[E ], x2 + DX2[E ], x3 + DX3[E ]); + phi[N ] = (phaseField)(x1 + DX1[N ], x2 + DX2[N ], x3 + DX3[N ]); + phi[T ] = (phaseField)(x1 + DX1[T ], x2 + DX2[T ], x3 + DX3[T ]); + phi[W ] = (phaseField)(x1 + DX1[W ], x2 + DX2[W ], x3 + DX3[W ]); + phi[S ] = (phaseField)(x1 + DX1[S ], x2 + DX2[S ], x3 + DX3[S ]); + phi[B ] = (phaseField)(x1 + DX1[B ], x2 + DX2[B ], x3 + DX3[B ]); + phi[NE ] = (phaseField)(x1 + DX1[NE ], x2 + DX2[NE ], x3 + DX3[NE ]); + phi[NW ] = (phaseField)(x1 + DX1[NW ], x2 + DX2[NW ], x3 + DX3[NW ]); + phi[TE ] = (phaseField)(x1 + DX1[TE ], x2 + DX2[TE ], x3 + DX3[TE ]); + phi[TW ] = (phaseField)(x1 + DX1[TW ], x2 + DX2[TW ], x3 + DX3[TW ]); + phi[TN ] = (phaseField)(x1 + DX1[TN ], x2 + DX2[TN ], x3 + DX3[TN ]); + phi[TS ] = (phaseField)(x1 + DX1[TS ], x2 + DX2[TS ], x3 + DX3[TS ]); + phi[SW ] = (phaseField)(x1 + DX1[SW ], x2 + DX2[SW ], x3 + DX3[SW ]); + phi[SE ] = (phaseField)(x1 + DX1[SE ], x2 + DX2[SE ], x3 + DX3[SE ]); + phi[BW ] = (phaseField)(x1 + DX1[BW ], x2 + DX2[BW ], x3 + DX3[BW ]); + phi[BE ] = (phaseField)(x1 + DX1[BE ], x2 + DX2[BE ], x3 + DX3[BE ]); + phi[BS ] = (phaseField)(x1 + DX1[BS ], x2 + DX2[BS ], x3 + DX3[BS ]); + phi[BN ] = (phaseField)(x1 + DX1[BN ], x2 + DX2[BN ], x3 + DX3[BN ]); + phi[BSW] = (phaseField)(x1 + DX1[BSW], x2 + DX2[BSW], x3 + DX3[BSW]); + phi[BSE] = (phaseField)(x1 + DX1[BSE], x2 + DX2[BSE], x3 + DX3[BSE]); + phi[BNW] = (phaseField)(x1 + DX1[BNW], x2 + DX2[BNW], x3 + DX3[BNW]); + phi[BNE] = (phaseField)(x1 + DX1[BNE], x2 + DX2[BNE], x3 + DX3[BNE]); + phi[TNE] = (phaseField)(x1 + DX1[TNE], x2 + DX2[TNE], x3 + DX3[TNE]); + phi[TNW] = (phaseField)(x1 + DX1[TNW], x2 + DX2[TNW], x3 + DX3[TNW]); + phi[TSE] = (phaseField)(x1 + DX1[TSE], x2 + DX2[TSE], x3 + DX3[TSE]); + phi[TSW] = (phaseField)(x1 + DX1[TSW], x2 + DX2[TSW], x3 + DX3[TSW]); + */ + findNeighbors(phaseField, x1, x2, x3); + + LBMReal mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3); + LBMReal mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3); + LBMReal mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3); + LBMReal mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3); + LBMReal mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3); + LBMReal mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3); + LBMReal mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3); + LBMReal mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3); + LBMReal mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3); + LBMReal mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3); + LBMReal mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3); + LBMReal mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3); + LBMReal mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3); + LBMReal mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3); + LBMReal mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3); + LBMReal mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p); + LBMReal mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3); + LBMReal mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3); + LBMReal mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p); + LBMReal mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p); + LBMReal mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p); + LBMReal mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p); + LBMReal mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p); + LBMReal mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p); + LBMReal mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p); + LBMReal mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p); + + LBMReal mfbbb = (*this->zeroDistributionsF)(x1, x2, x3); + + LBMReal rhoH = 1.0; + LBMReal rhoL = 1.0 / densityRatio; + + // LBMReal rhoToPhi = (1.0 - 1.0/densityRatio); + LBMReal rhoToPhi = (rhoH - rhoL) / (phiH - phiL); + + // collFactorM = phi[REST]*collFactorL + (1-phi[REST])*collFactorG; + // collFactorM = phi[REST]*collFactorG + (1-phi[REST])*collFactorL; + + // LBMReal tauH = 1.0; + // LBMReal di = sqrt(8*kappa/beta); + + LBMReal dX1_phi = gradX1_phi(); + 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; + + collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[REST] - phiH) / (phiH - phiL); + + /*if ((phi[REST] > 0.1)||(phi[REST] < 0.9)) + { + collFactorM*=(1.0-denom); + }*/ + + w1 = collFactorM; + + /*dX1_phi = -normX1*((phi[REST]>phiH || phi[REST]<phiL) ? 0.0 : 4*(phi[REST] - phiL)*(phi[REST] + - phiH)/di); dX2_phi = -normX2*((phi[REST]>phiH || phi[REST]<phiL) ? 0.0 : 4*(phi[REST] - + phiL)*(phi[REST] - phiH)/di); dX3_phi = -normX3*((phi[REST]>phiH || phi[REST]<phiL) ? 0.0 : + 4*(phi[REST] - phiL)*(phi[REST] - phiH)/di);*/ + + // UbTupleDouble3 coords = grid->getNodeCoordinates(block, x1, x2, x3); + /*Block3D bl = this->block(); + + int wX1 = bl->getX1() + x1; + int wX2 = bl->getX2() + x2; + int wX3 = bl->getX3() + x3;*/ + + /*if (wX3 >= 30.0) + { + dX1_phi = 0.0; + dX2_phi = 0.0; + dX3_phi = 0.0; + }*/ + + LBMReal mu = + 2 * beta * phi[REST] * (phi[REST] - 1) * (2 * phi[REST] - 1) - kappa * nabla2_phi(); + + // LBMReal rhoToPhi = (1.0/densityRatio - 1.0); + + //----------- Calculating Macroscopic Values ------------- + + // LBMReal rho = phi[REST] + (1.0 - phi[REST])*1.0/densityRatio; + LBMReal rho = rhoH + rhoToPhi * (phi[REST] - phiH); + // LBMReal rho = phi[REST]*1.0/densityRatio + (1.0 - phi[REST]); + + if (withForcing) { + // muX1 = static_cast<double>(x1-1+ix1*maxX1); + // muX2 = static_cast<double>(x2-1+ix2*maxX2); + // muX3 = static_cast<double>(x3-1+ix3*maxX3); + + forcingX1 = muForcingX1.Eval(); + forcingX2 = muForcingX2.Eval(); + forcingX3 = muForcingX3.Eval(); + + LBMReal rho_m = 1.0 / densityRatio; + forcingX1 = forcingX1 * (rho - rho_m); + forcingX2 = forcingX2 * (rho - rho_m); + forcingX3 = forcingX3 * (rho - rho_m); + + // ux += forcingX1*deltaT*0.5; // X + // uy += forcingX2*deltaT*0.5; // Y + // uz += forcingX3*deltaT*0.5; // Z + } + + LBMReal ux = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + + (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + + (mfcbb - mfabb)) / + (rho * c1o3) + + (mu * dX1_phi + forcingX1) / (2 * rho); + + LBMReal uy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + + (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + + (mfbcb - mfbab)) / + (rho * c1o3) + + (mu * dX2_phi + forcingX2) / (2 * rho); + + LBMReal uz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + + (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + + (mfbbc - mfbba)) / + (rho * c1o3) + + (mu * dX3_phi + forcingX3) / (2 * rho); + + // LBMReal p1 = (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 + + //(ux*rhoToPhi*dX1_phi*c1o3 + uy*rhoToPhi*dX2_phi*c1o3 + uz*rhoToPhi*dX3_phi*c1o3)/2.0; + + // vvx = 0.0; vvy = 0.0; vvz = 0.0; + //-------------------------------------------------------- + + LBMReal ux2 = ux * ux; + LBMReal uy2 = uy * uy; + LBMReal uz2 = uz * uz; + // LBMReal ux_uy = ux*uy; + // LBMReal ux_uz = ux*uz; + // LBMReal uy_uz = uy*uz; + // LBMReal ux_uy_uz = ux*uy*uz; + + /* + //----------- Calculating Forcing Terms ------------- + LBMReal forcingTerm1 = (ux*mu*dX1_phi + uy*mu*dX2_phi + uz*mu*dX3_phi); + for (int dir = STARTF; dir < (ENDF+1); dir++) + { + if (dir != REST) + { + LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0; + forcingTerm[dir] = (c1o3*rhoToPhi*dirGrad_phi + + mu*dirGrad_phi)*(DX1[dir]*ux + DX2[dir]*uy + DX3[dir]*uz)*WEIGTH[dir]/c1o3 + + mu*dirGrad_phi*WEIGTH[dir] - (forcingTerm1)*WEIGTH[dir]; + } + else + { + forcingTerm[REST] = -(forcingTerm1)*WEIGTH[REST]; + } + } + //-------------------------------------------------------- + */ + + //----------- Calculating Forcing Terms * ------------- + // LBMReal forcingTerm1 = (ux*mu*dX1_phi + uy*mu*dX2_phi + uz*mu*dX3_phi); + for (int dir = STARTF; dir <= (FENDDIR); dir++) { + LBMReal velProd = DX1[dir] * ux + DX2[dir] * uy + DX3[dir] * uz; + LBMReal velSq1 = velProd * velProd; + LBMReal gamma = WEIGTH[dir] * (1.0 + 3 * velProd + 4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2)); + + // forcingTerm[dir] = (DX1[dir] - ux)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX1_phi + + // gamma*mu*dX1_phi) + + // (DX2[dir] - uy)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX2_phi + gamma*mu*dX2_phi) + + // (DX3[dir] - uz)*((gamma - WEIGTH[dir])*c1o3*rhoToPhi*dX3_phi + gamma*mu*dX3_phi); + + LBMReal fac1 = (gamma - WEIGTH[dir]) * c1o3 * rhoToPhi; + // LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]])/2.0; + // LBMReal dirGrad_phi = DX1[dir]*dX1_phi + DX2[dir]*dX2_phi + DX3[dir]*dX3_phi; + + /*forcingTerm[dir] = (- (ux)*(fac1*dX1_phi + gamma*mu*dX1_phi) - + (uy)*(fac1*dX2_phi + gamma*mu*dX2_phi) - + (uz)*(fac1*dX3_phi + gamma*mu*dX3_phi)) + (fac1*dirGrad_phi + gamma*mu*dirGrad_phi + + DX1[dir]*forcingX1 + DX2[dir]*forcingX2 + DX3[dir]*forcingX3);*/ + + forcingTerm[dir] = ((-ux) * (fac1 * dX1_phi + gamma * (mu * dX1_phi + forcingX1)) + + (-uy) * (fac1 * dX2_phi + gamma * (mu * dX2_phi + forcingX2)) + + (-uz) * (fac1 * dX3_phi + gamma * (mu * dX3_phi + forcingX3))) + + (DX1[dir]) * (fac1 * dX1_phi + gamma * (mu * dX1_phi + forcingX1)) + + (DX2[dir]) * (fac1 * dX2_phi + gamma * (mu * dX2_phi + forcingX2)) + + (DX3[dir]) * (fac1 * dX3_phi + gamma * (mu * dX3_phi + forcingX3)); + } + + LBMReal gamma = WEIGTH[REST] * (1.0 - 1.5 * (ux2 + uy2 + uz2)); + /*forcingTerm[REST] = -(ux)*((gamma - WEIGTH[REST])*c1o3*rhoToPhi*dX1_phi + gamma*mu*dX1_phi) - + (uy)*((gamma - WEIGTH[REST])*c1o3*rhoToPhi*dX2_phi + gamma*mu*dX2_phi) - + (uz)*((gamma - WEIGTH[REST])*c1o3*rhoToPhi*dX3_phi + gamma*mu*dX3_phi);*/ + LBMReal fac1 = (gamma - WEIGTH[REST]) * c1o3 * rhoToPhi; + forcingTerm[REST] = (-ux) * (fac1 * dX1_phi + gamma * (mu * dX1_phi + forcingX1)) + + (-uy) * (fac1 * dX2_phi + gamma * (mu * dX2_phi + forcingX2)) + + (-uz) * (fac1 * dX3_phi + gamma * (mu * dX3_phi + forcingX3)); + + //-------------------------------------------------------- + + /* + f1[E ] = (g[E ] + 0.5*forcingTerm[E ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[E ]/c1o3; + f1[N ] = (g[N ] + 0.5*forcingTerm[N ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[N ]/c1o3; + f1[T ] = (g[T ] + 0.5*forcingTerm[T ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[T ]/c1o3; + f1[NE ] = (g[NE ] + 0.5*forcingTerm[NE ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[NE + ]/c1o3; f1[NW ] = (g[NW ] + 0.5*forcingTerm[NW ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[NW ]/c1o3; + f1[TE ] = (g[TE ] + 0.5*forcingTerm[TE ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TE + ]/c1o3; f1[TW ] = (g[TW ] + 0.5*forcingTerm[TW ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TW ]/c1o3; + f1[TN ] = (g[TN ] + 0.5*forcingTerm[TN ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TN + ]/c1o3; f1[TS ] = (g[TS ] + 0.5*forcingTerm[TS ])/c1o3 - (p1 - rho*c1o3)*WEIGTH[TS ]/c1o3; + f1[TNE] = (g[TNE] + 0.5*forcingTerm[TNE])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[TNE]/c1o3; f1[TNW] = (g[TNW] + 0.5*forcingTerm[TNW])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[TNW]/c1o3; f1[TSE] = (g[TSE] + 0.5*forcingTerm[TSE])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[TSE]/c1o3; f1[TSW] = (g[TSW] + 0.5*forcingTerm[TSW])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[TSW]/c1o3; f1[W ] = (g[W ] + 0.5*forcingTerm[W ])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[W ]/c1o3; f1[S ] = (g[S ] + 0.5*forcingTerm[S ])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[S ]/c1o3; f1[B ] = (g[B ] + 0.5*forcingTerm[B ])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[B ]/c1o3; f1[SW ] = (g[SW ] + 0.5*forcingTerm[SW ])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[SW ]/c1o3; f1[SE ] = (g[SE ] + 0.5*forcingTerm[SE ])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[SE ]/c1o3; f1[BW ] = (g[BW ] + 0.5*forcingTerm[BW ])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[BW ]/c1o3; f1[BE ] = (g[BE ] + 0.5*forcingTerm[BE ])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[BE ]/c1o3; f1[BS ] = (g[BS ] + 0.5*forcingTerm[BS ])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[BS ]/c1o3; f1[BN ] = (g[BN ] + 0.5*forcingTerm[BN ])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[BN ]/c1o3; f1[BSW] = (g[BSW] + 0.5*forcingTerm[BSW])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[BSW]/c1o3; f1[BSE] = (g[BSE] + 0.5*forcingTerm[BSE])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[BSE]/c1o3; f1[BNW] = (g[BNW] + 0.5*forcingTerm[BNW])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[BNW]/c1o3; f1[BNE] = (g[BNE] + 0.5*forcingTerm[BNE])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[BNE]/c1o3; f1[REST] = (g[REST] + 0.5*forcingTerm[REST])/c1o3 - (p1 - + rho*c1o3)*WEIGTH[REST]/c1o3; + */ + + mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[E]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; + mfbcb = 3.0 * (mfbcb + 0.5 * forcingTerm[N]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; + mfbbc = 3.0 * (mfbbc + 0.5 * forcingTerm[T]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; + mfccb = 3.0 * (mfccb + 0.5 * forcingTerm[NE]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; + mfacb = 3.0 * (mfacb + 0.5 * forcingTerm[NW]) / rho; //-(3.0*p1 - rho)*WEIGTH[NW ]; + mfcbc = 3.0 * (mfcbc + 0.5 * forcingTerm[TE]) / rho; //-(3.0*p1 - rho)*WEIGTH[TE ]; + mfabc = 3.0 * (mfabc + 0.5 * forcingTerm[TW]) / rho; //-(3.0*p1 - rho)*WEIGTH[TW ]; + mfbcc = 3.0 * (mfbcc + 0.5 * forcingTerm[TN]) / rho; //-(3.0*p1 - rho)*WEIGTH[TN ]; + mfbac = 3.0 * (mfbac + 0.5 * forcingTerm[TS]) / rho; //-(3.0*p1 - rho)*WEIGTH[TS ]; + mfccc = 3.0 * (mfccc + 0.5 * forcingTerm[TNE]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNE]; + mfacc = 3.0 * (mfacc + 0.5 * forcingTerm[TNW]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNW]; + mfcac = 3.0 * (mfcac + 0.5 * forcingTerm[TSE]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSE]; + mfaac = 3.0 * (mfaac + 0.5 * forcingTerm[TSW]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSW]; + mfabb = 3.0 * (mfabb + 0.5 * forcingTerm[W]) / rho; //-(3.0*p1 - rho)*WEIGTH[W ]; + mfbab = 3.0 * (mfbab + 0.5 * forcingTerm[S]) / rho; //-(3.0*p1 - rho)*WEIGTH[S ]; + mfbba = 3.0 * (mfbba + 0.5 * forcingTerm[B]) / rho; //-(3.0*p1 - rho)*WEIGTH[B ]; + mfaab = 3.0 * (mfaab + 0.5 * forcingTerm[SW]) / rho; //-(3.0*p1 - rho)*WEIGTH[SW ]; + mfcab = 3.0 * (mfcab + 0.5 * forcingTerm[SE]) / rho; //-(3.0*p1 - rho)*WEIGTH[SE ]; + mfaba = 3.0 * (mfaba + 0.5 * forcingTerm[BW]) / rho; //-(3.0*p1 - rho)*WEIGTH[BW ]; + mfcba = 3.0 * (mfcba + 0.5 * forcingTerm[BE]) / rho; //-(3.0*p1 - rho)*WEIGTH[BE ]; + mfbaa = 3.0 * (mfbaa + 0.5 * forcingTerm[BS]) / rho; //-(3.0*p1 - rho)*WEIGTH[BS ]; + mfbca = 3.0 * (mfbca + 0.5 * forcingTerm[BN]) / rho; //-(3.0*p1 - rho)*WEIGTH[BN ]; + mfaaa = 3.0 * (mfaaa + 0.5 * forcingTerm[BSW]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSW]; + mfcaa = 3.0 * (mfcaa + 0.5 * forcingTerm[BSE]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSE]; + mfaca = 3.0 * (mfaca + 0.5 * forcingTerm[BNW]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNW]; + mfcca = 3.0 * (mfcca + 0.5 * forcingTerm[BNE]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNE]; + mfbbb = 3.0 * (mfbbb + 0.5 * forcingTerm[REST]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST]; + + LBMReal rho1 = (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; + + /* + //forcing + /////////////////////////////////////////////////////////////////////////////////////////// + if (withForcing) + { + muX1 = static_cast<double>(x1-1+ix1*maxX1); + muX2 = static_cast<double>(x2-1+ix2*maxX2); + muX3 = static_cast<double>(x3-1+ix3*maxX3); + + forcingX1 = muForcingX1.Eval(); + forcingX2 = muForcingX2.Eval(); + forcingX3 = muForcingX3.Eval(); + + vvx += forcingX1*deltaT*0.5; // X + vvy += forcingX2*deltaT*0.5; // Y + vvz += forcingX3*deltaT*0.5; // Z + } + /////////////////////////////////////////////////////////////////////////////////////////// + */ + + LBMReal oMdrho, m0, m1, m2; + + oMdrho = mfccc + mfaaa; + m0 = mfaca + mfcac; + m1 = mfacc + mfcaa; + m2 = mfaac + mfcca; + oMdrho += m0; + m1 += m2; + oMdrho += m1; + m0 = mfbac + mfbca; + m1 = mfbaa + mfbcc; + m0 += m1; + m1 = mfabc + mfcba; + m2 = mfaba + mfcbc; + m1 += m2; + m0 += m1; + m1 = mfacb + mfcab; + m2 = mfaab + mfccb; + m1 += m2; + m0 += m1; + oMdrho += m0; + m0 = mfabb + mfcbb; + m1 = mfbab + mfbcb; + m2 = mfbba + mfbbc; + m0 += m1 + m2; + m0 += mfbbb; // hat gefehlt + oMdrho = 1. - (oMdrho + m0); + // oMdrho = rho - (oMdrho + m0); + + //////////////////////////////////////////////////////////////////////////////////// + LBMReal wadjust; + LBMReal qudricLimit = 0.01; + //////////////////////////////////////////////////////////////////////////////////// + // Hin + //////////////////////////////////////////////////////////////////////////////////// + // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Z - Dir + m2 = mfaaa + mfaac; + m1 = mfaac - mfaaa; + m0 = m2 + mfaab; + mfaaa = m0; + m0 += c1o36 * oMdrho; + mfaab = m1 - m0 * uz; + mfaac = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaba + mfabc; + m1 = mfabc - mfaba; + m0 = m2 + mfabb; + mfaba = m0; + m0 += c1o9 * oMdrho; + mfabb = m1 - m0 * uz; + mfabc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaca + mfacc; + m1 = mfacc - mfaca; + m0 = m2 + mfacb; + mfaca = m0; + m0 += c1o36 * oMdrho; + mfacb = m1 - m0 * uz; + mfacc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbaa + mfbac; + m1 = mfbac - mfbaa; + m0 = m2 + mfbab; + mfbaa = m0; + m0 += c1o9 * oMdrho; + mfbab = m1 - m0 * uz; + mfbac = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbba + mfbbc; + m1 = mfbbc - mfbba; + m0 = m2 + mfbbb; + mfbba = m0; + m0 += c4o9 * oMdrho; + mfbbb = m1 - m0 * uz; + mfbbc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbca + mfbcc; + m1 = mfbcc - mfbca; + m0 = m2 + mfbcb; + mfbca = m0; + m0 += c1o9 * oMdrho; + mfbcb = m1 - m0 * uz; + mfbcc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcaa + mfcac; + m1 = mfcac - mfcaa; + m0 = m2 + mfcab; + mfcaa = m0; + m0 += c1o36 * oMdrho; + mfcab = m1 - m0 * uz; + mfcac = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcba + mfcbc; + m1 = mfcbc - mfcba; + m0 = m2 + mfcbb; + mfcba = m0; + m0 += c1o9 * oMdrho; + mfcbb = m1 - m0 * uz; + mfcbc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcca + mfccc; + m1 = mfccc - mfcca; + m0 = m2 + mfccb; + mfcca = m0; + m0 += c1o36 * oMdrho; + mfccb = m1 - m0 * uz; + mfccc = m2 - 2. * m1 * uz + uz2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Y - Dir + m2 = mfaaa + mfaca; + m1 = mfaca - mfaaa; + m0 = m2 + mfaba; + mfaaa = m0; + m0 += c1o6 * oMdrho; + mfaba = m1 - m0 * uy; + mfaca = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaab + mfacb; + m1 = mfacb - mfaab; + m0 = m2 + mfabb; + mfaab = m0; + mfabb = m1 - m0 * uy; + mfacb = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaac + mfacc; + m1 = mfacc - mfaac; + m0 = m2 + mfabc; + mfaac = m0; + m0 += c1o18 * oMdrho; + mfabc = m1 - m0 * uy; + mfacc = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbaa + mfbca; + m1 = mfbca - mfbaa; + m0 = m2 + mfbba; + mfbaa = m0; + m0 += c2o3 * oMdrho; + mfbba = m1 - m0 * uy; + mfbca = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbab + mfbcb; + m1 = mfbcb - mfbab; + m0 = m2 + mfbbb; + mfbab = m0; + mfbbb = m1 - m0 * uy; + mfbcb = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfbac + mfbcc; + m1 = mfbcc - mfbac; + m0 = m2 + mfbbc; + mfbac = m0; + m0 += c2o9 * oMdrho; + mfbbc = m1 - m0 * uy; + mfbcc = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcaa + mfcca; + m1 = mfcca - mfcaa; + m0 = m2 + mfcba; + mfcaa = m0; + m0 += c1o6 * oMdrho; + mfcba = m1 - m0 * uy; + mfcca = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcab + mfccb; + m1 = mfccb - mfcab; + m0 = m2 + mfcbb; + mfcab = m0; + mfcbb = m1 - m0 * uy; + mfccb = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfcac + mfccc; + m1 = mfccc - mfcac; + m0 = m2 + mfcbc; + mfcac = m0; + m0 += c1o18 * oMdrho; + mfcbc = m1 - m0 * uy; + mfccc = m2 - 2. * m1 * uy + uy2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // X - Dir + m2 = mfaaa + mfcaa; + m1 = mfcaa - mfaaa; + m0 = m2 + mfbaa; + mfaaa = m0; + m0 += 1. * oMdrho; + mfbaa = m1 - m0 * ux; + mfcaa = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaba + mfcba; + m1 = mfcba - mfaba; + m0 = m2 + mfbba; + mfaba = m0; + mfbba = m1 - m0 * ux; + mfcba = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaca + mfcca; + m1 = mfcca - mfaca; + m0 = m2 + mfbca; + mfaca = m0; + m0 += c1o3 * oMdrho; + mfbca = m1 - m0 * ux; + mfcca = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaab + mfcab; + m1 = mfcab - mfaab; + m0 = m2 + mfbab; + mfaab = m0; + mfbab = m1 - m0 * ux; + mfcab = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfabb + mfcbb; + m1 = mfcbb - mfabb; + m0 = m2 + mfbbb; + mfabb = m0; + mfbbb = m1 - m0 * ux; + mfcbb = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfacb + mfccb; + m1 = mfccb - mfacb; + m0 = m2 + mfbcb; + mfacb = m0; + mfbcb = m1 - m0 * ux; + mfccb = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfaac + mfcac; + m1 = mfcac - mfaac; + m0 = m2 + mfbac; + mfaac = m0; + m0 += c1o3 * oMdrho; + mfbac = m1 - m0 * ux; + mfcac = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfabc + mfcbc; + m1 = mfcbc - mfabc; + m0 = m2 + mfbbc; + mfabc = m0; + mfbbc = m1 - m0 * ux; + mfcbc = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + m2 = mfacc + mfccc; + m1 = mfccc - mfacc; + m0 = m2 + mfbcc; + mfacc = m0; + m0 += c1o9 * oMdrho; + mfbcc = m1 - m0 * ux; + mfccc = m2 - 2. * m1 * ux + ux2 * m0; + //////////////////////////////////////////////////////////////////////////////////// + // Cumulants + //////////////////////////////////////////////////////////////////////////////////// + LBMReal OxxPyyPzz = 1.; // omega2 or bulk viscosity + LBMReal OxyyPxzz = 1.; //-s9;//2+s9;// + LBMReal OxyyMxzz = 1.; // 2+s9;// + LBMReal O4 = 1.; + LBMReal O5 = 1.; + LBMReal O6 = 1.; + + // Cum 4. + // LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // + // till 18.05.2015 LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * + // mfabb); // till 18.05.2015 LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * + // mfbab * mfabb); // till 18.05.2015 + + LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab); + LBMReal CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); + LBMReal CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); + + LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho); + LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho); + LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho); + + // LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * + // oMdrho + c1o9*(-p1/c1o3)*oMdrho); LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * + // mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(-p1/c1o3)*oMdrho); LBMReal CUMacc = mfacc - + // ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + + // c1o9*(-p1/c1o3)*oMdrho); + + // Cum 5. + LBMReal CUMbcc = mfbcc - + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + + 2. * (mfbab * mfacb + mfbba * mfabc)) - + c1o3 * (mfbca + mfbac) * oMdrho; + LBMReal CUMcbc = mfcbc - + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + + 2. * (mfabb * mfcab + mfbba * mfbac)) - + c1o3 * (mfcba + mfabc) * oMdrho; + LBMReal CUMccb = mfccb - + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + + 2. * (mfbab * mfbca + mfabb * mfcba)) - + c1o3 * (mfacb + mfcab) * oMdrho; + + // Cum 6. + LBMReal CUMccc = + mfccc + + ((-4. * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - + 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - + 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) + + (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) + + 2. * (mfcaa * mfaca * mfaac) + 16. * mfbba * mfbab * mfabb) - + c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho - + c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - + c1o27 * oMdrho * oMdrho * (-2. * oMdrho) + + (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) + + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * + c2o3 * oMdrho) + + c1o27 * oMdrho; + + // 2. + // linear combinations + LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac; + LBMReal mxxMyy = mfcaa - mfaca; + LBMReal mxxMzz = mfcaa - mfaac; + + LBMReal dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); + LBMReal dyuy = dxux + collFactorM * c3o2 * mxxMyy; + LBMReal dzuz = dxux + collFactorM * c3o2 * mxxMzz; + + /*LBMReal Dxy =-three*collFactorM*mfbba; + LBMReal Dxz =-three*collFactorM*mfbab; + LBMReal Dyz =-three*collFactorM*mfabb; + + LBMReal strainMag = sqrt(2*(dxux*dxux + dyuy*dyuy + dzuz*dzuz) + Dxy*Dxy + Dxz*Dxz + Dyz*Dyz); + LBMReal intVis = 3*abs(denom - 1e-9)*strainMag; + LBMReal fluidVis = (1.0/collFactorM - 0.5)/3.0; + collFactorM = 1.0/((fluidVis + intVis)*3.0 + 0.5);*/ + (*divU)(x1, x2, x3) = dxux + dyuy + dzuz; + + // relax + mxxPyyPzz += OxxPyyPzz * (mfaaa - mxxPyyPzz) - + 3. * (1. - c1o2 * OxxPyyPzz) * (ux2 * dxux + uy2 * dyuy + uz2 * dzuz); + mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (ux2 * dxux - uy2 * dyuy); + mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (ux2 * dxux - uz2 * dzuz); + + mfabb += collFactorM * (-mfabb); + mfbab += collFactorM * (-mfbab); + mfbba += collFactorM * (-mfbba); + + // linear combinations back + mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); + mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz); + mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz); + + // 3. + // linear combinations + LBMReal mxxyPyzz = mfcba + mfabc; + LBMReal mxxyMyzz = mfcba - mfabc; + + LBMReal mxxzPyyz = mfcab + mfacb; + LBMReal mxxzMyyz = mfcab - mfacb; + + LBMReal mxyyPxzz = mfbca + mfbac; + LBMReal mxyyMxzz = mfbca - mfbac; + + // relax + wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mfbbb) / (fabs(mfbbb) + qudricLimit); + mfbbb += wadjust * (-mfbbb); + wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit); + mxxyPyzz += wadjust * (-mxxyPyzz); + wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxyMyzz) / (fabs(mxxyMyzz) + qudricLimit); + mxxyMyzz += wadjust * (-mxxyMyzz); + wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxzPyyz) / (fabs(mxxzPyyz) + qudricLimit); + mxxzPyyz += wadjust * (-mxxzPyyz); + wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxzMyyz) / (fabs(mxxzMyyz) + qudricLimit); + mxxzMyyz += wadjust * (-mxxzMyyz); + wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxyyPxzz) / (fabs(mxyyPxzz) + qudricLimit); + mxyyPxzz += wadjust * (-mxyyPxzz); + wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxyyMxzz) / (fabs(mxyyMxzz) + qudricLimit); + mxyyMxzz += wadjust * (-mxyyMxzz); + + // linear combinations back + mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; + mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; + mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; + mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; + mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; + mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; + + // 4. + CUMacc += O4 * (-CUMacc); + CUMcac += O4 * (-CUMcac); + CUMcca += O4 * (-CUMcca); + + CUMbbc += O4 * (-CUMbbc); + CUMbcb += O4 * (-CUMbcb); + CUMcbb += O4 * (-CUMcbb); + + // 5. + CUMbcc += O5 * (-CUMbcc); + CUMcbc += O5 * (-CUMcbc); + CUMccb += O5 * (-CUMccb); + + // 6. + CUMccc += O6 * (-CUMccc); + + // back cumulants to central moments + // 4. + // mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015 + // mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015 + // mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015 + + mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab); + mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); + mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); + + mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + + c1o9 * (oMdrho - 1) * oMdrho; + mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + + c1o9 * (oMdrho - 1) * oMdrho; + mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + + c1o9 * (oMdrho - 1) * oMdrho; + + // mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + + // c1o9*(-p1/c1o3)*oMdrho; mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + // + mfaac) * oMdrho + c1o9*(-p1/c1o3)*oMdrho; mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * + // mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(-p1/c1o3)*oMdrho; + + // 5. + mfbcc = CUMbcc + + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + + 2. * (mfbab * mfacb + mfbba * mfabc)) + + c1o3 * (mfbca + mfbac) * oMdrho; + mfcbc = CUMcbc + + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + + 2. * (mfabb * mfcab + mfbba * mfbac)) + + c1o3 * (mfcba + mfabc) * oMdrho; + mfccb = CUMccb + + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + + 2. * (mfbab * mfbca + mfabb * mfcba)) + + c1o3 * (mfacb + mfcab) * oMdrho; + + // 6. + mfccc = CUMccc - + ((-4. * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - + 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) - + 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) + + (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) + + 2. * (mfcaa * mfaca * mfaac) + 16. * mfbba * mfbab * mfabb) - + c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho - + c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - + c1o27 * oMdrho * oMdrho * (-2. * oMdrho) + + (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) + + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * + c2o3 * oMdrho) - + c1o27 * oMdrho; + + //////////////////////////////////////////////////////////////////////////////////// + // forcing + mfbaa = -mfbaa; + mfaba = -mfaba; + mfaab = -mfaab; + ////////////////////////////////////////////////////////////////////////////////////// + + //////////////////////////////////////////////////////////////////////////////////// + // back + //////////////////////////////////////////////////////////////////////////////////// + // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Z - Dir + m0 = mfaac * c1o2 + mfaab * (uz - c1o2) + (mfaaa + 1. * oMdrho) * (uz2 - uz) * c1o2; + m1 = -mfaac - 2. * mfaab * uz + mfaaa * (1. - uz2) - 1. * oMdrho * uz2; + m2 = mfaac * c1o2 + mfaab * (uz + c1o2) + (mfaaa + 1. * oMdrho) * (uz2 + uz) * c1o2; + mfaaa = m0; + mfaab = m1; + mfaac = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfabc * c1o2 + mfabb * (uz - c1o2) + mfaba * (uz2 - uz) * c1o2; + m1 = -mfabc - 2. * mfabb * uz + mfaba * (1. - uz2); + m2 = mfabc * c1o2 + mfabb * (uz + c1o2) + mfaba * (uz2 + uz) * c1o2; + mfaba = m0; + mfabb = m1; + mfabc = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfacc * c1o2 + mfacb * (uz - c1o2) + (mfaca + c1o3 * oMdrho) * (uz2 - uz) * c1o2; + m1 = -mfacc - 2. * mfacb * uz + mfaca * (1. - uz2) - c1o3 * oMdrho * uz2; + m2 = mfacc * c1o2 + mfacb * (uz + c1o2) + (mfaca + c1o3 * oMdrho) * (uz2 + uz) * c1o2; + mfaca = m0; + mfacb = m1; + mfacc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfbac * c1o2 + mfbab * (uz - c1o2) + mfbaa * (uz2 - uz) * c1o2; + m1 = -mfbac - 2. * mfbab * uz + mfbaa * (1. - uz2); + m2 = mfbac * c1o2 + mfbab * (uz + c1o2) + mfbaa * (uz2 + uz) * c1o2; + mfbaa = m0; + mfbab = m1; + mfbac = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbbc * c1o2 + mfbbb * (uz - c1o2) + mfbba * (uz2 - uz) * c1o2; + m1 = -mfbbc - 2. * mfbbb * uz + mfbba * (1. - uz2); + m2 = mfbbc * c1o2 + mfbbb * (uz + c1o2) + mfbba * (uz2 + uz) * c1o2; + mfbba = m0; + mfbbb = m1; + mfbbc = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbcc * c1o2 + mfbcb * (uz - c1o2) + mfbca * (uz2 - uz) * c1o2; + m1 = -mfbcc - 2. * mfbcb * uz + mfbca * (1. - uz2); + m2 = mfbcc * c1o2 + mfbcb * (uz + c1o2) + mfbca * (uz2 + uz) * c1o2; + mfbca = m0; + mfbcb = m1; + mfbcc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcac * c1o2 + mfcab * (uz - c1o2) + (mfcaa + c1o3 * oMdrho) * (uz2 - uz) * c1o2; + m1 = -mfcac - 2. * mfcab * uz + mfcaa * (1. - uz2) - c1o3 * oMdrho * uz2; + m2 = mfcac * c1o2 + mfcab * (uz + c1o2) + (mfcaa + c1o3 * oMdrho) * (uz2 + uz) * c1o2; + mfcaa = m0; + mfcab = m1; + mfcac = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfcbc * c1o2 + mfcbb * (uz - c1o2) + mfcba * (uz2 - uz) * c1o2; + m1 = -mfcbc - 2. * mfcbb * uz + mfcba * (1. - uz2); + m2 = mfcbc * c1o2 + mfcbb * (uz + c1o2) + mfcba * (uz2 + uz) * c1o2; + mfcba = m0; + mfcbb = m1; + mfcbc = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfccc * c1o2 + mfccb * (uz - c1o2) + (mfcca + c1o9 * oMdrho) * (uz2 - uz) * c1o2; + m1 = -mfccc - 2. * mfccb * uz + mfcca * (1. - uz2) - c1o9 * oMdrho * uz2; + m2 = mfccc * c1o2 + mfccb * (uz + c1o2) + (mfcca + c1o9 * oMdrho) * (uz2 + uz) * c1o2; + mfcca = m0; + mfccb = m1; + mfccc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + // mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // Y - Dir + m0 = mfaca * c1o2 + mfaba * (uy - c1o2) + (mfaaa + c1o6 * oMdrho) * (uy2 - uy) * c1o2; + m1 = -mfaca - 2. * mfaba * uy + mfaaa * (1. - uy2) - c1o6 * oMdrho * uy2; + m2 = mfaca * c1o2 + mfaba * (uy + c1o2) + (mfaaa + c1o6 * oMdrho) * (uy2 + uy) * c1o2; + mfaaa = m0; + mfaba = m1; + mfaca = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfacb * c1o2 + mfabb * (uy - c1o2) + (mfaab + c2o3 * oMdrho) * (uy2 - uy) * c1o2; + m1 = -mfacb - 2. * mfabb * uy + mfaab * (1. - uy2) - c2o3 * oMdrho * uy2; + m2 = mfacb * c1o2 + mfabb * (uy + c1o2) + (mfaab + c2o3 * oMdrho) * (uy2 + uy) * c1o2; + mfaab = m0; + mfabb = m1; + mfacb = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfacc * c1o2 + mfabc * (uy - c1o2) + (mfaac + c1o6 * oMdrho) * (uy2 - uy) * c1o2; + m1 = -mfacc - 2. * mfabc * uy + mfaac * (1. - uy2) - c1o6 * oMdrho * uy2; + m2 = mfacc * c1o2 + mfabc * (uy + c1o2) + (mfaac + c1o6 * oMdrho) * (uy2 + uy) * c1o2; + mfaac = m0; + mfabc = m1; + mfacc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfbca * c1o2 + mfbba * (uy - c1o2) + mfbaa * (uy2 - uy) * c1o2; + m1 = -mfbca - 2. * mfbba * uy + mfbaa * (1. - uy2); + m2 = mfbca * c1o2 + mfbba * (uy + c1o2) + mfbaa * (uy2 + uy) * c1o2; + mfbaa = m0; + mfbba = m1; + mfbca = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbcb * c1o2 + mfbbb * (uy - c1o2) + mfbab * (uy2 - uy) * c1o2; + m1 = -mfbcb - 2. * mfbbb * uy + mfbab * (1. - uy2); + m2 = mfbcb * c1o2 + mfbbb * (uy + c1o2) + mfbab * (uy2 + uy) * c1o2; + mfbab = m0; + mfbbb = m1; + mfbcb = m2; + /////////b////////////////////////////////////////////////////////////////////////// + m0 = mfbcc * c1o2 + mfbbc * (uy - c1o2) + mfbac * (uy2 - uy) * c1o2; + m1 = -mfbcc - 2. * mfbbc * uy + mfbac * (1. - uy2); + m2 = mfbcc * c1o2 + mfbbc * (uy + c1o2) + mfbac * (uy2 + uy) * c1o2; + mfbac = m0; + mfbbc = m1; + mfbcc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcca * c1o2 + mfcba * (uy - c1o2) + (mfcaa + c1o18 * oMdrho) * (uy2 - uy) * c1o2; + m1 = -mfcca - 2. * mfcba * uy + mfcaa * (1. - uy2) - c1o18 * oMdrho * uy2; + m2 = mfcca * c1o2 + mfcba * (uy + c1o2) + (mfcaa + c1o18 * oMdrho) * (uy2 + uy) * c1o2; + mfcaa = m0; + mfcba = m1; + mfcca = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfccb * c1o2 + mfcbb * (uy - c1o2) + (mfcab + c2o9 * oMdrho) * (uy2 - uy) * c1o2; + m1 = -mfccb - 2. * mfcbb * uy + mfcab * (1. - uy2) - c2o9 * oMdrho * uy2; + m2 = mfccb * c1o2 + mfcbb * (uy + c1o2) + (mfcab + c2o9 * oMdrho) * (uy2 + uy) * c1o2; + mfcab = m0; + mfcbb = m1; + mfccb = m2; + /////////c////////////////////////////////////////////////////////////////////////// + m0 = mfccc * c1o2 + mfcbc * (uy - c1o2) + (mfcac + c1o18 * oMdrho) * (uy2 - uy) * c1o2; + m1 = -mfccc - 2. * mfcbc * uy + mfcac * (1. - uy2) - c1o18 * oMdrho * uy2; + m2 = mfccc * c1o2 + mfcbc * (uy + c1o2) + (mfcac + c1o18 * oMdrho) * (uy2 + uy) * c1o2; + mfcac = m0; + mfcbc = m1; + mfccc = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren + //////////////////////////////////////////////////////////////////////////////////// + // X - Dir + m0 = mfcaa * c1o2 + mfbaa * (ux - c1o2) + (mfaaa + c1o36 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfcaa - 2. * mfbaa * ux + mfaaa * (1. - ux2) - c1o36 * oMdrho * ux2; + m2 = mfcaa * c1o2 + mfbaa * (ux + c1o2) + (mfaaa + c1o36 * oMdrho) * (ux2 + ux) * c1o2; + mfaaa = m0; + mfbaa = m1; + mfcaa = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcba * c1o2 + mfbba * (ux - c1o2) + (mfaba + c1o9 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfcba - 2. * mfbba * ux + mfaba * (1. - ux2) - c1o9 * oMdrho * ux2; + m2 = mfcba * c1o2 + mfbba * (ux + c1o2) + (mfaba + c1o9 * oMdrho) * (ux2 + ux) * c1o2; + mfaba = m0; + mfbba = m1; + mfcba = m2; + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcca * c1o2 + mfbca * (ux - c1o2) + (mfaca + c1o36 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfcca - 2. * mfbca * ux + mfaca * (1. - ux2) - c1o36 * oMdrho * ux2; + m2 = mfcca * c1o2 + mfbca * (ux + c1o2) + (mfaca + c1o36 * oMdrho) * (ux2 + ux) * c1o2; + mfaca = m0; + mfbca = m1; + mfcca = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcab * c1o2 + mfbab * (ux - c1o2) + (mfaab + c1o9 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfcab - 2. * mfbab * ux + mfaab * (1. - ux2) - c1o9 * oMdrho * ux2; + m2 = mfcab * c1o2 + mfbab * (ux + c1o2) + (mfaab + c1o9 * oMdrho) * (ux2 + ux) * c1o2; + mfaab = m0; + mfbab = m1; + mfcab = m2; + ///////////b//////////////////////////////////////////////////////////////////////// + m0 = mfcbb * c1o2 + mfbbb * (ux - c1o2) + (mfabb + c4o9 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfcbb - 2. * mfbbb * ux + mfabb * (1. - ux2) - c4o9 * oMdrho * ux2; + m2 = mfcbb * c1o2 + mfbbb * (ux + c1o2) + (mfabb + c4o9 * oMdrho) * (ux2 + ux) * c1o2; + mfabb = m0; + mfbbb = m1; + mfcbb = m2; + ///////////b//////////////////////////////////////////////////////////////////////// + m0 = mfccb * c1o2 + mfbcb * (ux - c1o2) + (mfacb + c1o9 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfccb - 2. * mfbcb * ux + mfacb * (1. - ux2) - c1o9 * oMdrho * ux2; + m2 = mfccb * c1o2 + mfbcb * (ux + c1o2) + (mfacb + c1o9 * oMdrho) * (ux2 + ux) * c1o2; + mfacb = m0; + mfbcb = m1; + mfccb = m2; + //////////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////// + m0 = mfcac * c1o2 + mfbac * (ux - c1o2) + (mfaac + c1o36 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfcac - 2. * mfbac * ux + mfaac * (1. - ux2) - c1o36 * oMdrho * ux2; + m2 = mfcac * c1o2 + mfbac * (ux + c1o2) + (mfaac + c1o36 * oMdrho) * (ux2 + ux) * c1o2; + mfaac = m0; + mfbac = m1; + mfcac = m2; + ///////////c//////////////////////////////////////////////////////////////////////// + m0 = mfcbc * c1o2 + mfbbc * (ux - c1o2) + (mfabc + c1o9 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfcbc - 2. * mfbbc * ux + mfabc * (1. - ux2) - c1o9 * oMdrho * ux2; + m2 = mfcbc * c1o2 + mfbbc * (ux + c1o2) + (mfabc + c1o9 * oMdrho) * (ux2 + ux) * c1o2; + mfabc = m0; + mfbbc = m1; + mfcbc = m2; + ///////////c//////////////////////////////////////////////////////////////////////// + m0 = mfccc * c1o2 + mfbcc * (ux - c1o2) + (mfacc + c1o36 * oMdrho) * (ux2 - ux) * c1o2; + m1 = -mfccc - 2. * mfbcc * ux + mfacc * (1. - ux2) - c1o36 * oMdrho * ux2; + m2 = mfccc * c1o2 + mfbcc * (ux + c1o2) + (mfacc + c1o36 * oMdrho) * (ux2 + ux) * c1o2; + mfacc = m0; + mfbcc = m1; + mfccc = m2; + + /////////////////////////////////////////////////////////////////////////// + + ////////////////////////////////////////////////////////////////////////// + // proof correctness + ////////////////////////////////////////////////////////////////////////// +#ifdef PROOF_CORRECTNESS + LBMReal rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) + + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + + (mfbaa + mfbac + mfbca + mfbcc) + (mfabb + mfcbb) + (mfbab + mfbcb) + + (mfbba + mfbbc) + mfbbb; + + /*LBMReal rho_post = f1[REST] + f1[E] + f1[W] + f1[N] + f1[S] + f1[T] + f1[B] + f1[NE] + f1[SW] + + f1[SE] + f1[NW] + f1[TE] + f1[BW] + f1[BE] + f1[TW] + f1[TN] + f1[BS] + f1[BN] + f1[TS] + + f1[TNE] + f1[TNW] + f1[TSE] + f1[TSW] + f1[BNE] + f1[BNW] + f1[BSE] + f1[BSW]; */ + // LBMReal dif = fabs(rho - rho_post); + LBMReal dif = rho1 - rho_post; +#ifdef SINGLEPRECISION + if (dif > 10.0E-7 || dif < -10.0E-7) +#else + if (dif > 10.0E-15 || dif < -10.0E-15) +#endif + { + UB_THROW(UbException(UB_EXARGS, + "rho=" + UbSystem::toString(rho) + ", rho_post=" + + UbSystem::toString(rho_post) + " dif=" + UbSystem::toString(dif) + + " rho is not correct for node " + UbSystem::toString(x1) + "," + + UbSystem::toString(x2) + "," + UbSystem::toString(x3))); + // UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): rho is not correct for node + // "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3)); + // exit(EXIT_FAILURE); + } +#endif + + mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[E]; + mfbcb = rho * c1o3 * (mfbcb) + 0.5 * forcingTerm[N]; + mfbbc = rho * c1o3 * (mfbbc) + 0.5 * forcingTerm[T]; + mfccb = rho * c1o3 * (mfccb) + 0.5 * forcingTerm[NE]; + mfacb = rho * c1o3 * (mfacb) + 0.5 * forcingTerm[NW]; + mfcbc = rho * c1o3 * (mfcbc) + 0.5 * forcingTerm[TE]; + mfabc = rho * c1o3 * (mfabc) + 0.5 * forcingTerm[TW]; + mfbcc = rho * c1o3 * (mfbcc) + 0.5 * forcingTerm[TN]; + mfbac = rho * c1o3 * (mfbac) + 0.5 * forcingTerm[TS]; + mfccc = rho * c1o3 * (mfccc) + 0.5 * forcingTerm[TNE]; + mfacc = rho * c1o3 * (mfacc) + 0.5 * forcingTerm[TNW]; + mfcac = rho * c1o3 * (mfcac) + 0.5 * forcingTerm[TSE]; + mfaac = rho * c1o3 * (mfaac) + 0.5 * forcingTerm[TSW]; + mfabb = rho * c1o3 * (mfabb) + 0.5 * forcingTerm[W]; + mfbab = rho * c1o3 * (mfbab) + 0.5 * forcingTerm[S]; + mfbba = rho * c1o3 * (mfbba) + 0.5 * forcingTerm[B]; + mfaab = rho * c1o3 * (mfaab) + 0.5 * forcingTerm[SW]; + mfcab = rho * c1o3 * (mfcab) + 0.5 * forcingTerm[SE]; + mfaba = rho * c1o3 * (mfaba) + 0.5 * forcingTerm[BW]; + mfcba = rho * c1o3 * (mfcba) + 0.5 * forcingTerm[BE]; + mfbaa = rho * c1o3 * (mfbaa) + 0.5 * forcingTerm[BS]; + mfbca = rho * c1o3 * (mfbca) + 0.5 * forcingTerm[BN]; + mfaaa = rho * c1o3 * (mfaaa) + 0.5 * forcingTerm[BSW]; + mfcaa = rho * c1o3 * (mfcaa) + 0.5 * forcingTerm[BSE]; + mfaca = rho * c1o3 * (mfaca) + 0.5 * forcingTerm[BNW]; + mfcca = rho * c1o3 * (mfcca) + 0.5 * forcingTerm[BNE]; + mfbbb = rho * c1o3 * (mfbbb) + 0.5 * forcingTerm[REST]; + + ////////////////////////////////////////////////////////////////////////// + // write distribution for F + ////////////////////////////////////////////////////////////////////////// + + (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb; + (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab; + (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba; + (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab; + (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab; + (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba; + (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba; + (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa; + (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca; + (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa; + (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa; + (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca; + (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca; + + (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb; + (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb; + (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb; + (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac; + + (*this->zeroDistributionsF)(x1, x2, x3) = mfbbb; + + ///////////////////// P H A S E - F I E L D S O L V E R + //////////////////////////////////////////// + + ///////////////////// 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); + + // LBMReal denom = sqrt(dX1_phi*dX1_phi + dX2_phi*dX2_phi + dX3_phi*dX3_phi) + 1e-15; + // LBMReal di = sqrt(8*kappa/beta); + // LBMReal tauH1 = 3.0*mob + 0.5; + 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 = DX1[dir]*dX1_phi+DX2[dir]*dX2_phi+DX3[dir]*dX3_phi; + LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]]) / 2.0; + LBMReal hSource = (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST]) * (dirGrad_phi) / + denom; // + phi[REST]*(dxux + dyuy + dzuz); + + // LBMReal hSource =((phi[REST]>phiH || phi[REST]<phiL) ? 0.1 : 1.0) + // * 3.0*mob*(-4.0)/di*(phi[REST] - phiL)*(phi[REST] - phiH)*(dirGrad_phi)/denom; LBMReal + // hSource = 3.0*mob*(-4.0)/di*(phi[REST] - phiL)*(phi[REST] - phiH)*(dirGrad_phi)/denom; + hEq = phi[REST] * WEIGTH[dir] * + (1.0 + 3.0 * velProd + 4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2)) + + hSource * WEIGTH[dir]; + // gEq = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx2+vy2+vz2))*c1o3 + + // (p1-rho*c1o3)*WEIGTH[dir]; h[dir] = hEq; //h[dir] - (h[dir] - hEq)/(tauH + 0.5)); /// + // This corresponds with the collision factor of 1.0 which equals (tauH + 0.5). + h[dir] = + h[dir] - (h[dir] - hEq) / (tauH); // + WEIGTH[dir]*phi[REST]*(dxux + dyuy + dzuz); + // h[dir] = h[dir] - (h[dir] - hEq)/(tauH1); + // g[dir] = g[dir] - collFactorM*(g[dir]-gEq) + 0.5*forcingTerm[dir]; + + } else { + hEq = phi[REST] * WEIGTH[REST] * (1.0 - 1.5 * (ux2 + uy2 + uz2)); + // gEq = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx2+vy2+vz2))*c1o3 + + // (p1-rho*c1o3)*WEIGTH[dir]; h[dir] = hEq; + h[REST] = h[REST] - + (h[REST] - hEq) / (tauH); // + WEIGTH[REST]*phi[REST]*(dxux + dyuy + dzuz); + // g[dir] = g[dir] - collFactorM*(g[dir]-gEq) + 0.5*forcingTerm[dir]; + } + } + + (*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 /////////////////////////////// + } + } + } + } + dataSet->setPhaseField(divU); + } +} +////////////////////////////////////////////////////////////////////////// + +LBMReal MultiphaseCumulantLBMKernel::gradX1_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR; k <= FENDDIR; k++) { + sum += WEIGTH[k] * DX1[k] * phi[k]; + } + return 3.0 * sum; +} + +LBMReal MultiphaseCumulantLBMKernel::gradX2_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR; k <= FENDDIR; k++) { + sum += WEIGTH[k] * DX2[k] * phi[k]; + } + return 3.0 * sum; +} + +LBMReal MultiphaseCumulantLBMKernel::gradX3_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR; k <= FENDDIR; k++) { + sum += WEIGTH[k] * DX3[k] * phi[k]; + } + return 3.0 * sum; +} + +LBMReal MultiphaseCumulantLBMKernel::nabla2_phi() +{ + using namespace D3Q27System; + LBMReal sum = 0.0; + for (int k = FSTARTDIR; k <= FENDDIR; k++) { + sum += WEIGTH[k] * (phi[k] - phi[REST]); + } + return 6.0 * sum; +} +///// Commnets neeeded //////// + +void MultiphaseCumulantLBMKernel::computePhasefield() +{ + using namespace D3Q27System; + SPtr<DistributionArray3D> distributionsH = dataSet->getHdistributions(); + + // const int bcArrayMaxX1 = (int)distributionsH->getNX1(); + // const int bcArrayMaxX2 = (int)distributionsH->getNX2(); + // const int bcArrayMaxX3 = (int)distributionsH->getNX3(); + + int minX1 = ghostLayerWidth; + int minX2 = ghostLayerWidth; + int minX3 = ghostLayerWidth; + int maxX1 = (int)distributionsH->getNX1() - ghostLayerWidth; + int maxX2 = (int)distributionsH->getNX2() - ghostLayerWidth; + int maxX3 = (int)distributionsH->getNX3() - ghostLayerWidth; + + //------------- Computing the phase-field ------------------ + for (int x3 = minX3; x3 < maxX3; x3++) { + for (int x2 = minX2; x2 < maxX2; x2++) { + for (int x1 = minX1; x1 < maxX1; x1++) { + // if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3)) + { + int x1p = x1 + 1; + int x2p = x2 + 1; + int x3p = x3 + 1; + + 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); + + /*(*this->phaseField)(x1,x2,x3) = h[REST] + h[E] + h[W] + h[N] + h[S] + h[T] + h[B] + h[NE] + h[SW] + + h[SE] + h[NW] + h[TE] + h[BW] + + h[BE] + h[TW] + h[TN] + h[BS] + h[BN] + h[TS] + h[TNE] + h[TNW] + h[TSE] + h[TSW] + h[BNE] + + h[BNW] + h[BSE] + h[BSW];*/ + } + } + } + } + //---------------------------------------------------------- + + /* + /////// Filling ghost nodes for FD computations ////////// + for(int x1 = minX1; x1 < maxX1; x1++) + { + for(int x2 = minX2; x2 < maxX2; x2++) + { + int x3 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, x2, maxX3-1); + x3 = maxX3; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, x2, minX3); + } + } + for(int x2 = minX2; x2 < maxX2; x2++) + { + for(int x3 = minX3; x3 < maxX3; x3++) + { + int x1 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(maxX1-1, x2, x3); + x1 = maxX1; + (*phaseField)(x1, x2, x3) = (*phaseField)(minX1, x2, x3); + } + } + for(int x1 = minX1; x1 < maxX1; x1++) + { + for(int x3 = minX3; x3 < maxX3; x3++) + { + int x2 = 0; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, maxX2-1, x3); + x2 = maxX2; + (*phaseField)(x1, x2, x3) = (*phaseField)(x1, minX2, x3); + } + } + (*phaseField)(0, 0, 0 ) = (*phaseField)(maxX1-1, maxX2-1, maxX3-1); + (*phaseField)(0, 0, maxX3) = (*phaseField)(maxX1-1, maxX2-1, minX3 ); + (*phaseField)(0, maxX2, 0 ) = (*phaseField)(maxX1-1, minX2, maxX3-1 ); + (*phaseField)(0, maxX2, maxX3) = (*phaseField)(maxX1-1, minX2, minX3 ); + + (*phaseField)(maxX1, 0, 0 ) = (*phaseField)(minX1, maxX2-1, maxX3-1); + (*phaseField)(maxX1, 0, maxX3) = (*phaseField)(minX1, maxX2-1, minX3 ); + (*phaseField)(maxX1, maxX2, 0 ) = (*phaseField)(minX1, minX2, maxX3-1 ); + (*phaseField)(maxX1, maxX2, maxX3) = (*phaseField)(minX1, minX2, minX3 ); + + ///////////////////////////////////////////////////////// + */ +} + +void MultiphaseCumulantLBMKernel::findNeighbors(CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, + int x3) +{ + using namespace D3Q27System; + + SPtr<BCArray3D> bcArray = this->getBCProcessor()->getBCArray(); + + phi[REST] = (*ph)(x1, x2, x3); + + // LBMReal a = -0.5*sqrt(2*beta/kappa)*cos(contactAngle*UbMath::PI/180); + // LBMReal a1 = 1 + a; + + for (int k = FSTARTDIR; k <= FENDDIR; k++) { + + if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) { + phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]); + } else { + /* + if (phi[REST] < 1e-2) + { + phi[k] = (*ph)(x1 + DX1[INVDIR[k]], x2 + DX2[INVDIR[k]], x3 + DX3[INVDIR[k]]); + } + else + { + LBMReal phi_f = (*ph)(x1 + DX1[k], x2, x3 + DX3[k]); + phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f; + } + */ + + phi[k] = (*ph)(x1, x2, x3); + + // if (bcArray->isSolid(x1 + DX1[k], x2, x3)) + //{ + // phi[k] = (*ph)(x1, x2, x3); + // //if (!bcArray->isSolid(x1 , x2 + DX2[k], x3 + DX3[k])) + // //{ + // // //phi[k] = (*ph)(x1 , x2 + DX2[k], x3 + DX3[k]); + // // LBMReal phi_f = (*ph)(x1 , x2 + DX2[k], x3 + DX3[k]); + // // phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f; + // //} + // //else + // //{ + // // phi[k] = (*ph)(x1, x2, x3); + // //} + //} + // + // if (bcArray->isSolid(x1 , x2 + DX2[k], x3)) + //{ + // phi[k] = (*ph)(x1, x2, x3); + // //if (!bcArray->isSolid(x1 + DX1[k], x2 , x3 + DX3[k])) + // //{ + // // //phi[k] = (*ph)(x1 + DX1[k], x2 , x3 + DX3[k]); + // // LBMReal phi_f = (*ph)(x1 + DX1[k], x2 , x3 + DX3[k]); + // // phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f; + // //} + // //else + // //{ + // // phi[k] = (*ph)(x1, x2, x3); + // //} + //} + + // if (bcArray->isSolid(x1 , x2, x3+ DX3[k])) + //{ + // if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3)) + // { + // //phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3); + // LBMReal phi_f = (*ph)(x1 + DX1[k], x2 + DX2[k], x3); + // phi[k] = (a1 - sqrt(a1*a1 - 4*a*phi_f) )/a - phi_f; + // } + // else + // { + // phi[k] = (*ph)(x1, x2, x3); + // } + //} + + /*if (bcArray->isSolid(x1 + DX1[k], x2, x3)) phi[k] = (*ph)(x1 , x2 + DX2[k], x3 + DX3[k]); + if (bcArray->isSolid(x1 , x2 + DX2[k], x3)) phi[k] = (*ph)(x1 + DX1[k], x2 , x3 + DX3[k]); + if (bcArray->isSolid(x1 , x2, x3+ DX3[k])) phi[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 );*/ + + /*if (phi[REST] < 0.00001) + { + phi[k] = 0.0; + } + else + { + phi[k] = 0.5; + }*/ + + // phi[k] = 0.5; + // phi[k] = (*ph)(x1, x2, x3); + // phi[k] = (*ph)(x1 + DX1[INVDIR[k]], x2 + DX2[INVDIR[k]], x3 + DX3[INVDIR[k]]); + } + } + + /* + phi[E ] = (*ph)(x1 + DX1[E ], x2 + DX2[E ], x3 + DX3[E ]); + phi[N ] = (*ph)(x1 + DX1[N ], x2 + DX2[N ], x3 + DX3[N ]); + phi[T ] = (*ph)(x1 + DX1[T ], x2 + DX2[T ], x3 + DX3[T ]); + phi[W ] = (*ph)(x1 + DX1[W ], x2 + DX2[W ], x3 + DX3[W ]); + phi[S ] = (*ph)(x1 + DX1[S ], x2 + DX2[S ], x3 + DX3[S ]); + phi[B ] = (*ph)(x1 + DX1[B ], x2 + DX2[B ], x3 + DX3[B ]); + phi[NE ] = (*ph)(x1 + DX1[NE ], x2 + DX2[NE ], x3 + DX3[NE ]); + phi[NW ] = (*ph)(x1 + DX1[NW ], x2 + DX2[NW ], x3 + DX3[NW ]); + phi[TE ] = (*ph)(x1 + DX1[TE ], x2 + DX2[TE ], x3 + DX3[TE ]); + phi[TW ] = (*ph)(x1 + DX1[TW ], x2 + DX2[TW ], x3 + DX3[TW ]); + phi[TN ] = (*ph)(x1 + DX1[TN ], x2 + DX2[TN ], x3 + DX3[TN ]); + phi[TS ] = (*ph)(x1 + DX1[TS ], x2 + DX2[TS ], x3 + DX3[TS ]); + phi[SW ] = (*ph)(x1 + DX1[SW ], x2 + DX2[SW ], x3 + DX3[SW ]); + phi[SE ] = (*ph)(x1 + DX1[SE ], x2 + DX2[SE ], x3 + DX3[SE ]); + phi[BW ] = (*ph)(x1 + DX1[BW ], x2 + DX2[BW ], x3 + DX3[BW ]); + phi[BE ] = (*ph)(x1 + DX1[BE ], x2 + DX2[BE ], x3 + DX3[BE ]); + phi[BS ] = (*ph)(x1 + DX1[BS ], x2 + DX2[BS ], x3 + DX3[BS ]); + phi[BN ] = (*ph)(x1 + DX1[BN ], x2 + DX2[BN ], x3 + DX3[BN ]); + phi[BSW] = (*ph)(x1 + DX1[BSW], x2 + DX2[BSW], x3 + DX3[BSW]); + phi[BSE] = (*ph)(x1 + DX1[BSE], x2 + DX2[BSE], x3 + DX3[BSE]); + phi[BNW] = (*ph)(x1 + DX1[BNW], x2 + DX2[BNW], x3 + DX3[BNW]); + phi[BNE] = (*ph)(x1 + DX1[BNE], x2 + DX2[BNE], x3 + DX3[BNE]); + phi[TNE] = (*ph)(x1 + DX1[TNE], x2 + DX2[TNE], x3 + DX3[TNE]); + phi[TNW] = (*ph)(x1 + DX1[TNW], x2 + DX2[TNW], x3 + DX3[TNW]); + phi[TSE] = (*ph)(x1 + DX1[TSE], x2 + DX2[TSE], x3 + DX3[TSE]); + phi[TSW] = (*ph)(x1 + DX1[TSW], x2 + DX2[TSW], x3 + DX3[TSW]); + */ +} + +void MultiphaseCumulantLBMKernel::swapDistributions() +{ + LBMKernel::swapDistributions(); + dataSet->getHdistributions()->swap(); + // computePhasefield(); +} \ No newline at end of file diff --git a/src/cpu/VirtualFluidsCore/LBM/MultiphaseCumulantLBMKernel.h b/src/cpu/VirtualFluidsCore/LBM/MultiphaseCumulantLBMKernel.h new file mode 100644 index 0000000000000000000000000000000000000000..dd99637063f48a38ddf8c0a15a301688b0ab3c59 --- /dev/null +++ b/src/cpu/VirtualFluidsCore/LBM/MultiphaseCumulantLBMKernel.h @@ -0,0 +1,99 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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 MultiphaseCumulantLBMKernel.h +//! \ingroup LBMKernel +//! \author Hesameddin Safari +//======================================================================================= + +#ifndef MultiphaseCumulantLBMKernel_H +#define MultiphaseCumulantLBMKernel_H + +#include "LBMKernel.h" +#include "BCProcessor.h" +#include "D3Q27System.h" +#include "basics/utilities/UbTiming.h" +#include "basics/container/CbArray4D.h" +#include "basics/container/CbArray3D.h" + +//! \brief Multiphase Cascaded Cumulant LBM kernel. +//! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model +//! \author H. Safari, K. Kutscher, M. Geier +class MultiphaseCumulantLBMKernel : public LBMKernel +{ +public: + MultiphaseCumulantLBMKernel(); + virtual ~MultiphaseCumulantLBMKernel(void) = default; + void calculate(int step) override; + SPtr<LBMKernel> clone() override; + double getCalculationTime() override { return .0; } +protected: + virtual void initDataSet(); + void swapDistributions(); + LBMReal f1[D3Q27System::ENDF+1]; + + CbArray4D<LBMReal,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF; + CbArray4D<LBMReal,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF; + CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr zeroDistributionsF; + + CbArray4D<LBMReal,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH; + CbArray4D<LBMReal,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH; + CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr zeroDistributionsH; + + //CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr phaseField; + + LBMReal h [D3Q27System::ENDF+1]; + LBMReal g [D3Q27System::ENDF+1]; + LBMReal phi[D3Q27System::ENDF+1]; + LBMReal pr1[D3Q27System::ENDF+1]; + LBMReal phi_cutoff[D3Q27System::ENDF+1]; + + LBMReal gradX1_phi(); + LBMReal gradX2_phi(); + LBMReal gradX3_phi(); + //LBMReal gradX1_pr1(); + //LBMReal gradX2_pr1(); + //LBMReal gradX3_pr1(); + //LBMReal dirgradC_phi(int n, int k); + void computePhasefield(); + void findNeighbors(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, int x1, int x2, int x3); + //void findNeighbors(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf /*Pressure-Field*/, int x1, int x2, int x3); + //void pressureFiltering(CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf /*Pressure-Field*/, CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr pf_filtered /*Pressure-Field*/); + + LBMReal nabla2_phi(); + + + mu::value_type muX1,muX2,muX3; + mu::value_type muDeltaT; + mu::value_type muNu; + LBMReal forcingX1; + LBMReal forcingX2; + LBMReal forcingX3; +}; + +#endif diff --git a/src/cpu/VirtualFluidsCore/LBM/ThixotropyInterpolationProcessor.cpp b/src/cpu/VirtualFluidsCore/LBM/ThixotropyInterpolationProcessor.cpp index a673f473e13715e1a90db22e502446066e695ca0..26355a6f8a5d83b48365f1c287597a65e5876ef3 100644 --- a/src/cpu/VirtualFluidsCore/LBM/ThixotropyInterpolationProcessor.cpp +++ b/src/cpu/VirtualFluidsCore/LBM/ThixotropyInterpolationProcessor.cpp @@ -469,7 +469,7 @@ void ThixotropyInterpolationProcessor::calcInterpolatedNode(LBMReal* f, /*LBMRea f[BSW] = f_TNE + xs*x_TNE + ys*y_TNE + zs*z_TNE + xs*ys*xy_TNE + xs*zs*xz_TNE + ys*zs*yz_TNE + feq[BSW]; f[BSE] = f_TNW + xs*x_TNW + ys*y_TNW + zs*z_TNW + xs*ys*xy_TNW + xs*zs*xz_TNW + ys*zs*yz_TNW + feq[BSE]; f[BNW] = f_TSE + xs*x_TSE + ys*y_TSE + zs*z_TSE + xs*ys*xy_TSE + xs*zs*xz_TSE + ys*zs*yz_TSE + feq[BNW]; - f[ZERO] = f_ZERO + xs*x_ZERO + ys*y_ZERO + zs*z_ZERO + feq[ZERO]; + f[REST] = f_ZERO + xs*x_ZERO + ys*y_ZERO + zs*z_ZERO + feq[REST]; } ////////////////////////////////////////////////////////////////////////// //Position SWB -0.25, -0.25, -0.25 @@ -658,7 +658,7 @@ void ThixotropyInterpolationProcessor::calcInterpolatedNodeFC(LBMReal* f, LBMRea f[BNW] = f_TSE + feq[BNW]; f[BSE] = f_TNW + feq[BSE]; f[BSW] = f_TNE + feq[BSW]; - f[ZERO] = f_ZERO + feq[ZERO]; + f[REST] = f_ZERO + feq[REST]; } ////////////////////////////////////////////////////////////////////////// void ThixotropyInterpolationProcessor::calcInterpolatedVelocity(LBMReal x, LBMReal y, LBMReal z, LBMReal& vx1, LBMReal& vx2, LBMReal& vx3) diff --git a/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitorMultiphase.cpp b/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitorMultiphase.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f3bd4f9540bb35e1ccac4b618cab492ff8c331d1 --- /dev/null +++ b/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitorMultiphase.cpp @@ -0,0 +1,145 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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 BoundaryConditionsBlockVisitorMultiphase.cpp +//! \ingroup Visitors +//! \author Hesameddin Safari +//======================================================================================= + +#include "BoundaryConditionsBlockVisitorMultiphase.h" +#include "BCAdapter.h" +#include "BCArray3D.h" +#include "BCProcessor.h" +#include "Block3D.h" +#include "D3Q27EsoTwist3DSplittedVector.h" +#include "DataSet3D.h" +#include "Grid3D.h" +#include "Grid3DSystem.h" +#include "BCAdapter.h" +#include "Block3D.h" +#include "BCArray3D.h" +#include "LBMKernel.h" + +BoundaryConditionsBlockVisitorMultiphase::BoundaryConditionsBlockVisitorMultiphase() : +Block3DVisitor(0, Grid3DSystem::MAXLEVEL) +{ + +} +////////////////////////////////////////////////////////////////////////// +BoundaryConditionsBlockVisitorMultiphase::~BoundaryConditionsBlockVisitorMultiphase() +{ + +} +////////////////////////////////////////////////////////////////////////// +void BoundaryConditionsBlockVisitorMultiphase::visit(SPtr<Grid3D> grid, SPtr<Block3D> block) +{ + if (block->getRank() == grid->getRank()) + { + SPtr<LBMKernel> kernel = dynamicPointerCast<LBMKernel>(block->getKernel()); + + if (!kernel) + { + throw UbException(UB_EXARGS, "LBMKernel in " + block->toString() + "is not exist!"); + } + + SPtr<BCProcessor> bcProcessor = kernel->getBCProcessor(); + + if (!bcProcessor) + { + throw UbException(UB_EXARGS,"Boundary Conditions Processor is not exist!" ); + } + + SPtr<BCArray3D> bcArray = bcProcessor->getBCArray(); + + bool compressible = kernel->getCompressible(); + double collFactorL = kernel->getCollisionFactorL(); + double collFactorG = kernel->getCollisionFactorG(); + double collFactorPh = 1.0/kernel->getPhaseFieldRelaxation(); + double densityRatio = kernel->getDensityRatio(); + LBMReal phiL = kernel->getPhiL(); + LBMReal phiH = kernel->getPhiH(); + //int level = block->getLevel(); + + int minX1 = 0; + int minX2 = 0; + int minX3 = 0; + int maxX1 = (int)bcArray->getNX1(); + int maxX2 = (int)bcArray->getNX2(); + int maxX3 = (int)bcArray->getNX3(); + SPtr<BoundaryConditions> bcPtr; + + bcProcessor->clearBC(); + + SPtr<DistributionArray3D> distributions = kernel->getDataSet()->getFdistributions(); + SPtr<DistributionArray3D> distributionsH = kernel->getDataSet()->getHdistributions(); + + for (int x3 = minX3; x3 < maxX3; x3++) + { + for (int x2 = minX2; x2 < maxX2; x2++) + { + for (int x1 = minX1; x1 < maxX1; x1++) + { + if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) + { + if ((bcPtr = bcArray->getBC(x1, x2, x3)) != NULL) + { + char alg = bcPtr->getBcAlgorithmType(); + SPtr<BCAlgorithm> bca = bcMap[alg]; + + if (bca) + { + bca = bca->clone(); + bca->setNodeIndex(x1, x2, x3); + bca->setBcPointer(bcPtr); + //bca->addDistributions(distributions, distributionsH); + bca->addDistributions(distributions); + bca->addDistributionsH(distributionsH); + bca->setCollFactorL(collFactorL); + bca->setCollFactorG(collFactorG); + bca->setCollFactorPh(collFactorPh); + bca->setDensityRatio(densityRatio); + bca->setPhiBound(phiL, phiH); + bca->setCompressible(compressible); + bca->setBcArray(bcArray); + bcProcessor->addBC(bca); + } + } + } + } + } + } + } +} +////////////////////////////////////////////////////////////////////////// +void BoundaryConditionsBlockVisitorMultiphase::addBC(SPtr<BCAdapter> bc) +{ + bcMap.insert(std::make_pair(bc->getBcAlgorithmType(), bc->getAlgorithm())); +} + + + diff --git a/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitorMultiphase.h b/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitorMultiphase.h new file mode 100644 index 0000000000000000000000000000000000000000..7ff93af25d527db5d468111c5cc7f160c98802d0 --- /dev/null +++ b/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitorMultiphase.h @@ -0,0 +1,55 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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 BoundaryConditionsBlockVisitorMultiphase.h +//! \ingroup Visitors +//! \author Hesameddin Safari +//======================================================================================= + +#ifndef BoundaryConditionBlockVisitorMultiphase_h__ +#define BoundaryConditionBlockVisitorMultiphase_h__ + +#include "Block3DVisitor.h" +#include <map> + +class BCAdapter; +class BCAlgorithm; + +class BoundaryConditionsBlockVisitorMultiphase : public Block3DVisitor +{ +public: + BoundaryConditionsBlockVisitorMultiphase(); + virtual ~BoundaryConditionsBlockVisitorMultiphase(); + + void visit(SPtr<Grid3D> grid, SPtr<Block3D> block); + void addBC(SPtr<BCAdapter> bc); +protected: +private: + std::map<char, SPtr<BCAlgorithm>> bcMap; +}; +#endif // BoundaryConditionBlockVisitor_h__ diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.cpp b/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.cpp index bc1e7d11defc33ade7a1aeb33377dff213efe3a0..aba67e6749a47e1c06bf28f01d284799eb39c328 100644 --- a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.cpp +++ b/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.cpp @@ -273,7 +273,7 @@ void InitDistributionsBlockVisitor::visit(const SPtr<Grid3D> grid, SPtr<Block3D> f[BNW] = f_TSE + feq[BNW]; f[BSE] = f_TNW + feq[BSE]; f[BSW] = f_TNE + feq[BSW]; - f[ZERO] = f_ZERO + feq[ZERO]; + f[REST] = f_ZERO + feq[REST]; //calcFeqsFct(f,rho,vx1,vx2,vx3); distributions->setDistribution(f, ix1, ix2, ix3); diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitorMultiphase.cpp b/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitorMultiphase.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f609d7af154d96a5c4e5e76fb06583de712ec77b --- /dev/null +++ b/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitorMultiphase.cpp @@ -0,0 +1,499 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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 InitDistributionsBlockVisitorMultiphase.cpp +//! \ingroup Visitors +//! \author Hesameddin Safari +//======================================================================================= + +#include "InitDistributionsBlockVisitorMultiphase.h" +#include "BCArray3D.h" +#include "BCProcessor.h" +#include "Block3D.h" +#include "DataSet3D.h" +#include "EsoTwist3D.h" +#include "Grid3D.h" +#include "Grid3DSystem.h" +#include "LBMKernel.h" + +InitDistributionsBlockVisitorMultiphase::InitDistributionsBlockVisitorMultiphase() + : Block3DVisitor(0, Grid3DSystem::MAXLEVEL) +{ + this->setVx1(0.0); + this->setVx2(0.0); + this->setVx3(0.0); + this->setRho(0.0); +} +////////////////////////////////////////////////////////////////////////// +//D3Q27ETInitDistributionsBlockVisitor::D3Q27ETInitDistributionsBlockVisitor(LBMReal rho, LBMReal vx1, LBMReal vx2, LBMReal vx3) +// : Block3DVisitor(0, Grid3DSystem::MAXLEVEL) +//{ +// this->setVx1(vx1); +// this->setVx2(vx2); +// this->setVx3(vx3); +// this->setRho(rho); +//} +////////////////////////////////////////////////////////////////////////// +InitDistributionsBlockVisitorMultiphase::InitDistributionsBlockVisitorMultiphase( LBMReal densityRatio, LBMReal intThickness, LBMReal radius, LBMReal vx1, LBMReal vx2, LBMReal vx3) + : Block3DVisitor(0, Grid3DSystem::MAXLEVEL), densityRatio(densityRatio), intThickness(intThickness), radius(radius) +{ + this->setVx1(vx1); + this->setVx2(vx2); + this->setVx3(vx3); + //this->setRho(rho); + //this->setNu(nu); +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setVx1( const mu::Parser& parser) +{ + this->checkFunction(parser); + this->muVx1 = parser; +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setVx2( const mu::Parser& parser) +{ + this->checkFunction(parser); + this->muVx2 = parser; +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setVx3( const mu::Parser& parser) +{ + this->checkFunction(parser); + this->muVx3 = parser; +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setRho( const mu::Parser& parser) +{ + this->checkFunction(parser); + this->muRho = parser; +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setPhi( const mu::Parser& parser) +{ + this->checkFunction(parser); + this->muPhi = parser; +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setVx1( const std::string& muParserString) +{ + this->muVx1.SetExpr(muParserString); + this->checkFunction(muVx1); +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setVx2( const std::string& muParserString) +{ + this->muVx2.SetExpr(muParserString); + this->checkFunction(muVx2); +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setVx3( const std::string& muParserString) +{ + this->muVx3.SetExpr(muParserString); + this->checkFunction(muVx3); +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setRho( const std::string& muParserString) +{ + this->muRho.SetExpr(muParserString); + this->checkFunction(muRho); +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setPhi( const std::string& muParserString) +{ + this->muPhi.SetExpr(muParserString); + this->checkFunction(muPhi); +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setVx1( LBMReal vx1 ) +{ + this->muVx1.SetExpr( UbSystem::toString(vx1,D3Q27RealLim::digits10) ); + this->checkFunction(muVx1); +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setVx2( LBMReal vx2 ) +{ + this->muVx2.SetExpr( UbSystem::toString(vx2,D3Q27RealLim::digits10) ); + this->checkFunction(muVx2); +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setVx3( LBMReal vx3 ) +{ + this->muVx3.SetExpr( UbSystem::toString(vx3,D3Q27RealLim::digits10) ); + this->checkFunction(muVx3); +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setRho( LBMReal rho ) +{ + this->muRho.SetExpr( UbSystem::toString(rho,D3Q27RealLim::digits10) ); + this->checkFunction(muRho); +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setPhi( LBMReal phi ) +{ + this->muPhi.SetExpr( UbSystem::toString(phi,D3Q27RealLim::digits10) ); + this->checkFunction(muPhi); +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::visit(const SPtr<Grid3D> grid, SPtr<Block3D> block) +{ + using namespace D3Q27System; + + if(!block) UB_THROW( UbException(UB_EXARGS,"block is not exist") ); + + //UbTupleDouble3 blockLengths = grid->getBlockLengths(block); + //UbTupleDouble3 nodeOffset = grid->getNodeOffset(block); + //double dx = grid->getDeltaX(block); + //LBMReal o = LBMSystem::calcCollisionFactor(nu, block->getLevel()); + + + //define vars for functions + mu::value_type x1,x2,x3; + this->muVx1.DefineVar("x1",&x1); this->muVx1.DefineVar("x2",&x2); this->muVx1.DefineVar("x3",&x3); + this->muVx2.DefineVar("x1",&x1); this->muVx2.DefineVar("x2",&x2); this->muVx2.DefineVar("x3",&x3); + this->muVx3.DefineVar("x1",&x1); this->muVx3.DefineVar("x2",&x2); this->muVx3.DefineVar("x3",&x3); + this->muRho.DefineVar("x1",&x1); this->muRho.DefineVar("x2",&x2); this->muRho.DefineVar("x3",&x3); + this->muPhi.DefineVar("x1",&x1); this->muPhi.DefineVar("x2",&x2); this->muPhi.DefineVar("x3",&x3); + + //Funktionszeiger + typedef void (*CalcFeqsFct)(LBMReal* const& /*feq[27]*/,const LBMReal& /*(d)rho*/,const LBMReal& /*vx1*/,const LBMReal& /*vx2*/,const LBMReal& /*vx3*/); + CalcFeqsFct calcFeqsFct = NULL; + + LBMReal vx1, vx2, vx3, rho, p1, phi; + + int gridRank = grid->getRank(); + int blockRank = block->getRank(); + + if (blockRank == gridRank && block->isActive()) + { + SPtr<LBMKernel> kernel = dynamicPointerCast<LBMKernel>(block->getKernel()); + if (!kernel) + throw UbException(UB_EXARGS, "The LBM kernel isn't exist in block: "+block->toString()); + + if(kernel->getCompressible()) + calcFeqsFct = &D3Q27System::calcCompFeq; + else + calcFeqsFct = &D3Q27System::calcIncompFeq; + + //UbTupleDouble3 org = grid->getBlockWorldCoordinates(block); + + SPtr<BCArray3D> bcArray = kernel->getBCProcessor()->getBCArray(); + SPtr<EsoTwist3D> distributionsF = dynamicPointerCast<EsoTwist3D>(kernel->getDataSet()->getFdistributions()); + SPtr<EsoTwist3D> distributionsH = dynamicPointerCast<EsoTwist3D>(kernel->getDataSet()->getHdistributions()); + //PhaseFieldArray3DPtr phaseField = kernel->getDataSet()->getPhaseField(); + LBMReal phiL = kernel->getPhiL(); + LBMReal phiH = kernel->getPhiH(); + + LBMReal f[D3Q27System::ENDF+1]; + //LBMReal h[D3Q27System::ENDF+1]; + + //size_t nx1 = distributionsF->getNX1(); + //size_t nx2 = distributionsF->getNX2(); + //size_t nx3 = distributionsF->getNX3(); + + for(int ix3=0; ix3<bcArray->getNX3(); ix3++) + for(int ix2=0; ix2<bcArray->getNX2(); ix2++) + for(int ix1=0; ix1<bcArray->getNX1(); ix1++) + { + Vector3D coords = grid->getNodeCoordinates(block, ix1, ix2, ix3); + x1 = coords[0]; + x2 = coords[1]; + x3 = coords[2]; + + + p1 = 0.0; + //p1 = muRho.Eval(); + vx1 = muVx1.Eval(); + vx2 = muVx2.Eval(); + vx3 = muVx3.Eval(); + phi = muPhi.Eval(); + + //rho = phi*1.0 + (1.0-phi)/densityRatio; + LBMReal rhoH = 1.0; + LBMReal rhoL = 1.0/densityRatio; + rho = rhoH + (rhoH - rhoL)*(phi - phiH)/(phiH - phiL); + + //vx1 = 0.0; //0.02*phi; + //vx2 = 0.0; + //vx3 = 0.0; + //(*phaseField)(ix1,ix2,ix3) = phi; + + + /* + vx1 = muVx1.Eval(); + vx2 = muVx2.Eval(); + vx3 = muVx3.Eval(); + rho = muRho.Eval(); + + //x-derivative + double deltaX=dx*0.5; + x1 = val<1>(coords)+deltaX; + double vx1Plusx1 = muVx1.Eval(); + double vx2Plusx1 = muVx2.Eval(); + double vx3Plusx1 = muVx3.Eval(); + + x1 = val<1>(coords)-deltaX; + double vx1Minusx1 = muVx1.Eval(); + double vx2Minusx1 = muVx2.Eval(); + double vx3Minusx1 = muVx3.Eval(); + + //y-derivative + x1 = val<1>(coords); + x2 = val<2>(coords)+deltaX; + double vx1Plusx2 = muVx1.Eval(); + double vx2Plusx2 = muVx2.Eval(); + double vx3Plusx2 = muVx3.Eval(); + + x2 = val<2>(coords)-deltaX; + double vx1Minusx2 = muVx1.Eval(); + double vx2Minusx2 = muVx2.Eval(); + double vx3Minusx2 = muVx3.Eval(); + + //z-derivative + x2 = val<2>(coords); + x3 = val<3>(coords)+deltaX; + double vx1Plusx3 = muVx1.Eval(); + double vx2Plusx3 = muVx2.Eval(); + double vx3Plusx3 = muVx3.Eval(); + + x3 = val<3>(coords)-deltaX; + double vx1Minusx3 = muVx1.Eval(); + double vx2Minusx3 = muVx2.Eval(); + double vx3Minusx3 = muVx3.Eval(); + + double ax=(vx1Plusx1-vx1Minusx1)/(2.0*deltaX)*dx; + double bx=(vx2Plusx1-vx2Minusx1)/(2.0*deltaX)*dx; + double cx=(vx3Plusx1-vx3Minusx1)/(2.0*deltaX)*dx; + + double ay=(vx1Plusx2-vx1Minusx2)/(2.0*deltaX)*dx; + double by=(vx2Plusx2-vx2Minusx2)/(2.0*deltaX)*dx; + double cy=(vx3Plusx2-vx3Minusx2)/(2.0*deltaX)*dx; + + double az=(vx1Plusx3-vx1Minusx3)/(2.0*deltaX)*dx; + double bz=(vx2Plusx3-vx2Minusx3)/(2.0*deltaX)*dx; + double cz=(vx3Plusx3-vx3Minusx3)/(2.0*deltaX)*dx; + double eps_new=1.0; + LBMReal op = 1.; + */ + + LBMReal feq[27]; + LBMReal geq[27]; + + //calcFeqsFct(feq,rho,vx1,vx2,vx3); + LBMReal vx1Sq = vx1*vx1; + LBMReal vx2Sq = vx2*vx2; + LBMReal vx3Sq = vx3*vx3; + for (int dir = STARTF; dir < (ENDF+1); dir++) + { + LBMReal velProd = DX1[dir]*vx1 + DX2[dir]*vx2 + DX3[dir]*vx3; + LBMReal velSq1 = velProd*velProd; + LBMReal gamma = WEIGTH[dir]*(3*velProd + 4.5*velSq1 - 1.5*(vx1Sq+vx2Sq+vx3Sq)); + + feq[dir] = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx1Sq+vx2Sq+vx3Sq)); + //geq[dir] = p1*WEIGTH1[dir] + gamma; + geq[dir] = p1*WEIGTH[dir]/(rho*UbMath::c1o3) + gamma; + } + + + + /*double f_E = eps_new *((5.*ax*o + 5.*by*o + 5.*cz*o - 8.*ax*op + 4.*by*op + 4.*cz*op)/(54.*o*op)); + double f_N = f_E + eps_new *((2.*(ax - by))/(9.*o)); + double f_T = f_E + eps_new *((2.*(ax - cz))/(9.*o)); + double f_NE = eps_new *(-(5.*cz*o + 3.*(ay + bx)*op - 2.*cz*op + ax*(5.*o + op) + by*(5.*o + op))/(54.*o*op)); + double f_SE = f_NE + eps_new *(( ay + bx )/(9.*o)); + double f_TE = eps_new *(-(5.*cz*o + by*(5.*o - 2.*op) + 3.*(az + cx)*op + cz*op + ax*(5.*o + op))/(54.*o*op)); + double f_BE = f_TE + eps_new *(( az + cx )/(9.*o)); + double f_TN = eps_new *(-(5.*ax*o + 5.*by*o + 5.*cz*o - 2.*ax*op + by*op + 3.*bz*op + 3.*cy*op + cz*op)/(54.*o*op)); + double f_BN = f_TN + eps_new *(( bz + cy )/(9.*o)); + double f_ZERO = eps_new *((5.*(ax + by + cz))/(9.*op)); + double f_TNE = eps_new *(-(ay + az + bx + bz + cx + cy)/(72.*o)); + double f_TSW = - eps_new *((ay + bx)/(36.*o)) - f_TNE; + double f_TSE = - eps_new *((az + cx)/(36.*o)) - f_TNE; + double f_TNW = - eps_new *((bz + cy)/(36.*o)) - f_TNE; + + + f[E] = f_E + feq[E]; + f[W] = f_E + feq[W]; + f[N] = f_N + feq[N]; + f[S] = f_N + feq[S]; + f[T] = f_T + feq[T]; + f[B] = f_T + feq[B]; + f[NE] = f_NE + feq[NE]; + f[SW] = f_NE + feq[SW]; + f[SE] = f_SE + feq[SE]; + f[NW] = f_SE + feq[NW]; + f[TE] = f_TE + feq[TE]; + f[BW] = f_TE + feq[BW]; + f[BE] = f_BE + feq[BE]; + f[TW] = f_BE + feq[TW]; + f[TN] = f_TN + feq[TN]; + f[BS] = f_TN + feq[BS]; + f[BN] = f_BN + feq[BN]; + f[TS] = f_BN + feq[TS]; + f[TNE] = f_TNE + feq[TNE]; + f[TNW] = f_TNW + feq[TNW]; + f[TSE] = f_TSE + feq[TSE]; + f[TSW] = f_TSW + feq[TSW]; + f[BNE] = f_TSW + feq[BNE]; + f[BNW] = f_TSE + feq[BNW]; + f[BSE] = f_TNW + feq[BSE]; + f[BSW] = f_TNE + feq[BSW]; + f[REST] = f_ZERO + feq[REST];*/ + + /*f[E] = feq[E] / 3.0 + (p1-rho/3.0)*UbMath::c2o27; + f[W] = feq[W] / 3.0 + (p1-rho/3.0)*UbMath::c2o27; + f[N] = feq[N] / 3.0 + (p1-rho/3.0)*UbMath::c2o27; + f[S] = feq[S] / 3.0 + (p1-rho/3.0)*UbMath::c2o27; + f[T] = feq[T] / 3.0 + (p1-rho/3.0)*UbMath::c2o27; + f[B] = feq[B] / 3.0 + (p1-rho/3.0)*UbMath::c2o27; + f[NE] = feq[NE] / 3.0 + (p1-rho/3.0)*UbMath::c1o54; + f[SW] = feq[SW] / 3.0 + (p1-rho/3.0)*UbMath::c1o54; + f[SE] = feq[SE] / 3.0 + (p1-rho/3.0)*UbMath::c1o54; + f[NW] = feq[NW] / 3.0 + (p1-rho/3.0)*UbMath::c1o54; + f[TE] = feq[TE] / 3.0 + (p1-rho/3.0)*UbMath::c1o54; + f[BW] = feq[BW] / 3.0 + (p1-rho/3.0)*UbMath::c1o54; + f[BE] = feq[BE] / 3.0 + (p1-rho/3.0)*UbMath::c1o54; + f[TW] = feq[TW] / 3.0 + (p1-rho/3.0)*UbMath::c1o54; + f[TN] = feq[TN] / 3.0 + (p1-rho/3.0)*UbMath::c1o54; + f[BS] = feq[BS] / 3.0 + (p1-rho/3.0)*UbMath::c1o54; + f[BN] = feq[BN] / 3.0 + (p1-rho/3.0)*UbMath::c1o54; + f[TS] = feq[TS] / 3.0 + (p1-rho/3.0)*UbMath::c1o54; + f[TNE] = feq[TNE] / 3.0 + (p1-rho/3.0)*UbMath::c1o216; + f[TNW] = feq[TNW] / 3.0 + (p1-rho/3.0)*UbMath::c1o216; + f[TSE] = feq[TSE] / 3.0 + (p1-rho/3.0)*UbMath::c1o216; + f[TSW] = feq[TSW] / 3.0 + (p1-rho/3.0)*UbMath::c1o216; + f[BNE] = feq[BNE] / 3.0 + (p1-rho/3.0)*UbMath::c1o216; + f[BNW] = feq[BNW] / 3.0 + (p1-rho/3.0)*UbMath::c1o216; + f[BSE] = feq[BSE] / 3.0 + (p1-rho/3.0)*UbMath::c1o216; + f[BSW] = feq[BSW] / 3.0 + (p1-rho/3.0)*UbMath::c1o216; + f[REST] = feq[REST] / 3.0 + (p1-rho/3.0)*UbMath::c8o27;*/ + + + f[E] = geq[E] ; + f[W] = geq[W] ; + f[N] = geq[N] ; + f[S] = geq[S] ; + f[T] = geq[T] ; + f[B] = geq[B] ; + f[NE] = geq[NE] ; + f[SW] = geq[SW] ; + f[SE] = geq[SE] ; + f[NW] = geq[NW] ; + f[TE] = geq[TE] ; + f[BW] = geq[BW] ; + f[BE] = geq[BE] ; + f[TW] = geq[TW] ; + f[TN] = geq[TN] ; + f[BS] = geq[BS] ; + f[BN] = geq[BN] ; + f[TS] = geq[TS] ; + f[TNE] = geq[TNE] ; + f[TNW] = geq[TNW] ; + f[TSE] = geq[TSE] ; + f[TSW] = geq[TSW] ; + f[BNE] = geq[BNE] ; + f[BNW] = geq[BNW] ; + f[BSE] = geq[BSE] ; + f[BSW] = geq[BSW] ; + f[REST] = geq[REST] ; + + + //calcFeqsFct(f,rho,vx1,vx2,vx3); + distributionsF->setDistribution(f, ix1, ix2, ix3); + distributionsF->setDistributionInv(f, ix1, ix2, ix3); + + f[E] = phi * feq[E] / rho; + f[W] = phi * feq[W] / rho; + f[N] = phi * feq[N] / rho; + f[S] = phi * feq[S] / rho; + f[T] = phi * feq[T] / rho; + f[B] = phi * feq[B] / rho; + f[NE] = phi * feq[NE] / rho; + f[SW] = phi * feq[SW] / rho; + f[SE] = phi * feq[SE] / rho; + f[NW] = phi * feq[NW] / rho; + f[TE] = phi * feq[TE] / rho; + f[BW] = phi * feq[BW] / rho; + f[BE] = phi * feq[BE] / rho; + f[TW] = phi * feq[TW] / rho; + f[TN] = phi * feq[TN] / rho; + f[BS] = phi * feq[BS] / rho; + f[BN] = phi * feq[BN] / rho; + f[TS] = phi * feq[TS] / rho; + f[TNE] = phi * feq[TNE] / rho; + f[TNW] = phi * feq[TNW] / rho; + f[TSE] = phi * feq[TSE] / rho; + f[TSW] = phi * feq[TSW] / rho; + f[BNE] = phi * feq[BNE] / rho; + f[BNW] = phi * feq[BNW] / rho; + f[BSE] = phi * feq[BSE] / rho; + f[BSW] = phi * feq[BSW] / rho; + f[REST] = phi * feq[REST] / rho; + + distributionsH->setDistribution(f, ix1, ix2, ix3); + distributionsH->setDistributionInv(f, ix1, ix2, ix3); + + //distributions->swap(); + //distributions->setDistribution(f, ix1, ix2, ix3); + //distributions->setDistributionInv(f, ix1, ix2, ix3); + //distributions->swap(); + + } + } + + //variablen der functions loeschen, da die verwiesenen Objecte nach dem verlassen des scopes ungueltig sind! + this->muVx1.ClearVar(); + this->muVx2.ClearVar(); + this->muVx3.ClearVar(); + this->muRho.ClearVar(); + +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::checkFunction(mu::Parser fct) +{ + double x1=1.0,x2=1.0,x3=1.0; + fct.DefineVar("x1",&x1); + fct.DefineVar("x2",&x2); + fct.DefineVar("x3",&x3); + + try + { + fct.Eval(); + fct.ClearVar(); + } + catch(mu::ParserError& e) + { + throw UbException(UB_EXARGS,"function: "+e.GetExpr() + (std::string)"error: "+e.GetMsg() + +(std::string)", only x1,x2,x3 are allowed as variables" ); + } +} +////////////////////////////////////////////////////////////////////////// +void InitDistributionsBlockVisitorMultiphase::setNu( LBMReal nu ) +{ + this->nu = nu; +} + diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitorMultiphase.h b/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitorMultiphase.h new file mode 100644 index 0000000000000000000000000000000000000000..05adc07ceda199ad04c602ea5b1d7cc75035ffb2 --- /dev/null +++ b/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitorMultiphase.h @@ -0,0 +1,102 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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 InitDistributionsBlockVisitorMultiphase.h +//! \ingroup Visitors +//! \author Hesameddin Safari +//======================================================================================= + +#ifndef InitDistributionsBlockVisitorMultiphase_H +#define InitDistributionsBlockVisitorMultiphase_H + +#include "Block3DVisitor.h" +#include "D3Q27System.h" +#include "Block3D.h" + +#include <muParser.h> + + + +class InitDistributionsBlockVisitorMultiphase : public Block3DVisitor +{ +public: + typedef std::numeric_limits<LBMReal> D3Q27RealLim; + +public: + InitDistributionsBlockVisitorMultiphase(); + //D3Q27ETInitDistributionsBlockVisitor(LBMReal rho, LBMReal vx1=0.0, LBMReal vx2=0.0, LBMReal vx3=0.0); + //! Constructor + //! \param nu - viscosity + //! \param rho - density + //! \param vx1 - velocity in x + //! \param vx2 - velocity in y + //! \param vx3 - velocity in z + InitDistributionsBlockVisitorMultiphase( LBMReal densityRatio, LBMReal intThickness, LBMReal radius, LBMReal vx1=0.0, LBMReal vx2=0.0, LBMReal vx3=0.0); + ////////////////////////////////////////////////////////////////////////// + //automatic vars are: x1,x2, x3 + //ussage example: setVx1("x1*0.01+x2*0.003") + ////////////////////////////////////////////////////////////////////////// + void setVx1( const mu::Parser& parser); + void setVx2( const mu::Parser& parser); + void setVx3( const mu::Parser& parser); + void setRho( const mu::Parser& parser); + void setPhi( const mu::Parser& parser); + + void setVx1( const std::string& muParserString); + void setVx2( const std::string& muParserString); + void setVx3( const std::string& muParserString); + void setRho( const std::string& muParserString); + void setPhi( const std::string& muParserString); + + ////////////////////////////////////////////////////////////////////////// + void setVx1( LBMReal vx1 ); + void setVx2( LBMReal vx2 ); + void setVx3( LBMReal vx3 ); + void setRho( LBMReal rho ); + void setPhi( LBMReal rho ); + void setNu( LBMReal nu ); + + void visit(SPtr<Grid3D> grid, SPtr<Block3D> block); + +protected: + void checkFunction(mu::Parser fct); + +private: + mu::Parser muVx1; + mu::Parser muVx2; + mu::Parser muVx3; + mu::Parser muRho; + mu::Parser muPhi; + + LBMReal nu; + LBMReal densityRatio; + LBMReal intThickness; + LBMReal radius; +}; + +#endif //D3Q27INITDISTRIBUTIONSPATCHVISITOR_H diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsFromFileBlockVisitor.cpp b/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsFromFileBlockVisitor.cpp index 73431d92876a10b207740ca17212a30dc84a7b98..b10151a9d2926546c2807db05912f79f6815bf86 100644 --- a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsFromFileBlockVisitor.cpp +++ b/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsFromFileBlockVisitor.cpp @@ -228,7 +228,7 @@ void InitDistributionsFromFileBlockVisitor::visit(const SPtr<Grid3D> grid, SPtr< // f[BNW] = f_TSE + feq[BNW]; // f[BSE] = f_TNW + feq[BSE]; // f[BSW] = f_TNE + feq[BSW]; - // f[ZERO] = f_ZERO + feq[ZERO]; + // f[REST] = f_ZERO + feq[REST]; calcFeqsFct(f, rho, vx1, vx2, vx3); diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitThixotropyBlockVisitor.cpp b/src/cpu/VirtualFluidsCore/Visitors/InitThixotropyBlockVisitor.cpp index 72a81d60f73b8489805b304501eb5d48664672d0..f9be891771838940294a5e3b348a0b4d8c31f366 100644 --- a/src/cpu/VirtualFluidsCore/Visitors/InitThixotropyBlockVisitor.cpp +++ b/src/cpu/VirtualFluidsCore/Visitors/InitThixotropyBlockVisitor.cpp @@ -452,7 +452,7 @@ void InitThixotropyBlockVisitor::checkFunction(mu::Parser fct) // f[BNW] = f_TSE + feq[BNW]; // f[BSE] = f_TNW + feq[BSE]; // f[BSW] = f_TNE + feq[BSW]; -// f[ZERO] = f_ZERO + feq[ZERO]; +// f[REST] = f_ZERO + feq[REST]; // // // diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitorMultiphase.cpp b/src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitorMultiphase.cpp new file mode 100644 index 0000000000000000000000000000000000000000..d3cbcb14570f1496d2f6ee3c251e4d515efc29da --- /dev/null +++ b/src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitorMultiphase.cpp @@ -0,0 +1,96 @@ +#include "SetKernelBlockVisitorMultiphase.h" +#include "Grid3DSystem.h" +#include "LBMSystem.h" +#include "Block3D.h" +#include "Grid3D.h" + +//SetKernelBlockVisitor::SetKernelBlockVisitor(LBMKernel3DPtr kernel, LBMReal nue) : +// Block3DVisitor(0, Grid3DSystem::MAXLEVEL), kernel(kernel), nue(nue) +//{ +// +//} +////////////////////////////////////////////////////////////////////////// +//SetKernelBlockVisitor::SetKernelBlockVisitor( LBMKernel3DPtr kernel, LBMReal nue, double availMem, double needMem ) : +// Block3DVisitor(0, Grid3DSystem::MAXLEVEL), kernel(kernel), nue(nue) +//{ +// if (needMem > availMem) +// { +// throw UbException(UB_EXARGS,"SetKernelBlockVisitor: Not enough memory!!!"); +// } +//} +////////////////////////////////////////////////////////////////////////// +SetKernelBlockVisitorMultiphase::SetKernelBlockVisitorMultiphase(SPtr<LBMKernel> kernel, LBMReal nuL, LBMReal nuG, LBMReal densityRatio, LBMReal beta, LBMReal kappa, + LBMReal contactAngle, double availMem, double needMem, SetKernelBlockVisitorMultiphase::Action action /*= SetKernelBlockVisitor::New*/) : + Block3DVisitor(0, Grid3DSystem::MAXLEVEL), kernel(kernel), nuL(nuL), nuG(nuG), densityRatio(densityRatio), beta(beta), kappa(kappa), contactAngle(contactAngle), action(action), dataSetFlag(true) +{ + if (needMem > availMem) + { + throw UbException(UB_EXARGS, "SetKernelBlockVisitor: Not enough memory!!!"); + } +} +////////////////////////////////////////////////////////////////////////// +void SetKernelBlockVisitorMultiphase::visit(SPtr<Grid3D> grid, SPtr<Block3D> block) +{ + if(kernel && (block->getRank() == grid->getRank())) + { + LBMReal collFactorL = LBMSystem::calcCollisionFactor(nuL, block->getLevel()); + LBMReal collFactorG = LBMSystem::calcCollisionFactor(nuG, block->getLevel()); + + kernel->setCollisionFactorMultiphase(collFactorL, collFactorG); + kernel->setDensityRatio(densityRatio); + kernel->setMultiphaseModelParameters(beta, kappa); + kernel->setContactAngle(contactAngle); + + kernel->setIndex(block->getX1(), block->getX2(), block->getX3()); + kernel->setDeltaT(LBMSystem::getDeltaT(block->getLevel())); + kernel->setBlock(block); + UbTupleInt3 blockNX = grid->getBlockNX(); + kernel->setNX(std::array<int, 3>{ { val<1>(blockNX), val<2>(blockNX), val<3>(blockNX) } }); + SPtr<LBMKernel> newKernel = kernel->clone(); + + switch (action) + { + case SetKernelBlockVisitorMultiphase::NewKernel: + block->setKernel(newKernel); + break; + case SetKernelBlockVisitorMultiphase::ChangeKernel: + { + SPtr<DataSet3D> dataSet = block->getKernel()->getDataSet(); + if (!dataSet) + { + UB_THROW(UbException(UB_EXARGS, "It is not possible to change a DataSet in kernel! Old DataSet is not exist!")); + } + + newKernel->setDataSet(dataSet); + + SPtr<BCProcessor> bcProc = block->getKernel()->getBCProcessor(); + if (!bcProc) + { + UB_THROW(UbException(UB_EXARGS, "It is not possible to change a BCProcessor in kernel! Old BCProcessor is not exist!")); + } + newKernel->setBCProcessor(bcProc); + block->setKernel(newKernel); + } + break; + + case SetKernelBlockVisitorMultiphase::ChangeKernelWithData: + { + SPtr<BCProcessor> bcProc = block->getKernel()->getBCProcessor(); + if (!bcProc) + { + UB_THROW(UbException(UB_EXARGS, "It is not possible to change a BCProcessor in kernel! Old BCProcessor is not exist!")); + } + newKernel->setBCProcessor(bcProc); + block->setKernel(newKernel); + } + break; + } + + } +} + +void SetKernelBlockVisitorMultiphase::setNoDataSetFlag(bool flag) +{ + dataSetFlag = flag; +} + diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitorMultiphase.h b/src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitorMultiphase.h new file mode 100644 index 0000000000000000000000000000000000000000..0874f665e8027a7497a775eab8517cb6376a2c0e --- /dev/null +++ b/src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitorMultiphase.h @@ -0,0 +1,70 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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 SetKernelBlockVisitorMultiphase.cpp +//! \ingroup Visitors +//! \author Hesameddin Safari +//======================================================================================= +#ifndef SetKernelBlockVisitorMultiphase_h +#define SetKernelBlockVisitorMultiphase_h + +#include "Block3DVisitor.h" +#include "LBMKernel.h" + + +class SetKernelBlockVisitorMultiphase : public Block3DVisitor +{ +public: + enum Action { NewKernel, ChangeKernel, ChangeKernelWithData}; +public: + //SetKernelBlockVisitor(LBMKernel3DPtr kernel, LBMReal nue); + + //SetKernelBlockVisitor(LBMKernel3DPtr kernel, LBMReal nue, double availMem, double needMem); + + SetKernelBlockVisitorMultiphase(SPtr<LBMKernel> kernel, LBMReal nuL, LBMReal nuG, LBMReal densityRatio, LBMReal beta, LBMReal kappa, LBMReal contactAngle, double availMem, double needMem, + SetKernelBlockVisitorMultiphase::Action action = SetKernelBlockVisitorMultiphase::NewKernel); + + virtual ~SetKernelBlockVisitorMultiphase() {} + + virtual void visit(SPtr<Grid3D> grid, SPtr<Block3D> block); + + void setNoDataSetFlag(bool flag); + +private: + SPtr<LBMKernel> kernel; + LBMReal nuL; + LBMReal nuG; + LBMReal densityRatio; + LBMReal beta; + LBMReal kappa; + LBMReal contactAngle; + Action action; + bool dataSetFlag; +}; + +#endif \ No newline at end of file