diff --git a/apps/cpu/Applications.cmake b/apps/cpu/Applications.cmake index f44fed21bd9abfd9657b716a93505aa3146b0d77..bc2f7f6a2765051c5a6ff3de7857fe0ca6bc8b54 100644 --- a/apps/cpu/Applications.cmake +++ b/apps/cpu/Applications.cmake @@ -1,37 +1,10 @@ add_subdirectory(${APPS_ROOT_CPU}/PoiseuilleFlow) -add_subdirectory(${APPS_ROOT_CPU}/CouetteFlow) add_subdirectory(${APPS_ROOT_CPU}/sphere) add_subdirectory(${APPS_ROOT_CPU}/FlowAroundCylinder) add_subdirectory(${APPS_ROOT_CPU}/LaminarTubeFlow) add_subdirectory(${APPS_ROOT_CPU}/ConvectionOfVortex) -IF(${VFCPU_ENABLE_LiggghtsCoupling}) - add_subdirectory(${APPS_ROOT_CPU}/LiggghtsApp) - add_subdirectory(${APPS_ROOT_CPU}/FallingSphere) -ENDIF() -IF(${VFCPU_ENABLE_NonNewtonianFluids}) - add_subdirectory(${APPS_ROOT_CPU}/HerschelBulkleySphere) - add_subdirectory(${APPS_ROOT_CPU}/HerschelBulkleyModel) - add_subdirectory(${APPS_ROOT_CPU}/rheometer) - add_subdirectory(${APPS_ROOT_CPU}/ViskomatXL) -ENDIF() - -IF(${VFCPU_ENABLE_MultiphaseFlow}) - add_subdirectory(${APPS_ROOT_CPU}/Multiphase) - add_subdirectory(${APPS_ROOT_CPU}/MultiphaseDropletTest) - add_subdirectory(${APPS_ROOT_CPU}/RisingBubble2D) - add_subdirectory(${APPS_ROOT_CPU}/JetBreakup) - add_subdirectory(${APPS_ROOT_CPU}/ShotcreteJet) - add_subdirectory(${APPS_ROOT_CPU}/ConcreteExtrusion) - add_subdirectory(${APPS_ROOT_CPU}/MultiphaseSymmetryTest) - add_subdirectory(${APPS_ROOT_CPU}/DamBreak) -ENDIF() - -IF(${VFCPU_ENABLE_LiggghtsCoupling} AND ${VFCPU_ENABLE_MultiphaseFlow}) - add_subdirectory(${APPS_ROOT_CPU}/Nozzle) - add_subdirectory(${APPS_ROOT_CPU}/NozzleMultiphase) -ENDIF() #add_subdirectory(tests) #add_subdirectory(Applications/gridRf) diff --git a/apps/cpu/BeadPack/CMakeLists.txt b/apps/cpu/BeadPack/CMakeLists.txt deleted file mode 100644 index a0df3f7a5f9960c99e42f10f7e96adf0e54c24f2..0000000000000000000000000000000000000000 --- a/apps/cpu/BeadPack/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(beadpack) - -INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(beadpack BINARY) diff --git a/apps/cpu/BeadPack/beadpack.cpp b/apps/cpu/BeadPack/beadpack.cpp deleted file mode 100644 index 3da3030bb618812bc4e37db49683b9b6ce22fd84..0000000000000000000000000000000000000000 --- a/apps/cpu/BeadPack/beadpack.cpp +++ /dev/null @@ -1,438 +0,0 @@ -#include <iostream> -#include <string> - -#include <vfluids.h> - -using namespace std; - - -void sbonepd(const char *configname) -{ - try - { - - string machine = QUOTEME(CAB_MACHINE); - string pathname, pathGeo; - int numOfThreads; - double availMem; - - ConfigFileReader cf(configname); - if (!cf.read()) - { - std::string exceptionText = "Unable to read configuration file\n"; - throw exceptionText; - } - - CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - if (machine == "BOMBADIL") - { - numOfThreads = 4; - pathname = "d:/temp/bbone"; - pathGeo = "d:/Data/Bone/BigBone"; - availMem = 15.0e9; - } - else if (machine == "M01" || machine == "M02") - { - numOfThreads = 8; - pathname = cf.getValue("pathname"); - pathGeo = cf.getValue("pathGeo"); - availMem = 12.0e9; - -#if defined(__unix__) - if (myid == 0) - { - const char* str = pathname.c_str(); - int status = 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()); - } - } - else throw UbException(UB_EXARGS, "unknown CAB_MACHINE"); - - - - if (myid == 0) UBLOG(logINFO, "Testcase big bone"); - - Grid3DPtr grid(new Grid3D(comm)); - double deltaVoxel = 11.658e-6; - - double dx = deltaVoxel; - - const int blocknx1 = 64; - const int blocknx2 = 64; - const int blocknx3 = 64; - - LBMReal rho_LB = 0.0; - //nueWasser = 1e-6 m^2/s - double nu_real = 1e-6; - LBMReal dt = 5e-8; // s (frei gew�hlt) - //dx - frei gew�hlt - // - LBMReal nu_LB = nu_real / (dx*dx / dt); - - - //dp = 50000 Pa - 0 Pa = 50000 Pa - double dp_real = UbSystem::stringTo<double>(cf.getValue("pressure")); //5000; - //rho wasser = 1000 kg*m^-3 - double rho_real = 1000; - //dp/rho = 50000/1000 = 50 m^2/s^2 - double dp_div_rho_real = dp_real / rho_real; - - double dp_LB = dp_div_rho_real / ((dx / dt)*(dx / dt)); - - bool with_forcing = true; - - double rhoLBinflow; - if (with_forcing) - { - rhoLBinflow = 0.0; - } - else - { - rhoLBinflow = dp_LB*3.0; - } - double deltax = dx; - - LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - - const int baseLevel = 0; - const int refineLevel = 0; - - double coord[6]; - - ////////////////////////////////////////////////////////////////////////// - //restart - UbSchedulerPtr rSch(new UbScheduler(50000, 50000, 10000000)); - RestartPostprocessor rp(grid, rSch, comm, pathname, RestartPostprocessor::BINARY); - ////////////////////////////////////////////////////////////////////////// - - if (grid->getTimeStep() == 0) - { - if (myid == 0) UBLOG(logINFO, "Neustart.."); - - string boneFilename = pathGeo + "/cyl_bone2.raw"; - - int pmNX1 = 1164; //abmessung einzelbild in x-richtung - int pmNX2 = 972; //abmessung einzelbild in y richtung - int pmNX3 = 900; //anzahl der bilder - //int pmNX3 = 10; //anzahl der bilder - float lthreshold = 109.0; - float uthreshold = 255.0; - - GbVoxelMatrix3DPtr bone(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold)); - bone->readMatrixFromRawFile<unsigned char>(boneFilename, GbVoxelMatrix3D::BigEndian); - - - bone->setVoxelMatrixDelta(deltaVoxel, deltaVoxel, deltaVoxel); - - bone->setVoxelMatrixMininum(0.0, 0.0, 0.0); - - if (myid == 0) bone->writeToVTKImageDataASCII(pathname + "/geo/bone"); - - /////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////// - - double offset = 0.5e-3; - //bounding box - double g_minX1 = bone->getX1Minimum(); - double g_minX2 = bone->getX2Minimum(); - double g_minX3 = bone->getX3Minimum() - offset; - - double g_maxX1 = bone->getX1Maximum(); - double g_maxX2 = bone->getX2Maximum(); - double g_maxX3 = bone->getX3Maximum() + offset; - - double blockLength = (double)blocknx1*deltax; - - grid->setPeriodicX1(false); - grid->setPeriodicX2(false); - grid->setPeriodicX3(true); - grid->setDeltaX(deltax); - grid->setBlockNX(blocknx1, blocknx2, blocknx3); - - 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()); - - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - double forcing = 0; - if (with_forcing) - { - forcing = dp_LB / (blocknx3*grid->getNX3()); - } - - if (myid == 0) - { - UBLOG(logINFO, "Parameters:"); - UBLOG(logINFO, "with forcing = " << with_forcing); - UBLOG(logINFO, "rho_LB = " << rho_LB); - UBLOG(logINFO, "nu_LB = " << nu_LB); - UBLOG(logINFO, "dp_LB = " << dp_LB); - UBLOG(logINFO, "forcing = " << forcing); - UBLOG(logINFO, "dx = " << dx << " m"); - UBLOG(logINFO, "dt = " << dt << " s"); - UBLOG(logINFO, "rho_real = " << rho_real << " kg*m^-3"); - UBLOG(logINFO, "nu_real = " << nu_real << " m^2/s"); - UBLOG(logINFO, "dp_real = " << dp_real << " Pa"); - - UBLOG(logINFO, "number of levels = " << refineLevel + 1); - UBLOG(logINFO, "numOfThreads = " << numOfThreads); - UBLOG(logINFO, "path = " << pathname); - UBLOG(logINFO, "Preprozess - start"); - } - - //cylinder - double radius = 0.0036; - double cx1 = 0.007; - double cx2 = 0.0046; - - GbObject3DPtr cylinder(new GbCylinder3D(cx1, cx2, g_minX3 - offset, cx1, cx2, g_maxX3 + offset, radius)); - GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/cylinder", WbWriterVtkXmlBinary::getInstance()); - - //inflow - GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 + blockLength, g_maxX2 + blockLength, g_minX3)); - if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname + "/geo/geoInflow", WbWriterVtkXmlASCII::getInstance()); - - //outflow - GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_maxX3, g_maxX1 + blockLength, g_maxX2 + blockLength, g_maxX3 + blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + "/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); - - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - - //bone interactor - int bcOptionBone = 0; //0=simple Bounce Back, 1=quadr. BB, 2=thin wall - D3Q27BoundaryConditionAdapterPtr bcBone(new D3Q27NoSlipBCAdapter(bcOptionBone)); - D3Q27InteractorPtr boneInt(new D3Q27Interactor(bone, grid, bcBone, Interactor3D::SOLID)); - - //wall interactors - int bcOptionWall = 0; //0=simple Bounce Back, 1=quadr. BB, 2=thin wall - D3Q27BoundaryConditionAdapterPtr bcWall(new D3Q27NoSlipBCAdapter(bcOptionWall)); - D3Q27InteractorPtr cylInt(new D3Q27Interactor(cylinder, grid, bcWall, Interactor3D::INVERSESOLID)); - - D3Q27BoundaryConditionAdapterPtr denBCAdapterInflow(new D3Q27DensityBCAdapter(rhoLBinflow)); - denBCAdapterInflow->setSecondaryBcOption(0); - D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoInflow, grid, denBCAdapterInflow, Interactor3D::SOLID)); - - //outflow - D3Q27BoundaryConditionAdapterPtr denBCAdapterOutflow(new D3Q27DensityBCAdapter(rho_LB)); - denBCAdapterOutflow->setSecondaryBcOption(0); - D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoOutflow, grid, denBCAdapterOutflow, Interactor3D::SOLID)); - - //////////////////////////////////////////// - //METIS - Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW)); - //////////////////////////////////////////// - /////delete solid blocks - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - intHelper.addInteractor(boneInt); - intHelper.addInteractor(cylInt); - intHelper.addInteractor(inflowInt); - intHelper.addInteractor(outflowInt); - intHelper.selectBlocks(); - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end"); - ////////////////////////////////////// - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor); - grid->accept(setConnsVisitor); - - //domain decomposition for threads - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - ppblocks->update(0); - ppblocks.reset(); - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nodb = (blocknx1)* (blocknx2)* (blocknx3); - unsigned long nod = nob * (blocknx1)* (blocknx2)* (blocknx3); - unsigned long nodg = nob * (blocknx1 + gl) * (blocknx2 + gl) * (blocknx3 + gl); - double needMemAll = double(nodg*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - if (myid == 0) - { - UBLOG(logINFO, "Number of blocks = " << nob); - UBLOG(logINFO, "Number of nodes = " << nod); - 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*nodb); - } - UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); - } - - LBMKernel3DPtr kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx1, blocknx2, blocknx3, LBMKernelETD3Q27CCLB::NORMAL)); - - mu::Parser fctForcingX3; - fctForcingX3.SetExpr("Fx3"); - fctForcingX3.DefineConst("Fx3", forcing); - - kernel->setForcingX3(fctForcingX3); - kernel->setWithForcing(true); - - //BCProcessorPtr bcProc(new D3Q27ETForThinWallBCProcessor()); - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nu_LB, availMem, needMem); - grid->accept(kernelVisitor); - - - //BC - intHelper.setBC(); - - //Press*1.6e8+(14.76-coordsX)/3.5*5000 - //initialization of distributions - //mu::Parser fct; - //fct.SetExpr("(x1max-x1)/l*dp*3.0"); - //fct.DefineConst("dp", dp_LB); - //fct.DefineConst("x3max", g_maxX3); - //fct.DefineConst("l", g_maxX3-g_minX3); - - D3Q27ETInitDistributionsBlockVisitor initVisitor(nu_LB, rho_LB); - //initVisitor.setRho(fct); - //initVisitor.setVx1(fct); - initVisitor.setVx1(0.0); - grid->accept(initVisitor); - - //Postrozess - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, true)); - ppgeo->update(0); - ppgeo.reset(); - - - coord[0] = bone->getX1Minimum(); - coord[1] = bone->getX2Minimum(); - coord[2] = cylinder->getX3Centroid(); - coord[3] = bone->getX1Maximum(); - coord[4] = bone->getX2Maximum(); - coord[5] = cylinder->getX3Centroid(); - - //////////////////////////////////////////////////////// - FILE * pFile; - string str = pathname + "/checkpoints/coord.txt"; - pFile = fopen(str.c_str(), "w"); - fprintf(pFile, "%f\n", coord[0]); - fprintf(pFile, "%f\n", coord[1]); - fprintf(pFile, "%f\n", coord[2]); - fprintf(pFile, "%f\n", coord[3]); - fprintf(pFile, "%f\n", coord[4]); - fprintf(pFile, "%f\n", coord[5]); - fclose(pFile); - //////////////////////////////////////////////////////// - - if (myid == 0) UBLOG(logINFO, "Preprozess - end"); - } - else - { - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor); - grid->accept(setConnsVisitor); - - //////////////////////////////////////////////////////// - FILE * pFile; - string str = pathname + "/checkpoints/coord.txt"; - pFile = fopen(str.c_str(), "r"); - fscanf(pFile, "%f\n", &coord[0]); - fscanf(pFile, "%f\n", &coord[1]); - fscanf(pFile, "%f\n", &coord[2]); - fscanf(pFile, "%f\n", &coord[3]); - fscanf(pFile, "%f\n", &coord[4]); - fscanf(pFile, "%f\n", &coord[5]); - fclose(pFile); - //////////////////////////////////////////////////////// - - if (myid == 0) UBLOG(logINFO, "Restart - end"); - } - UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); - NUPSCounterPostprocessor npr(grid, nupsSch, numOfThreads, comm); - - double outTime = 30000; - UbSchedulerPtr stepSch(new UbScheduler(outTime)); - stepSch->addSchedule(10, 10, 10); - stepSch->addSchedule(100, 100, 100); - stepSch->addSchedule(1000, 1000, 1000); - stepSch->addSchedule(100, 1500, 2000); - stepSch->addSchedule(10000, 10000, 10000); - - D3Q27MacroscopicQuantitiesPostprocessor pp(grid, stepSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv); - - double dxd2 = deltax / 2.0; - D3Q27IntegrateValuesHelperPtr ih1(new D3Q27IntegrateValuesHelper(grid, comm, coord[0] - dxd2, coord[1] - dxd2, coord[2] - dxd2, - coord[3] + dxd2, coord[4] + dxd2, coord[5] + dxd2)); - if (myid == 0) GbSystem3D::writeGeoObject(ih1->getBoundingBox().get(), pathname + "/geo/ih1", WbWriterVtkXmlBinary::getInstance()); - - double factorp = dp_real / dp_LB; - double factorv = dx / dt; - UbSchedulerPtr stepMV(new UbScheduler(100)); - D3Q27MeanValuesPostprocessor mvp1(grid, stepMV, pathname + "/mv/mv1.txt", comm, ih1, factorp, factorv); - - - //D3Q27IntegrateValuesHelperPtr ih2(new D3Q27IntegrateValuesHelper(grid, comm, g_maxX1-2.0*deltax, g_minX2, g_minX3, - // g_maxX1 - deltax, g_maxX2, g_maxX3)); - //if (myid == 0) GbSystem3D::writeGeoObject(ih2->getBoundingBox().get(), pathname + "/geo/ih2", WbWriterVtkXmlBinary::getInstance()); - - //D3Q27MeanValuesPostprocessor mvp2(grid, stepSch, pathname + "/mv/mv2.txt", comm, ih2, factorp, factorv); - - if (myid == 0) - { - UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - } - - double endTime = UbSystem::stringTo<double>(cf.getValue("endTime")); //100001;//10001.0; - - CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, stepMV)); - if (myid == 0) UBLOG(logINFO, "Simulation-start"); - calculation->calculate(); - if (myid == 0) UBLOG(logINFO, "Simulation-end"); - } - catch (exception& e) - { - cerr << e.what() << endl << flush; - } - catch (string& s) - { - cerr << s << endl; - } - catch (...) - { - cerr << "unknown exception" << endl; - } - -} -////////////////////////////////////////////////////////////////////////// -int main(int argc, char* argv[]) -{ - - if (argv != NULL) - { - sbonepd(argv[1]); - } - - return 0; -} diff --git a/apps/cpu/BeadPack/data/NewCentroids.txt b/apps/cpu/BeadPack/data/NewCentroids.txt deleted file mode 100644 index b2461e9adf0b21fb2370362d7609c60a53f9ada4..0000000000000000000000000000000000000000 --- a/apps/cpu/BeadPack/data/NewCentroids.txt +++ /dev/null @@ -1,6864 +0,0 @@ -2.397382 1.487592 0.417539 -2.368312 0.792199 0.414552 -2.404938 2.334875 0.417688 -2.408864 2.601136 0.404545 -2.452162 1.733784 0.398378 -2.472830 1.032642 0.402264 -2.468872 3.203534 0.411805 -2.490606 0.355152 0.398030 -2.500741 2.847513 0.410899 -2.501491 3.461930 0.407456 -2.500772 4.533719 0.422211 -2.531121 0.099776 0.408834 -2.558878 2.130816 0.400204 -2.620484 3.703871 0.402419 -2.614297 4.973498 0.416388 -2.644836 0.817089 0.406291 -2.635581 1.892093 0.398605 -2.677556 1.652444 0.397556 -2.669632 3.966691 0.414338 -2.683929 4.230982 0.409732 -2.728095 3.262286 0.423016 -2.753871 2.333710 0.405806 -2.750204 2.847755 0.402449 -2.777037 1.429630 0.408025 -2.798280 1.170376 0.417204 -2.312500 1.244167 0.411111 -2.366619 3.733986 0.428577 -2.363713 4.770099 0.427030 -2.408919 3.997405 0.428757 -2.491375 6.236543 0.430558 -2.589587 5.468347 0.425744 -2.608462 6.005923 0.420077 -2.637723 5.740660 0.427030 -2.664545 2.572893 0.415289 -2.690426 4.716170 0.410213 -2.780526 0.172632 0.401579 -2.783232 3.521717 0.414343 -2.810497 2.085580 0.424530 -2.819956 0.425200 0.421333 -2.819569 4.457682 0.438086 -2.875584 0.925455 0.419610 -2.877581 1.836613 0.423629 -2.265437 0.469612 0.424563 -2.259412 3.500980 0.424902 -2.288827 0.202793 0.432346 -2.302544 3.008402 0.430059 -2.356620 5.347183 0.421549 -2.368495 5.600430 0.424516 -2.375093 5.864472 0.428385 -2.432959 4.265867 0.430612 -2.563371 1.290400 0.426457 -2.602632 0.558421 0.415789 -2.740566 6.211321 0.420189 -2.829774 5.125338 0.431955 -2.838870 5.382435 0.429739 -2.865577 3.788462 0.439872 -2.847897 5.915187 0.440374 -2.898192 3.055346 0.439769 -2.216304 1.783152 0.435652 -2.221633 2.760476 0.439932 -2.223838 3.253838 0.437576 -2.250484 4.436290 0.429677 -2.258552 6.356552 0.438069 -2.916866 4.065791 0.447194 -2.928049 2.513049 0.436402 -2.940404 4.720594 0.456318 -2.975446 0.030792 0.433267 -2.969467 1.592311 0.446756 -2.144865 1.535811 0.449392 -2.156744 2.021163 0.442558 -2.156667 2.267901 0.445185 -2.171579 1.063509 0.437193 -2.166571 4.189810 0.458810 -2.274286 6.090571 0.440714 -2.369961 5.077266 0.455352 -2.385510 1.964898 0.432857 -2.858182 0.678939 0.442879 -2.971250 3.340000 0.438750 -3.004615 1.326731 0.444615 -3.000741 2.265926 0.441296 -3.042338 0.280260 0.452403 -2.094858 0.035330 0.467264 -2.132318 4.651060 0.462185 -2.142250 5.478550 0.466050 -2.161797 3.918125 0.455859 -2.145514 4.923730 0.474622 -2.148750 5.214632 0.460147 -2.195714 2.506786 0.443214 -2.941860 6.391395 0.446977 -2.974000 6.154833 0.451167 -3.055106 0.528723 0.445106 -3.058617 2.027766 0.457766 -3.081667 1.067250 0.460333 -2.063247 0.837273 0.473961 -2.092911 3.675443 0.462532 -3.048129 4.291367 0.465396 -3.094164 0.790214 0.473523 -3.061724 5.223448 0.463448 -3.056184 5.756579 0.467895 -2.057681 0.324525 0.483042 -2.045430 1.293333 0.479194 -2.045737 2.946526 0.479158 -3.079532 5.489169 0.491065 -3.134628 2.888512 0.480992 -3.128677 3.869613 0.492581 -3.152727 1.765818 0.473273 -2.025338 3.420912 0.495304 -2.006329 4.409306 0.504913 -2.036471 6.218431 0.481765 -2.057520 5.966545 0.494797 -2.167024 5.732976 0.489167 -3.130435 4.535217 0.484493 -3.143043 2.634348 0.473478 -3.159627 3.167801 0.492116 -1.969557 1.845897 0.512681 -1.978909 0.585527 0.508655 -1.986923 2.689615 0.482308 -3.154933 6.001600 0.499933 -3.226455 0.106636 0.502455 -1.936972 1.054404 0.508532 -1.932615 2.168769 0.506000 -1.962500 2.444196 0.512768 -2.852981 5.625481 0.504904 -3.215521 2.400097 0.521671 -3.209871 4.781484 0.511806 -3.218000 3.433500 0.505750 -3.216122 4.110204 0.500204 -1.918834 3.856632 0.534275 -1.918261 1.586087 0.504348 -1.929562 5.083577 0.526350 -1.934507 5.338169 0.511831 -3.030447 4.983610 0.530000 -2.612966 5.216525 0.531949 -3.242780 1.275415 0.540361 -3.314545 1.517576 0.523939 -1.873882 0.138118 0.530235 -1.905200 4.762945 0.545200 -1.923365 5.594952 0.546346 -2.643443 3.031721 0.542787 -3.010687 3.587694 0.553548 -3.297042 3.669437 0.530282 -3.293654 4.351346 0.529038 -3.295675 5.044810 0.548927 -3.291660 5.332648 0.545929 -3.289350 5.657870 0.552599 -3.337926 0.339407 0.535407 -1.850217 3.090290 0.545290 -1.844217 5.836627 0.546988 -2.929859 2.756268 0.541761 -2.944545 3.086364 0.571364 -3.348621 0.782759 0.532414 -3.345065 2.166623 0.540909 -3.371015 1.038609 0.557594 -1.814949 0.388788 0.556465 -1.812745 1.256863 0.548039 -1.816522 2.840435 0.547391 -1.818585 3.604906 0.553491 -1.825911 4.121921 0.567340 -1.828148 0.835556 0.546481 -1.831011 6.089787 0.562926 -3.382353 1.753382 0.547941 -3.368929 4.582321 0.556071 -1.778737 4.525051 0.577929 -1.796909 6.365164 0.573091 -3.363967 6.160516 0.584321 -3.379647 3.914706 0.564000 -1.767957 2.000215 0.570860 -1.753034 2.605655 0.586414 -1.769918 3.343607 0.589536 -2.227092 0.668723 0.587943 -2.603869 1.503065 0.580352 -2.651250 1.001705 0.577614 -3.131751 6.325036 0.591823 -3.367500 5.897833 0.567167 -1.737204 1.734194 0.585806 -1.728414 2.337252 0.609207 -2.333005 2.151913 0.587432 -2.593492 2.401270 0.574921 -3.454105 2.508158 0.592842 -3.444286 4.162381 0.593401 -1.720179 1.479107 0.599524 -1.723238 4.936238 0.603238 -1.724337 5.434217 0.596747 -1.732581 0.618065 0.579032 -2.322714 0.020714 0.597714 -2.545033 3.848301 0.600458 -2.598500 0.265500 0.598375 -3.245395 1.952500 0.594211 -3.340714 2.715000 0.579286 -3.369130 6.396087 0.583913 -3.460809 3.489223 0.615469 -3.477054 0.140536 0.591339 -3.486379 0.603966 0.590000 -3.484865 1.971757 0.596892 -3.490536 1.330357 0.596964 -1.704972 1.040608 0.610442 -2.438477 0.507531 0.615103 -2.538158 4.723947 0.610197 -2.589894 4.377447 0.608511 -3.237879 0.587677 0.603838 -2.265368 1.378896 0.628067 -2.326066 1.646256 0.622701 -2.519722 1.812917 0.617639 -2.744512 1.927439 0.623963 -2.758642 0.061204 0.626296 -2.791951 1.679024 0.607073 -3.489624 5.489286 0.629023 -1.651161 4.308968 0.633935 -1.670833 5.676019 0.623889 -2.076077 3.182488 0.631675 -2.324197 4.569663 0.641580 -2.448690 1.151508 0.636111 -2.462908 6.001454 0.641684 -2.576327 3.291927 0.642218 -2.818669 6.096730 0.638403 -2.861266 2.353418 0.621899 -3.103488 1.480233 0.623605 -3.498596 5.195000 0.624561 -3.535577 1.580769 0.622115 -1.643774 0.225849 0.635094 -1.632230 2.987311 0.648918 -1.633757 5.196618 0.654538 -1.673731 3.804231 0.641154 -2.306959 2.417872 0.650372 -2.321044 3.387071 0.650135 -2.348478 4.144042 0.655643 -2.480896 5.739254 0.629701 -2.488994 0.820828 0.637515 -2.526848 3.567994 0.648854 -2.658209 6.280000 0.635970 -2.679266 2.178807 0.637982 -2.701818 2.794034 0.645966 -2.798589 4.234896 0.640290 -2.812050 3.416584 0.643043 -2.890765 1.048412 0.644824 -2.950000 3.040000 0.610000 -3.439524 4.813061 0.635374 -3.537865 3.738989 0.638315 -3.550663 0.866188 0.646906 -1.634384 5.934155 0.654292 -1.621625 6.201875 0.647625 -2.259130 3.634565 0.638696 -2.279091 1.907172 0.646768 -2.483165 2.612615 0.651927 -2.701071 1.248049 0.660769 -2.689926 5.880370 0.650815 -2.705106 0.497690 0.661489 -2.743851 0.777905 0.649730 -2.762778 4.604747 0.657424 -3.002613 1.862484 0.655871 -3.590247 0.387407 0.653765 -1.602545 1.265636 0.650364 -1.596048 3.544948 0.670447 -1.614746 4.711695 0.648983 -2.158065 2.643706 0.671853 -2.292331 5.574942 0.675315 -2.304000 3.869143 0.651143 -2.337895 3.117953 0.663450 -2.348532 4.893257 0.658807 -2.441409 5.354228 0.656644 -2.457704 2.882185 0.665333 -2.738983 5.419322 0.649831 -2.833563 4.860063 0.657250 -2.956210 2.968629 0.684435 -2.967804 4.436682 0.663318 -2.984370 5.906296 0.655037 -3.559372 2.208010 0.660471 -3.562955 5.792386 0.655568 -3.604661 1.123898 0.657542 -1.576404 4.068090 0.667978 -2.065062 2.033765 0.675741 -2.071416 4.043382 0.679075 -2.176311 6.350299 0.676013 -2.762201 3.713491 0.680252 -2.968413 0.645329 0.676617 -3.012778 0.133611 0.653889 -3.033940 2.537616 0.682848 -3.572809 6.316340 0.672723 -3.592857 4.620893 0.660893 -1.559213 0.475354 0.682677 -1.555547 0.748984 0.683672 -1.563000 1.879714 0.677571 -1.569689 2.137358 0.676684 -1.557460 2.729206 0.682222 -2.197280 2.908640 0.676000 -2.207910 6.061721 0.693238 -2.269611 0.946833 0.678389 -2.357645 0.259504 0.684545 -2.420127 6.254051 0.673291 -2.633662 5.012817 0.682629 -2.861502 5.178115 0.690990 -2.918478 2.112536 0.677681 -3.020902 3.278443 0.685984 -3.608667 3.989714 0.674476 -2.074688 2.294531 0.676563 -2.112326 1.160066 0.697841 -3.035946 5.656284 0.699527 -3.071687 0.387055 0.701963 -3.126940 5.192672 0.700043 -3.615870 4.983804 0.682391 -3.615655 6.046773 0.702843 -2.020390 3.669894 0.710496 -2.090877 1.557544 0.683860 -2.098194 0.179226 0.711387 -2.131899 4.748354 0.702658 -2.168091 0.433727 0.696273 -2.729212 3.980242 0.704545 -2.910952 6.396190 0.685238 -3.149504 4.244771 0.710458 -3.669000 2.437100 0.696400 -1.515508 2.456017 0.708559 -1.512258 5.511505 0.705699 -2.166268 5.266197 0.709014 -2.795035 3.161678 0.712448 -2.974080 4.058000 0.703120 -3.001826 1.270609 0.702435 -3.161604 1.084528 0.703396 -3.160127 2.172278 0.700000 -3.196029 3.030588 0.695735 -3.455374 4.407357 0.714361 -3.662241 4.262586 0.704741 -3.678974 1.781496 0.707863 -3.663786 3.310214 0.714643 -3.697296 0.664025 0.715597 -1.499756 3.242033 0.724350 -1.506481 4.499568 0.716358 -1.493799 4.973436 0.735307 -2.005123 0.905215 0.727362 -3.007302 3.800476 0.711111 -3.148400 2.783300 0.722600 -1.478393 1.002917 0.735417 -1.496667 1.485145 0.724565 -1.501742 6.389318 0.731136 -1.933623 1.371739 0.724493 -1.962326 4.279457 0.727442 -2.127321 5.007143 0.725089 -2.504146 2.023902 0.720732 -2.734013 2.545405 0.737864 -3.234436 1.664812 0.721278 -3.690556 3.560000 0.713611 -3.728997 0.185350 0.745380 -2.085038 4.496241 0.741729 -2.782862 5.656325 0.749399 -2.835618 0.285843 0.732697 -2.997536 4.684058 0.727246 -3.140611 6.086889 0.740611 -3.147182 0.826364 0.735273 -3.209386 4.514910 0.749675 -3.219636 3.986545 0.746727 -3.225019 5.491407 0.749011 -3.703736 5.610220 0.739011 -3.738947 1.494842 0.738632 -1.905000 0.011429 0.742143 -1.904796 5.291403 0.758100 -2.081667 3.412667 0.750667 -2.795053 1.484526 0.744000 -3.232353 0.188067 0.747059 -3.322683 1.427642 0.751951 -3.350551 2.319291 0.748425 -3.711596 5.226702 0.740000 -1.442583 3.743432 0.763100 -1.426824 4.257882 0.759294 -1.430851 5.808617 0.763298 -1.444762 6.077302 0.748571 -1.840419 2.143263 0.770210 -1.955492 5.879590 0.762705 -1.986272 6.176805 0.759882 -2.368182 5.130545 0.745455 -3.177489 3.459910 0.762960 -3.752035 3.803451 0.760619 -1.432299 0.271839 0.758851 -1.851186 0.237119 0.757627 -1.932055 0.469589 0.760137 -2.486620 1.367512 0.779390 -2.956429 5.419571 0.774429 -3.223431 4.790962 0.775816 -3.234353 3.723882 0.768588 -3.285859 2.574978 0.780661 -3.391176 1.184118 0.762941 -3.408194 3.053965 0.795507 -3.777143 0.920000 0.770286 -1.404593 2.972185 0.789444 -1.406768 4.725253 0.773434 -1.412171 5.260465 0.774961 -1.822931 4.681034 0.765690 -1.836053 1.868947 0.766579 -1.849159 0.705421 0.777290 -1.860621 1.616158 0.789209 -1.921852 2.600926 0.770185 -1.953125 6.397500 0.764375 -2.076073 1.796164 0.781826 -2.203869 5.809311 0.792066 -2.989551 1.631910 0.777865 -3.758429 4.754031 0.781047 -3.784390 2.231220 0.765122 -1.389431 1.249701 0.804251 -1.389762 1.734762 0.780476 -1.852257 2.850817 0.793035 -1.849811 5.538679 0.778868 -2.476749 0.052792 0.797138 -2.506463 2.266463 0.785122 -2.535452 5.552776 0.798194 -2.585108 4.191477 0.794554 -3.028158 4.963474 0.794263 -3.316235 0.435608 0.800314 -3.368723 0.699734 0.789681 -3.362439 2.064024 0.790610 -3.377851 5.004050 0.791240 -3.786757 2.847568 0.786216 -3.809590 0.439147 0.800341 -3.811440 1.186070 0.799728 -1.380195 2.258878 0.803366 -1.375563 3.466406 0.813000 -1.375208 1.987292 0.801875 -1.734930 3.178944 0.795634 -1.866233 1.137860 0.801349 -2.077397 5.481233 0.790000 -2.555560 1.630474 0.803319 -2.629226 5.252440 0.808542 -2.907613 2.741757 0.803964 -3.173286 5.840143 0.795143 -3.377489 5.698018 0.799780 -3.374660 5.999796 0.809048 -3.777983 5.866481 0.799313 -3.803864 4.073977 0.808750 -1.371229 4.010000 0.817973 -1.871671 3.861671 0.825633 -2.091046 0.659346 0.813007 -2.388529 4.367157 0.808922 -2.544516 0.647097 0.802419 -3.323380 6.306852 0.809630 -3.350526 5.261316 0.803684 -3.435177 1.800851 0.822979 -3.770916 6.232977 0.811527 -3.816222 3.103889 0.797222 -1.794958 5.065714 0.816387 -1.839585 3.474473 0.824984 -2.329545 0.741970 0.813485 -2.403438 3.724063 0.813750 -2.536557 3.081639 0.809344 -2.561082 4.564131 0.822754 -2.908693 0.863660 0.825229 -2.943148 3.586296 0.808889 -3.010943 2.320000 0.819057 -3.348889 0.951556 0.810889 -3.471038 0.236415 0.817642 -3.601707 2.000610 0.813171 -1.611400 1.677600 0.823800 -1.774286 4.110000 0.828869 -2.650233 4.804884 0.814884 -2.710141 1.034930 0.819014 -3.193696 1.892174 0.825761 -3.396579 3.332105 0.824737 -3.593151 1.313836 0.823973 -3.857794 1.988578 0.837990 -1.340148 0.490815 0.833852 -1.674087 5.383652 0.834087 -1.680149 0.067139 0.856219 -1.709560 1.397170 0.842327 -1.727326 6.336028 0.852009 -1.721634 0.921206 0.850428 -1.952759 4.875241 0.839103 -2.040645 3.022258 0.828925 -2.299583 2.060625 0.837708 -2.563333 0.351026 0.835449 -2.573607 6.145689 0.849208 -2.779414 4.403555 0.845391 -3.715385 2.627179 0.827436 -3.835978 5.421285 0.837933 -3.871071 2.445893 0.830536 -1.312034 5.530339 0.846356 -1.330120 0.053593 0.843952 -1.309809 2.524306 0.868565 -1.683378 2.599392 0.848986 -1.745817 5.753983 0.866361 -1.777284 6.041802 0.862741 -2.160153 3.857691 0.865294 -2.176571 4.218476 0.853714 -2.433579 3.974632 0.848211 -2.525333 6.392889 0.842222 -2.654748 3.441978 0.854676 -2.744180 2.941719 0.859688 -2.753918 2.295448 0.861493 -2.803908 6.258621 0.842759 -3.069479 6.320274 0.856192 -3.383600 2.793600 0.836000 -3.435035 4.647588 0.862084 -3.447405 3.606997 0.862624 -3.490390 4.128485 0.853030 -3.801609 5.013166 0.863958 -3.861077 4.320615 0.836308 -1.296452 4.491290 0.850484 -1.299860 6.307378 0.869755 -1.739548 4.398404 0.866506 -1.820364 2.390727 0.846545 -2.143789 1.369158 0.869158 -2.203188 3.227536 0.864855 -2.316842 1.180351 0.848421 -2.379250 1.824600 0.870000 -2.445319 3.295319 0.853404 -2.460857 0.950429 0.858429 -2.533789 5.812484 0.860248 -2.847848 1.960000 0.855696 -2.920777 0.050971 0.855243 -3.476173 3.863086 0.858272 -3.562095 5.394775 0.870133 -3.662546 4.487056 0.868488 -3.895920 1.723731 0.864925 -3.885516 3.349008 0.869405 -3.906026 0.689423 0.873429 -1.293172 1.526621 0.866276 -1.281688 3.230130 0.863636 -1.285058 5.057965 0.873256 -1.610789 3.921842 0.861579 -1.662078 0.334416 0.867662 -2.208000 3.591231 0.867385 -2.320694 1.550417 0.862083 -2.352879 0.491629 0.876402 -2.563237 2.743734 0.873817 -2.623462 1.873077 0.860577 -3.510606 1.536364 0.861818 -1.621017 1.161864 0.868305 -1.656279 1.985581 0.875349 -1.685665 3.674162 0.886069 -2.064332 2.429170 0.887148 -2.302759 5.397085 0.888621 -2.427705 2.495738 0.867049 -2.700635 0.150000 0.877460 -2.937527 5.810430 0.879247 -3.138703 0.616444 0.885649 -3.177879 3.224545 0.874444 -3.507094 2.474926 0.882118 -1.264448 0.979178 0.905042 -1.641003 0.599027 0.903186 -1.958750 3.250500 0.875500 -2.284030 2.305970 0.879104 -2.737640 5.954944 0.884719 -2.828667 4.147000 0.882000 -3.547773 0.535547 0.896761 -3.887363 3.622239 0.891294 -3.909011 4.569780 0.884066 -3.940263 1.468684 0.890526 -1.253410 6.032605 0.907241 -1.625374 2.241905 0.911871 -1.622440 4.635833 0.903333 -2.078704 2.168889 0.891481 -2.320027 2.874521 0.902986 -2.358804 5.992919 0.904976 -2.417100 4.796283 0.907063 -2.774314 5.044216 0.895196 -2.901889 3.355056 0.898611 -3.000382 1.095038 0.890916 -3.532148 6.196242 0.901611 -3.568757 1.035444 0.898757 -3.915479 5.668537 0.911755 -3.916205 6.058554 0.902590 -3.943674 0.168295 0.906023 -1.245827 0.711575 0.906299 -1.633989 2.975426 0.913936 -1.998702 5.681985 0.906489 -2.249545 4.605227 0.899886 -2.344211 6.250752 0.905338 -2.520085 5.037627 0.909576 -2.629735 3.707743 0.917168 -2.796157 0.483843 0.911065 -2.852662 3.842230 0.909281 -2.965039 3.091836 0.920664 -2.975780 1.418688 0.917589 -3.199946 1.266965 0.922195 -3.569256 4.878837 0.912140 -3.558571 5.131224 0.902653 -3.942876 3.881046 0.912222 -3.955171 2.686844 0.921217 -1.235251 3.672040 0.926488 -1.223385 4.813231 0.913692 -1.222681 5.767101 0.924275 -1.467032 2.747385 0.926042 -1.484718 0.822077 0.926232 -1.579177 5.140823 0.925127 -2.101038 6.019937 0.930692 -2.746882 5.460000 0.921118 -2.790596 1.666358 0.924503 -2.960647 6.077314 0.937627 -3.058412 2.082575 0.926223 -3.139735 5.320596 0.923576 -3.194096 2.945000 0.927711 -3.599104 2.952939 0.932616 -3.926241 6.387092 0.921135 -3.969286 1.005000 0.906429 -3.968000 2.232333 0.916500 -1.223284 0.286418 0.920448 -1.216129 2.753226 0.915806 -1.219004 5.307229 0.933939 -1.517917 5.647188 0.926979 -1.604080 3.430800 0.932800 -2.000000 4.640552 0.935521 -2.062077 0.040831 0.932971 -2.120691 6.368351 0.923298 -2.669925 0.813284 0.930672 -2.859073 4.746537 0.928683 -3.009104 4.522127 0.931642 -3.522596 2.210894 0.936255 -3.952545 5.216545 0.919636 -2.102935 0.413478 0.947754 -2.160833 2.668854 0.933646 -2.197617 0.917584 0.945336 -2.295225 0.241892 0.935225 -2.340513 5.653718 0.933974 -2.898299 2.515910 0.949433 -3.136286 5.645143 0.939657 -3.248462 4.161026 0.937179 -3.633443 0.782350 0.941366 -3.665512 3.475354 0.943780 -3.966357 4.817214 0.933786 -1.203127 1.761273 0.950873 -1.197041 2.108136 0.959675 -1.198472 3.008908 0.953450 -1.554718 4.157534 0.965147 -1.561045 5.920000 0.938955 -2.081849 5.252798 0.958491 -2.709218 3.189609 0.956034 -2.794648 1.230000 0.958592 -3.029576 4.016186 0.944576 -3.073704 3.737593 0.947963 -3.347132 4.410441 0.951838 -3.582606 5.926649 0.948670 -3.591888 3.224847 0.951480 -3.587091 5.654390 0.965896 -1.177792 3.923766 0.953117 -1.496143 4.414714 0.949429 -1.525031 6.176180 0.968354 -1.729424 4.870373 0.968339 -2.665758 1.448182 0.948333 -3.006909 1.800182 0.963333 -3.154424 0.305707 0.968822 -3.156456 1.603291 0.953038 -3.198233 5.064224 0.970517 -3.263884 0.052416 0.968807 -3.645668 1.718704 0.964615 -3.732841 0.033125 0.960227 -3.949706 2.943971 0.949265 -4.015778 0.408444 0.943778 -4.014265 1.241176 0.949412 -1.181769 1.238435 0.965034 -1.166528 3.423194 0.964028 -1.295723 4.267803 0.971272 -1.488462 3.171209 0.967582 -1.962958 3.657324 0.957042 -2.423423 3.518255 0.964094 -2.522401 2.076095 0.975515 -2.660000 3.986567 0.958209 -3.228920 2.395634 0.968263 -3.664131 0.306239 0.982165 -1.523655 1.506948 0.985542 -1.891134 1.993763 0.981546 -1.934558 4.250726 0.992177 -1.963838 0.807374 0.973636 -2.166076 4.845204 0.991090 -2.542938 1.162147 0.980395 -2.641094 2.519688 0.975469 -2.901918 0.263425 0.972466 -3.029474 4.261228 0.975263 -3.092979 2.718723 0.969787 -3.228386 6.131713 0.999114 -3.254305 3.897219 0.988874 -3.345795 5.506705 0.980000 -3.992872 4.125213 0.972660 -1.468807 4.911684 0.995579 -1.476220 5.396457 0.994685 -1.860000 3.054098 0.984918 -1.913974 1.345364 0.990066 -1.932464 5.454493 0.985217 -2.141969 1.937480 0.991260 -2.320667 5.153333 0.977333 -2.911980 5.226040 0.985248 -3.114300 0.859900 0.983100 -3.656426 3.739279 0.999459 -3.682578 4.245781 0.985781 -4.031020 3.180612 0.976327 -1.134942 4.599826 1.005581 -1.807582 5.242008 1.002664 -1.868811 0.223216 1.010617 -2.032481 1.117786 1.010840 -2.315714 0.014405 1.008452 -2.394439 4.184439 0.999112 -2.730625 5.731625 0.988375 -3.102121 4.755606 0.990455 -3.550635 2.701111 1.002910 -3.705417 1.460000 1.006250 -3.751892 2.308919 0.985676 -4.031121 5.446379 0.997500 -4.054758 2.454516 0.999355 -1.128452 2.395000 1.001786 -1.125000 5.531724 1.002069 -1.147391 0.504239 1.004891 -1.388894 4.652304 1.017235 -1.424488 3.841417 1.007953 -1.452677 0.323780 1.008504 -1.527427 2.468299 1.015975 -1.535000 6.400000 0.990000 -1.923284 6.215654 1.020765 -1.965618 1.738146 1.011124 -2.000923 2.847923 1.014077 -2.073362 3.433491 1.013879 -2.373387 1.347661 1.011935 -2.386604 3.112830 1.000377 -3.084390 3.495122 0.997073 -3.334043 4.847518 1.006667 -3.354638 5.844493 1.004493 -4.040190 4.383641 1.020788 -4.054638 2.013957 1.011489 -1.463051 1.779153 1.010000 -1.753936 2.778617 1.013830 -1.863553 0.508711 1.024654 -2.569657 0.531486 1.021943 -2.574615 0.010000 1.018462 -2.614414 4.313862 1.025448 -2.880625 0.700063 1.019688 -3.291429 2.147500 1.006786 -3.451975 1.978642 1.013457 -4.078571 1.640238 1.015238 -1.105259 6.259397 1.030690 -1.467759 2.075862 1.021638 -1.778759 1.550483 1.033862 -2.002813 3.987188 1.015313 -2.184810 4.398228 1.026835 -2.425111 4.488278 1.033000 -2.444648 0.769859 1.025211 -2.512006 5.314904 1.042866 -2.657029 6.349086 1.028114 -2.776438 2.730959 1.016986 -2.821739 0.984203 1.030145 -2.895489 6.382030 1.033759 -2.964153 4.958602 1.041695 -3.121290 5.891720 1.023333 -3.344231 1.454167 1.031731 -3.449132 1.219589 1.032100 -3.506912 0.107353 1.021029 -3.697500 1.198906 1.025469 -3.707475 4.697273 1.030657 -4.044763 5.872145 1.037326 -4.081846 0.825385 1.018923 -1.106707 1.485122 1.028537 -1.097320 5.033608 1.035464 -1.711202 1.809457 1.042907 -1.705263 5.525724 1.038750 -1.711566 3.235301 1.037349 -1.784030 1.093433 1.035224 -1.911446 5.877107 1.045537 -1.923237 2.593816 1.046184 -1.961901 5.028521 1.038873 -2.148022 1.571758 1.031209 -2.150877 5.535263 1.037544 -2.215120 0.650756 1.043643 -2.786273 2.106182 1.039909 -2.868906 3.616875 1.040391 -2.971798 5.471629 1.039438 -3.273469 1.036531 1.023673 -3.401111 0.328254 1.028571 -3.700880 1.968160 1.035520 -3.721598 6.119315 1.048311 -3.731921 3.991854 1.046291 -3.774390 0.974146 1.028537 -4.076887 3.438344 1.039205 -1.458144 3.591237 1.053608 -2.468173 2.330288 1.042019 -2.481825 1.580079 1.059802 -2.562054 2.936811 1.048595 -2.727699 4.552773 1.061475 -3.335229 3.130065 1.044837 -3.355696 3.438386 1.059272 -3.353281 5.256979 1.056719 -3.402579 0.717557 1.049321 -3.387769 6.350808 1.054115 -3.807518 3.127021 1.045745 -4.086526 3.701579 1.042737 -1.075000 4.112500 1.055385 -1.078333 4.355000 1.048889 -1.343299 2.302577 1.052577 -2.146349 3.063983 1.067967 -2.168985 5.794708 1.067600 -2.646436 4.833317 1.060149 -2.684048 0.310357 1.051905 -3.003115 0.489508 1.055246 -3.000920 2.299920 1.073040 -3.306829 2.634512 1.054878 -3.359425 1.720345 1.055402 -3.762390 2.549044 1.070000 -4.086694 6.129008 1.061983 -1.409247 0.574603 1.071423 -1.415899 1.281079 1.066978 -1.542207 1.036207 1.063793 -1.759046 3.960871 1.070913 -2.254000 2.151273 1.057818 -2.311180 3.944438 1.079551 -2.757742 1.863871 1.059677 -3.741739 5.469217 1.065130 -4.123350 0.045583 1.069369 -4.102563 4.650094 1.081313 -1.069763 0.777515 1.088876 -1.383464 5.171508 1.086927 -1.816339 4.535268 1.076339 -2.310297 1.106441 1.090424 -2.696045 6.091921 1.086384 -2.812427 0.058074 1.090923 -3.219877 1.920370 1.072222 -3.776679 2.824723 1.090000 -3.947168 5.034740 1.083353 -1.062269 1.039244 1.085462 -1.055388 1.927397 1.096895 -1.312022 0.120815 1.100730 -1.368933 3.352135 1.094663 -1.410439 5.798596 1.091140 -1.438595 2.953388 1.083306 -1.673463 1.318382 1.101974 -1.770277 2.383391 1.092907 -1.821115 3.462446 1.092086 -2.190444 3.713556 1.091444 -2.334571 2.555276 1.093436 -2.434861 5.820025 1.104810 -2.524808 1.835385 1.076923 -2.586500 5.563400 1.080500 -3.137896 6.375648 1.105043 -3.260388 0.512816 1.083981 -3.409390 2.889512 1.085488 -3.451176 4.225000 1.083971 -4.016903 0.600265 1.089912 -4.136770 1.069503 1.095590 -4.127400 3.944200 1.078000 -4.142364 2.240909 1.082182 -1.050250 0.294500 1.097500 -1.046941 2.731647 1.093176 -1.049630 3.244321 1.098580 -1.047273 3.737727 1.089394 -1.076241 6.011879 1.110709 -1.602805 0.115732 1.099512 -1.754380 0.851570 1.102562 -2.216496 6.175474 1.099416 -2.287222 1.767460 1.100952 -2.453077 6.129744 1.092308 -2.454624 3.727688 1.107052 -2.509065 3.315234 1.094393 -2.750714 3.404643 1.096786 -3.413152 3.729565 1.096304 -3.482273 3.973364 1.100909 -3.543064 4.469306 1.103179 -3.689076 5.017395 1.112227 -3.783444 0.500927 1.102252 -4.113622 6.383214 1.108724 -4.122259 5.229778 1.105630 -4.134774 2.855827 1.103835 -1.035225 5.739075 1.128575 -1.315020 2.638327 1.114286 -1.327222 4.052698 1.105476 -1.975623 2.200038 1.118717 -2.160670 4.157113 1.111495 -2.257073 3.291463 1.096341 -2.660528 5.097520 1.116341 -2.837485 2.954417 1.109141 -2.960945 5.724800 1.122109 -3.229266 4.574321 1.122283 -3.601795 5.271197 1.103590 -3.916301 1.817534 1.110342 -4.153655 1.369379 1.108759 -4.160659 0.300879 1.102967 -1.027251 4.803555 1.124882 -1.318231 6.387846 1.116846 -1.316667 1.568000 1.113111 -1.669193 5.776278 1.132377 -1.712500 4.312917 1.108542 -1.731586 6.035655 1.123103 -1.954286 3.233214 1.111071 -2.116400 0.215326 1.132189 -2.305795 0.414318 1.127008 -2.420592 4.949079 1.119934 -2.462093 0.193811 1.130154 -2.576349 0.949365 1.110635 -2.749035 2.349649 1.111228 -2.835813 1.504581 1.125567 -3.147434 3.286903 1.115752 -3.474736 6.086504 1.134085 -3.824179 0.754478 1.105821 -1.042597 0.036806 1.141403 -1.015289 2.982975 1.133967 -1.304578 1.923494 1.120843 -1.676667 0.349706 1.126373 -1.698793 6.281379 1.117759 -1.922314 4.791616 1.137118 -2.160328 1.308689 1.117541 -2.160164 2.373115 1.116885 -2.373435 6.371174 1.128217 -2.732892 3.820482 1.123735 -2.809591 4.094737 1.126374 -3.057020 1.052879 1.138990 -3.085870 2.533478 1.116087 -3.787529 5.723435 1.144635 -3.808516 4.475137 1.143104 -3.842378 3.523066 1.140372 -3.856058 2.141923 1.135769 -3.909710 1.369275 1.122899 -4.181786 1.825357 1.123214 -1.008873 3.494225 1.134789 -1.329345 0.814940 1.143155 -1.369534 6.052007 1.144731 -1.682694 3.687917 1.154250 -1.720263 2.089868 1.142303 -2.274423 5.321538 1.134423 -2.557638 2.690236 1.137165 -2.987347 3.866854 1.156502 -3.074758 0.084573 1.151293 -3.220732 4.301707 1.135366 -3.498224 0.966044 1.147383 -3.840977 6.325263 1.139699 -3.881721 0.268605 1.144605 -3.872857 3.791286 1.143714 -4.174059 4.190792 1.139109 -1.276575 4.855205 1.142329 -1.300854 1.073293 1.146951 -1.930897 0.029013 1.159193 -1.957391 5.642120 1.152446 -2.750941 5.347569 1.157020 -2.903973 3.208447 1.154612 -2.958254 1.973175 1.137143 -3.085391 3.020348 1.145130 -3.096380 1.454389 1.158643 -3.495410 2.499836 1.134918 -3.529241 0.514388 1.162110 -4.171959 4.923574 1.158179 -1.005208 1.289396 1.163509 -0.992558 5.205814 1.150233 -1.241750 3.552500 1.153750 -1.572026 2.685294 1.157908 -1.577356 4.517788 1.159808 -1.691725 2.970176 1.172817 -1.718028 5.053216 1.172653 -2.100571 4.595842 1.173451 -2.106222 6.383056 1.168333 -2.582894 1.360547 1.173473 -3.106418 0.685672 1.152239 -3.119667 5.242000 1.157778 -3.174783 4.066957 1.153043 -3.525658 4.810000 1.155000 -3.553691 3.085168 1.158523 -3.847615 5.258231 1.153692 -4.177056 3.117850 1.160467 -0.981475 2.277213 1.166393 -1.670117 0.614869 1.179155 -2.359342 2.836447 1.156974 -2.353275 5.568908 1.180387 -2.544195 3.976839 1.175000 -2.675947 0.722392 1.175482 -2.893846 5.970962 1.162212 -3.204839 3.617258 1.156129 -3.219476 5.713886 1.175764 -3.412326 2.273488 1.161395 -3.542567 1.587647 1.173422 -3.537478 5.818457 1.186647 -3.599783 6.319058 1.163188 -3.994650 2.637899 1.187395 -4.187927 5.699634 1.167439 -1.258122 3.126396 1.180305 -1.281478 4.483024 1.187354 -1.989054 0.661892 1.182568 -2.123402 2.691392 1.185155 -2.200373 5.079814 1.187578 -2.460388 4.695874 1.183350 -2.923806 1.266269 1.183731 -2.969677 2.753548 1.169032 -3.143390 1.710847 1.170678 -3.239277 1.234980 1.189518 -3.407509 5.036194 1.192076 -3.573355 3.546513 1.184770 -3.897380 4.793464 1.191054 -3.898947 0.019649 1.193860 -0.976316 0.520263 1.172632 -0.966866 2.522687 1.184627 -0.972500 4.528889 1.185208 -0.973534 5.461802 1.196007 -1.216288 5.338595 1.197391 -1.268571 0.365824 1.186044 -1.463746 4.275549 1.199634 -1.554854 2.274369 1.177767 -1.973971 1.490294 1.183529 -1.989829 0.932457 1.199010 -2.047612 5.378209 1.181194 -2.281799 0.866296 1.193228 -2.677113 5.860928 1.186495 -2.711143 1.138429 1.178429 -2.794024 0.486402 1.187805 -3.041176 6.157529 1.179412 -3.134706 2.116765 1.178529 -3.483315 5.547983 1.200580 -3.553636 1.841091 1.180364 -4.195686 5.460196 1.178627 -4.219247 2.444384 1.191096 -4.232700 0.526000 1.188200 -1.233130 2.864783 1.200522 -1.255333 3.823367 1.211367 -1.561583 1.646834 1.209151 -1.948912 3.704765 1.207206 -2.022527 6.050989 1.189341 -2.322781 3.513841 1.206424 -2.655697 3.126855 1.206439 -2.908750 1.737000 1.185000 -2.987224 4.492571 1.207510 -3.203176 2.811176 1.196118 -3.260543 0.871628 1.198450 -3.605191 2.126565 1.200916 -3.645474 0.021368 1.196421 -3.699377 3.300649 1.216831 -3.863871 1.131290 1.211548 -3.932133 4.033867 1.191600 -0.961502 1.554725 1.220733 -1.538750 1.920240 1.207596 -1.547023 3.915907 1.218605 -1.670119 4.777774 1.219139 -2.389449 2.001356 1.208771 -2.674101 1.688561 1.208273 -2.937399 4.765507 1.219696 -3.242438 0.294492 1.228600 -3.362075 0.053942 1.216307 -3.873204 5.962039 1.206311 -3.934674 2.375761 1.206522 -3.942133 2.992267 1.210267 -4.238052 1.592792 1.209481 -4.214545 4.453896 1.207532 -4.242757 0.852991 1.217804 -1.161917 1.727083 1.216667 -1.175139 2.138333 1.213472 -1.512676 3.168559 1.226324 -1.587367 3.440253 1.232937 -1.921019 1.237321 1.231434 -1.922661 4.099495 1.227431 -2.328993 4.337114 1.215973 -2.435750 0.619625 1.223625 -2.579707 2.188787 1.223138 -2.584300 3.537000 1.208200 -2.790947 2.585758 1.221061 -2.780000 4.336932 1.211364 -2.901224 5.137343 1.228706 -2.928966 0.850517 1.216983 -2.986050 3.460784 1.223697 -3.005648 4.230741 1.220741 -3.151056 4.996056 1.218732 -3.235876 5.454948 1.225000 -3.223860 5.985175 1.219298 -3.542931 0.252291 1.235739 -3.757184 4.219223 1.229320 -3.944364 5.518682 1.218864 -3.963382 3.260676 1.219710 -4.220690 5.938966 1.207069 -4.243544 3.621772 1.213165 -4.251184 2.054342 1.221513 -0.935085 4.010000 1.225085 -1.221944 2.420833 1.223889 -1.244286 1.366310 1.223810 -1.796533 5.373443 1.239552 -1.872292 2.773125 1.232431 -1.914118 1.924118 1.222000 -1.952243 4.373946 1.238135 -2.106504 3.917154 1.225772 -3.197087 2.348058 1.230388 -3.608202 0.748652 1.229213 -3.817568 1.611171 1.223694 -4.241705 3.362171 1.224961 -1.200744 0.608558 1.244233 -1.195580 4.232536 1.251812 -1.441181 5.463386 1.239055 -1.968723 0.401773 1.243546 -2.081929 1.713655 1.240508 -2.133590 2.031410 1.229103 -2.245104 5.972917 1.236771 -2.289583 1.547946 1.247470 -2.561310 0.409524 1.236786 -2.977692 0.320070 1.232937 -3.987723 0.897991 1.245134 -0.926601 4.273861 1.262673 -0.918961 5.001558 1.246234 -0.928209 6.184142 1.254627 -1.209368 5.074349 1.261152 -1.464815 4.984228 1.258981 -1.822110 1.688165 1.254862 -1.957462 5.157868 1.258528 -1.968053 2.441947 1.244956 -2.235692 4.817826 1.254901 -2.388850 3.144985 1.255811 -2.441931 5.168571 1.256757 -2.529577 2.463169 1.250000 -2.562342 4.457627 1.262975 -2.594444 6.251032 1.252222 -2.784205 5.587273 1.239545 -2.842091 6.269682 1.254136 -3.239173 3.850000 1.246241 -3.300349 4.800233 1.248023 -3.362906 2.042075 1.255434 -3.408627 3.270196 1.246078 -3.682017 2.371335 1.266307 -4.239324 6.192324 1.260206 -0.915054 2.063441 1.258495 -1.562464 0.838261 1.253478 -2.334837 2.272561 1.266748 -3.288995 6.235582 1.270767 -3.458150 1.357500 1.269150 -3.706593 1.391209 1.252747 -4.272817 2.683803 1.249859 -1.234016 5.852582 1.278484 -1.417994 4.694922 1.282821 -1.556632 5.239895 1.270895 -1.671720 4.127204 1.261183 -2.016038 3.446462 1.277962 -2.348333 1.292333 1.257333 -2.633853 1.935229 1.273211 -2.698684 4.696842 1.263421 -3.307324 1.561127 1.261549 -4.014045 1.988427 1.261461 -4.273681 4.710833 1.275417 -0.900545 2.820182 1.271818 -0.902540 3.668889 1.266667 -0.904518 1.805361 1.286807 -0.910569 5.917967 1.285285 -1.131903 6.365000 1.288419 -1.489452 0.247945 1.287705 -1.486585 1.401220 1.284146 -1.558714 6.388857 1.277286 -1.775616 3.240616 1.275205 -1.771563 1.037969 1.274688 -1.897778 6.275641 1.284217 -2.661915 2.869574 1.268298 -2.729163 0.224412 1.293643 -2.810000 3.649752 1.288515 -3.420698 2.733721 1.267209 -3.776604 1.938679 1.265660 -3.984275 6.180290 1.279638 -4.277500 4.006394 1.285433 -0.905478 0.722783 1.286261 -0.897876 3.334115 1.293584 -0.910754 0.214563 1.296310 -1.192807 3.352544 1.283333 -1.222201 5.583082 1.290629 -1.458500 2.481231 1.297269 -1.553254 1.148402 1.293669 -1.698462 0.010000 1.280000 -1.812785 0.211646 1.289367 -1.922767 3.028735 1.294269 -2.053412 5.829529 1.288118 -2.129537 3.200556 1.299722 -2.169713 2.926338 1.301083 -2.486207 1.098103 1.291853 -2.533433 5.411045 1.287687 -2.916073 2.165215 1.295446 -2.971407 5.406422 1.298593 -3.404677 4.357419 1.282419 -3.433929 4.603750 1.277321 -3.613864 1.152273 1.288333 -3.653990 2.641347 1.294301 -3.678217 4.659720 1.293881 -3.707610 3.925975 1.287547 -4.035810 0.413429 1.282286 -4.097035 3.814292 1.285531 -4.305370 1.105278 1.294537 -0.921429 0.985979 1.306455 -1.746818 2.555955 1.303545 -2.151045 1.115771 1.298259 -2.344308 4.087231 1.289077 -2.447355 1.759669 1.298347 -2.488227 5.997608 1.312928 -3.434656 5.299246 1.305180 -3.690606 5.418636 1.301818 -3.729651 6.156483 1.308779 -4.085942 0.156957 1.311957 -4.302000 2.935000 1.303063 -0.874149 4.724149 1.310957 -1.140308 2.654954 1.322923 -1.158462 4.679670 1.307308 -1.363647 6.250294 1.314588 -1.479080 0.507701 1.307356 -2.175613 0.547301 1.319724 -2.563146 5.666067 1.301798 -2.599423 4.185577 1.317356 -2.975263 2.433474 1.301895 -3.529494 4.139747 1.301013 -3.999146 4.245244 1.299390 -4.021944 1.482847 1.312083 -4.049314 1.735490 1.310098 -4.312768 0.318839 1.322202 -4.317212 1.372035 1.321327 -0.900000 6.400000 1.290000 -1.450000 0.010000 1.301818 -1.448333 5.699333 1.312833 -1.615981 6.151646 1.328196 -1.787560 3.892337 1.327629 -1.834861 4.601181 1.316389 -2.498667 0.841778 1.308667 -2.710398 4.952898 1.336748 -3.132793 1.916170 1.335559 -3.219355 2.592396 1.323041 -3.231739 3.429435 1.328696 -3.358132 2.968901 1.317143 -3.658475 5.166949 1.324322 -4.039680 3.500581 1.331512 -4.086304 1.233986 1.319130 -4.324355 1.803710 1.317742 -0.867500 3.070938 1.316250 -0.869730 5.667622 1.331351 -1.158635 1.151683 1.343714 -1.179364 0.173410 1.328439 -1.409143 2.746571 1.319714 -1.656441 5.576356 1.323390 -1.825833 0.775000 1.324333 -1.826612 2.229752 1.329174 -2.137075 5.594318 1.341281 -2.324439 3.834081 1.333184 -2.389058 2.658768 1.331522 -2.581344 3.763226 1.330538 -2.739205 6.052159 1.325568 -2.992016 0.555806 1.322177 -3.192179 3.159615 1.341325 -3.249042 0.546518 1.337029 -3.381086 3.644434 1.339095 -3.740415 0.936062 1.337306 -3.865490 5.021863 1.322451 -3.966364 6.395455 1.319091 -4.036400 4.614044 1.336978 -4.078589 0.665394 1.331992 -4.111341 2.253171 1.323537 -4.270000 6.400000 1.300000 -4.308716 5.305405 1.331757 -1.149106 0.854503 1.346126 -1.357895 2.238421 1.338421 -1.396420 3.588210 1.338827 -2.164020 6.189122 1.355898 -2.200957 2.485826 1.345391 -2.279438 0.237871 1.343373 -2.307586 4.560575 1.339483 -2.727000 0.913500 1.330000 -2.768797 3.956015 1.360301 -3.605538 2.901474 1.340518 -3.644286 4.914945 1.339451 -3.824559 0.695441 1.336912 -3.845833 2.806042 1.336667 -4.315200 4.261920 1.333520 -4.313750 5.044728 1.345707 -1.156528 6.096424 1.360000 -1.377477 4.066495 1.353925 -1.384706 0.975588 1.348088 -1.704571 4.378619 1.349333 -1.839889 6.030667 1.346667 -1.875227 4.927879 1.359318 -2.084819 2.243261 1.363080 -2.126173 1.371296 1.352531 -2.157342 3.651266 1.348987 -2.344268 5.771715 1.358410 -2.730000 3.340859 1.358591 -3.060522 3.692450 1.351044 -3.376984 1.788492 1.352738 -3.457834 3.898344 1.351529 -3.738717 0.450831 1.363302 -4.078687 5.148485 1.344545 -1.084583 0.408542 1.355729 -1.135497 3.637016 1.362356 -1.244487 1.955513 1.356282 -1.335696 1.603882 1.357637 -1.457939 5.945420 1.357939 -1.729015 1.359091 1.355985 -2.135015 4.216481 1.369120 -2.758523 1.415485 1.362700 -2.837645 5.802258 1.369613 -2.848545 3.035818 1.347636 -3.036848 5.651630 1.350652 -3.181591 4.399091 1.350227 -3.281456 4.145890 1.374919 -3.404486 2.420841 1.353551 -3.630000 4.404839 1.357419 -3.655556 5.664222 1.364000 -3.775558 0.175012 1.373753 -4.091207 2.804310 1.351552 -4.326549 5.560070 1.359155 -4.344778 0.665167 1.365167 -4.351406 2.237656 1.355156 -0.847818 1.228242 1.374000 -1.377763 2.996484 1.374338 -1.582590 2.116595 1.384269 -1.657879 2.796364 1.372828 -1.713889 0.433278 1.368389 -1.790446 3.553705 1.371473 -2.046124 0.109018 1.380233 -2.233437 5.276000 1.382000 -2.444154 4.926410 1.377436 -2.470517 3.368793 1.369598 -2.526916 1.529626 1.364579 -2.719306 2.353889 1.357500 -2.864492 1.898984 1.373743 -3.023582 4.027575 1.376157 -3.129722 4.659361 1.374972 -3.221282 1.051795 1.365641 -3.384872 5.723077 1.368718 -3.420748 5.985596 1.384709 -3.673100 1.740900 1.373100 -4.360917 0.051835 1.370000 -4.350606 3.778182 1.360606 -0.841000 2.608438 1.384438 -1.089630 2.986173 1.381687 -1.382932 0.724060 1.384286 -1.729583 1.895000 1.371111 -2.225150 1.873593 1.404012 -2.793818 4.511818 1.376182 -2.949115 0.122478 1.378496 -2.984740 6.023149 1.389513 -3.059641 6.287541 1.392238 -3.078446 2.930052 1.390104 -3.112981 0.775321 1.388226 -3.717143 6.391905 1.369048 -3.883071 3.700357 1.380857 -4.346309 3.184497 1.387349 -0.844133 0.483265 1.391173 -0.826000 3.870621 1.392828 -0.829286 4.488714 1.385857 -0.963611 2.389583 1.383472 -1.056606 5.241946 1.400317 -1.082564 3.890000 1.391731 -1.098129 4.437419 1.386516 -1.689801 5.830618 1.404967 -1.883774 5.639057 1.388962 -2.108968 0.797460 1.391706 -2.400566 6.292925 1.387453 -2.430973 2.912324 1.389189 -2.505862 0.143218 1.382874 -2.859053 2.783158 1.394105 -3.071224 5.173017 1.446753 -3.783445 2.159328 1.382773 -3.870891 4.432772 1.390000 -3.878529 5.775735 1.380588 -4.089015 5.650099 1.388670 -4.084909 5.392000 1.384182 -2.000500 2.634500 1.398500 -2.046866 4.727604 1.420346 -2.671796 0.564012 1.394910 -2.970301 4.954060 1.406466 -3.005614 1.461754 1.395614 -3.035809 1.207794 1.404118 -3.376698 0.763396 1.396604 -3.576977 1.961860 1.387442 -3.569504 3.149917 1.404628 -3.673413 5.915449 1.399940 -3.870000 5.277450 1.405839 -4.095899 4.862158 1.396619 -4.097667 3.068128 1.415026 -4.357117 4.510541 1.399369 -4.366977 2.510930 1.392326 -1.050526 1.380526 1.401447 -1.415051 3.335354 1.412475 -1.606606 3.723761 1.403303 -2.205000 6.400000 1.385000 -2.629545 2.674697 1.398333 -2.860000 1.641778 1.399333 -2.962241 3.241207 1.400000 -3.167941 5.842059 1.399265 -3.519714 3.419643 1.407786 -3.533788 0.053515 1.418703 -3.630476 3.667937 1.396032 -3.819254 3.074319 1.424859 -4.123897 2.549632 1.410221 -4.292117 5.823396 1.424528 -0.807556 2.212000 1.411778 -0.807763 5.174474 1.414079 -0.806409 5.432873 1.429282 -1.053097 4.886940 1.424291 -1.752398 5.149240 1.418363 -1.986961 5.359510 1.421029 -2.396250 0.447955 1.410795 -2.723195 5.304436 1.427594 -2.775779 1.144805 1.427955 -3.137885 1.655962 1.408269 -3.198026 2.169828 1.417854 -3.242581 1.373024 1.420282 -3.498679 0.534528 1.409811 -3.507470 0.969398 1.416506 -3.512042 6.241300 1.429443 -3.774858 3.461862 1.427085 -4.392708 0.914792 1.413333 -0.812923 1.482974 1.434308 -1.375444 4.365000 1.424889 -1.700197 3.048816 1.430724 -1.931885 0.573977 1.443977 -1.926968 1.515968 1.439258 -2.224978 3.416211 1.438326 -2.307626 0.958131 1.435455 -2.523114 4.662216 1.430120 -2.663684 6.390921 1.426053 -2.855479 0.735205 1.425548 -2.959091 0.970000 1.428030 -3.498934 1.561726 1.427005 -3.524577 2.209055 1.433532 -3.918663 3.961089 1.446386 -4.373262 3.455638 1.436099 -4.393878 2.010408 1.422857 -1.062055 2.156043 1.455368 -1.307524 5.321768 1.452958 -1.386154 3.824038 1.432500 -1.624685 0.671958 1.432448 -1.634444 4.911111 1.439753 -1.668833 1.595667 1.442722 -2.214474 5.017456 1.442018 -2.365397 5.518254 1.429524 -2.396709 3.608354 1.435570 -2.709792 2.116458 1.431250 -2.854478 0.395970 1.436567 -2.959224 4.347328 1.434310 -3.850247 1.293333 1.440988 -3.896721 6.014262 1.439672 -4.135205 6.029452 1.426164 -0.794451 4.920751 1.450751 -0.789545 1.963636 1.440000 -1.046000 5.488667 1.436000 -1.315153 0.374133 1.448316 -1.612015 4.608408 1.459204 -1.920444 0.949111 1.444667 -2.020000 3.986737 1.446316 -2.355709 0.699459 1.461047 -3.291993 0.155559 1.453706 -3.448842 4.791053 1.451526 -3.453307 5.074213 1.457387 -3.844691 4.802438 1.462346 -3.934620 1.057468 1.457911 -4.132540 4.398254 1.443810 -4.141161 0.895488 1.462665 -4.158165 1.917982 1.447431 -4.375161 6.080000 1.456129 -1.034009 1.632026 1.470881 -1.083352 5.739066 1.458791 -1.664194 2.363963 1.464885 -2.076054 4.456667 1.459660 -2.276301 2.104384 1.455068 -2.521081 3.985135 1.461351 -2.546716 1.290235 1.474604 -2.565544 3.128601 1.457358 -2.647702 1.761925 1.454783 -3.105244 0.339553 1.459268 -3.228527 4.922558 1.463721 -3.413919 1.191757 1.454865 -3.483619 5.517143 1.458571 -3.712296 4.118667 1.458741 -3.758879 1.526034 1.457845 -3.860100 5.536567 1.466667 -4.220435 1.632609 1.455109 -4.403351 2.752577 1.467268 -1.041712 4.145582 1.475479 -1.184957 2.443043 1.467478 -1.361250 4.864231 1.471731 -1.560867 4.207052 1.472543 -1.602414 0.100172 1.457586 -1.686452 0.903226 1.455484 -1.931212 3.245051 1.467172 -1.963409 3.736439 1.477652 -2.078350 0.353786 1.463786 -2.173713 1.621435 1.477848 -2.182375 5.938294 1.482074 -2.421783 4.377984 1.470698 -2.500455 2.231250 1.460795 -2.630492 3.550492 1.456393 -2.714774 5.567806 1.473613 -2.817516 4.755294 1.474444 -3.167261 5.474331 1.479904 -3.209437 6.098451 1.470423 -3.900410 1.866803 1.477336 -0.772708 2.837708 1.470208 -0.780220 4.257665 1.493901 -0.772667 6.136833 1.470833 -0.865840 3.540720 1.475040 -1.062985 0.631306 1.481903 -1.492881 1.762203 1.472373 -1.652105 5.376374 1.478187 -1.904151 4.266038 1.464717 -1.925045 1.778198 1.473784 -1.985544 1.196361 1.489592 -2.034770 2.011925 1.486109 -2.497372 1.972244 1.495160 -2.593307 6.172996 1.489416 -2.822593 2.544815 1.478272 -2.914925 3.488910 1.487744 -3.481295 2.622302 1.481295 -3.623568 0.749296 1.491044 -3.604557 1.332911 1.476456 -3.963407 3.290296 1.473704 -4.119423 4.120962 1.472692 -4.135503 6.272011 1.482328 -4.182327 0.486449 1.495163 -4.392415 4.811220 1.490707 -0.767037 5.896852 1.480370 -0.975932 0.052091 1.497338 -1.040000 1.890213 1.481915 -1.237054 3.171550 1.490388 -1.371509 0.128679 1.479623 -1.456471 5.527206 1.477941 -1.493114 5.120830 1.493806 -1.831138 0.017886 1.494797 -1.922759 2.860172 1.494741 -1.937105 2.412105 1.487105 -2.207647 2.737843 1.476078 -2.294492 1.213136 1.483390 -2.598608 0.341772 1.482025 -2.603097 5.828344 1.500903 -3.143769 2.414154 1.492846 -3.226022 3.914624 1.488065 -3.285193 2.796941 1.497969 -3.961523 2.361695 1.501351 -4.001818 2.099697 1.479848 -4.184000 3.654000 1.476286 -0.770244 0.706707 1.495976 -0.990336 3.218403 1.499412 -0.993832 6.247665 1.503293 -1.415000 1.205313 1.499375 -1.515524 6.316643 1.498112 -1.674980 3.305451 1.502941 -1.717576 1.147172 1.490202 -1.757295 6.291475 1.497705 -1.935255 5.856861 1.493212 -1.987935 6.378261 1.505109 -2.296000 4.758370 1.498667 -2.488413 2.489087 1.501827 -2.530078 5.140625 1.505000 -2.675082 4.338525 1.497541 -2.830833 6.246083 1.504083 -3.579063 0.300625 1.499844 -3.731556 2.497111 1.496667 -3.978500 0.305000 1.493625 -4.426387 1.191355 1.500129 -0.769730 1.730721 1.503784 -0.759173 3.309774 1.512105 -0.758119 6.386139 1.507723 -0.991527 4.633969 1.512824 -1.001000 2.774800 1.495400 -1.582949 3.949615 1.505128 -1.989300 5.113457 1.518889 -2.313013 3.179289 1.513598 -2.661130 2.895391 1.521609 -2.910377 2.314528 1.511887 -3.284897 6.349259 1.506296 -3.366479 2.000845 1.508662 -3.474921 4.530632 1.522079 -3.470196 4.262941 1.501373 -3.883431 6.274891 1.514453 -4.144576 1.386949 1.506610 -4.198478 3.895435 1.498043 -4.390608 6.356225 1.516852 -0.768269 0.270577 1.505769 -0.763622 1.015748 1.516378 -1.139143 3.428143 1.524821 -1.220058 5.075706 1.532680 -1.347322 4.607596 1.536393 -2.274233 4.040476 1.520106 -2.569324 1.014865 1.517838 -2.603963 0.764756 1.527500 -2.841714 4.150143 1.520000 -2.869740 3.757584 1.525651 -3.051639 2.662941 1.521050 -3.640380 5.323919 1.534133 -3.691373 1.102892 1.532647 -3.928506 0.569545 1.535227 -0.748310 4.680000 1.524648 -0.987244 5.990787 1.532441 -1.248358 1.777015 1.526567 -1.550845 0.325070 1.529789 -1.802545 4.053636 1.523091 -1.980920 6.115690 1.547070 -3.099281 0.020327 1.538497 -3.361878 3.238619 1.531271 -3.649297 3.878486 1.533514 -3.695610 2.750854 1.524878 -3.984727 1.617030 1.533030 -4.438533 1.461400 1.540900 -4.442609 1.734783 1.529891 -4.444211 0.239240 1.549357 -0.756059 2.420402 1.549812 -1.260738 6.266510 1.540940 -1.798763 0.263746 1.544089 -1.797333 2.091444 1.530333 -1.984824 3.488176 1.538765 -2.253588 0.060463 1.546250 -2.421066 1.682377 1.533607 -2.985594 2.067548 1.545441 -3.737570 4.579065 1.535140 -3.869872 0.828590 1.540128 -4.180617 1.144074 1.535926 -4.451597 0.504167 1.543403 -0.737656 5.659844 1.543594 -1.224308 5.936308 1.544154 -1.241796 1.002994 1.546347 -1.403705 1.987771 1.554940 -1.431962 5.774522 1.561411 -1.531302 3.529438 1.560947 -1.564082 1.387347 1.535918 -1.631932 2.610386 1.552850 -1.707153 6.052847 1.548681 -1.820317 4.755926 1.553175 -2.288794 2.338227 1.551844 -2.355030 6.114970 1.548698 -2.738489 0.159568 1.545827 -3.347873 0.396284 1.563863 -3.918151 0.035210 1.549874 -4.044706 5.844444 1.553007 -4.192803 0.188662 1.543949 -4.197474 5.242784 1.554794 -4.203944 4.642394 1.537887 -4.235577 2.139038 1.544423 -4.434722 3.936875 1.551806 -4.442787 4.327213 1.538197 -4.448652 3.676067 1.554607 -4.456964 2.344643 1.543750 -0.800000 3.062791 1.545116 -1.004716 1.106114 1.558777 -1.242222 2.874444 1.548889 -1.400196 2.692745 1.550196 -1.424984 2.437210 1.568464 -1.838259 4.488905 1.562587 -2.161698 2.972013 1.563585 -2.174203 5.455362 1.550435 -2.341538 1.445192 1.546154 -2.783852 6.011475 1.558934 -2.923148 5.443148 1.560926 -3.123909 3.354682 1.560045 -3.330597 3.504080 1.560995 -3.367290 5.315576 1.562679 -3.473529 2.971123 1.564278 -3.696269 5.047388 1.557985 -3.700952 6.109841 1.555238 -3.955831 5.078563 1.565887 -4.439916 5.322185 1.551597 -1.234712 5.573077 1.561731 -1.286710 3.651042 1.580684 -1.440571 6.075285 1.583052 -1.447722 0.553544 1.575612 -1.475618 3.141011 1.561124 -1.525000 2.897000 1.553667 -2.601826 4.864348 1.564261 -2.767320 5.070261 1.569216 -2.933440 4.550960 1.574240 -2.993046 0.540152 1.576701 -3.010172 1.798190 1.572543 -3.113846 4.181538 1.563462 -3.271791 0.905075 1.559851 -3.416989 3.758817 1.576559 -3.514000 5.818105 1.567316 -3.519744 1.801744 1.570564 -3.936667 2.870000 1.559216 -3.945766 2.617297 1.574595 -4.224419 2.381628 1.556512 -4.403148 2.995185 1.554630 -4.447183 5.065211 1.560282 -4.475577 0.759423 1.565000 -0.962102 5.076752 1.577261 -1.281275 2.216765 1.574314 -1.308767 4.160308 1.588062 -1.654043 5.636330 1.585213 -2.160443 0.566650 1.584926 -2.451379 2.732759 1.562586 -2.655973 1.533122 1.585204 -3.243027 0.650412 1.593995 -3.297971 1.596087 1.575072 -3.438551 4.027056 1.582991 -4.187818 2.875591 1.580273 -4.190299 5.512989 1.591413 -4.203366 4.981188 1.575347 -4.430524 5.647640 1.583708 -0.728545 3.729552 1.599179 -0.721798 3.993933 1.583596 -0.986327 2.538878 1.587143 -1.165962 0.215625 1.601851 -1.192875 1.284292 1.594875 -1.493164 0.978418 1.590791 -1.850159 5.494762 1.576190 -2.130696 2.535886 1.589747 -2.197714 3.627238 1.583905 -2.269738 5.681937 1.589372 -2.371268 3.810352 1.590211 -2.617372 3.772993 1.592190 -2.892852 3.012814 1.602281 -3.041767 4.790964 1.592450 -3.071364 5.695682 1.590000 -3.155168 3.080638 1.599195 -3.160909 3.696364 1.589636 -3.207455 1.157182 1.588091 -3.345200 2.304480 1.585920 -3.748878 5.743061 1.580510 -3.981260 4.541732 1.585984 -0.726214 1.294612 1.599854 -0.736584 0.035018 1.605089 -1.253784 1.530270 1.590405 -2.025625 5.647344 1.587031 -2.273548 4.529785 1.599140 -2.423152 5.356957 1.605109 -2.584795 3.358493 1.593973 -2.752480 1.945984 1.607402 -2.791207 0.925000 1.586034 -2.815650 3.271073 1.601243 -2.821694 1.340000 1.600242 -3.181145 4.427786 1.596794 -3.261724 4.668736 1.594368 -3.322450 5.647050 1.601750 -3.694539 4.328628 1.617157 -4.021296 3.506605 1.597284 -4.197219 3.269821 1.608724 -0.974479 0.400888 1.611853 -0.983810 4.371905 1.600000 -1.012857 0.844082 1.601224 -1.646993 1.907692 1.604336 -1.846406 0.763488 1.616335 -2.102105 1.405789 1.608852 -2.200965 6.301667 1.609693 -2.506053 5.606263 1.616474 -2.681911 4.584311 1.612222 -3.024609 6.152344 1.610000 -3.276097 5.907000 1.619774 -3.713101 2.263178 1.601705 -3.775961 3.660471 1.618667 -3.918159 4.169683 1.622857 -4.010230 3.770000 1.598851 -4.358293 0.015000 1.620488 -4.472182 4.581455 1.608545 -0.696613 5.090968 1.615000 -0.719866 0.493795 1.627679 -1.017292 3.683538 1.631046 -1.215000 4.397639 1.608194 -1.709596 0.518051 1.627243 -1.778246 4.996579 1.622982 -2.071391 2.232522 1.617913 -2.090305 4.899329 1.623049 -2.449971 6.348657 1.625714 -2.472749 0.193743 1.620877 -2.505934 4.187552 1.627676 -2.691379 2.382512 1.625714 -2.941346 1.552308 1.608846 -3.069811 1.354717 1.606981 -3.583735 2.046867 1.616145 -3.689470 0.110227 1.616364 -3.710000 6.398889 1.607778 -3.973333 5.365859 1.624293 -1.105986 5.352552 1.646334 -1.166204 4.774745 1.632263 -1.339167 0.780648 1.626944 -1.537314 2.208400 1.636057 -1.595452 4.405452 1.640268 -1.887895 2.622836 1.637778 -2.038412 0.179588 1.636765 -2.121786 1.820595 1.627024 -2.192567 0.834358 1.645012 -2.221387 5.193090 1.644307 -2.376127 4.966861 1.642658 -2.503281 0.501797 1.632188 -2.829292 5.775487 1.635708 -2.944620 1.120163 1.629837 -2.986806 3.976806 1.639660 -3.641019 4.799962 1.634264 -3.780306 0.376735 1.636871 -4.248761 2.619381 1.628230 -4.250000 0.701935 1.619032 -4.462857 5.905357 1.628316 -4.477893 3.232587 1.642053 -4.493467 2.113733 1.627467 -0.706134 2.170672 1.636050 -0.702661 2.665000 1.633952 -0.838036 5.289286 1.639643 -0.915652 5.523913 1.634348 -1.034953 2.982978 1.645235 -1.537404 4.792979 1.640128 -2.252240 4.274536 1.639508 -2.256756 0.331073 1.657415 -2.433750 2.984295 1.644103 -2.739123 0.456316 1.632281 -2.927964 0.287725 1.653593 -3.030484 0.797419 1.628226 -3.288969 2.568041 1.631753 -3.481951 6.053537 1.631707 -3.580914 3.487665 1.646802 -3.761316 1.715833 1.640746 -3.770975 3.306441 1.640254 -4.039739 4.786903 1.655970 -4.233115 5.989180 1.634590 -4.297778 4.160741 1.625185 -4.322048 1.933810 1.649143 -4.492160 2.572960 1.637360 -0.695914 4.468657 1.664029 -0.915476 2.030714 1.643452 -1.113953 3.943446 1.653176 -1.774355 1.486129 1.641129 -1.943632 3.071667 1.657265 -2.059400 4.116000 1.642800 -2.113106 3.290429 1.658359 -2.121168 3.866332 1.660326 -2.831393 2.737214 1.657183 -3.252421 1.824105 1.649368 -3.460317 1.049683 1.653571 -3.564028 0.542678 1.664431 -3.727297 2.967946 1.649243 -4.330256 0.937821 1.642179 -0.691250 1.912813 1.653594 -0.910055 4.826565 1.673740 -0.922410 5.780103 1.658821 -0.964932 2.293741 1.671837 -1.358267 3.349318 1.671136 -1.368904 3.922466 1.659041 -1.524912 1.588772 1.650000 -1.778817 5.249785 1.651398 -2.692378 4.008841 1.664634 -2.998027 5.035646 1.663061 -3.251611 5.099667 1.660556 -3.834559 2.046863 1.660882 -4.024505 6.116264 1.656209 -4.263784 3.521622 1.654865 -1.813393 2.298036 1.657500 -1.853136 3.861124 1.669586 -1.955000 0.435336 1.675268 -2.044195 4.621268 1.681512 -2.464138 3.579496 1.686021 -2.598293 2.139634 1.666829 -2.807923 0.693865 1.678406 -3.087521 5.287355 1.665785 -3.308256 1.367326 1.669186 -3.442282 0.176913 1.666107 -3.545322 2.446271 1.680271 -3.845761 5.948152 1.664457 -3.973889 3.106190 1.676270 -4.239911 4.419710 1.681071 -0.672903 6.231613 1.673226 -0.952544 1.772403 1.690318 -1.508011 5.303441 1.680054 -1.589954 0.752857 1.678433 -1.737854 2.847098 1.692122 -1.797099 4.243704 1.685185 -2.019873 4.352785 1.684051 -2.375893 1.028997 1.690502 -2.468286 4.693143 1.673714 -2.662185 5.278403 1.690868 -2.739500 3.557639 1.687333 -3.182638 0.219049 1.688466 -3.496163 6.324070 1.694462 -3.515096 1.504327 1.672788 -3.631197 5.548547 1.672564 -3.954221 5.647662 1.681688 -3.970862 1.375862 1.665690 -4.235410 1.535246 1.676885 -4.485430 6.163620 1.680995 -0.686071 0.840119 1.682024 -0.682757 3.481243 1.694919 -0.934254 3.414420 1.689779 -1.194069 2.670414 1.685724 -1.207066 0.548430 1.691322 -1.576944 1.200000 1.680833 -1.593934 3.782960 1.704357 -1.689830 3.113182 1.684773 -1.727073 0.987805 1.676341 -1.757381 3.561190 1.697619 -1.892667 1.915048 1.695302 -1.978451 0.984965 1.698204 -2.353333 1.861481 1.679074 -2.574662 6.012180 1.701429 -2.659870 3.091948 1.689351 -2.702273 1.141591 1.672727 -2.928421 2.488900 1.698708 -4.125302 1.761581 1.697953 -4.520167 2.826833 1.682333 -0.675414 5.480446 1.700382 -0.674226 5.847484 1.712452 -0.677565 2.916477 1.702953 -0.818763 1.516598 1.691031 -1.140895 6.109579 1.700105 -1.163425 1.948370 1.708204 -1.583333 0.147241 1.689655 -1.830334 1.239554 1.709136 -1.819859 5.782535 1.691690 -1.851429 3.317792 1.696818 -2.007812 5.350443 1.715568 -2.170545 1.175818 1.694000 -2.589126 1.769417 1.695825 -2.971289 4.333822 1.705600 -3.072556 2.850224 1.705426 -3.236045 2.099364 1.704273 -3.266602 6.162492 1.703625 -3.321994 4.233826 1.708296 -3.458267 4.963600 1.691733 -3.548182 3.184318 1.701023 -3.669038 0.913269 1.686346 -3.665476 4.069762 1.710179 -3.750217 1.464130 1.695217 -4.248958 6.224792 1.695521 -4.516889 4.130444 1.693333 -0.928231 0.640615 1.705308 -0.962101 1.308986 1.710000 -1.127143 3.246032 1.702222 -1.284556 3.054497 1.714911 -1.372308 0.345144 1.713365 -1.969246 1.634295 1.716328 -2.064439 5.896257 1.706791 -2.326026 5.913675 1.708377 -2.354870 2.114348 1.702957 -2.430735 0.725588 1.701471 -2.481136 4.439205 1.710852 -2.603632 2.607164 1.717313 -2.683644 6.264810 1.719096 -2.808866 4.839446 1.724106 -3.531286 2.711857 1.709571 -3.599438 1.265542 1.721888 -3.873981 1.131165 1.707864 -4.017748 0.193576 1.718742 -4.027791 0.735465 1.706279 -4.085203 0.993446 1.706014 -4.087789 2.026131 1.709196 -4.090513 3.984359 1.707487 -4.219310 5.750739 1.712660 -4.282021 3.802766 1.700851 -4.295229 0.383119 1.705688 -4.306798 1.292895 1.714868 -4.515061 3.494268 1.712195 -0.658387 4.793548 1.715968 -1.198252 2.410699 1.717063 -1.341818 4.926364 1.705682 -1.431375 5.558768 1.730516 -1.553537 4.138830 1.736056 -2.265521 2.793542 1.708958 -2.351506 2.552108 1.719699 -2.369351 3.326703 1.721081 -2.437557 1.286989 1.717443 -2.755130 5.537642 1.733782 -3.033690 5.921310 1.724310 -3.039137 2.261223 1.719640 -3.447565 0.784555 1.730628 -3.774957 0.692051 1.719829 -4.512482 4.854184 1.720426 -4.536667 1.127576 1.710606 -0.667147 4.199679 1.741410 -0.939191 0.163003 1.745796 -1.056800 6.360750 1.730650 -1.407143 1.382786 1.732464 -1.535682 6.386477 1.724318 -1.597251 5.920584 1.736495 -1.627419 2.428226 1.721774 -1.766871 6.371224 1.726327 -2.026434 2.835035 1.733916 -2.227391 1.614720 1.733851 -3.249157 3.885542 1.725060 -3.792339 5.215088 1.724737 -3.845244 3.899756 1.722317 -4.051800 0.444600 1.722400 -0.670085 0.260085 1.735043 -0.929215 4.564660 1.751675 -0.957786 2.745496 1.734962 -1.097273 4.206676 1.752159 -1.350000 1.127250 1.726250 -1.357246 0.086087 1.731304 -1.460235 1.806235 1.735176 -1.558051 5.050636 1.745466 -1.707887 4.624227 1.744072 -1.723529 1.708382 1.730735 -1.989700 6.284500 1.741100 -2.469211 2.334211 1.729868 -2.730625 4.255208 1.731563 -2.904379 0.040339 1.751977 -3.810997 2.460587 1.748915 -3.947943 6.373698 1.756901 -3.957391 2.250725 1.733768 -4.538054 1.628725 1.744430 -0.661928 1.088373 1.748855 -0.876766 6.063027 1.756439 -1.293458 6.385981 1.751121 -1.605000 3.362813 1.743750 -1.848566 6.026846 1.760108 -1.999664 3.640839 1.760101 -2.251781 4.764658 1.742740 -2.459710 1.542319 1.744203 -2.607610 0.900467 1.760852 -2.638116 0.046014 1.764638 -2.832222 1.732857 1.735079 -2.973258 3.665955 1.740449 -3.130698 0.989369 1.760897 -3.164359 5.508462 1.737821 -3.244433 4.859691 1.748969 -3.523662 5.214085 1.762934 -3.612949 4.550897 1.739872 -3.832077 4.666385 1.756000 -4.077617 2.472228 1.752124 -4.291404 5.109298 1.744211 -4.525140 5.471215 1.744953 -4.542299 0.387126 1.746207 -4.545935 0.108130 1.757317 -4.545273 0.889273 1.743091 -0.883966 4.066724 1.749310 -1.108300 4.985200 1.763650 -1.291156 5.175306 1.756735 -1.694590 5.451475 1.746393 -1.823007 0.114755 1.763881 -1.993542 2.418125 1.754792 -2.122870 2.035093 1.756111 -2.609321 5.021196 1.776984 -2.826739 2.138261 1.745217 -3.126612 1.634973 1.759180 -3.165041 3.513577 1.754797 -3.437705 4.712623 1.752787 -3.815400 4.952560 1.767680 -4.313649 5.354459 1.752973 -4.533721 3.800093 1.764605 -4.550495 1.371287 1.762673 -0.897813 3.169688 1.757344 -1.167071 3.509607 1.782250 -1.380000 4.332763 1.767763 -1.430849 2.850425 1.777028 -1.481852 2.600370 1.755926 -1.712796 2.086452 1.765054 -1.957789 5.092632 1.772526 -2.334559 3.987000 1.782971 -3.354138 4.487069 1.758276 -3.413290 5.467915 1.776059 -3.784074 2.734120 1.769259 -4.049540 2.760460 1.767816 -4.204961 2.250472 1.767638 -4.218242 3.051923 1.769121 -4.435158 0.632127 1.772262 -4.533979 4.380052 1.767958 -4.546462 1.912718 1.775436 -4.544689 2.331340 1.777703 -1.056332 1.543317 1.781005 -1.127021 1.042766 1.774043 -1.223600 4.580400 1.765800 -1.461413 4.586848 1.768370 -2.234722 3.087500 1.791493 -2.253333 5.431354 1.791736 -2.619775 2.859775 1.779213 -2.626923 5.758889 1.778291 -2.860619 6.095773 1.770619 -3.028152 1.967725 1.786540 -3.066245 4.607844 1.786989 -3.430299 1.945373 1.777164 -3.482381 2.203690 1.770476 -3.635591 5.935118 1.776772 -3.786878 6.164049 1.781073 -3.918333 4.389444 1.765741 -3.946087 1.591304 1.777304 -0.646410 3.164038 1.801987 -1.623657 6.173433 1.788955 -1.900724 4.831743 1.800080 -2.178360 6.118818 1.805326 -2.344363 0.047170 1.797170 -2.670833 1.362667 1.790333 -3.096691 0.440216 1.789065 -3.400719 3.615683 1.788417 -3.497626 3.887671 1.804589 -4.265859 4.850391 1.791406 -4.539952 5.109904 1.791483 -0.638440 5.242200 1.808360 -0.851122 5.053163 1.799082 -1.152404 0.784421 1.812552 -1.191529 5.631294 1.791882 -1.429020 3.581520 1.802804 -2.222167 2.328208 1.805042 -2.625152 0.310649 1.802900 -2.768042 3.802917 1.804833 -3.124835 3.264286 1.801648 -3.374620 3.348511 1.810274 -3.671913 1.902696 1.793304 -4.044250 5.909125 1.790625 -4.069301 5.005175 1.800699 -4.100303 3.656162 1.802929 -4.259716 0.151344 1.817261 -4.306178 2.806497 1.804140 -0.639834 3.909006 1.808785 -0.685412 2.476118 1.799412 -1.233151 3.767740 1.807055 -1.705125 0.334750 1.797125 -1.900301 5.572711 1.807470 -2.136870 5.669696 1.809261 -2.275625 3.716250 1.799167 -2.933679 3.426038 1.807453 -3.099167 4.140833 1.803472 -3.315025 2.807635 1.813645 -3.306162 3.085051 1.816061 -3.499698 5.719430 1.814262 -3.511980 1.708416 1.811188 -3.865299 3.494321 1.814891 -3.908630 1.850822 1.804247 -4.098278 4.229569 1.811292 -4.330000 2.471558 1.811558 -4.545000 5.724189 1.796622 -4.563585 3.034340 1.795849 -0.897862 0.868690 1.819448 -1.104310 5.875324 1.829014 -1.221237 2.179175 1.816082 -1.309111 1.621143 1.827810 -1.366310 5.795833 1.811190 -1.411324 2.334412 1.812794 -1.447577 2.053148 1.833983 -1.478288 3.172432 1.823063 -2.020404 0.727879 1.817980 -2.810392 4.498758 1.815163 -3.119536 2.618543 1.843422 -3.163333 0.010000 1.805000 -3.253840 2.342640 1.818480 -3.342589 0.512816 1.827443 -3.531172 2.949448 1.814690 -3.573375 0.329625 1.820438 -4.081818 1.223766 1.809221 -4.077013 4.582554 1.825455 -4.342857 4.618214 1.803214 -0.641742 1.628949 1.840150 -0.646178 0.634522 1.844650 -0.835368 6.311789 1.820947 -0.857317 3.614390 1.819268 -1.360428 6.050272 1.836654 -1.642979 1.385319 1.815319 -1.906335 4.059050 1.831131 -1.934486 2.175081 1.838541 -2.123121 2.621676 1.829422 -2.153662 0.499415 1.844923 -2.227568 1.370811 1.828378 -2.229691 4.450617 1.830062 -2.386491 5.698333 1.826140 -2.525803 1.968705 1.835181 -2.645839 0.572416 1.829396 -2.894848 1.262121 1.826212 -2.982651 5.654419 1.842302 -3.230519 5.752078 1.829913 -3.309177 1.176450 1.830823 -3.533577 4.335122 1.829756 -3.755714 5.721250 1.829464 -3.876006 0.906433 1.839878 -4.080000 5.257462 1.828231 -4.106087 3.393623 1.821449 -4.324221 4.021388 1.836856 -0.846293 0.417857 1.848333 -0.880267 4.326310 1.848930 -0.946172 3.842813 1.842266 -1.314286 4.097619 1.831905 -1.551087 0.957464 1.836159 -1.563429 0.522762 1.834857 -1.646162 5.680669 1.846655 -1.711392 2.629304 1.842278 -1.985111 1.404667 1.826889 -2.188706 3.472824 1.839118 -2.437050 6.187969 1.848621 -2.513032 3.800323 1.835226 -2.517931 5.473687 1.846393 -2.613920 3.374198 1.849599 -2.834133 1.018700 1.852867 -3.061975 6.222654 1.845247 -3.205280 0.748960 1.838800 -3.586787 0.061155 1.844260 -3.768364 3.136614 1.857000 -3.846652 5.437602 1.845701 -0.618938 6.064779 1.842212 -1.110329 0.356548 1.862027 -1.189344 2.862459 1.840000 -1.193067 1.269067 1.848533 -1.841073 4.431512 1.853902 -2.484199 3.140331 1.859282 -2.637258 4.679274 1.844677 -2.817318 3.199080 1.853870 -2.853511 0.439008 1.850916 -2.851061 5.124182 1.860242 -2.900266 1.521293 1.854905 -2.980833 0.643571 1.844762 -3.130679 1.375299 1.858451 -3.340513 1.535385 1.846154 -3.402414 5.960000 1.845862 -3.652201 3.660647 1.861748 -3.734896 2.221111 1.859028 -3.800183 0.221005 1.850000 -4.089070 5.514651 1.846667 -4.286825 1.075556 1.839206 -4.283770 0.810656 1.846066 -4.340451 1.776285 1.861701 -0.619115 2.105929 1.858584 -0.625698 0.043605 1.853953 -0.714203 1.317536 1.854638 -0.836517 1.934944 1.854382 -0.954328 5.622313 1.858358 -1.411066 0.735279 1.865736 -1.762482 0.817445 1.857518 -1.823356 0.569726 1.860137 -2.388480 4.245673 1.855731 -2.377813 5.109875 1.864250 -2.404938 0.550000 1.853951 -2.662500 1.605882 1.853382 -3.027500 3.047813 1.859479 -3.026415 4.876792 1.850189 -3.386989 2.559659 1.866080 -3.849830 0.500284 1.859205 -4.199762 0.585595 1.851905 -4.321822 3.276215 1.859766 -4.558580 5.997870 1.858580 -4.572113 4.615493 1.854789 -0.614651 3.656047 1.855581 -0.603939 5.650606 1.865758 -0.612682 4.608492 1.876592 -0.616131 4.981055 1.878593 -0.871656 2.946146 1.882325 -1.237967 5.396429 1.874341 -1.646351 4.842342 1.875360 -2.118047 4.210078 1.875742 -2.133211 0.220183 1.865229 -2.141865 4.942538 1.880734 -2.188727 0.971273 1.861455 -2.771845 2.339821 1.867976 -2.779231 1.933654 1.854231 -2.828517 5.869952 1.876890 -2.874884 4.040388 1.873760 -2.995111 5.387222 1.867556 -3.164277 4.378072 1.870783 -3.630617 3.372901 1.873765 -3.766393 4.243279 1.865246 -3.841224 1.319184 1.855306 -4.228097 6.053545 1.877239 -4.337525 5.581287 1.880248 -4.344611 2.064278 1.869222 -4.350441 3.622687 1.874053 -0.817277 2.277574 1.885248 -0.842570 5.390782 1.879441 -0.883333 1.131959 1.888866 -1.002857 2.442208 1.877143 -1.160650 0.080224 1.902623 -1.681488 5.243962 1.895744 -1.678667 3.957333 1.871778 -1.994531 3.218672 1.881328 -2.013190 1.164724 1.886748 -2.136034 1.811552 1.869828 -2.276061 0.746364 1.879596 -2.445789 4.826526 1.877474 -2.572905 1.143953 1.891588 -2.848247 2.879935 1.880455 -3.056256 3.854566 1.885753 -3.102500 5.107381 1.878690 -3.229880 5.312048 1.867470 -3.349754 0.109344 1.880656 -4.561316 6.395789 1.872895 -4.583798 2.565039 1.879845 -0.754257 2.706824 1.883649 -1.040356 5.210156 1.898022 -1.795131 3.740785 1.891257 -1.872618 2.973168 1.902147 -2.375671 0.298758 1.901443 -2.392806 1.739774 1.900935 -2.397760 2.894792 1.896250 -2.602667 4.106513 1.891231 -3.011782 0.226238 1.882772 -3.348776 5.062092 1.895663 -3.565660 6.147689 1.896085 -4.356725 1.485352 1.897852 -4.368551 5.845072 1.886957 -4.582350 3.265683 1.892186 -0.598883 6.326214 1.901165 -0.853804 5.845435 1.894891 -1.072824 4.722118 1.898529 -1.108393 1.770268 1.894286 -1.335000 4.760367 1.905932 -1.441757 3.893694 1.903559 -1.489929 0.221560 1.902128 -1.563444 1.616325 1.912715 -1.613636 2.980390 1.892857 -1.631085 0.023101 1.901008 -1.646772 1.879494 1.906519 -1.782105 1.064605 1.896316 -1.799063 2.379063 1.885938 -1.805405 1.545541 1.893919 -2.143532 5.217621 1.904498 -2.805277 2.613388 1.906710 -3.279637 1.791613 1.902661 -3.308992 4.049758 1.907702 -3.595976 4.998415 1.891707 -3.635037 4.739526 1.917606 -3.648061 0.801531 1.900000 -3.712469 1.111967 1.902259 -3.742698 1.692540 1.892857 -4.005149 6.171045 1.896493 -4.336339 4.292679 1.894196 -4.581236 4.015674 1.904213 -0.818778 4.757333 1.916000 -1.003008 2.109593 1.909756 -1.033366 3.333366 1.908020 -1.494497 1.212910 1.912593 -1.598904 4.431233 1.896986 -1.736772 3.234055 1.921299 -1.895109 3.456304 1.901630 -1.934252 5.808766 1.920945 -2.037414 3.860948 1.907069 -2.319167 1.164500 1.900667 -3.475545 0.986455 1.916636 -3.627189 1.466959 1.910829 -3.737796 6.373578 1.925687 -3.838714 5.958143 1.900429 -3.906202 2.913876 1.910620 -3.930261 4.063913 1.910957 -0.619701 0.894132 1.922934 -1.102599 3.081864 1.918136 -1.094952 4.445810 1.922000 -1.191317 6.231779 1.924164 -1.305691 2.536334 1.927203 -1.328830 0.494947 1.925426 -1.313681 0.971656 1.919264 -1.444816 6.284041 1.924122 -1.822197 6.223712 1.916136 -1.931591 0.352091 1.925909 -2.264385 6.365246 1.918689 -2.487353 5.909225 1.938102 -2.580691 6.379724 1.924608 -2.608087 4.368634 1.919235 -2.776284 0.769128 1.928349 -2.835910 6.328648 1.930295 -3.170375 6.014250 1.919000 -3.622787 5.517541 1.911967 -4.148733 6.375067 1.909667 -0.607845 3.400276 1.941188 -1.143065 3.965645 1.924032 -1.650435 3.521818 1.936522 -1.894806 1.801395 1.928915 -2.114975 4.675990 1.935939 -2.221935 5.882608 1.943817 -2.434364 4.559364 1.934636 -2.444000 2.197294 1.925882 -2.671799 6.103422 1.937670 -2.982667 1.759667 1.926250 -3.277480 4.658880 1.939240 -3.631765 2.522549 1.918431 -3.761321 4.496011 1.943558 -4.363033 6.259180 1.926393 -4.491238 5.317143 1.932667 -4.593481 2.118191 1.938840 -4.592968 2.821677 1.924645 -0.587750 4.353750 1.932500 -0.875672 1.701940 1.929701 -1.017064 0.594771 1.942615 -1.078911 2.672376 1.940099 -1.717011 4.207346 1.950754 -2.289366 1.996828 1.946082 -2.419091 0.940455 1.937879 -2.418067 3.526267 1.941733 -2.555841 2.470354 1.940442 -2.584231 5.235962 1.935577 -2.881471 4.706569 1.934706 -3.018433 2.388571 1.947465 -3.731520 3.908922 1.940931 -3.948571 2.596000 1.930571 -4.029376 0.329792 1.953222 -4.029186 0.052558 1.939186 -4.064748 3.169928 1.941871 -4.129091 1.916733 1.952614 -4.356326 0.370447 1.952236 -4.442838 1.236824 1.946284 -4.609423 1.064615 1.926346 -0.588276 2.952931 1.940000 -0.909754 0.021921 1.962660 -1.423832 5.248598 1.947944 -1.544714 5.465500 1.945357 -1.807324 5.023239 1.943662 -2.653214 3.619732 1.942411 -3.011233 0.856575 1.947671 -3.283732 6.235455 1.951148 -3.297656 3.778205 1.962784 -3.316973 2.139027 1.955081 -3.482636 6.385182 1.943727 -3.563961 4.107488 1.950097 -3.612580 0.546953 1.968010 -3.901389 3.722500 1.942593 -3.992083 0.694435 1.963512 -4.014368 2.152414 1.947586 -4.109179 3.876188 1.955660 -4.132675 1.633640 1.957807 -4.144792 5.756771 1.944375 -4.184151 2.634717 1.936981 -4.588851 3.529109 1.960517 -4.608621 0.565000 1.952069 -0.599724 1.865690 1.969414 -1.276845 5.027798 1.970516 -1.347785 3.016203 1.957278 -1.569012 2.454691 1.954691 -1.631862 2.211034 1.960897 -2.047892 1.602973 1.967784 -2.160577 2.835192 1.943846 -2.340818 2.647636 1.958364 -2.676269 2.130746 1.951642 -2.845319 4.286596 1.950638 -3.054428 1.125161 1.978270 -3.235781 0.310625 1.957656 -3.516241 3.162766 1.959291 -3.558919 2.064414 1.956937 -3.697763 5.255263 1.950526 -4.106194 0.952090 1.965858 -4.365345 5.015309 1.965855 -4.383235 3.015647 1.965000 -4.591244 4.877358 1.959171 -4.608263 0.274324 1.969846 -0.582742 2.327097 1.966452 -0.586609 4.106781 1.982103 -0.605129 0.398635 1.978007 -1.062565 3.661299 1.982305 -1.221848 1.986250 1.971033 -1.343731 4.488846 1.976962 -1.816048 1.309435 1.974355 -1.920575 5.339342 1.985068 -1.975764 0.926650 1.977931 -1.984815 6.057901 1.966914 -2.453108 1.362973 1.957973 -2.714261 4.879478 1.964522 -2.922346 2.111006 1.972291 -3.515600 1.251000 1.962400 -3.532716 2.745000 1.967840 -3.910978 5.125378 1.969956 -4.594306 5.538056 1.958056 -4.618571 0.818413 1.967778 -0.976269 4.129254 1.965970 -1.000636 1.354162 1.978902 -1.350761 5.618122 1.982284 -1.511677 2.706129 1.978581 -1.529780 5.866154 1.973626 -1.796995 4.662759 1.982906 -1.948786 0.096837 1.990863 -2.303762 3.282257 1.987053 -2.745242 5.613855 1.999758 -2.989757 3.602014 1.991319 -3.247722 5.540116 1.984015 -3.465618 2.341798 1.969663 -3.816589 2.000047 1.982757 -4.129800 1.379200 1.975600 -4.148162 2.900515 1.983971 -4.156206 2.382286 1.997186 -4.399610 2.281818 1.975325 -4.593484 1.729895 1.977317 -0.584767 5.428178 1.993566 -0.589474 1.141789 1.984316 -0.832141 3.188498 2.002268 -0.980847 4.947619 1.988783 -1.262727 3.278977 1.986364 -1.344229 1.410647 1.991592 -1.452771 4.245582 1.999880 -1.747565 5.989026 2.000617 -2.515016 0.101286 1.996945 -2.584270 2.741601 2.002633 -3.248976 3.507831 2.002048 -3.407965 0.733473 2.003650 -3.492736 4.529623 1.980472 -4.252364 5.348909 1.993273 -4.584740 0.019769 1.995376 -4.618125 1.462411 1.993929 -0.577636 2.573273 1.988727 -0.627368 5.862693 2.007926 -1.196559 4.228925 1.998387 -1.394943 0.021364 2.006648 -1.410984 1.815902 1.995164 -2.053976 2.439277 1.987229 -2.361309 5.326806 2.004764 -2.522373 0.713458 2.006305 -2.632372 1.802051 1.998654 -2.657153 3.004555 2.006619 -2.925741 6.073651 2.013307 -2.978488 4.488023 1.998023 -3.057667 2.820444 1.996778 -3.155298 0.566905 2.000774 -3.238784 0.939189 1.990676 -3.897073 2.363780 1.998171 -3.918272 5.634319 2.010930 -4.123545 4.842075 2.007032 -4.593560 6.203400 2.006480 -1.174200 2.322600 2.009200 -1.546163 4.647558 2.001047 -1.555833 5.043222 2.011778 -1.610522 0.687130 2.011043 -1.961404 2.693509 1.997544 -2.041250 6.298672 2.011797 -2.046462 4.439923 2.009000 -2.130658 2.191118 2.007829 -2.268945 5.579592 2.022926 -2.285214 1.526923 2.010342 -3.361429 4.290592 2.014321 -3.431004 5.352450 2.013414 -3.857138 4.864862 2.020069 -3.945433 1.157647 2.022768 -3.984836 4.348770 2.013852 -0.793333 3.738519 2.027619 -0.799692 5.170359 2.018462 -0.802037 4.507506 2.041304 -0.800884 6.062376 2.021768 -0.791084 0.227711 2.015060 -0.815826 0.741826 2.023957 -0.864505 3.472192 2.031892 -1.116316 1.101283 2.027566 -1.278189 5.882189 2.027887 -1.713185 0.223926 2.027506 -2.077531 3.628364 2.030370 -2.255063 3.823797 2.009747 -3.021623 3.330026 2.031597 -3.127602 1.958480 2.023743 -3.166277 1.588701 2.024762 -3.606283 5.935664 2.019292 -3.906634 1.498414 2.026926 -4.254737 4.538195 2.014286 -4.357500 3.831250 2.016750 -4.375567 0.657730 2.033156 -4.492848 4.443671 2.017722 -0.794806 1.491473 2.028062 -0.779167 5.640417 2.028229 -0.818386 2.508133 2.043544 -1.142615 1.556308 2.017231 -1.511642 3.304627 2.029403 -1.814223 2.045340 2.028592 -2.140963 3.076741 2.037370 -2.324270 2.406180 2.028989 -2.436410 3.972308 2.018462 -2.546941 0.455434 2.038950 -2.671716 3.900539 2.032647 -2.741711 0.308684 2.023947 -2.811584 5.326739 2.035870 -2.790000 3.440319 2.031170 -3.379000 2.953600 2.037486 -3.419017 4.856532 2.034682 -3.682273 2.950909 2.037098 -3.874332 3.313529 2.028877 -4.028720 3.519040 2.025440 -4.046115 5.967962 2.031975 -4.398168 0.943194 2.040209 -4.574088 5.787409 2.032336 -4.630323 2.358710 2.016774 -0.561169 4.797922 2.037922 -1.030769 0.855000 2.033077 -1.040110 5.438453 2.040110 -1.116615 5.681385 2.030154 -1.292611 0.273744 2.047734 -1.323064 3.551272 2.042717 -1.390851 2.210213 2.033511 -2.101905 1.350595 2.031548 -2.255849 0.083606 2.049371 -2.709200 1.416267 2.031067 -3.066550 6.373755 2.042751 -3.178140 4.930698 2.031473 -3.324522 1.379478 2.034000 -3.377322 5.756995 2.039945 -3.467260 1.626575 2.042466 -3.493317 0.236277 2.054033 -3.755904 0.051165 2.054940 -3.770923 2.707385 2.035077 -3.773524 6.145619 2.035048 -3.924381 1.772286 2.034000 -4.147148 4.135387 2.052218 -4.264583 3.445000 2.035000 -0.570000 1.378525 2.046721 -1.231121 0.703049 2.050269 -2.262292 4.332708 2.042917 -2.314286 6.101203 2.048647 -2.524220 1.575780 2.050000 -2.643492 0.955794 2.055992 -2.726216 4.554775 2.044234 -2.770989 1.175714 2.046044 -2.951274 1.362972 2.056085 -3.010172 5.816978 2.063440 -3.133100 4.169100 2.057500 -3.241429 2.459206 2.055952 -3.280400 2.703200 2.040200 -3.513308 3.523308 2.048462 -4.246790 0.026914 2.039136 -4.400794 2.517143 2.045714 -4.612660 3.795638 2.056277 -4.611813 5.123212 2.047772 -4.625170 3.061818 2.049318 -4.625298 4.221192 2.052318 -0.556833 5.155833 2.058333 -0.787362 6.321411 2.061166 -0.795714 3.984000 2.049429 -1.279182 2.768931 2.057547 -1.595463 1.401806 2.062685 -1.958232 4.855016 2.064695 -2.005167 5.580958 2.059417 -2.055240 1.947644 2.063750 -2.495191 4.980710 2.064426 -2.930285 4.971585 2.068943 -2.990435 0.390580 2.056812 -3.303876 3.247697 2.062416 -3.536868 3.790495 2.065275 -3.621657 1.837426 2.072130 -3.731875 0.341250 2.059271 -3.971595 4.621396 2.069202 -3.982186 5.365628 2.060283 -4.371243 2.770113 2.060339 -4.377596 4.761672 2.072648 -4.406168 6.012243 2.061589 -0.784043 2.049574 2.055532 -0.985799 1.905465 2.076171 -1.019766 5.918361 2.083396 -1.715368 2.839789 2.060421 -1.778278 2.541483 2.074163 -1.852908 0.718652 2.070142 -1.949181 4.135198 2.081299 -2.288604 0.483063 2.070225 -2.285183 4.821829 2.069939 -2.796049 0.555640 2.083515 -2.814655 1.637471 2.075000 -2.930000 3.290000 2.040000 -3.051017 5.253559 2.058136 -3.412813 6.068854 2.068333 -3.952549 6.355724 2.075054 -4.218827 1.171349 2.082639 -0.573353 3.168699 2.086705 -0.788315 4.237865 2.074270 -0.905652 2.771848 2.076630 -1.027333 0.233200 2.078200 -1.257079 3.807423 2.090550 -1.449377 6.077574 2.083082 -1.570000 4.035109 2.079891 -1.640215 6.242903 2.077204 -1.735085 5.735495 2.090717 -1.794983 3.912594 2.093481 -2.030605 0.536178 2.084936 -2.220339 4.084373 2.094271 -2.479274 3.731129 2.083468 -2.558621 4.723621 2.068793 -2.555447 3.237977 2.089027 -2.992606 5.526704 2.092205 -3.341887 1.132830 2.074906 -3.623694 5.688949 2.096667 -3.740606 1.300152 2.075606 -3.769837 3.553455 2.078659 -4.153537 5.126234 2.094453 -4.164444 6.188593 2.089407 -4.394919 1.922298 2.081815 -0.556320 6.102320 2.083200 -0.561314 3.617371 2.095771 -0.752105 4.927368 2.082281 -0.999333 6.202800 2.079467 -1.501767 0.915700 2.094333 -1.748140 1.677791 2.085465 -1.776667 0.468014 2.087660 -1.827143 6.388667 2.090476 -2.035360 3.362882 2.103343 -2.145714 0.775764 2.091527 -2.162061 1.120611 2.091221 -2.211169 1.748831 2.084286 -2.264348 5.085466 2.091801 -2.478853 4.217202 2.091743 -2.505514 2.022243 2.086075 -2.696595 5.867500 2.091897 -2.711333 5.095333 2.077333 -2.847944 1.895234 2.084673 -2.887076 3.120292 2.098421 -2.916125 0.151500 2.095500 -3.135962 3.048732 2.089624 -3.383502 0.480135 2.099697 -3.540936 5.127362 2.100681 -3.613944 4.327746 2.097218 -3.782905 0.942997 2.095719 -4.155364 0.519136 2.092091 -4.150759 5.555063 2.080253 -4.226458 2.131956 2.094207 -4.409004 4.077925 2.093402 -0.567415 1.635122 2.103415 -0.786949 1.247797 2.095085 -1.540741 2.017325 2.107695 -1.562960 3.770072 2.107509 -1.665532 1.155957 2.092234 -1.879114 2.294629 2.116057 -2.014615 5.112821 2.103590 -2.579267 5.425267 2.098800 -3.075113 4.702105 2.103985 -3.121088 2.208435 2.102109 -3.675556 2.364444 2.086296 -3.816040 4.178020 2.096634 -4.357733 1.653600 2.094400 -4.405106 3.237943 2.099078 -4.621818 4.653826 2.102273 -4.645965 1.235263 2.093158 -0.556133 2.102533 2.099867 -0.568761 0.176018 2.104867 -0.576637 0.655045 2.115646 -0.833603 0.994377 2.121448 -0.846966 0.461241 2.114483 -1.237619 5.288762 2.108048 -1.812065 4.431336 2.119717 -1.898190 3.142381 2.104952 -2.388089 3.035689 2.120578 -2.507339 5.682817 2.118941 -2.922638 3.840624 2.117554 -3.010101 2.598480 2.116453 -3.473810 2.545714 2.097381 -3.901585 0.499390 2.104146 -3.910709 3.065787 2.122756 -0.560725 2.787874 2.119130 -0.760946 2.965946 2.122905 -1.322464 4.056957 2.111739 -1.361250 1.139145 2.118224 -1.703944 5.388239 2.122324 -1.710353 4.871529 2.114235 -1.820206 3.626186 2.117629 -1.900886 1.126835 2.108228 -2.261901 4.569091 2.117769 -2.583000 2.281000 2.102750 -2.825153 2.377761 2.128098 -2.809674 4.093370 2.118804 -3.273712 5.156564 2.127178 -3.635755 3.316763 2.120144 -4.324330 5.761134 2.124089 -4.411787 5.503992 2.131103 -4.649231 1.927885 2.111346 -0.551966 3.885674 2.129719 -0.555569 4.557294 2.138275 -0.546667 5.645580 2.133986 -0.810897 5.401410 2.122949 -0.955714 4.711579 2.124962 -0.997411 3.872946 2.129955 -1.108868 3.441698 2.113019 -1.145826 0.467982 2.131101 -1.152000 4.565286 2.130571 -1.202430 4.822077 2.138063 -1.203784 1.767432 2.120000 -1.456165 4.840226 2.125789 -1.490000 2.903231 2.124000 -1.647093 3.108789 2.138443 -1.776316 3.384211 2.115263 -2.163846 2.611905 2.136190 -2.405021 1.196008 2.134856 -2.684924 6.281667 2.138485 -2.839808 2.870577 2.125577 -3.139823 6.151947 2.129558 -3.196327 4.462836 2.135200 -3.573822 6.255096 2.125987 -3.656811 5.418993 2.147458 -3.825586 5.871650 2.142485 -3.989574 2.774255 2.128617 -4.610000 6.400000 2.115000 -4.651935 2.584839 2.114839 -0.750847 2.276780 2.130339 -1.007343 4.362841 2.146679 -1.054857 3.197048 2.143905 -1.093226 2.130645 2.136290 -1.148511 2.539198 2.146870 -1.397500 1.610972 2.134028 -1.478368 0.429540 2.142887 -1.956739 2.887826 2.131522 -2.071818 5.810341 2.136591 -2.118529 0.291912 2.147831 -2.135816 5.366667 2.136099 -3.140367 0.771193 2.137706 -3.162515 0.126140 2.140058 -3.230968 5.925242 2.142339 -4.174286 3.687143 2.124762 -4.206526 3.093368 2.134211 -4.210357 0.256339 2.136250 -4.407500 3.617000 2.134500 -4.395308 5.213077 2.141615 -4.415162 1.400767 2.152507 -4.631796 5.370299 2.138623 -4.638768 3.329668 2.144739 -0.725769 0.011538 2.143077 -1.189904 2.992596 2.145673 -1.205313 6.091875 2.146250 -1.552146 4.443765 2.151619 -1.863077 6.165275 2.147363 -1.881498 1.473921 2.161145 -2.058674 3.878934 2.163343 -2.267667 3.493250 2.141083 -2.409433 0.275709 2.160324 -2.538093 6.067034 2.156907 -2.706038 4.323585 2.157673 -3.175084 3.926034 2.150838 -3.402000 1.999533 2.150733 -3.403823 4.059932 2.162765 -3.543250 1.409500 2.137750 -3.603115 1.115246 2.137213 -3.640714 4.899524 2.137857 -3.728028 4.658451 2.148451 -3.949091 3.960663 2.165430 -4.095529 3.311294 2.147882 -4.170077 0.777846 2.144538 -0.547103 4.291121 2.163364 -0.763068 1.798125 2.163693 -0.964842 1.645579 2.158947 -0.982316 2.344737 2.153789 -1.188416 6.354505 2.152871 -1.390000 2.435596 2.156943 -1.757308 0.930000 2.168974 -1.762865 5.124568 2.176432 -2.336484 2.193077 2.157637 -2.364068 5.890085 2.159237 -2.873426 0.814143 2.165857 -3.288095 1.775000 2.155833 -3.701152 1.596848 2.158121 -3.820602 2.187349 2.154096 -3.974979 0.170083 2.162075 -3.999014 2.018310 2.161690 -4.458750 0.176977 2.166570 -4.635104 6.004583 2.155313 -0.539452 6.359726 2.162123 -1.111912 5.080735 2.161618 -1.173802 1.315950 2.159421 -1.426538 6.361394 2.163221 -1.493750 0.172880 2.178315 -1.499512 5.719878 2.158780 -1.540522 3.511381 2.185075 -2.233846 6.302010 2.184293 -2.325909 0.944848 2.178636 -2.443762 1.780396 2.166733 -2.510236 4.498850 2.179027 -2.555161 3.489677 2.168581 -2.761429 2.632976 2.161905 -2.953587 4.298804 2.169239 -3.041961 1.763007 2.169346 -3.616667 0.750698 2.163643 -3.654478 4.002836 2.166119 -3.936098 2.528699 2.176748 -4.193073 2.576094 2.179792 -4.403199 6.264412 2.172831 -4.649162 0.438534 2.174712 -4.646818 0.970455 2.173364 -0.562948 0.922500 2.182724 -1.232563 0.929625 2.183000 -1.395391 3.129565 2.177478 -1.455862 5.471724 2.172414 -1.513275 5.228838 2.191690 -1.630000 2.352642 2.173962 -1.975432 1.729388 2.185252 -2.095792 6.066264 2.200000 -2.706423 3.697664 2.179927 -3.352500 2.274000 2.168000 -3.420766 5.547033 2.182392 -3.445309 0.933454 2.184021 -3.774430 5.188228 2.171646 -4.598396 0.698160 2.191132 -1.290494 4.352889 2.207901 -2.199503 2.872762 2.191989 -2.405682 2.716909 2.196227 -2.480121 5.201660 2.198826 -2.684660 0.133223 2.206816 -2.749524 2.126786 2.182857 -2.786192 4.785771 2.201519 -3.142051 1.252692 2.186026 -3.581613 2.164032 2.180161 -3.946216 3.693514 2.183784 -4.071129 5.770040 2.191976 -4.167484 1.799097 2.199161 -4.618390 2.832634 2.196000 -4.660879 2.176374 2.189231 -0.967097 6.395484 2.192581 -1.094411 4.113042 2.204753 -1.440233 0.680543 2.195581 -1.559245 1.776415 2.194717 -2.146484 2.354176 2.199011 -2.554470 2.510000 2.195606 -3.163171 3.668902 2.193171 -3.193924 5.676181 2.206354 -3.329944 4.684551 2.197022 -3.341556 6.256778 2.193222 -3.536947 3.093009 2.209469 -3.739000 6.399000 2.183000 -4.026341 1.337268 2.198976 -4.166885 1.538361 2.191639 -4.198421 6.395000 2.191579 -4.382673 0.435220 2.210094 -4.450755 1.142453 2.191887 -1.297129 2.004484 2.218258 -2.061166 0.045276 2.210491 -2.271905 1.949524 2.199206 -2.357535 0.685634 2.205986 -2.935097 1.081039 2.219662 -3.455878 2.766486 2.208446 -3.908841 0.734663 2.220647 -3.944050 6.113524 2.224622 -3.944964 5.021241 2.210438 -4.167455 4.397818 2.205545 -4.217346 3.927668 2.216756 -4.320909 2.352576 2.199848 -4.644932 4.014527 2.222162 -0.546171 4.967229 2.230286 -0.794988 5.873963 2.237063 -0.938995 1.398141 2.227839 -1.378696 4.616377 2.210145 -1.576901 2.599624 2.226761 -1.709559 0.040662 2.210882 -1.711315 4.204877 2.230247 -1.867353 5.915686 2.214804 -2.139429 1.523048 2.216619 -2.437897 0.026172 2.235483 -2.552532 1.393427 2.237519 -2.779231 6.067527 2.227143 -3.197966 5.394972 2.227712 -3.182977 0.370194 2.229968 -3.527436 4.536026 2.215641 -3.823897 4.436197 2.220939 -4.033324 0.981633 2.229799 -4.051071 2.296952 2.239571 -4.178615 4.682872 2.222103 -4.335427 4.975366 2.224390 -4.437099 3.013969 2.220611 -4.589375 4.924010 2.217031 -4.655200 4.425600 2.218800 -0.539691 1.890619 2.224845 -0.536207 5.345402 2.240000 -0.637690 2.540854 2.240316 -1.261603 0.078092 2.228550 -1.265203 5.713514 2.224459 -1.347788 5.039135 2.224712 -1.779434 1.883208 2.229434 -1.862513 4.668901 2.228534 -1.884957 0.220261 2.224174 -2.224472 3.230081 2.227724 -2.341617 3.891320 2.240231 -2.359027 5.445324 2.240405 -2.907598 4.545196 2.229497 -2.924014 6.293116 2.247746 -2.978594 2.048906 2.220156 -3.152688 2.795336 2.236759 -3.198987 1.003671 2.239968 -3.322577 1.536810 2.232086 -3.683622 2.563465 2.232441 -3.690233 0.518915 2.229690 -4.184185 5.364630 2.240148 -4.646733 3.587833 2.232867 -4.651234 1.701591 2.241396 -0.554754 1.190352 2.241937 -0.550313 3.396677 2.245549 -0.562153 0.419059 2.256757 -0.669000 4.084143 2.231143 -0.727874 4.739275 2.238986 -0.967442 5.256860 2.230000 -1.024021 5.601678 2.250420 -1.320794 3.363730 2.238254 -1.416844 1.364867 2.252625 -1.656827 6.053896 2.240482 -2.027823 0.954962 2.246937 -2.102826 4.716522 2.226304 -2.651552 1.898103 2.232414 -2.844092 5.705036 2.247482 -2.931220 3.522857 2.244821 -3.012581 0.574919 2.247581 -3.070412 1.488765 2.244882 -3.172584 3.419101 2.234045 -3.475926 5.874321 2.231728 -3.649030 6.042313 2.235597 -4.225163 5.981276 2.246142 -4.389205 4.512045 2.230568 -4.463333 4.275789 2.237544 -0.768354 3.583171 2.257866 -0.933128 4.935922 2.248324 -0.950558 0.055020 2.250000 -1.029200 3.636831 2.260369 -1.099021 2.776154 2.248112 -1.679623 0.639434 2.242264 -1.815424 2.718644 2.250678 -1.956966 2.517528 2.247753 -2.034303 2.129084 2.259801 -2.593182 0.785682 2.236364 -2.741245 3.332101 2.256926 -3.815500 1.862333 2.241750 -3.814070 5.604186 2.240349 -3.948471 1.642851 2.255950 -4.208840 2.830552 2.248619 -4.560779 2.402532 2.248312 -0.533282 5.879590 2.266667 -0.540897 2.290493 2.269507 -0.757041 0.234794 2.266067 -0.770000 3.199115 2.255929 -1.187203 1.557106 2.271286 -1.236566 2.272929 2.268283 -1.670353 0.328471 2.261294 -1.718793 2.133448 2.255000 -1.994806 6.348101 2.255853 -2.031186 1.280339 2.270169 -2.036255 4.475404 2.265660 -2.161015 5.617481 2.268722 -2.640056 1.646348 2.268090 -2.629091 2.807500 2.256364 -2.668134 0.403085 2.271294 -2.815392 1.458387 2.260046 -3.056139 5.089430 2.262975 -3.390847 0.081230 2.265628 -3.375505 1.288165 2.264037 -3.417197 4.973131 2.275025 -3.436842 3.339684 2.260526 -3.446073 5.304977 2.272283 -3.704887 3.764561 2.274712 -3.717385 2.820769 2.248462 -3.838925 1.156262 2.263271 -4.656000 1.426333 2.259556 -0.755857 1.567143 2.262571 -0.756000 5.123838 2.268432 -0.757068 5.601142 2.280710 -0.795469 0.665429 2.275184 -0.928729 3.390847 2.272966 -0.973253 2.993373 2.258434 -1.594634 1.550366 2.268415 -1.612051 4.697436 2.268718 -2.101905 4.227619 2.262381 -2.131690 4.963451 2.265423 -2.421176 4.736642 2.286225 -2.561353 4.041014 2.270531 -2.688176 3.060486 2.274863 -2.939231 5.329402 2.273704 -3.019390 5.986098 2.276402 -3.115728 2.407616 2.276594 -3.411257 4.315286 2.279829 -3.853151 3.402059 2.277773 -3.984400 4.248933 2.259600 -4.437121 2.633485 2.268737 -4.436556 2.091000 2.262778 -4.458667 3.832917 2.262000 -4.640505 6.229343 2.266263 -0.760000 2.768070 2.268070 -0.923722 2.574233 2.287670 -0.990000 0.844112 2.271776 -1.468626 2.192748 2.278931 -1.704625 1.330875 2.287125 -1.903922 5.670915 2.287353 -2.006818 3.565808 2.278737 -2.054896 3.059167 2.275000 -2.478623 6.318000 2.294522 -2.552931 1.037915 2.291118 -2.919823 0.318009 2.291416 -2.988000 3.267000 2.273750 -3.001543 4.072394 2.280798 -3.168137 6.387081 2.286087 -3.175388 4.865437 2.286602 -3.513617 1.714468 2.268723 -3.612803 3.508333 2.283182 -3.644044 0.138603 2.278971 -3.911114 4.771969 2.293057 -4.083684 3.521729 2.282857 -4.219635 0.055401 2.279489 -4.430462 3.414740 2.283237 -0.534896 2.981354 2.280208 -0.539762 1.450952 2.285794 -0.738805 6.380377 2.290377 -0.862632 2.106813 2.296199 -1.003663 6.083762 2.282673 -1.064242 1.127980 2.287475 -1.160792 0.667624 2.286931 -1.331145 2.665771 2.295066 -1.322007 3.622847 2.301204 -1.442529 5.917529 2.287241 -1.473026 4.126842 2.287500 -2.294722 4.386333 2.285833 -2.375283 1.582170 2.285566 -2.597759 4.935862 2.284310 -2.993675 2.984701 2.290000 -3.402462 3.823231 2.301169 -3.502902 0.346814 2.300757 -3.815366 0.317154 2.285285 -3.809111 1.414667 2.278889 -3.835000 0.012353 2.288529 -4.049452 0.381918 2.279589 -4.635596 5.791927 2.280917 -0.737525 3.838416 2.291881 -0.766949 6.126949 2.295678 -0.889888 4.544906 2.309288 -0.995919 0.343860 2.305699 -1.243481 5.465414 2.299834 -1.301474 0.317053 2.289158 -1.400891 3.880545 2.307475 -1.549434 3.282453 2.292830 -1.733622 6.297135 2.300270 -1.870260 4.919545 2.303247 -1.878746 5.385559 2.312508 -2.326752 2.496838 2.303419 -2.335321 6.088899 2.294312 -2.372500 4.996176 2.295882 -2.537000 2.147000 2.293667 -2.688077 5.312051 2.294103 -2.806579 5.069123 2.304211 -3.211910 3.179775 2.297865 -3.339164 2.554695 2.312154 -3.331596 2.967766 2.290638 -3.895765 5.356588 2.294235 -4.244308 4.182923 2.289385 -4.662733 3.115291 2.298895 -0.751993 4.313838 2.320000 -1.538627 1.126415 2.318319 -1.645977 3.957931 2.304368 -1.913262 0.464946 2.313692 -1.899444 0.730185 2.318843 -2.133571 0.638333 2.302540 -2.236220 5.210697 2.320590 -2.397732 3.636320 2.316729 -2.633071 5.551929 2.310857 -2.730455 1.218030 2.300909 -3.160326 4.271739 2.299239 -3.530949 2.369854 2.305182 -4.398750 1.773571 2.310357 -4.431007 0.927987 2.306577 -4.654881 5.546071 2.308571 -1.034404 1.827294 2.325275 -1.667129 5.537129 2.315248 -1.808305 2.995254 2.321017 -1.821579 3.259323 2.322406 -1.863754 3.780853 2.326109 -2.280738 0.423839 2.335423 -2.453527 3.169130 2.333961 -2.610513 5.814103 2.330000 -2.789000 3.943400 2.311400 -2.992827 0.062560 2.330107 -3.591910 1.952022 2.310337 -3.616842 1.272406 2.323985 -3.658873 0.963237 2.334393 -4.035135 5.552973 2.315811 -4.373533 0.673952 2.322575 -4.456545 6.058364 2.304727 -4.658056 1.937611 2.342333 -4.635922 5.171714 2.328494 -0.523802 6.131818 2.330661 -0.808188 1.174161 2.334396 -0.886316 4.028246 2.317368 -1.350959 2.928082 2.326233 -1.349774 1.762594 2.337030 -1.436729 6.169159 2.324206 -1.607204 2.830645 2.325161 -1.672965 5.804024 2.345271 -1.764571 3.503905 2.325333 -2.195371 1.752522 2.343501 -2.247810 0.165143 2.324095 -2.769763 0.646126 2.337510 -2.852417 1.800083 2.325917 -2.905813 2.750813 2.332063 -3.351348 3.562809 2.323371 -3.580379 4.759300 2.341137 -3.807800 2.359800 2.333200 -3.993939 2.932727 2.319091 -4.124643 4.903750 2.324107 -4.667572 1.175723 2.336879 -1.100163 4.688455 2.339756 -1.150417 3.856111 2.331944 -1.427724 0.885854 2.339919 -1.627273 4.941818 2.332078 -1.832841 1.112564 2.357460 -2.200502 5.866164 2.344110 -2.211111 1.108889 2.325333 -2.316545 1.326364 2.336000 -2.528876 4.289438 2.332247 -2.919189 2.246892 2.334730 -3.125647 4.609964 2.353345 -3.287625 0.785000 2.335750 -3.481770 0.617472 2.350787 -3.670000 5.776667 2.330575 -3.698936 5.015390 2.349858 -3.800565 4.102177 2.340565 -3.991479 3.188343 2.343728 -4.119919 0.619514 2.344332 -4.165064 2.080833 2.345513 -4.246782 1.087356 2.334253 -4.407130 4.747523 2.345257 -0.522449 3.678571 2.342653 -1.201657 3.132857 2.351943 -1.207157 5.206559 2.364190 -1.202581 5.947903 2.354839 -1.791458 1.662917 2.343542 -1.981179 5.146103 2.355487 -2.331716 4.132781 2.353018 -2.385802 5.702099 2.339753 -2.387885 2.918077 2.356474 -2.680199 2.343625 2.358645 -3.430882 6.086029 2.346912 -3.523671 6.341529 2.362071 -3.776242 3.045839 2.346107 -4.163250 6.223114 2.364565 -4.240382 1.359013 2.355669 -4.447692 5.365128 2.351923 -0.552811 0.081281 2.372792 -0.781872 2.355882 2.364439 -1.157708 4.938819 2.363125 -1.541076 1.959861 2.372396 -1.600880 3.706053 2.370240 -1.730484 4.482881 2.369007 -2.778479 4.192350 2.362166 -2.888904 2.496849 2.354247 -3.046339 0.828142 2.363989 -3.149677 2.155806 2.359113 -3.199487 6.139231 2.358846 -3.768482 6.249805 2.365058 -3.913173 2.709904 2.355865 -4.016631 4.533690 2.366043 -4.303571 3.656964 2.355060 -4.666606 4.712294 2.352936 -4.673146 2.648652 2.353146 -0.528169 1.691831 2.361127 -0.568462 0.743956 2.366374 -0.744884 5.351163 2.362558 -0.764211 0.908129 2.369532 -1.191875 6.205313 2.360000 -1.396070 4.816422 2.376716 -1.811374 2.345906 2.379883 -2.001034 2.834828 2.365402 -2.496292 0.564607 2.365618 -2.776173 0.940864 2.366543 -3.123448 1.909655 2.359655 -3.170500 1.678000 2.359250 -3.240385 4.043846 2.368385 -3.417037 2.139185 2.378543 -3.528723 1.494681 2.360426 -3.653333 3.264651 2.370310 -3.678462 5.280000 2.370513 -4.202590 5.138012 2.372048 -4.401149 5.817241 2.362644 -4.661789 4.229368 2.369368 -0.526343 3.932090 2.382164 -0.532703 2.741689 2.379932 -0.553072 4.472440 2.395361 -0.617107 2.071322 2.378512 -1.112892 2.081010 2.393275 -1.350500 0.543083 2.376167 -1.442102 5.627159 2.380625 -1.863023 4.047674 2.376163 -1.861135 6.098298 2.381418 -1.875315 0.031748 2.380909 -1.987439 1.903049 2.374756 -2.054444 3.331778 2.364444 -2.146615 3.755795 2.387231 -2.271176 3.423971 2.373382 -2.715613 4.459368 2.387589 -2.948476 3.759529 2.385374 -3.267766 5.893040 2.390220 -3.361522 1.868478 2.381449 -3.553596 4.093933 2.371236 -3.623432 5.535680 2.386509 -3.911919 2.113023 2.382965 -4.013902 1.888780 2.376585 -4.205610 0.850732 2.372439 -4.218571 3.042619 2.374524 -4.278618 5.563309 2.391564 -4.592744 0.291353 2.388496 -0.520000 5.649462 2.389785 -1.002201 4.273684 2.394593 -1.240000 6.400000 2.370000 -1.485970 4.360224 2.382761 -1.906618 4.296176 2.381471 -2.107473 4.021648 2.382527 -2.220497 0.852236 2.393230 -2.485274 0.227221 2.411444 -2.591718 3.800264 2.392643 -2.689545 3.561212 2.384091 -2.943923 4.881077 2.390538 -2.958750 1.291389 2.403090 -3.258333 5.177937 2.385397 -3.425702 5.694737 2.387632 -3.430955 1.081180 2.394270 -3.882935 0.534457 2.379239 -3.911004 5.781632 2.390962 -4.280144 0.282383 2.397220 -4.443231 4.063593 2.398078 -4.447670 1.530000 2.393252 -4.438884 0.046884 2.396000 -4.676522 3.811522 2.378261 -0.526633 4.197437 2.406080 -0.524194 4.753978 2.398118 -0.768686 2.989705 2.411528 -0.774160 1.879920 2.403680 -0.961270 1.587540 2.403413 -1.049200 2.371000 2.390900 -1.258919 4.073243 2.403784 -1.479800 5.374200 2.400300 -1.533780 2.407835 2.406850 -2.670702 2.614503 2.396784 -3.052407 5.762685 2.397407 -3.227742 0.552742 2.408656 -3.546164 2.914795 2.389452 -3.721389 0.711944 2.398796 -4.053102 4.046241 2.403431 -4.088291 3.777778 2.397949 -4.210945 3.325879 2.407585 -0.524737 6.376165 2.419286 -0.964446 6.305997 2.426780 -0.995426 5.806628 2.413915 -1.293852 1.102295 2.412623 -1.552945 3.063630 2.408356 -1.601226 0.139811 2.407925 -1.671055 0.901350 2.415654 -2.058261 0.291196 2.409348 -2.223901 4.603369 2.418050 -2.344700 2.260950 2.409650 -2.507903 3.405161 2.401935 -2.609849 6.076679 2.413132 -2.962419 4.376250 2.417782 -3.206049 0.185556 2.398395 -3.667917 2.167917 2.398750 -3.742670 1.610631 2.415777 -3.885373 3.625672 2.408731 -4.044776 0.174627 2.408284 -4.415576 2.850643 2.425630 -4.637895 3.344737 2.398684 -4.669538 0.828615 2.415538 -4.664654 0.551567 2.420276 -0.529371 5.153457 2.427486 -0.532954 3.193077 2.426615 -0.726667 4.917246 2.412174 -0.769685 0.437244 2.420000 -0.974314 5.413268 2.423072 -1.139507 3.376761 2.417042 -1.701048 5.193100 2.422926 -2.111667 5.416250 2.407361 -2.195323 2.681255 2.420875 -2.647500 4.711333 2.411750 -3.201273 1.192061 2.425152 -3.768780 4.591585 2.429065 -4.006111 2.488333 2.417333 -4.038687 1.197879 2.417475 -4.434212 3.170322 2.431768 -4.659278 5.996495 2.413918 -0.736604 3.380377 2.427830 -0.955324 3.192676 2.440971 -0.980706 0.568941 2.418353 -1.113259 0.146593 2.434593 -1.192778 0.869630 2.430494 -1.223846 1.350769 2.417231 -1.453488 5.126628 2.426279 -2.168200 6.331188 2.445840 -2.203514 2.020324 2.428865 -2.572568 5.132568 2.441694 -2.709655 2.036724 2.417759 -2.840769 5.887038 2.442462 -2.945842 5.540368 2.430737 -3.109725 2.625902 2.438043 -3.124560 3.568160 2.429280 -3.553667 2.674000 2.416333 -3.956907 5.141546 2.426186 -4.003960 1.452819 2.425772 -4.173000 5.794667 2.420222 -4.208846 1.605577 2.417885 -4.227353 2.645294 2.424902 -4.233978 2.374199 2.437735 -4.418089 6.271178 2.435796 -4.681974 0.041053 2.433816 -0.532662 0.991295 2.441439 -0.934702 3.803841 2.445232 -0.978132 5.097253 2.432857 -1.279815 2.451296 2.438519 -1.304795 4.578356 2.435479 -1.497143 3.474000 2.433810 -1.694211 0.489158 2.430526 -1.870414 1.449172 2.437724 -2.087391 2.310580 2.427681 -2.102679 0.022321 2.442768 -2.231278 3.102180 2.440000 -2.470667 4.530000 2.436778 -3.207205 5.564083 2.451157 -3.424000 3.157739 2.450261 -3.773910 5.998077 2.453910 -4.036400 6.002450 2.445400 -4.247708 4.530104 2.438438 -4.438636 1.217121 2.427879 -4.460175 2.267544 2.429825 -4.674262 2.174098 2.430000 -0.931732 2.787087 2.442756 -1.360714 0.140833 2.442262 -1.387950 1.532733 2.455776 -1.541882 0.677294 2.440000 -1.864177 2.096203 2.447595 -1.900375 5.866375 2.452000 -2.505056 5.386517 2.438202 -2.544512 1.241674 2.458326 -2.739244 0.213025 2.451092 -2.948033 1.586230 2.437705 -3.191961 3.806078 2.444314 -3.213438 1.448542 2.444271 -3.271757 3.367027 2.448243 -3.330976 2.777886 2.446423 -3.349200 4.725467 2.441867 -4.673119 2.899174 2.447798 -0.527925 2.463145 2.464403 -0.764074 1.397870 2.469398 -0.992407 1.305741 2.453704 -1.137805 2.642195 2.451707 -1.194176 5.656484 2.453407 -1.576593 1.711239 2.464469 -1.754321 2.596605 2.459259 -1.769928 4.751151 2.463237 -1.816641 0.271390 2.461583 -2.029636 4.781844 2.465818 -2.093708 6.063596 2.464326 -2.413761 5.927064 2.451468 -2.444262 2.696230 2.450000 -2.459151 1.971550 2.465203 -2.501385 0.793723 2.470130 -2.851624 6.145635 2.457411 -2.887732 3.142784 2.452268 -3.497612 4.538209 2.455821 -3.846137 4.328164 2.472575 -3.858701 3.877597 2.460390 -4.114797 4.309926 2.470406 -0.730899 2.618820 2.474944 -1.245085 4.331898 2.480305 -1.486869 0.354720 2.469159 -2.189720 1.503808 2.478855 -2.890415 4.640829 2.473594 -2.945641 2.038333 2.460641 -3.271798 4.427472 2.473146 -3.493004 5.144635 2.469528 -3.540185 3.680556 2.457778 -3.592857 4.317619 2.460238 -3.804805 0.151289 2.476484 -4.236471 1.874853 2.461324 -4.396745 4.993632 2.472406 -4.465682 1.961667 2.471515 -4.670575 4.465747 2.465287 -0.933158 3.531228 2.474737 -1.145639 2.908797 2.475338 -1.515775 2.658169 2.472113 -1.568427 6.023387 2.480081 -1.766207 1.875862 2.475172 -1.901289 6.338328 2.482822 -1.988036 1.663571 2.469107 -2.129740 4.346364 2.479675 -2.351016 0.023594 2.497383 -2.633609 2.912782 2.481880 -2.657107 1.786038 2.497201 -2.661127 3.225352 2.474225 -2.657482 6.317482 2.480144 -2.707760 1.517656 2.485885 -3.158406 3.019275 2.468261 -3.277958 2.355870 2.489211 -3.377258 1.637742 2.474839 -3.878877 1.007935 2.485833 -4.058884 5.371373 2.483734 -4.409646 4.324513 2.488820 -4.673761 2.426923 2.478632 -0.640640 5.968160 2.501520 -0.753574 4.669398 2.494779 -0.956716 4.842799 2.499179 -1.348095 2.084603 2.485238 -1.448934 6.362738 2.490490 -1.631931 2.180621 2.486207 -1.687725 4.246825 2.495782 -1.996804 2.534536 2.487732 -2.071593 5.711062 2.488230 -2.300244 0.639593 2.490569 -2.313069 5.522277 2.484950 -2.380992 1.030413 2.500468 -2.462889 1.472000 2.482444 -2.492000 2.458182 2.481818 -2.816371 0.448871 2.484677 -2.967627 6.379831 2.488192 -3.075969 0.361323 2.504923 -3.297514 6.326851 2.499475 -3.425634 5.433239 2.485070 -3.474143 0.843429 2.487286 -3.527765 5.896332 2.504756 -3.684506 0.379691 2.487160 -3.795339 1.908898 2.481441 -3.818738 1.297767 2.485243 -3.860741 5.542525 2.496094 -3.954249 0.750363 2.491036 -4.298636 6.023750 2.486023 -4.659563 5.382313 2.495313 -0.532365 1.252230 2.500541 -0.549219 0.313125 2.494375 -0.709912 3.647478 2.504735 -0.740294 1.650294 2.486176 -1.150186 3.666097 2.500149 -1.367320 3.266000 2.505000 -1.622667 1.452889 2.490444 -1.910952 0.906786 2.503810 -1.981351 3.143649 2.490811 -2.233077 4.952203 2.505455 -2.306966 3.930112 2.495506 -2.484721 4.887462 2.501726 -2.728125 4.936250 2.489750 -2.999009 1.045129 2.503664 -3.086794 5.321435 2.500191 -3.232444 0.956889 2.490667 -3.507929 0.170165 2.507882 -3.491364 3.446136 2.488864 -3.574029 1.792662 2.497122 -4.672532 3.579241 2.492405 -0.529976 5.423501 2.523693 -0.761914 5.723301 2.518182 -0.779319 0.168637 2.532525 -0.925556 6.035291 2.516032 -1.171667 1.700000 2.500000 -1.446493 1.286716 2.507015 -1.543000 4.630150 2.520650 -1.890326 5.551630 2.510326 -1.960270 4.528378 2.497297 -2.399532 1.712222 2.512982 -2.389907 6.181757 2.526505 -2.667162 4.017297 2.501892 -2.739337 5.420422 2.508795 -2.856462 5.192736 2.516792 -3.001469 0.618898 2.510653 -3.033982 3.333009 2.507965 -3.071686 5.054767 2.516105 -3.418487 1.332237 2.508355 -3.703611 2.503889 2.507917 -3.734762 3.456786 2.507262 -3.983616 3.414915 2.512881 -4.046133 4.738267 2.503867 -4.131753 2.861169 2.512403 -4.438609 2.532180 2.513045 -4.652937 5.701599 2.517807 -4.678400 1.504800 2.493600 -0.772952 4.139692 2.521322 -0.766190 5.172619 2.510476 -0.963484 0.806129 2.525806 -1.023050 4.038450 2.519650 -1.389290 5.833470 2.531995 -1.543613 3.912941 2.521345 -1.650732 3.281288 2.527197 -1.948992 3.622868 2.521395 -2.372375 4.324125 2.514500 -2.897143 3.536327 2.502653 -3.310068 4.967055 2.514384 -3.380378 4.194244 2.526176 -3.618125 3.902813 2.511094 -3.743623 2.785217 2.511014 -3.876915 4.923682 2.520448 -3.967176 1.694824 2.514824 -4.307410 3.860392 2.527199 -4.429173 0.455276 2.525157 -4.655197 6.227566 2.518026 -4.665923 1.753462 2.519385 -0.531216 0.555000 2.518243 -0.744429 6.208286 2.526143 -0.934222 2.206111 2.529000 -0.983832 1.066287 2.527904 -1.238395 0.347778 2.525123 -1.672331 6.245276 2.530920 -1.769512 0.699512 2.529512 -2.041377 1.281138 2.541737 -2.053938 0.690702 2.552982 -2.394000 6.400000 2.508000 -2.756695 1.128898 2.522797 -2.853870 0.023448 2.549349 -3.112986 4.190569 2.530711 -3.130260 4.796104 2.526623 -3.303274 0.018053 2.534690 -3.985702 6.348764 2.532837 -4.537069 1.017759 2.516724 -4.673833 4.027667 2.516833 -0.536860 1.515041 2.538140 -0.537128 2.949773 2.560101 -0.755041 0.661488 2.531157 -0.847281 4.425392 2.545530 -1.187961 0.638750 2.541645 -1.235039 5.413586 2.552287 -1.331513 6.116933 2.555819 -1.681478 5.420522 2.532696 -1.692620 1.227380 2.548984 -1.852000 5.019163 2.537953 -1.979944 3.880281 2.548652 -2.128043 1.031304 2.535652 -2.260517 2.463276 2.533448 -2.541786 5.612937 2.544048 -2.556711 2.197763 2.529342 -2.891061 2.903128 2.543464 -2.939326 3.979775 2.541723 -3.015351 2.398129 2.557719 -3.250141 2.026761 2.535493 -3.424741 0.439310 2.531810 -3.580674 6.153820 2.530112 -3.941633 0.359660 2.535442 -4.453465 3.429604 2.532772 -0.521842 3.434803 2.546250 -1.086025 4.543185 2.561531 -1.209908 4.775505 2.547798 -1.459494 4.150759 2.539620 -1.898557 3.371443 2.545155 -1.942182 5.308682 2.556182 -2.185493 3.568028 2.544085 -2.353778 5.231185 2.551704 -2.503462 3.608956 2.560440 -2.816154 0.788077 2.542981 -3.378608 3.930253 2.544684 -3.537847 2.306794 2.555311 -3.833854 3.194688 2.542292 -4.077838 2.209730 2.534595 -4.131368 1.009368 2.552526 -4.168194 0.468472 2.554537 -4.301471 2.131176 2.542647 -0.952720 2.524400 2.559120 -1.414374 3.684019 2.573759 -1.501952 1.035833 2.576571 -2.420899 0.435043 2.573217 -2.628075 4.283054 2.564519 -2.807763 2.220274 2.560457 -3.550405 4.900270 2.563581 -3.610588 1.164163 2.563439 -3.902203 2.956780 2.547627 -4.128602 4.985508 2.564492 -4.203593 3.546587 2.560419 -4.414286 1.723036 2.550714 -4.459975 4.594081 2.565894 -4.480182 5.216364 2.556727 -4.652357 5.026650 2.568809 -4.666839 3.144943 2.557931 -0.525217 2.222717 2.560761 -0.960909 0.010000 2.554545 -0.996034 0.363190 2.565172 -1.359624 3.007970 2.568045 -1.607286 5.004429 2.563000 -1.711377 3.542395 2.569401 -1.768704 3.048611 2.572963 -2.088478 2.946957 2.562609 -2.292674 5.750698 2.563605 -2.644229 0.606432 2.570176 -2.860465 2.651395 2.558372 -2.930095 1.799714 2.577079 -3.091299 6.178468 2.580286 -3.334187 6.067355 2.586667 -3.638261 1.438261 2.560145 -3.727941 5.747647 2.557059 -3.828333 5.295370 2.562037 -3.855796 2.308938 2.578274 -4.091201 3.134047 2.584047 -4.250128 4.114615 2.559872 -4.278000 4.779000 2.565143 -4.436281 0.716942 2.565537 -0.517722 4.935316 2.575823 -0.932987 1.955325 2.584870 -1.174304 2.256311 2.588350 -1.380973 0.792478 2.578938 -1.577108 2.877169 2.578193 -1.685153 5.685194 2.593313 -1.747273 3.787727 2.564318 -1.892587 2.778187 2.591973 -1.988264 4.149097 2.583264 -2.166061 0.452929 2.574545 -2.310107 1.280643 2.591850 -2.367217 3.302565 2.579913 -2.442216 3.045412 2.580206 -2.593061 0.058131 2.597336 -2.624801 5.875909 2.591790 -3.044118 5.918235 2.576471 -3.333813 3.614676 2.574173 -3.600698 0.599070 2.577093 -3.663089 3.010244 2.582033 -4.441494 5.478276 2.585575 -4.494519 5.910000 2.573111 -0.520183 6.182385 2.584587 -0.519800 3.784400 2.584800 -0.521053 1.977895 2.582105 -0.749567 1.152987 2.596017 -0.990458 5.608431 2.601176 -1.175690 1.928103 2.581034 -1.204652 6.358182 2.590588 -1.248383 3.890240 2.589222 -1.316328 2.747574 2.606459 -1.881591 0.486667 2.603258 -2.244855 0.220217 2.587826 -2.451071 4.102262 2.588810 -2.754404 3.731124 2.599679 -2.793585 5.672981 2.591321 -3.433493 2.550478 2.596801 -4.257757 1.243694 2.604037 -4.453023 0.209302 2.580233 -0.740767 3.185879 2.603546 -0.744397 3.889397 2.596810 -0.790373 5.414533 2.606293 -1.141971 5.923019 2.615367 -1.381750 1.808500 2.593000 -1.773226 1.616989 2.592258 -2.696154 3.435128 2.598034 -2.871277 4.219574 2.592128 -3.877872 4.097340 2.592128 -4.055500 5.675900 2.597900 -4.189037 0.752222 2.600444 -4.245577 5.244615 2.587115 -4.325364 5.714904 2.607548 -4.661984 2.685709 2.607935 -4.663902 4.753049 2.602317 -0.532658 0.785443 2.605063 -0.537764 4.045000 2.625590 -0.948269 2.990641 2.609615 -1.086111 1.492778 2.605317 -1.134601 5.013497 2.605276 -1.790406 6.021265 2.628401 -1.995593 0.162667 2.609741 -2.299455 2.827891 2.614727 -2.707650 2.458060 2.629126 -3.076544 0.128456 2.607426 -3.171938 1.671125 2.606063 -3.287411 0.700670 2.615402 -3.312234 5.257056 2.615990 -3.512347 5.632721 2.621190 -3.525854 6.387561 2.603415 -3.709884 5.089884 2.603023 -3.736271 3.712712 2.598136 -3.748874 6.312517 2.605563 -3.915044 2.634167 2.619649 -4.507546 1.370417 2.611111 -4.673267 1.993663 2.601584 -0.531179 4.616829 2.626341 -0.532674 2.661444 2.626898 -0.533346 4.340769 2.633308 -0.728793 2.093621 2.613276 -0.759958 2.359792 2.623792 -0.758000 2.824846 2.617615 -1.151220 3.159762 2.625744 -1.410855 0.544737 2.617171 -1.437373 2.276314 2.626186 -1.461399 5.546923 2.619231 -2.032412 2.038235 2.618000 -2.826098 1.339268 2.606341 -3.130324 2.820926 2.620000 -3.287592 0.259634 2.624817 -3.353770 2.963811 2.623648 -3.675800 0.921400 2.610000 -3.982680 3.723196 2.620722 -4.015613 4.517350 2.630912 -4.144313 6.153359 2.631565 -4.660187 3.802336 2.628785 -4.661563 4.252969 2.612969 -4.682391 1.175652 2.609565 -0.532226 5.705110 2.645799 -0.748947 0.891579 2.620526 -0.960833 1.703214 2.626429 -1.167657 1.247483 2.641434 -1.488025 5.290988 2.634259 -1.526952 2.003524 2.629524 -1.673107 2.405000 2.634854 -1.743444 4.032384 2.633046 -1.765877 4.461801 2.628578 -2.102195 5.506234 2.645337 -2.163140 1.720814 2.623256 -2.241939 2.183091 2.629818 -2.622632 2.712105 2.623474 -2.642069 0.941724 2.619138 -2.806093 4.457417 2.633709 -3.041983 1.457190 2.623223 -3.039667 5.668500 2.622833 -3.076181 0.838611 2.629375 -3.219025 3.202086 2.641247 -3.253366 5.798000 2.630927 -3.459063 2.073750 2.636016 -3.606556 3.268036 2.635589 -3.621702 4.137518 2.638156 -3.701122 2.110102 2.629898 -3.918095 5.874127 2.628095 -3.935977 2.044828 2.629885 -4.188371 0.215140 2.644803 -4.359293 3.012989 2.641033 -4.447660 3.663723 2.622340 -4.664601 0.395460 2.635153 -0.524286 1.745714 2.628000 -1.246996 3.454032 2.643004 -1.248271 0.992944 2.651682 -1.440233 4.839535 2.634341 -1.475615 4.390462 2.642962 -2.129912 5.155242 2.637841 -2.250588 0.851307 2.642353 -2.522614 3.866863 2.639150 -2.920643 4.888006 2.645434 -3.070552 2.149816 2.648098 -3.084753 4.425157 2.647982 -3.367770 1.834865 2.638851 -3.531791 2.792090 2.627463 -3.590686 5.319840 2.647666 -3.680795 4.467500 2.635341 -3.751188 4.736875 2.642875 -3.863457 1.486543 2.631728 -3.900333 6.122111 2.636556 -4.085882 3.951078 2.638333 -4.157468 5.896709 2.637595 -4.187091 1.708182 2.641636 -0.540536 0.125179 2.640357 -0.990984 5.226230 2.637213 -1.023974 4.266538 2.638974 -1.243229 0.090646 2.663274 -1.364333 5.078000 2.644833 -1.573392 0.145636 2.666908 -1.856800 2.241600 2.645333 -2.218293 4.724042 2.655749 -2.657175 0.353234 2.664535 -3.395417 1.053833 2.657458 -3.759247 1.713011 2.647957 -4.079378 2.427772 2.652073 -0.958541 3.336865 2.662649 -1.060385 2.756154 2.661319 -1.186313 2.517095 2.678547 -1.240855 4.141453 2.656581 -1.632649 0.424106 2.665364 -1.921096 1.807123 2.657329 -2.034556 5.916006 2.669852 -2.044006 6.217596 2.666409 -2.068673 2.367092 2.668878 -2.276901 1.928592 2.652394 -2.279524 5.979921 2.651429 -2.305574 3.745574 2.650656 -2.624943 6.142586 2.672069 -2.670597 2.024925 2.650149 -2.711919 4.712551 2.668555 -3.261012 4.626640 2.660243 -3.511509 4.671321 2.660189 -3.970901 1.182973 2.654685 -4.123874 1.461982 2.652703 -4.351744 0.935814 2.650814 -4.667852 0.662349 2.659463 -4.669888 3.386180 2.648315 -0.734359 4.865846 2.673128 -0.775914 0.413710 2.674140 -0.961434 0.595814 2.673372 -1.009304 6.215304 2.671304 -2.137966 2.624068 2.675480 -2.224298 4.201157 2.674298 -2.411455 2.597818 2.668273 -2.594362 1.374947 2.678245 -2.836667 5.994881 2.669167 -2.864074 6.265556 2.682481 -2.937365 5.447814 2.679341 -3.229854 1.267816 2.687694 -3.431245 4.424440 2.677386 -4.266667 3.322510 2.677412 -4.671111 2.257222 2.666825 -0.540851 6.393617 2.672340 -0.736250 3.450357 2.665714 -0.747826 1.818478 2.665435 -1.340270 1.435811 2.683446 -1.450516 2.537613 2.679032 -1.727217 0.910061 2.680214 -1.729315 5.202904 2.686411 -2.187681 3.151304 2.676957 -2.251641 4.458750 2.676484 -2.266667 6.361897 2.691626 -2.526839 4.498705 2.689326 -2.528647 5.355714 2.680451 -2.604428 5.034797 2.690775 -2.903224 0.277632 2.682829 -3.131395 3.714264 2.686512 -3.153793 3.465862 2.668621 -3.342247 1.504270 2.668090 -3.680139 0.062404 2.688362 -4.171818 1.965682 2.673409 -4.181026 2.672821 2.667308 -4.420440 2.745535 2.684214 -4.657319 0.044933 2.687748 -0.529530 5.211745 2.687047 -0.546745 1.028019 2.698396 -0.906400 5.848400 2.676933 -0.920909 1.325207 2.682314 -1.237855 5.672013 2.703729 -1.332735 4.610122 2.694327 -1.503148 3.450247 2.688642 -1.556452 3.104301 2.689677 -1.667838 2.666419 2.690473 -1.861007 1.400104 2.696528 -1.887107 1.125028 2.706713 -2.005664 4.392920 2.687434 -2.031855 4.913345 2.699527 -2.105161 3.382796 2.687634 -2.153529 0.011176 2.680588 -2.346404 1.542959 2.697678 -2.430053 2.340160 2.691016 -2.572645 6.386777 2.690826 -2.585000 1.627097 2.685968 -2.860899 3.202360 2.685056 -3.165149 3.983731 2.696381 -3.503210 3.772399 2.694982 -3.774267 0.725600 2.683733 -3.937322 0.120711 2.708104 -3.956646 5.133634 2.705217 -4.207182 5.491572 2.705203 -4.420446 6.345785 2.700246 -0.776382 1.537884 2.705870 -0.908933 4.682267 2.688933 -1.016542 3.844034 2.700000 -1.513300 1.620800 2.697500 -1.674609 1.819922 2.699531 -1.925135 4.661189 2.699946 -2.172164 3.949179 2.702015 -2.505636 1.853636 2.688909 -3.078203 6.388281 2.708828 -3.200843 5.475172 2.705670 -3.604505 3.527143 2.696813 -3.685130 6.003239 2.708227 -3.790493 0.470987 2.706951 -4.158803 6.388632 2.703675 -4.238129 4.334082 2.709456 -4.430909 2.270000 2.685455 -4.444973 4.172295 2.704809 -1.014737 3.570526 2.694737 -1.602431 0.682099 2.717514 -1.882727 2.540420 2.712448 -1.921250 5.685395 2.708355 -2.512251 1.131602 2.716234 -2.831762 1.576211 2.712291 -2.856641 0.539733 2.715115 -2.868545 0.960933 2.717985 -3.129558 0.517666 2.720442 -3.133700 1.901145 2.721762 -3.387724 3.401870 2.703659 -3.581970 0.323788 2.711212 -3.964842 0.893079 2.724184 -3.998968 0.623175 2.709048 -4.629157 2.933652 2.707303 -4.660055 0.926813 2.714725 -4.657636 4.487818 2.707636 -0.531961 2.417647 2.716275 -0.777677 6.054949 2.711515 -0.966407 0.168982 2.715808 -1.513122 6.248416 2.722127 -2.372299 5.543678 2.717816 -2.448526 0.230842 2.718421 -2.620231 3.173308 2.713846 -2.964299 4.636075 2.719346 -2.986316 1.187632 2.709474 -3.203151 2.501005 2.721781 -3.465669 5.081260 2.714016 -3.526053 1.653947 2.709342 -3.518653 0.775699 2.727306 -3.853548 3.534903 2.715097 -4.370661 6.064793 2.722314 -4.634306 6.075231 2.729364 -4.652209 5.528023 2.713023 -0.595478 1.346752 2.730510 -0.784878 2.599106 2.729919 -1.124651 0.784574 2.734651 -1.309716 2.077441 2.733602 -1.379948 0.319636 2.741429 -1.491071 5.996429 2.724375 -1.585827 1.373309 2.724892 -1.818966 5.454414 2.734966 -2.023030 0.907879 2.726742 -2.070818 3.721727 2.726000 -2.463177 4.775156 2.733646 -2.479805 0.799707 2.732732 -2.709505 2.926847 2.733919 -2.751406 5.273438 2.724063 -2.910544 3.456463 2.742075 -3.604632 1.892316 2.720105 -3.942047 5.431913 2.740906 -3.982486 4.812057 2.741343 -4.250533 4.594533 2.722667 -4.371507 1.557911 2.734349 -4.435698 5.041977 2.717907 -4.438498 1.896197 2.732582 -4.452414 4.802069 2.716897 -4.470000 1.138500 2.723750 -4.650169 5.265932 2.724576 -0.788299 6.337631 2.755755 -0.903357 4.079860 2.743007 -0.988571 2.360268 2.740625 -1.181654 0.486850 2.735354 -1.234600 4.380000 2.728000 -1.434203 3.995942 2.733841 -1.800375 0.259083 2.746042 -1.803390 6.258475 2.743051 -1.815070 2.014930 2.730563 -1.940433 3.179300 2.742667 -2.288533 0.627200 2.739200 -2.450444 2.087667 2.735556 -2.707755 4.103980 2.734490 -3.203448 5.054253 2.736264 -3.252063 4.256349 2.731270 -3.292287 2.245919 2.742960 -3.363737 4.855758 2.730202 -3.418315 0.081573 2.736404 -3.511148 1.330383 2.756530 -3.651667 2.597299 2.743218 -3.765000 1.287222 2.724444 -3.955871 3.295226 2.740903 -3.974063 1.817902 2.746696 -4.014385 2.844115 2.744115 -4.316525 2.478559 2.736780 -4.632598 1.548583 2.734331 -0.543074 5.960777 2.753108 -0.546780 0.342542 2.739153 -0.774047 5.175117 2.764543 -0.790346 3.696199 2.764773 -1.178487 1.717311 2.742521 -1.759851 3.372239 2.746716 -1.880063 0.706313 2.752125 -2.736379 1.804138 2.739828 -2.895298 1.997440 2.748571 -3.284699 6.265060 2.747169 -3.399123 4.074035 2.741754 -3.460672 5.875126 2.750420 -3.863488 4.340349 2.747209 -4.205572 3.750663 2.758163 -4.462105 3.901316 2.736842 -4.649643 5.811786 2.742143 -0.535600 3.117200 2.750800 -0.762108 4.309307 2.767139 -0.754271 5.656042 2.764271 -1.399615 1.199872 2.749231 -1.491938 5.748682 2.760388 -1.776011 4.890730 2.765618 -1.816604 4.240472 2.757170 -2.030909 0.356783 2.758881 -2.129521 1.396322 2.775239 -2.162250 1.120125 2.773125 -2.298234 4.984857 2.769735 -2.436892 5.792243 2.769135 -2.950719 2.546601 2.766928 -3.037373 3.038898 2.760508 -3.332250 2.735700 2.761850 -3.421163 0.530720 2.771801 -3.749589 2.847363 2.769658 -3.915000 6.384521 2.767055 -4.201961 2.213137 2.751667 -4.568899 2.485321 2.757844 -0.537273 3.615795 2.759886 -0.564088 0.596101 2.761321 -0.960757 4.931568 2.776108 -1.042482 2.099433 2.778830 -1.068169 5.411901 2.771479 -1.215385 2.939091 2.771469 -1.228542 3.691146 2.765365 -1.363750 3.240766 2.773266 -1.648255 4.647562 2.778975 -1.762383 0.018135 2.797098 -2.169267 5.723933 2.771200 -2.289873 3.526709 2.760633 -2.515227 3.442500 2.755000 -2.687552 5.523237 2.778880 -2.721789 0.745474 2.762105 -2.926064 2.807128 2.771170 -3.533224 6.212694 2.766653 -4.041166 4.164028 2.778622 -4.395129 5.306258 2.782419 -4.658444 4.051778 2.753556 -0.999477 1.083721 2.791948 -1.185906 5.188898 2.777638 -1.221552 6.183190 2.779397 -1.630548 2.180411 2.791918 -1.636364 1.136667 2.776515 -1.773679 2.914811 2.777736 -1.941089 3.985545 2.779406 -2.278626 0.386565 2.781527 -2.447778 4.258086 2.782407 -2.654342 2.243772 2.780044 -2.754333 1.180889 2.770667 -2.916066 2.297377 2.778525 -3.024259 4.189630 2.764630 -3.163118 1.022971 2.793559 -4.026263 0.377105 2.780526 -4.201429 5.109341 2.778352 -4.384888 0.334218 2.798139 -4.416528 0.064306 2.770139 -4.661509 3.601509 2.774340 -0.552230 2.109189 2.786824 -0.560796 5.465995 2.800498 -0.776098 3.003943 2.800894 -0.983906 4.464017 2.804848 -2.251581 5.333185 2.802450 -2.522237 0.542345 2.801321 -2.928894 0.052211 2.793317 -3.881021 3.938290 2.798812 -4.102404 3.499519 2.797548 -4.238676 0.555588 2.790098 -4.231522 4.858478 2.781957 -0.558624 2.850201 2.814228 -0.731726 0.184772 2.805381 -1.195038 4.804427 2.794656 -1.328407 5.398956 2.798956 -1.444454 0.901965 2.801266 -1.555200 5.036350 2.798950 -1.858580 3.602301 2.815227 -2.022564 1.628974 2.795000 -2.077536 2.952899 2.796232 -2.917843 3.978824 2.793922 -3.124481 4.813485 2.806680 -3.192931 0.021954 2.802701 -3.622527 2.342582 2.803516 -3.672168 5.752937 2.795385 -3.863706 2.444924 2.798731 -3.914733 5.686000 2.798333 -4.163778 1.076044 2.803244 -4.661579 1.789474 2.787895 -0.544545 1.580000 2.798636 -0.549667 3.363067 2.809067 -0.885252 0.799496 2.804748 -1.725562 3.842630 2.820301 -1.739442 5.830172 2.812361 -1.989336 5.285071 2.808815 -2.316182 2.991727 2.808364 -2.395000 4.005000 2.817378 -2.480687 2.795267 2.815458 -2.705878 0.151832 2.808092 -2.739487 5.786769 2.811692 -2.990958 5.851250 2.815708 -3.006972 6.107156 2.805872 -3.120489 0.266895 2.828680 -3.227456 5.993713 2.819474 -3.440515 5.469152 2.819242 -3.599865 1.081892 2.809324 -3.699767 5.497674 2.807829 -3.694194 1.497258 2.802581 -3.780233 4.972907 2.806163 -3.859500 2.189167 2.803500 -4.660500 1.309750 2.802750 -1.005238 6.022585 2.816190 -1.462623 2.916721 2.808525 -2.246889 0.151556 2.820778 -2.423846 0.010000 2.810769 -2.428267 6.061333 2.817200 -2.479134 3.690397 2.821408 -2.830982 5.057991 2.826652 -2.912465 3.731690 2.815775 -3.331184 3.616184 2.824145 -3.509651 2.938488 2.822907 -3.696212 3.096212 2.813788 -4.168136 3.033559 2.808305 -4.159818 5.722000 2.811636 -4.381796 3.515550 2.829142 -4.404800 5.830633 2.831267 -4.466186 0.688186 2.824419 -4.644556 3.195148 2.814675 -0.545783 6.218313 2.833434 -0.574760 3.861336 2.841336 -0.813333 2.206875 2.816250 -0.970211 0.391368 2.821474 -0.988667 1.850000 2.819778 -1.289531 5.897469 2.840375 -1.328988 0.666883 2.836316 -1.402370 4.233642 2.832659 -1.457434 1.836579 2.839967 -1.470444 3.758222 2.829185 -1.600000 5.527407 2.839226 -2.018788 2.178333 2.825227 -2.401940 3.234776 2.831741 -2.686957 4.343430 2.834831 -3.007709 5.244916 2.831006 -3.037314 1.687143 2.828571 -3.294829 1.687222 2.837607 -3.846580 4.593446 2.840959 -4.431607 5.558571 2.819643 -4.446545 4.438091 2.826727 -0.552609 4.746783 2.844348 -1.001827 1.552019 2.831058 -0.999157 3.132410 2.830723 -1.422444 0.029259 2.834370 -2.075393 0.586517 2.835955 -2.458202 5.176404 2.835618 -2.680229 3.867163 2.853954 -2.711356 3.588136 2.828814 -2.965081 0.743257 2.844821 -3.594733 3.965800 2.839733 -3.720891 3.715487 2.850084 -3.759394 5.239091 2.837803 -4.018971 1.339485 2.840662 -4.268873 4.035352 2.842923 -4.636082 4.692990 2.843196 -0.564335 1.843064 2.856821 -0.559474 4.481140 2.862456 -0.755000 1.008173 2.841635 -0.780370 1.964259 2.846852 -0.785723 3.272215 2.860154 -1.134459 3.350796 2.864140 -1.212135 3.940391 2.861744 -1.211509 2.278679 2.839623 -1.935429 6.071333 2.853000 -1.978088 2.729681 2.858685 -2.199812 6.135564 2.858195 -2.231859 2.297692 2.853654 -2.931264 4.415824 2.857637 -3.293438 5.690341 2.856790 -3.337346 2.008499 2.861743 -3.580435 2.094348 2.850435 -3.841543 1.088743 2.850286 -3.934828 3.065000 2.842069 -4.005836 6.168662 2.857695 -4.191637 0.812847 2.856584 -4.333110 1.321159 2.852805 -4.386641 3.170859 2.859805 -4.636063 0.254344 2.854525 -4.646082 2.038144 2.848557 -0.826298 5.422009 2.879142 -0.994683 5.643303 2.874163 -1.115623 4.210101 2.871953 -1.162965 0.244070 2.867638 -1.619528 4.356604 2.852642 -1.635628 4.095953 2.867256 -1.993547 0.125893 2.870587 -2.047526 4.204742 2.868351 -2.096887 4.548675 2.861258 -2.208592 1.771549 2.859437 -2.224318 2.774545 2.849091 -2.352203 1.282203 2.858305 -2.551788 2.499416 2.868978 -2.718065 2.698581 2.859742 -2.997885 1.385962 2.855288 -3.042971 5.599239 2.874964 -3.216967 4.470219 2.874727 -3.257376 5.276540 2.866844 -3.377000 0.287667 2.857083 -3.439677 2.516075 2.860108 -3.485000 3.210250 2.850750 -3.514041 4.247876 2.861503 -3.618968 4.790903 2.855097 -3.731266 3.349177 2.859684 -3.783857 0.268429 2.850000 -3.925894 1.581014 2.860725 -4.626012 6.306607 2.860714 -0.547826 4.994783 2.865362 -0.554017 4.138547 2.868205 -0.577396 0.831245 2.879660 -0.794940 0.569116 2.878594 -1.232000 2.695800 2.861200 -1.319910 5.006306 2.869279 -1.715000 3.165417 2.868125 -1.820732 2.350000 2.868293 -1.853889 4.472111 2.871000 -2.365019 0.985393 2.874869 -2.352108 4.587189 2.875189 -2.437465 1.707465 2.862254 -2.651959 0.965284 2.878325 -2.711473 3.341240 2.877209 -3.210428 3.344385 2.872086 -3.595860 4.499409 2.869946 -3.658588 0.617062 2.878814 -3.675091 6.383727 2.875909 -3.704701 0.869104 2.875522 -3.752941 4.157765 2.864471 -3.884757 5.937427 2.869515 -4.186545 5.976021 2.872513 -4.209742 1.816753 2.878196 -4.244762 6.236190 2.859881 -4.405328 2.110246 2.868443 -4.619400 4.958133 2.877800 -4.633015 2.716332 2.871910 -4.642273 4.278030 2.857879 -0.989286 2.630260 2.879026 -1.098768 1.319783 2.888696 -1.350645 3.494274 2.881694 -1.453417 4.792814 2.885075 -1.525772 0.507805 2.881545 -1.618000 2.490571 2.870429 -1.670000 6.083451 2.891882 -1.828544 1.741553 2.877961 -2.185620 0.803471 2.872562 -2.239863 2.031684 2.890756 -2.746094 1.402969 2.876094 -3.265742 3.085781 2.889180 -3.349922 3.869845 2.876744 -3.385773 0.917629 2.874948 -3.399282 4.666133 2.883149 -4.093054 4.477096 2.887635 -4.120047 2.538821 2.887217 -4.365804 2.897054 2.881339 -0.587417 2.589970 2.904024 -0.795717 5.882245 2.905281 -0.805333 1.714267 2.890000 -1.475362 2.681159 2.882464 -2.001504 1.915398 2.883805 -2.254959 3.802764 2.883740 -2.298175 2.542698 2.890238 -2.638041 1.975773 2.894124 -2.716267 6.030800 2.891511 -2.870189 4.795245 2.897623 -3.280994 1.423205 2.909295 -3.716032 1.722857 2.889048 -3.790059 1.967059 2.892941 -4.048138 2.024575 2.892186 -4.421913 0.937478 2.887826 -0.780663 4.635128 2.909643 -0.820641 1.251352 2.907367 -0.990283 2.888679 2.894434 -1.214394 1.903788 2.898333 -1.241000 1.076235 2.899353 -1.251497 1.532925 2.895170 -1.334063 2.480208 2.891250 -1.591203 5.270886 2.901646 -1.738281 1.505313 2.893906 -1.988533 3.383743 2.913084 -2.048613 2.473323 2.913968 -2.056667 5.519128 2.916744 -2.163088 4.794118 2.900049 -2.498072 6.279699 2.893072 -2.504000 1.468600 2.889000 -2.627000 4.884200 2.893700 -3.079634 2.080650 2.908659 -3.092132 3.572574 2.893750 -3.144036 2.846637 2.906054 -3.577731 0.163529 2.899916 -3.757257 6.151600 2.907714 -4.149273 3.266364 2.909636 -4.210175 0.149605 2.910307 -4.638151 0.517395 2.895714 -0.562613 5.727789 2.910402 -0.575678 1.164746 2.908559 -0.920709 3.499803 2.914921 -1.004144 6.261781 2.917500 -1.062536 0.611312 2.921341 -1.185833 0.010000 2.912083 -1.450863 4.530203 2.915685 -1.985848 5.820939 2.914874 -2.023400 6.304800 2.899800 -2.085569 5.055976 2.917358 -2.251351 4.356351 2.901622 -2.477079 5.428168 2.912079 -2.546971 3.035477 2.918133 -2.600449 4.627978 2.904719 -2.907442 0.387442 2.912558 -3.118970 2.343212 2.913333 -3.513097 5.224773 2.925938 -3.795065 0.030325 2.910844 -3.895146 2.677961 2.902039 -3.978011 3.695966 2.918977 -0.778571 2.765306 2.907551 -0.821531 2.440714 2.927143 -1.410306 6.114585 2.930044 -1.423771 6.373829 2.915829 -1.578886 3.378257 2.931629 -1.821166 5.112914 2.929580 -1.825929 1.270796 2.917345 -2.136087 3.161196 2.923750 -2.674141 1.646520 2.919780 -3.210132 0.757368 2.907500 -3.232430 4.097664 2.926776 -3.507990 3.453920 2.919749 -4.062528 5.268210 2.925795 -4.180732 1.540427 2.930915 -4.373627 2.635840 2.936933 -4.387752 4.669922 2.913488 -4.624673 1.088844 2.920251 -4.627841 2.286705 2.918182 -0.992422 5.164297 2.929219 -1.661173 6.361939 2.926071 -1.685920 1.943793 2.930057 -1.736331 0.977171 2.938768 -1.729010 2.715623 2.942204 -1.825287 5.622184 2.920805 -2.259347 5.891847 2.946705 -2.662846 0.364154 2.924385 -2.862826 5.413913 2.931087 -2.963523 3.280783 2.939075 -3.121375 6.280750 2.925625 -3.380063 1.173365 2.940283 -3.905000 0.725987 2.924013 -4.047445 2.288248 2.935401 -4.057355 4.977806 2.936710 -4.456875 1.716354 2.917500 -0.585404 2.304485 2.949522 -0.582712 5.236356 2.933983 -1.043333 3.735310 2.948178 -1.346042 5.667292 2.935417 -2.273591 6.372317 2.940270 -2.824747 2.143434 2.936061 -2.844615 6.230256 2.929744 -2.853065 4.171429 2.955377 -3.097868 3.863807 2.938629 -4.608776 5.418299 2.942313 -0.745729 6.141563 2.938125 -1.975950 1.084380 2.948264 -2.113418 3.606962 2.942532 -2.268871 1.552097 2.938710 -2.325197 5.636535 2.947717 -2.677410 5.228584 2.962410 -2.859203 1.822319 2.949420 -3.056356 5.022712 2.964350 -3.131000 2.590000 2.942800 -3.350226 4.983982 2.951538 -3.522110 5.682110 2.957156 -3.519710 1.598696 2.946667 -4.369305 2.353874 2.966556 -4.382044 3.815660 2.962013 -4.609503 3.429752 2.954876 -4.607908 5.681503 2.950392 -0.630000 6.400000 2.930000 -0.778592 4.123944 2.948732 -0.793213 4.993371 2.972081 -0.832313 3.873955 2.958507 -1.043587 4.672310 2.966474 -1.068624 0.886746 2.972963 -1.201522 4.449755 2.972364 -1.211739 3.118804 2.956087 -1.293286 0.441714 2.954143 -1.439294 2.073176 2.971676 -1.506768 1.572348 2.971311 -1.582976 0.756976 2.961756 -1.610675 0.124262 2.966793 -1.640513 3.638376 2.960684 -1.724115 0.362718 2.975062 -1.905962 3.031122 2.966218 -1.954537 0.825610 2.966244 -2.029538 3.835692 2.952154 -2.570364 5.664227 2.963500 -2.589734 1.220631 2.963688 -2.589788 4.111555 2.964488 -2.772178 0.599530 2.967054 -2.963931 0.982901 2.966069 -3.381854 6.183609 2.969371 -3.428922 2.257059 2.956863 -3.856667 0.476250 2.954896 -4.061374 5.553132 2.958626 -4.440645 4.195806 2.954194 -4.451496 6.150709 2.956142 -4.604857 2.972714 2.969171 -4.603529 5.945529 2.962059 -4.634242 0.822121 2.950606 -0.673841 3.557256 2.963659 -1.010698 2.274767 2.969767 -1.446349 3.097460 2.960794 -1.589677 1.322581 2.967097 -1.821967 5.375738 2.974098 -2.251799 3.397226 2.975488 -2.409465 0.290053 2.969626 -2.556105 0.736105 2.965684 -3.122000 1.208667 2.971111 -3.323333 6.397778 2.955000 -3.438519 0.697593 2.970556 -3.540000 1.878205 2.964188 -3.787949 1.307564 2.956795 -4.147686 2.791843 2.971843 -4.140172 4.728970 2.980129 -4.279718 5.443099 2.967606 -4.378636 4.918818 2.973182 -4.623243 3.737027 2.958919 -0.584430 1.404051 2.971772 -0.591183 0.380860 2.976774 -0.595098 3.049248 2.991732 -1.179446 5.487196 2.990369 -1.379280 0.210800 2.984400 -1.489661 1.083842 2.990367 -1.803846 0.618173 2.979760 -1.970240 1.464251 2.979701 -2.468077 2.138154 2.981769 -2.516000 5.915280 2.979360 -2.550647 0.084676 2.982806 -2.820882 2.895882 2.963235 -2.881604 2.427380 2.989626 -3.101616 0.539167 2.990783 -3.372746 0.041051 2.982271 -3.608080 2.766449 2.985435 -3.699009 2.511509 2.990819 -3.931100 3.446100 2.980400 -4.009053 0.951053 2.973684 -4.073558 3.929519 2.973269 -4.205401 4.244453 2.985766 -1.104513 4.938407 2.990442 -1.338686 1.311752 2.985839 -1.430426 4.010426 2.985638 -1.574441 5.748323 3.002484 -1.641067 2.957467 2.976667 -1.978692 0.430093 2.989346 -2.404566 4.815029 2.985838 -2.494366 4.409718 2.982958 -3.157006 1.845150 2.996407 -3.412473 5.913055 2.997527 -3.938529 4.280711 3.002010 -4.599196 4.001929 2.999678 -0.811795 1.493462 2.992179 -0.962454 0.085810 3.014282 -1.059556 5.862111 2.993667 -1.078889 1.711389 2.988056 -1.178089 6.085122 3.002846 -1.487313 2.331194 2.989701 -1.656981 4.911294 3.009865 -1.791356 4.681073 3.002655 -2.552769 3.498769 2.987231 -2.768261 3.131087 2.985652 -2.901264 1.558276 2.995057 -3.052028 0.081538 3.006573 -3.501915 3.710395 3.012948 -3.670876 5.887883 2.996934 -3.885631 6.353584 3.007952 -3.938226 1.796774 2.991129 -3.982487 0.260160 3.016417 -4.313269 5.173948 3.007120 -4.346824 6.392118 3.002471 -4.383024 0.503902 3.007171 -4.563333 5.178148 2.995741 -4.627188 1.560000 2.983125 -4.616522 4.498913 2.992391 -0.574348 5.966087 3.008152 -0.847073 4.360813 3.004797 -0.831297 0.318973 3.015622 -1.309068 2.894472 3.012050 -1.303876 3.712416 3.020758 -1.794305 4.256983 3.015932 -2.146888 1.269947 3.020186 -2.465091 3.864545 3.011727 -2.831880 5.656453 3.015556 -2.868916 1.234011 3.021111 -3.144691 5.851303 3.022443 -3.344422 2.699456 3.012177 -3.641162 5.008485 3.013586 -3.763290 5.653032 3.007806 -3.849693 5.406858 3.014483 -3.853712 2.903939 3.005076 -4.206617 3.605613 3.017361 -4.463099 0.146959 3.014094 -0.619245 0.134340 3.031321 -0.776604 5.644340 3.017107 -1.434645 5.456120 3.025519 -1.858778 2.137443 3.028125 -2.246563 0.470000 3.016172 -2.293333 5.157879 3.012879 -2.409600 1.883920 3.024160 -2.918045 2.687594 3.022481 -2.939975 6.012574 3.032277 -3.015106 3.033404 3.017553 -3.031495 4.592732 3.017268 -3.084866 4.289286 3.023170 -3.090000 5.392331 3.023006 -3.554808 1.361538 3.014615 -3.851057 4.848238 3.024626 -4.112820 0.502762 3.029622 -4.160495 1.222387 3.018288 -0.604194 1.656636 3.030276 -0.785479 0.807671 3.028082 -1.190548 2.123151 3.015616 -1.227989 5.166931 3.035556 -1.328938 0.876372 3.032566 -1.839646 6.226814 3.026726 -1.922000 4.036727 3.014000 -2.036383 1.704823 3.027730 -2.648554 2.311281 3.035289 -2.697941 6.395000 3.018824 -2.807178 0.194724 3.034110 -2.872027 3.916351 3.025946 -3.352867 0.468400 3.027867 -3.596714 5.454714 3.033857 -3.808177 2.271302 3.035573 -4.362868 5.669412 3.031912 -4.402759 1.153276 3.016724 -0.591667 2.059286 3.025714 -0.995349 4.046395 3.033140 -1.310984 1.722131 3.031639 -1.476782 5.098276 3.039425 -1.827576 0.012424 3.030909 -2.165479 0.229175 3.047228 -2.507978 5.039551 3.042135 -3.224842 4.770791 3.050253 -3.665972 1.103833 3.055250 -3.859615 3.197308 3.027308 -3.979545 5.775909 3.028485 -4.076650 3.050911 3.056404 -4.358105 3.354373 3.055452 -4.376240 1.928640 3.036240 -4.411852 1.474568 3.034691 -4.611852 1.865556 3.024815 -4.604184 1.318367 3.039694 -0.603711 4.297062 3.054175 -1.071839 0.389425 3.047241 -1.114377 2.486748 3.062340 -1.291735 4.682653 3.045918 -1.926182 4.897939 3.045758 -2.134639 2.932990 3.040103 -2.226963 3.986667 3.050444 -2.260786 5.418176 3.064025 -2.357424 3.634444 3.051566 -2.357818 2.835273 3.038182 -2.606012 2.816190 3.051905 -2.838409 3.475455 3.036818 -3.208217 0.964650 3.047261 -3.608493 0.433797 3.058464 -3.697647 4.651569 3.046471 -3.711103 3.544412 3.052059 -3.854268 4.025223 3.053185 -3.860929 5.142301 3.056195 -4.229257 2.142012 3.062167 -4.238431 0.978627 3.045294 -4.356806 0.758194 3.044722 -4.580442 2.505959 3.063363 -0.615091 3.318649 3.069221 -0.836852 2.113386 3.071852 -0.937294 6.056706 3.047059 -1.029681 1.944043 3.059894 -1.301309 4.214698 3.071779 -2.036773 5.275100 3.065100 -2.116545 2.195818 3.064682 -2.178099 0.974678 3.067427 -2.326323 0.718215 3.077677 -2.340226 3.089173 3.057669 -2.365336 2.363109 3.079397 -2.504116 0.510145 3.073275 -2.698911 3.694719 3.061386 -2.767626 4.997071 3.080657 -2.955570 6.392405 3.058734 -3.140643 1.590000 3.061053 -3.240539 0.247246 3.057425 -3.342381 5.428294 3.064960 -3.430638 2.936064 3.055745 -3.651544 3.064926 3.056029 -3.754658 1.539530 3.058718 -4.303206 4.470802 3.068473 -0.600556 2.796389 3.063611 -0.629172 0.616847 3.082930 -0.728088 1.871324 3.063824 -0.795752 5.242920 3.068319 -0.868333 1.045591 3.067796 -1.140300 3.509200 3.064400 -1.344414 3.302207 3.081172 -1.667595 4.473797 3.060253 -1.809377 3.813863 3.081713 -1.831977 2.506186 3.080819 -1.851461 3.541685 3.066067 -2.005217 4.402174 3.067702 -2.164639 2.673436 3.075326 -2.366364 4.208267 3.080398 -2.369153 1.141864 3.067119 -2.452162 2.621622 3.063784 -3.166927 6.061094 3.065625 -3.254877 3.647654 3.072222 -3.366824 4.262128 3.082804 -3.492162 4.796967 3.086186 -3.714184 4.397245 3.071429 -3.942389 2.493097 3.064956 -4.570455 4.779318 3.082143 -0.590200 6.240400 3.074400 -0.616429 5.447989 3.089577 -0.620177 0.982920 3.077168 -0.839900 3.130000 3.080348 -1.092000 2.755636 3.087182 -1.332266 2.646059 3.088079 -2.035725 4.664638 3.079420 -2.372338 6.080390 3.065974 -2.629547 6.191317 3.087613 -2.672617 5.463925 3.084346 -2.695846 2.573923 3.081692 -2.907789 5.223579 3.084105 -2.963410 3.686994 3.078728 -3.150000 5.940000 3.050000 -3.327005 2.448122 3.087310 -3.368018 1.743514 3.075946 -3.600000 0.010000 3.060000 -3.626393 4.168525 3.077705 -3.733908 0.198966 3.076782 -0.614457 4.822659 3.091685 -0.629560 3.779223 3.106736 -1.067917 1.485641 3.102564 -1.095000 1.155476 3.081905 -1.276556 5.848222 3.086000 -1.394232 0.628652 3.094569 -1.497568 6.120967 3.122077 -1.664955 5.524324 3.092252 -1.808000 5.792933 3.081467 -1.870442 1.880088 3.090796 -1.941758 6.006703 3.103242 -2.072295 0.638197 3.089344 -2.124315 6.191986 3.089863 -2.228841 4.516522 3.079130 -2.388758 1.400229 3.103693 -2.500719 0.941871 3.090863 -2.728981 5.875370 3.081389 -3.165393 3.217416 3.083483 -3.322698 3.402857 3.086190 -3.414000 3.183400 3.077400 -3.471455 4.509515 3.101381 -3.542456 6.354199 3.094128 -3.628608 3.922152 3.083544 -3.660653 2.063015 3.091658 -3.920761 1.143370 3.087391 -3.958051 4.571186 3.103729 -3.978148 1.383519 3.082407 -4.337213 3.048197 3.078852 -4.581728 0.364938 3.093519 -0.829332 6.313819 3.111169 -1.526292 1.825899 3.097191 -1.545745 4.687660 3.098511 -1.636916 3.183383 3.112246 -1.730515 1.661838 3.103235 -2.133487 5.713026 3.102993 -2.136038 1.920189 3.091509 -2.219130 4.941159 3.093333 -2.480000 1.641707 3.092561 -2.637381 1.462857 3.087619 -2.636863 1.820196 3.088235 -3.044909 0.775455 3.099636 -3.229945 5.170685 3.113151 -3.392329 3.983425 3.096027 -4.089104 6.053582 3.089552 -4.307248 4.019060 3.103490 -4.462569 3.596147 3.088991 -4.578966 2.108828 3.093931 -0.614406 4.554266 3.107063 -0.611190 4.043690 3.106905 -1.078693 3.264602 3.114716 -1.298685 6.285014 3.120630 -1.309775 0.016854 3.114494 -1.494802 0.393164 3.108870 -1.537893 3.816679 3.116643 -1.550377 4.260849 3.103113 -1.569021 2.534000 3.112383 -1.924551 2.799449 3.116435 -2.634435 3.295043 3.115565 -2.638000 4.770286 3.110286 -2.691007 4.519424 3.113381 -3.193438 2.207344 3.100781 -3.602194 0.831484 3.106839 -3.612222 6.101111 3.099667 -3.847700 6.028650 3.112100 -4.132923 1.897769 3.111308 -4.309740 5.918842 3.119385 -4.578312 3.209740 3.104286 -0.854523 2.866231 3.127588 -0.858194 3.640220 3.127048 -0.896061 0.552963 3.122727 -1.044767 5.313837 3.117326 -1.052529 4.288059 3.122471 -1.476947 3.534466 3.132176 -1.639533 5.969844 3.128599 -1.675067 4.032400 3.110533 -1.893800 3.246800 3.119500 -1.912118 0.219082 3.127012 -2.060135 0.019324 3.115135 -2.746538 1.016955 3.133494 -3.053333 4.050476 3.109286 -3.074449 3.454487 3.124601 -3.335948 5.692714 3.121970 -3.400792 2.065667 3.121667 -3.614847 3.313190 3.120123 -3.733200 1.815200 3.113867 -3.825814 3.772326 3.113721 -3.903465 1.997228 3.121683 -4.308075 1.693369 3.133610 -4.560851 6.311560 3.115248 -0.880652 1.692717 3.118804 -0.871169 4.790974 3.133117 -1.044895 5.658531 3.145431 -1.220912 3.957541 3.139751 -1.316803 4.916531 3.125034 -1.528333 2.805238 3.122381 -1.685254 2.297119 3.123559 -1.773426 1.394422 3.137729 -2.090484 4.169677 3.120968 -2.349530 0.054201 3.130940 -2.452821 4.608803 3.125470 -2.486731 5.288770 3.128414 -2.978380 4.827887 3.141502 -3.096190 5.621524 3.122286 -3.477760 0.223120 3.125520 -3.785692 0.646000 3.141577 -4.070934 0.753391 3.133356 -4.570667 0.645487 3.129487 -4.570980 4.299118 3.125588 -0.634694 2.487296 3.143112 -1.291184 1.937763 3.135000 -1.316212 1.504394 3.136818 -1.917964 5.546764 3.142509 -2.592751 0.270106 3.156376 -2.692348 2.069103 3.152902 -2.692326 4.268372 3.128372 -2.994000 1.968000 3.132000 -3.015357 0.295714 3.133690 -3.047959 1.375714 3.132041 -3.224744 4.468590 3.132051 -3.389455 1.498364 3.130364 -3.435285 1.015854 3.139756 -3.581090 2.331280 3.149668 -4.096705 6.305233 3.141783 -4.104336 3.361538 3.144755 -4.352766 2.811064 3.133191 -4.585814 2.760000 3.118372 -0.636207 1.231379 3.141494 -0.858750 3.378523 3.146591 -0.876538 2.556667 3.148718 -1.093429 3.006190 3.145714 -1.638036 2.054286 3.150804 -1.695693 1.144818 3.149489 -2.156349 1.495556 3.142698 -2.256075 1.720093 3.150280 -2.387438 5.779835 3.157769 -2.661560 3.946086 3.162569 -2.939948 2.227959 3.160103 -3.212189 6.331108 3.156216 -3.269810 0.677286 3.152048 -3.273492 1.286508 3.154206 -3.804286 2.696807 3.140924 -4.039974 1.628675 3.157870 -4.074884 4.101163 3.136744 -4.099206 5.115556 3.138571 -4.270000 0.045100 3.165267 -0.628686 5.085200 3.161257 -0.853501 5.846024 3.168457 -0.882227 1.306597 3.163655 -0.963894 5.072861 3.174543 -1.147487 0.696884 3.164271 -1.389164 4.473908 3.171752 -1.620114 0.908523 3.156364 -1.872750 0.972125 3.152875 -2.023167 3.691000 3.148500 -2.067673 3.440204 3.167837 -2.150000 6.397500 3.143333 -2.374500 6.323833 3.164833 -2.808937 0.421884 3.160242 -3.215714 2.989429 3.150286 -3.523583 2.597250 3.160833 -3.631647 5.220884 3.167068 -3.843342 0.916247 3.172986 -4.197966 2.391441 3.155678 -4.324233 4.721104 3.159877 -4.519342 0.894737 3.156053 -4.548725 5.541544 3.161074 -0.617551 5.755510 3.155102 -0.863176 5.468243 3.166284 -1.147528 0.190148 3.183100 -1.304255 5.615691 3.176064 -1.577111 5.295827 3.180938 -1.637439 0.615732 3.159024 -1.704110 6.389863 3.166027 -2.122802 2.435495 3.174835 -2.311452 2.068710 3.156613 -2.562715 3.041900 3.178914 -2.801111 0.754138 3.184215 -2.869286 0.010714 3.150000 -2.915226 4.419095 3.174422 -2.938462 1.730888 3.175207 -4.073960 5.373926 3.175336 -4.205161 1.426022 3.159677 -4.332582 6.215879 3.168297 -4.547045 5.802045 3.168068 -0.852059 4.541324 3.176176 -1.062056 6.219065 3.172991 -1.548302 0.026981 3.185535 -2.157048 3.197048 3.178667 -2.190839 5.973077 3.182168 -3.178317 3.860099 3.179505 -3.935281 5.592809 3.175281 -4.057363 4.873035 3.190000 -4.157851 5.699256 3.173471 -4.287514 0.322977 3.187225 -4.537803 6.064470 3.180227 -4.556304 5.017826 3.168478 -0.644805 2.232857 3.190260 -0.827101 4.172678 3.202531 -1.481391 1.290397 3.192583 -1.662885 0.239808 3.185288 -1.775054 5.050975 3.201552 -1.845149 0.477127 3.198507 -2.828082 3.011289 3.202925 -2.884167 3.277647 3.190588 -3.178375 2.629500 3.178375 -3.447256 5.035915 3.184634 -3.569355 1.652903 3.182581 -3.578505 5.646168 3.193178 -3.829828 0.395603 3.192845 -4.003011 0.052707 3.195663 -4.006403 3.601367 3.196079 -4.006761 2.828732 3.194930 -4.009735 2.215503 3.195291 -4.129688 2.618281 3.176875 -4.562500 1.682500 3.180500 -1.100619 3.725457 3.213540 -1.121461 4.774270 3.194719 -1.254048 0.436587 3.197937 -1.271545 5.357091 3.208409 -1.433535 3.036768 3.203838 -2.089831 0.417119 3.199492 -2.612594 0.021992 3.226729 -2.906904 5.462703 3.206904 -2.986506 6.208476 3.206766 -3.029881 2.836119 3.209284 -3.094375 1.119018 3.201696 -3.506393 0.623279 3.192623 -3.854138 3.368161 3.207414 -4.360326 2.572065 3.194674 -4.552857 3.828000 3.183429 -0.671004 1.478476 3.214535 -0.893686 3.890784 3.215333 -1.093647 5.965176 3.209765 -1.345943 2.165314 3.220457 -1.735185 2.952074 3.208741 -1.854113 4.551210 3.210403 -2.033529 3.938235 3.215147 -2.037834 5.055207 3.216636 -2.245432 4.727037 3.202099 -2.552426 5.985503 3.213077 -2.629018 5.686727 3.215018 -2.841224 1.448776 3.204694 -3.498508 3.529905 3.219937 -3.771905 1.314139 3.213956 -3.780090 5.796937 3.218243 -4.096180 4.346242 3.219410 -4.305568 3.767622 3.214649 -4.306196 4.991196 3.202935 -4.304371 5.495166 3.211656 -4.339828 4.253621 3.195345 -4.521964 4.545018 3.221964 -4.537808 5.290000 3.210959 -4.556061 1.139697 3.198788 -0.672273 0.334034 3.217898 -0.918170 2.316027 3.228571 -1.127735 4.514872 3.229872 -1.149238 0.956000 3.213238 -1.317200 2.420640 3.214000 -1.374259 1.058580 3.227716 -1.879778 0.730556 3.219667 -1.939800 1.572400 3.207800 -1.957241 6.309261 3.225468 -2.248630 3.795260 3.234986 -2.337640 0.324607 3.227865 -2.414355 3.991452 3.215161 -2.651865 1.252694 3.219275 -3.194630 0.438148 3.227259 -3.284820 5.931317 3.229611 -3.409754 6.164472 3.227359 -3.542304 5.899032 3.222811 -3.759279 6.268417 3.234028 -4.063841 3.860530 3.218411 -4.272075 0.603208 3.226478 -4.438263 2.285154 3.228067 -1.100035 1.755140 3.238287 -1.396304 0.204130 3.226087 -1.446935 4.069032 3.225403 -1.473917 5.802581 3.237512 -1.836693 5.308645 3.232829 -1.911972 2.302066 3.231033 -2.041579 1.135439 3.228596 -2.323631 3.400238 3.230298 -2.445578 4.875378 3.234940 -2.501333 4.381583 3.228000 -2.506585 3.742846 3.233659 -2.548824 3.495588 3.222647 -2.710833 1.639792 3.221667 -2.776364 6.355522 3.237037 -2.781136 2.754545 3.219773 -2.853036 4.100714 3.220893 -2.920097 2.539094 3.235825 -3.238390 1.887881 3.228475 -3.514534 1.251093 3.236478 -3.614271 2.876979 3.220000 -3.822205 4.211614 3.234370 -4.080400 0.988400 3.217600 -4.528400 2.982356 3.230178 -0.652368 5.984474 3.239386 -0.666346 2.995321 3.243397 -0.893905 0.227524 3.236952 -0.916875 0.853068 3.237216 -1.228861 1.295730 3.240819 -1.530302 1.574523 3.247236 -1.540603 4.931525 3.247305 -1.717143 3.404347 3.247599 -1.740000 4.770467 3.235421 -1.868088 4.139755 3.240441 -2.540769 0.743793 3.252944 -2.785979 6.059897 3.231959 -3.828168 3.007634 3.234275 -4.311209 1.115055 3.234615 -4.518472 4.076332 3.249782 -0.666284 3.511093 3.249617 -0.678100 0.023100 3.244200 -0.883947 1.902456 3.250000 -1.058477 2.104371 3.247881 -1.779060 6.136410 3.249060 -1.996316 2.048308 3.256805 -2.273600 2.936000 3.237600 -2.300614 5.102982 3.252544 -2.531639 2.486393 3.238525 -2.914909 5.720909 3.240727 -3.135303 2.389773 3.252727 -3.199200 4.942840 3.257160 -3.366212 2.792727 3.258030 -3.734706 5.452549 3.250353 -4.013623 5.884058 3.238116 -4.274386 3.510702 3.255000 -4.534149 1.445319 3.249681 -4.537750 3.417000 3.238500 -0.672097 0.812097 3.246452 -1.258895 2.859448 3.264807 -1.372066 5.128404 3.268873 -1.421961 0.814314 3.255490 -2.162281 4.358947 3.248421 -2.466018 1.822301 3.257788 -2.950806 3.867258 3.251452 -2.981073 0.586590 3.264713 -3.059174 0.086281 3.264876 -3.573616 4.325203 3.270738 -3.756717 0.036919 3.263838 -3.825387 4.978297 3.267678 -4.264125 3.206500 3.249500 -4.284859 0.859366 3.260423 -4.285374 5.239728 3.266463 -4.526383 1.924610 3.258298 -0.667500 1.999500 3.258000 -1.691441 3.670932 3.263390 -1.699643 2.698669 3.283117 -1.718824 4.346387 3.264790 -2.023896 1.788701 3.262468 -2.319667 0.897444 3.267000 -2.320213 2.601915 3.255532 -2.477054 2.794274 3.277676 -2.515971 2.234029 3.268417 -2.738491 2.359340 3.268868 -2.971437 5.062874 3.270958 -3.018412 5.952396 3.281894 -3.070036 4.610253 3.279603 -3.359710 2.269203 3.270580 -3.412261 5.292783 3.269217 -3.494262 1.871557 3.263852 -3.677897 4.744369 3.286799 -4.044340 0.304528 3.256604 -4.205278 2.950556 3.263611 -0.691536 2.706519 3.282321 -0.883673 6.083527 3.285745 -1.351625 1.744750 3.267500 -1.374437 4.724225 3.286690 -1.704851 5.687264 3.291020 -1.708961 1.854156 3.270779 -1.968805 3.049386 3.285358 -1.981371 4.810323 3.279194 -2.282026 1.240727 3.292883 -2.788843 3.496942 3.273388 -2.812378 0.191443 3.297988 -2.817926 4.664815 3.280593 -3.109238 4.291143 3.275238 -3.267059 1.638431 3.276863 -3.486346 0.033109 3.288718 -3.544865 4.053243 3.274324 -3.997885 3.178846 3.271154 -4.103137 1.227451 3.265098 -4.513952 0.192455 3.278024 -0.688708 4.384125 3.291125 -0.703504 1.729562 3.292044 -1.031356 0.411525 3.280339 -1.177556 2.617778 3.284667 -1.231375 3.159625 3.289625 -1.220660 3.423160 3.297264 -1.362374 3.717393 3.291362 -1.959298 2.605165 3.296364 -2.073175 0.882169 3.298254 -2.126652 5.531448 3.292986 -2.765682 5.206477 3.295909 -2.894255 1.223191 3.278298 -2.941932 0.944659 3.282841 -3.178269 0.904038 3.281731 -3.402778 3.042222 3.279167 -3.561203 3.789622 3.295636 -3.750350 3.617273 3.291608 -3.770370 3.951605 3.283704 -4.305909 2.026970 3.279545 -0.677734 6.230156 3.301328 -0.911784 1.534054 3.307351 -0.940000 0.010000 3.270000 -0.968112 1.100629 3.293846 -2.540758 5.101061 3.286515 -2.766400 1.868400 3.294700 -3.076829 3.646341 3.305061 -3.254907 5.501173 3.310247 -3.291830 0.190850 3.299739 -3.400732 6.392317 3.298780 -3.444010 0.411719 3.299115 -3.432021 3.287553 3.295745 -3.647155 0.258707 3.295776 -3.780231 2.260694 3.302486 -3.937465 1.825493 3.293239 -3.985688 6.130182 3.315195 -3.997286 2.449286 3.295000 -4.436531 6.394898 3.303061 -0.711304 1.056877 3.311344 -0.712129 3.251000 3.321581 -0.903538 3.035846 3.304462 -0.952764 2.724874 3.317889 -1.058195 4.084269 3.319914 -1.463140 6.242369 3.324766 -1.470167 1.957333 3.301000 -1.478756 3.270207 3.312280 -1.600000 4.557344 3.300938 -1.959000 5.733900 3.302800 -2.318019 5.355566 3.314057 -2.335828 0.581943 3.316306 -2.369762 3.154206 3.307222 -2.489781 1.073880 3.306721 -2.513500 1.521625 3.306313 -2.582061 4.147576 3.310667 -2.612906 0.487048 3.327368 -3.101185 5.284007 3.320348 -3.116667 2.099964 3.318261 -3.413227 0.825777 3.313108 -3.630116 3.129767 3.301279 -3.647680 1.031438 3.319150 -3.830065 1.559351 3.305325 -3.985270 0.571577 3.307973 -4.482375 0.471167 3.315125 -0.730143 0.572837 3.335931 -1.167188 4.983984 3.314297 -1.239842 4.289974 3.326359 -1.728485 2.442121 3.304848 -2.083719 4.583058 3.316364 -2.237778 1.896481 3.316852 -2.607163 5.402837 3.328365 -2.698647 4.904839 3.334404 -2.739351 3.748442 3.316948 -3.038594 1.547711 3.330683 -3.247910 3.455149 3.317836 -3.320208 3.689375 3.306250 -3.562347 2.128265 3.316327 -4.183710 4.574234 3.329718 -0.704343 4.905182 3.341533 -0.938067 4.379412 3.326807 -1.434355 2.695323 3.317097 -1.581443 2.218247 3.344021 -2.044536 1.378900 3.335601 -2.075455 5.281515 3.330076 -2.078043 2.825652 3.317391 -2.325359 4.527124 3.327778 -2.359091 6.075195 3.318052 -3.127534 3.170434 3.338428 -3.305636 1.109697 3.332242 -3.763161 2.527548 3.337935 -3.830400 5.232000 3.327867 -4.001527 2.827679 3.392439 -4.479174 4.843760 3.333347 -0.689848 3.996667 3.333788 -0.693718 4.637051 3.334103 -1.165525 6.371381 3.336961 -1.191645 5.787500 3.336382 -1.479186 0.600000 3.337209 -1.765105 0.083636 3.340420 -1.836429 1.236508 3.340635 -1.914854 3.570766 3.342956 -2.010439 0.108070 3.337982 -2.026650 6.087340 3.337931 -2.075036 0.622929 3.351357 -2.205199 6.271618 3.350663 -2.313947 2.370614 3.340088 -2.720944 4.409485 3.349270 -3.110397 4.037960 3.359943 -3.137921 5.729406 3.334356 -3.183256 6.134477 3.340407 -3.344367 4.191265 3.345753 -3.347170 3.929811 3.330755 -3.399488 4.795116 3.338419 -3.604627 1.468806 3.330149 -3.733486 6.021101 3.334404 -4.189689 1.810518 3.344560 -4.218923 4.099538 3.329385 -4.248507 6.050149 3.337463 -4.494141 3.640202 3.332222 -0.694255 5.476596 3.340957 -0.960743 3.539459 3.351588 -0.955457 5.313241 3.360055 -0.974037 3.271101 3.343028 -1.160000 0.010000 3.320000 -1.170545 1.526000 3.342182 -1.647168 0.414661 3.362861 -1.666387 0.760126 3.359580 -1.806439 3.905707 3.349707 -2.205125 5.785625 3.360271 -2.342308 4.229128 3.351949 -2.426775 5.592085 3.352769 -2.570470 4.620671 3.347651 -3.359532 2.528857 3.356208 -3.357500 1.414474 3.350000 -3.669065 0.761667 3.354187 -3.780441 2.003676 3.346029 -3.903947 1.105197 3.363750 -3.955556 4.699487 3.344017 -4.408723 5.695213 3.343191 -4.474307 2.744270 3.351049 -0.703883 5.226019 3.356117 -0.928766 6.330519 3.361169 -0.986410 0.641603 3.360577 -1.203947 6.119035 3.364123 -1.477129 5.572327 3.357772 -1.646381 1.380667 3.360952 -1.765496 1.631908 3.364351 -1.808670 5.916543 3.362766 -2.166053 1.615263 3.359145 -2.197257 4.909115 3.360442 -2.258090 0.117990 3.365628 -3.133893 1.304966 3.358993 -3.510227 4.564091 3.347727 -3.674583 0.503250 3.355333 -3.700986 1.766056 3.350704 -3.984545 4.055455 3.351970 -3.995192 6.386250 3.353462 -4.215000 2.237245 3.360612 -0.717593 2.387685 3.371204 -0.733443 3.736437 3.377395 -0.936000 5.586594 3.385125 -0.959219 4.839023 3.375508 -1.244359 1.992821 3.366795 -1.492329 4.334932 3.372808 -1.553333 3.893333 3.361053 -1.596829 6.033537 3.361829 -1.642966 4.127797 3.366695 -1.713297 3.156341 3.374384 -1.755254 0.994746 3.357119 -1.929274 3.300484 3.370242 -1.945629 4.372781 3.377483 -2.094600 4.147133 3.375900 -2.184783 3.568127 3.378462 -2.579851 3.292677 3.376840 -2.684412 0.922353 3.370662 -3.654634 3.378537 3.382561 -4.062946 5.190775 3.373023 -4.229800 4.829800 3.361800 -4.479769 0.730615 3.367615 -4.484519 3.203558 3.360865 -0.719000 5.728667 3.375467 -1.503617 2.464787 3.373511 -1.558000 1.138471 3.386647 -1.873205 0.298974 3.370256 -2.566308 2.013231 3.377308 -2.710959 5.877021 3.382705 -3.004556 3.405089 3.381479 -3.033134 1.858507 3.369552 -3.276524 4.460024 3.386952 -3.375288 5.722404 3.370481 -3.809317 2.788075 3.372609 -4.052438 2.034000 3.386594 -4.223701 6.298110 3.371575 -4.465769 5.930577 3.370385 -4.479692 4.335077 3.368769 -4.477500 5.122639 3.370833 -1.206513 5.529145 3.400461 -1.236098 0.590585 3.394683 -1.395841 1.421327 3.391416 -1.499293 3.516061 3.385960 -1.559850 2.905225 3.397800 -1.670920 5.421954 3.388391 -1.699559 6.314485 3.389265 -1.899748 5.512516 3.393899 -2.503975 0.175607 3.399038 -2.703851 2.586988 3.394689 -3.036400 0.316267 3.389911 -3.508704 5.503333 3.397623 -3.569434 2.693585 3.387925 -3.585949 4.977487 3.403282 -4.200000 5.817963 3.379444 -4.212059 0.170000 3.382941 -4.220891 2.488317 3.388812 -4.469638 0.989783 3.389565 -4.461429 6.181633 3.380816 -4.473043 5.459783 3.382174 -0.762303 1.302191 3.402079 -1.008214 2.479762 3.400595 -1.385273 0.376800 3.406691 -1.374078 5.957670 3.401165 -1.400000 0.010000 3.372500 -1.605376 5.141221 3.408427 -2.099082 2.258163 3.392857 -2.310636 2.122182 3.394818 -2.453523 6.300303 3.406023 -2.458192 5.847910 3.401751 -2.785277 5.594298 3.405277 -3.163502 6.378953 3.411372 -3.302319 0.604589 3.398986 -3.350310 2.030543 3.399302 -3.930986 0.818630 3.415507 -3.959143 1.364000 3.392143 -3.968500 5.430833 3.394500 -4.221932 2.747273 3.392159 -4.227679 1.379464 3.397679 -4.455167 1.258662 3.404201 -0.948082 5.861049 3.425601 -1.032595 1.324524 3.423119 -1.195985 1.097406 3.425761 -1.254394 3.927197 3.414508 -1.429759 5.328072 3.410000 -1.547729 0.176507 3.420306 -2.719419 1.406977 3.404767 -2.949719 2.315082 3.420304 -2.960939 4.839797 3.420203 -3.169821 2.716786 3.398929 -3.473288 1.665856 3.419452 -3.567881 2.368390 3.403559 -3.860154 0.206462 3.406615 -3.907055 3.781650 3.417508 -3.919124 5.677591 3.404161 -4.189924 0.438550 3.415420 -4.460909 3.878523 3.404091 -4.470857 2.481714 3.396571 -0.876481 5.074630 3.412593 -1.240714 0.835000 3.405952 -1.539889 1.760000 3.420667 -2.119273 0.327932 3.437886 -2.182996 3.289401 3.427753 -2.502078 1.295974 3.417273 -2.552551 3.917092 3.422857 -2.877074 2.047340 3.425691 -2.929024 2.712683 3.423049 -3.356792 5.095849 3.407925 -3.620413 5.751770 3.424690 -4.174317 5.569137 3.418561 -4.393981 1.566852 3.414722 -0.762000 2.144909 3.432455 -1.073061 2.910000 3.416735 -1.813571 4.912755 3.426429 -1.823795 2.155281 3.438020 -1.859094 2.857774 3.435736 -2.041282 3.794359 3.438872 -2.290507 3.970254 3.442535 -2.536849 3.005000 3.428767 -2.926563 4.204063 3.418438 -2.925222 6.295611 3.433278 -2.976618 2.966029 3.431127 -3.447737 6.007956 3.425912 -3.933119 3.505505 3.433211 -4.023758 4.934395 3.440637 -4.048842 1.605946 3.433822 -0.762436 0.133846 3.436282 -0.995049 3.809126 3.434175 -1.016585 0.129538 3.452985 -1.197365 5.219606 3.450197 -1.284557 4.532966 3.452446 -1.602663 4.767389 3.452611 -1.832177 0.576122 3.438299 -1.849655 4.665747 3.432069 -1.887389 1.894522 3.445987 -2.167692 2.545846 3.430000 -2.219464 1.031250 3.436429 -2.276897 2.772155 3.434914 -2.726145 1.156867 3.439759 -2.767590 3.118313 3.438494 -2.809948 3.967098 3.438290 -2.831514 1.673267 3.442510 -3.067233 0.752327 3.441384 -3.604090 5.250396 3.453087 -4.152908 3.634610 3.442979 -4.173825 0.698470 3.448415 -4.213556 3.870667 3.423556 -4.238462 4.323718 3.444872 -1.176264 3.641319 3.446044 -1.876234 5.171778 3.462594 -2.200676 3.028514 3.446351 -2.371243 4.744320 3.451243 -2.389252 1.680204 3.453333 -2.564915 6.074542 3.463559 -2.723043 2.846957 3.442899 -2.731190 0.687738 3.447738 -2.897033 5.363445 3.455502 -2.954559 4.453088 3.448603 -3.081200 1.072350 3.453950 -3.542308 2.941209 3.443077 -3.615494 6.208670 3.450043 -3.696286 4.142286 3.440714 -3.983646 4.286133 3.452155 -4.151250 3.120417 3.440417 -1.009744 4.589829 3.468889 -1.021572 1.942704 3.463019 -1.188974 4.773846 3.447179 -1.265739 0.161565 3.453565 -1.273765 2.228704 3.461049 -1.388697 4.959910 3.476472 -1.914797 6.382276 3.454146 -2.307419 1.433065 3.451613 -2.400120 3.700876 3.468167 -2.400805 5.003678 3.455862 -2.612584 3.546292 3.449551 -2.923717 0.027368 3.476776 -3.241155 2.955988 3.464985 -3.257635 1.801554 3.463784 -3.700615 1.251385 3.460103 -4.165758 0.957374 3.455960 -4.409133 3.432954 3.472222 -4.417432 4.568716 3.463268 -0.773524 1.888667 3.474286 -0.804188 2.875550 3.478429 -1.007265 2.232059 3.482941 -1.014430 0.916709 3.458987 -1.007377 1.690328 3.467213 -1.278167 2.481833 3.467833 -1.300968 3.004409 3.476505 -1.641486 1.981622 3.462703 -1.893117 0.816104 3.460000 -1.911757 2.408745 3.471757 -1.971908 1.066151 3.474375 -2.460598 0.862735 3.467009 -2.613200 1.789000 3.464200 -2.871736 6.050826 3.469256 -2.941061 5.792122 3.477510 -3.195745 5.928404 3.473245 -3.874434 3.254660 3.479968 -3.920682 5.926515 3.461364 -4.025422 0.029333 3.475156 -4.411440 1.851206 3.483502 -0.770526 0.788246 3.467719 -1.244783 1.717681 3.477681 -1.497561 0.907195 3.469146 -1.584133 5.819867 3.473333 -1.731273 4.462727 3.478909 -2.391034 3.437586 3.467586 -2.407568 0.393063 3.474414 -2.493813 4.397813 3.475000 -2.664854 0.016505 3.483398 -2.685325 6.297597 3.476883 -2.879163 0.495665 3.483498 -2.888760 3.621405 3.484339 -3.128704 5.038765 3.482654 -3.195870 4.717640 3.487994 -3.278938 0.357611 3.485310 -3.365754 6.242291 3.475251 -3.437944 3.513084 3.474673 -3.647738 0.095714 3.475714 -3.706200 4.559600 3.467400 -3.769000 3.017250 3.472250 -4.261822 5.051051 3.492079 -4.417360 2.133600 3.481240 -4.423878 0.044354 3.477551 -4.435373 2.987910 3.468060 -0.753902 6.006585 3.476341 -0.797816 2.592031 3.499885 -0.804186 0.377535 3.493023 -1.247821 2.743619 3.501362 -1.381667 4.142308 3.491026 -2.190882 4.385539 3.495343 -2.205542 5.146988 3.484819 -2.489651 2.463953 3.483140 -3.131683 2.492970 3.487822 -3.584681 1.944043 3.480319 -4.145551 3.371066 3.496801 -0.801513 4.187697 3.499342 -1.686505 3.745922 3.497087 -1.725340 3.486456 3.505388 -1.836324 6.135784 3.509608 -1.860210 4.147832 3.495594 -2.073947 4.743158 3.494211 -2.104306 2.030417 3.489583 -2.880749 5.102834 3.507166 -3.054516 3.815726 3.493548 -3.241429 2.249365 3.507937 -3.324112 5.320374 3.492056 -3.403786 3.159500 3.499643 -3.749744 5.516282 3.498910 -3.797517 6.380455 3.516818 -3.872024 0.435893 3.500893 -4.402427 4.130921 3.500209 -1.304086 3.273555 3.516080 -1.360000 5.734000 3.512000 -1.842734 1.419820 3.517014 -2.438542 5.248177 3.514740 -2.629204 5.085664 3.508850 -2.688757 0.316836 3.521808 -2.924505 1.293297 3.504615 -3.094264 5.513876 3.510698 -3.284159 0.931416 3.505310 -3.480577 4.035096 3.511442 -3.638841 3.654493 3.514130 -3.809916 4.813866 3.508151 -4.017895 2.277895 3.503553 -4.398525 0.308579 3.513770 -0.788962 3.441038 3.515472 -0.993971 6.129779 3.511691 -1.041897 4.251897 3.513793 -1.055692 0.446443 3.527826 -1.826870 5.722672 3.520687 -1.973503 5.943450 3.603259 -2.250000 5.486522 3.517043 -2.261957 5.989946 3.520924 -2.708000 4.211333 3.523111 -2.743023 4.716434 3.522093 -2.788528 3.369722 3.532472 -2.885842 0.930891 3.518812 -3.201917 3.604889 3.534417 -3.242938 1.551688 3.523000 -3.412978 3.784831 3.521236 -3.493961 1.093052 3.532792 -3.529607 0.312295 3.532000 -3.688077 3.900769 3.507500 -3.809408 5.074737 3.513750 -0.786604 4.450000 3.520755 -1.077148 3.132096 3.540687 -1.519091 6.386883 3.521818 -1.513103 3.132759 3.518276 -2.037143 4.983571 3.526143 -2.063333 5.643141 3.535449 -2.169247 1.246986 3.530959 -2.384167 1.927222 3.517639 -2.502780 0.618976 3.534537 -2.511014 2.206329 3.538841 -2.517432 2.730137 3.539016 -2.707544 2.361930 3.518070 -3.157757 4.240514 3.531028 -3.306923 1.261346 3.522500 -3.402194 0.066367 3.532266 -3.515069 4.297743 3.534688 -3.701127 1.593333 3.528333 -3.881118 1.778882 3.529627 -4.108615 1.187385 3.518462 -4.386084 5.288112 3.527692 -0.783415 6.242683 3.527805 -1.069558 3.402210 3.546022 -1.171906 5.950809 3.552689 -1.433935 3.769379 3.544379 -1.601975 1.550191 3.540000 -1.670513 2.403077 3.533333 -1.723911 2.659815 3.545978 -2.111745 0.030468 3.550170 -2.168486 1.790784 3.554541 -3.149109 0.144368 3.552759 -3.216360 3.326207 3.545900 -3.370914 2.735635 3.542995 -3.519486 0.579673 3.543224 -3.555029 4.746192 3.549477 -3.934834 4.525762 3.542384 -4.114264 6.073953 3.537907 -4.382345 0.568207 3.541379 -0.798571 3.928571 3.545000 -0.795075 4.711940 3.542537 -0.825455 1.038485 3.548182 -0.824388 3.187908 3.555306 -0.835980 1.523660 3.556438 -1.096763 4.988426 3.567339 -1.347276 6.203621 3.555483 -1.406832 0.700495 3.551188 -1.417287 2.041117 3.549043 -1.930345 1.666069 3.551379 -1.978804 3.059185 3.553804 -1.980733 2.659400 3.549933 -2.222301 0.805739 3.558011 -2.225758 0.541273 3.554545 -3.521333 6.396889 3.540667 -3.735049 0.931845 3.545728 -3.796731 2.356731 3.535000 -4.047059 0.272745 3.538039 -4.118435 4.712652 3.552087 -0.826979 5.429532 3.572255 -1.592180 6.166992 3.559549 -2.026656 5.372125 3.575750 -2.419442 3.191076 3.568606 -2.454767 1.098895 3.560756 -2.459337 4.143976 3.567349 -2.517759 1.496207 3.550000 -2.606235 5.709471 3.564000 -2.987215 3.192877 3.566712 -3.121023 0.536093 3.568791 -3.155263 2.006974 3.553947 -3.497115 2.170224 3.567821 -3.480618 1.442542 3.577482 -3.655549 5.980445 3.574036 -3.860755 6.141415 3.561698 -4.139005 4.079147 3.565261 -4.146094 5.335938 3.551250 -4.377450 3.689060 3.554966 -1.000896 2.736418 3.560746 -1.089823 5.689381 3.586047 -1.467798 2.616607 3.569583 -1.520377 4.539811 3.567484 -1.527162 1.311892 3.565541 -1.617700 5.587100 3.571550 -1.742822 1.181245 3.574689 -2.080283 6.242085 3.586862 -2.100789 1.490132 3.561711 -2.668729 5.349171 3.568674 -2.689067 3.752000 3.571067 -3.504744 0.828205 3.563846 -3.638485 2.530758 3.563485 -3.776165 0.665090 3.578746 -4.357639 0.836898 3.579769 -4.364430 4.805436 3.572416 -4.361447 5.825921 3.561711 -4.370833 5.582083 3.559583 -1.032941 4.006176 3.583015 -1.092876 0.714335 3.583219 -1.343956 3.522637 3.578242 -1.585598 4.011624 3.586068 -1.712356 0.289540 3.582069 -1.936200 0.197600 3.571200 -1.994712 4.529640 3.594317 -2.019883 3.432953 3.589357 -2.356000 5.697778 3.569778 -2.885849 2.519245 3.575597 -3.098333 5.269643 3.575714 -3.143341 6.160935 3.591449 -3.242362 3.973568 3.582563 -3.336667 4.914394 3.567576 -3.330278 5.568167 3.580944 -3.814118 2.103529 3.589538 -3.895985 4.012117 3.580730 -4.060552 6.342566 3.588585 -4.077802 5.770055 3.582253 -4.358352 6.075824 3.571978 -4.351011 6.341011 3.581180 -1.239780 1.301282 3.597179 -1.373055 5.489539 3.606455 -1.403016 1.105794 3.584206 -1.573488 0.520640 3.590116 -1.607930 4.280881 3.598943 -1.715376 0.922688 3.587634 -1.812428 3.254529 3.601377 -2.300053 6.379158 3.590526 -2.551389 4.862361 3.588750 -3.038653 1.751036 3.594870 -3.418352 2.426758 3.593077 -3.432773 5.820504 3.585714 -3.638235 3.209804 3.587598 -3.675680 2.792426 3.593550 -3.880611 5.307889 3.590000 -4.120774 1.815806 3.592903 -4.228667 2.943939 3.591879 -4.351444 1.106203 3.593209 -4.368831 2.735455 3.583636 -0.831892 5.699527 3.596216 -0.860798 0.604172 3.598221 -0.953507 5.209478 3.603284 -1.078051 5.422542 3.600169 -1.097869 1.509016 3.595410 -1.353439 1.536688 3.605605 -1.594301 5.327306 3.608342 -1.710547 1.785323 3.605970 -1.711310 2.998363 3.615239 -2.079528 4.009571 3.599442 -2.258778 2.270833 3.609222 -2.293003 0.217157 3.612875 -2.368526 2.934211 3.601158 -2.686800 2.004571 3.601314 -3.000103 4.038144 3.594948 -3.011321 1.499245 3.589057 -3.420137 4.533288 3.591096 -3.771192 4.306995 3.606736 -3.964481 1.008506 3.602597 -0.858421 3.698684 3.618202 -1.118328 6.332958 3.610836 -1.365673 4.730481 3.608462 -1.444706 2.361373 3.608725 -1.609464 2.187321 3.599643 -1.894737 3.653053 3.606947 -2.007513 0.657919 3.615685 -2.127989 2.857759 3.615287 -2.475612 5.491122 3.615306 -2.734535 4.459942 3.609070 -2.926564 0.258650 3.613190 -3.760132 3.454305 3.608874 -3.805699 5.763656 3.620573 -4.095254 2.521949 3.605424 -4.109853 1.424265 3.597794 -4.324235 3.195882 3.617529 -4.353294 1.405059 3.602588 -4.340872 2.481544 3.615235 -1.656794 4.976327 3.627983 -1.832141 3.908049 3.635095 -2.004595 2.219459 3.614189 -2.517605 4.609191 3.631327 -2.900786 0.705286 3.625571 -3.135421 4.493645 3.611776 -3.472200 5.102000 3.616400 -3.833333 0.010000 3.607778 -3.859952 1.409614 3.621981 -3.995315 3.060961 3.633123 -4.036269 5.120896 3.611194 -4.072019 3.826442 3.625577 -4.229516 2.245484 3.609516 -0.842791 4.961744 3.619767 -0.875985 1.274672 3.631606 -1.173196 3.812165 3.627423 -1.288864 0.481761 3.631250 -1.361410 4.357436 3.630641 -1.442927 2.865000 3.625122 -1.461458 5.966667 3.633802 -2.212659 3.615635 3.638690 -2.258171 4.896286 3.629314 -2.621233 1.277808 3.634795 -2.682417 1.008083 3.631917 -2.752484 1.506369 3.641783 -2.743786 5.918786 3.631786 -3.070000 2.739500 3.617000 -3.138867 5.735123 3.629901 -3.296475 0.713852 3.629098 -4.009187 5.524228 3.624309 -4.079085 0.526078 3.637320 -4.238174 0.145434 3.634658 -0.873237 2.058417 3.635252 -1.230324 0.930356 3.647152 -1.416786 1.790982 3.637143 -1.460544 0.299456 3.638095 -1.534621 3.349798 3.650303 -1.734420 5.927800 3.655780 -2.236679 4.626900 3.648524 -2.291632 2.618289 3.647816 -2.901389 5.601389 3.630972 -3.010299 3.456866 3.634478 -3.020556 6.398889 3.624444 -3.389636 1.926727 3.629273 -3.765329 0.243699 3.645517 -3.866575 2.626740 3.639337 -4.319156 1.663556 3.645600 -4.326316 3.926491 3.631404 -1.063832 1.124673 3.648318 -1.129432 4.434545 3.640682 -2.408044 6.151240 3.660744 -2.463636 5.896883 3.641429 -2.540143 0.139810 3.652190 -2.558349 3.405000 3.653761 -2.830933 2.205333 3.641067 -2.850198 2.998218 3.647426 -2.927826 4.289437 3.663299 -2.952154 4.647846 3.646308 -4.058421 2.083289 3.643026 -1.114412 1.811471 3.646471 -1.126947 2.076632 3.652105 -1.128448 2.914138 3.655517 -1.155578 0.248741 3.666871 -1.381409 0.052610 3.675935 -1.427500 5.147440 3.660595 -1.781304 2.026739 3.657174 -1.823369 4.750494 3.678820 -2.090000 2.455522 3.647910 -2.375476 1.312143 3.647857 -2.410528 3.891901 3.674261 -2.649032 3.997097 3.650000 -2.825607 2.746262 3.660748 -2.854724 4.900394 3.656929 -3.423136 2.964746 3.654068 -3.497750 5.390875 3.652250 -0.879020 1.769020 3.653922 -0.900541 5.944472 3.678575 -0.902661 0.228548 3.668226 -1.137848 4.695949 3.672405 -1.174272 2.382722 3.682880 -1.813803 0.019108 3.682629 -2.232843 4.198235 3.662745 -2.256964 3.359107 3.656964 -2.313989 1.565319 3.667979 -2.646986 2.549658 3.671575 -2.663993 3.161282 3.677839 -2.714146 0.519024 3.657805 -2.774667 1.775500 3.661500 -2.937754 1.978941 3.676102 -2.955349 1.105659 3.672713 -2.995269 5.951935 3.681774 -3.048717 2.338586 3.683272 -3.096353 0.852941 3.667412 -3.440046 3.356250 3.675463 -3.450560 6.110960 3.663920 -3.837167 3.723348 3.670129 -4.033214 3.535268 3.665893 -4.046842 0.775000 3.661711 -1.808913 0.505261 3.682609 -1.838953 5.528014 3.688412 -2.227154 1.049112 3.693029 -2.248829 5.300360 3.679820 -2.517407 1.731414 3.690135 -2.660769 0.758803 3.683675 -2.666480 6.156786 3.684235 -3.116240 4.873872 3.694039 -3.209700 1.078300 3.698200 -3.265307 6.376316 3.686272 -3.438344 1.687748 3.680265 -3.675392 1.810506 3.688101 -3.673581 4.077973 3.683514 -4.294481 2.001749 3.681803 -4.275556 4.545313 3.691146 -0.907067 0.850933 3.681600 -0.905059 2.989882 3.688706 -1.354592 3.972602 3.693469 -1.592407 3.616420 3.687593 -1.991146 0.914167 3.695052 -2.038626 0.389121 3.688132 -2.195904 3.108883 3.698883 -2.365789 4.408421 3.686842 -2.761622 6.394865 3.677838 -3.102171 2.983808 3.697651 -3.579631 5.634538 3.699103 -3.661583 4.949778 3.698861 -3.985089 4.884464 3.699196 -4.259547 4.270121 3.705438 -0.895179 4.320893 3.695536 -1.192140 4.176347 3.711107 -1.824200 5.270600 3.693000 -1.903364 6.389813 3.694766 -1.956197 1.864648 3.694225 -1.979416 1.191948 3.709286 -2.188473 5.816158 3.706355 -2.462765 5.069625 3.703481 -2.508131 0.401495 3.697009 -3.235451 2.573819 3.705625 -3.243717 5.109867 3.703982 -3.338710 0.475968 3.691290 -3.643618 4.511709 3.698141 -3.988761 1.620000 3.707212 -4.056410 2.788051 3.703897 -1.149167 3.577667 3.707500 -1.192019 5.234327 3.714904 -1.855158 2.504421 3.702211 -1.898356 5.041507 3.708219 -2.622368 2.898053 3.715632 -2.785364 3.565099 3.715695 -2.903910 5.359799 3.724211 -2.914907 6.217920 3.717547 -3.034556 3.691000 3.710222 -3.189835 1.363992 3.715679 -3.269425 5.950402 3.713966 -3.317425 4.345389 3.714731 -3.591875 0.032500 3.706063 -3.651161 1.283125 3.705804 -3.672727 5.215455 3.705354 -3.958605 5.963688 3.723121 -4.002914 4.344686 3.712686 -4.279778 3.445778 3.704667 -0.919053 4.574852 3.715325 -0.939395 2.542326 3.718419 -1.774891 4.470876 3.719124 -1.892888 2.830036 3.725740 -2.131833 5.089167 3.711167 -2.196483 2.017585 3.737987 -2.444197 0.899343 3.724854 -2.440845 2.417042 3.714789 -2.461032 3.634603 3.716825 -2.788235 0.010000 3.707647 -2.859148 3.873409 3.724432 -3.373578 0.237890 3.721193 -3.576405 3.841373 3.719477 -3.748596 3.016082 3.719766 -3.988727 0.123000 3.724909 -4.249200 5.188100 3.726700 -0.923194 6.218168 3.728586 -0.917119 3.476949 3.722881 -0.933932 2.284274 3.724615 -1.181592 2.648726 3.733503 -1.517328 0.841422 3.738799 -1.789158 4.156842 3.735684 -2.465282 2.023944 3.729085 -2.725344 5.159924 3.739771 -3.140618 0.338146 3.729045 -3.267075 5.371429 3.729728 -3.289306 2.123750 3.721528 -3.666542 0.482712 3.748427 -3.685304 6.185217 3.726522 -3.810000 4.702361 3.723472 -3.930424 3.298545 3.732303 -3.942857 2.360974 3.733636 -4.265306 5.440408 3.725306 -4.283409 0.407045 3.713182 -1.243195 3.140237 3.742071 -1.278407 5.794973 3.751209 -1.462332 6.351989 3.763320 -1.753713 6.207178 3.744455 -1.794405 2.261548 3.736310 -1.937076 5.761345 3.738596 -2.525655 6.372768 3.745238 -2.991322 5.100460 3.739425 -3.276217 4.664957 3.744174 -3.407711 1.238554 3.736627 -3.486901 2.625704 3.741831 -3.567667 3.575400 3.752967 -4.218723 5.932553 3.726809 -1.337426 2.181864 3.762663 -1.545693 5.757154 3.756217 -1.756458 1.574792 3.737500 -1.801667 3.466778 3.752056 -1.948269 1.446346 3.742692 -2.015576 4.283680 3.756320 -2.057742 3.789194 3.748978 -2.363485 0.640644 3.756515 -2.690689 5.537356 3.760467 -2.944967 0.492026 3.752157 -3.281111 3.169630 3.746852 -3.298616 3.739322 3.757627 -3.702703 2.292568 3.741892 -3.794123 5.493070 3.743596 -3.927421 1.895833 3.754206 -3.985020 1.220040 3.756397 -4.196594 0.966006 3.757337 -4.220826 6.191364 3.752645 -4.261449 0.666957 3.741159 -4.259714 5.698857 3.734571 -0.985059 3.232485 3.778491 -1.272739 6.068185 3.769236 -1.285315 0.699505 3.768468 -1.499862 3.074050 3.771433 -1.565455 4.708446 3.771378 -1.575000 1.148276 3.748621 -1.610522 2.521522 3.770478 -1.637533 2.785267 3.756867 -2.047045 4.858864 3.758636 -2.076195 1.657345 3.758938 -2.085028 5.542486 3.766851 -2.093977 0.157614 3.760795 -2.184409 6.069685 3.748976 -3.193821 1.625472 3.768726 -3.223512 3.474762 3.770000 -3.417595 4.050541 3.770622 -3.438681 0.968462 3.755055 -3.629388 2.054694 3.751633 -3.675122 1.037561 3.749024 -0.947723 5.553762 3.763267 -1.261549 4.993662 3.766901 -1.536697 1.448394 3.774312 -1.546081 2.014542 3.773516 -2.135556 6.396667 3.763333 -2.924900 1.341833 3.779100 -3.017800 0.069546 3.777959 -3.646996 1.536567 3.778712 -3.668889 0.801944 3.756389 -4.031692 4.600154 3.777744 -4.236581 1.251453 3.764615 -4.238854 3.688854 3.762604 -0.982157 3.853922 3.785441 -1.004648 0.449805 3.786563 -1.190667 5.552933 3.775867 -1.287440 3.394480 3.781120 -1.608261 0.135280 3.782919 -2.600072 2.238406 3.776594 -2.716133 4.201067 3.777467 -2.740327 4.656797 3.776013 -2.848103 0.899770 3.781954 -3.194101 1.891573 3.778315 -3.487753 6.338590 3.779339 -3.921791 6.226418 3.783358 -4.215491 4.793757 3.779249 -4.239844 2.647813 3.771406 -0.954167 4.811875 3.778750 -1.255373 1.677015 3.795224 -1.266757 1.927838 3.787297 -1.352030 3.718687 3.803851 -1.536410 4.426325 3.795983 -1.574925 3.853134 3.775224 -1.849075 0.247543 3.805377 -1.943402 3.137191 3.806160 -2.075802 2.661975 3.781481 -2.428472 4.796806 3.780278 -2.541972 5.327606 3.777324 -2.762424 0.326212 3.778788 -3.172292 4.153125 3.782917 -3.558060 4.278881 3.800709 -3.951446 0.360602 3.785542 -0.964462 4.112615 3.794000 -0.980444 1.426000 3.789556 -0.979500 2.779300 3.793900 -0.979587 5.060000 3.803140 -1.788588 1.032316 3.809040 -2.287656 1.774531 3.796406 -2.583407 4.404505 3.791209 -2.795714 2.392101 3.799916 -2.943462 1.608590 3.793205 -2.984982 2.597365 3.808845 -3.065603 3.278621 3.799397 -3.108304 3.914620 3.805322 -3.352420 5.722038 3.799936 -3.471351 0.662819 3.807876 -3.543376 5.903939 3.808824 -3.877725 5.102036 3.797305 -3.902031 0.615430 3.810039 -4.029571 5.325643 3.810643 -4.189388 2.389429 3.814327 -1.123409 0.026688 3.818669 -1.575769 1.709231 3.796731 -1.586066 5.495972 3.810664 -1.626818 0.375682 3.797045 -2.287799 0.374654 3.815409 -2.411731 5.713269 3.800769 -2.655126 4.907787 3.823165 -2.852521 5.754062 3.821541 -3.417876 4.945693 3.821298 -3.538654 3.122404 3.805577 -3.560331 4.727769 3.808926 -3.666056 3.334648 3.809437 -4.029684 4.106013 3.808101 -4.197668 1.507720 3.812850 -0.996267 1.932800 3.810800 -1.219149 1.431277 3.809574 -1.293288 4.509452 3.814795 -1.340098 1.202580 3.833317 -1.416392 2.685979 3.809485 -1.554643 4.161964 3.817321 -1.758516 1.305875 3.830326 -1.863944 0.727702 3.828292 -1.960325 2.102927 3.816423 -2.038682 5.289591 3.828773 -2.191282 0.823718 3.817051 -2.621394 3.811010 3.819615 -2.813229 3.329561 3.832853 -3.576476 2.853429 3.828143 -3.714331 2.533622 3.814173 -3.840172 3.935776 3.810690 -3.891606 0.894234 3.821168 -0.989180 5.313115 3.823279 -1.013289 1.667105 3.828026 -1.037898 0.702102 3.836433 -1.305089 2.907054 3.825536 -1.483580 4.952716 3.821111 -1.568846 2.273077 3.813462 -1.600612 5.199592 3.819388 -1.808010 3.725000 3.841505 -2.001864 4.626780 3.826610 -2.226575 4.003119 3.833211 -2.265714 2.813354 3.827391 -2.414140 3.285478 3.830701 -2.484146 4.101341 3.835823 -2.480196 2.657647 3.842745 -2.612025 5.851139 3.826076 -2.653333 1.897895 3.824912 -3.102788 4.388077 3.829135 -3.143949 5.568587 3.835072 -3.451230 5.218095 3.835357 -3.479667 2.236167 3.816500 -1.206214 6.306214 3.841714 -1.355476 5.377143 3.840873 -1.694931 3.245590 3.844271 -1.710000 6.400000 3.820000 -1.969778 4.014222 3.833333 -2.120260 0.577857 3.848409 -2.115833 2.307222 3.847222 -2.321618 5.472228 3.854271 -2.332692 0.100994 3.850577 -2.424881 3.017698 3.843333 -3.190769 2.790385 3.834103 -3.589134 0.245118 3.842362 -3.834236 2.787896 3.853084 -3.847627 3.524350 3.840000 -4.157373 2.994235 3.842196 -4.163709 3.256490 3.841656 -4.177059 0.010000 3.836176 -4.169239 1.831576 3.842989 -4.196250 3.926528 3.826944 -1.024028 5.777109 3.847630 -1.066828 0.964793 3.858069 -1.317531 4.765188 3.860837 -1.410784 0.490833 3.857598 -2.036099 3.546233 3.854798 -2.173925 1.444393 3.843084 -2.185427 4.457607 3.861068 -2.608333 1.107886 3.859756 -2.930259 4.090570 3.849378 -3.003571 0.715238 3.845357 -3.075562 2.114894 3.862766 -3.094457 6.354286 3.849314 -3.303696 6.163519 3.862557 -3.872283 2.141096 3.851370 -3.902742 5.688871 3.837903 -4.017373 2.579407 3.841949 -0.996667 6.400000 3.833333 -1.377303 2.433717 3.867500 -1.607308 6.038615 3.858308 -1.748700 1.876100 3.849500 -2.286061 3.748485 3.846364 -2.297710 3.503588 3.860916 -2.362897 2.215888 3.866308 -2.566667 0.010370 3.850000 -2.659042 1.372682 3.876054 -2.703492 1.647354 3.867725 -2.800518 6.021224 3.870918 -2.799713 2.099936 3.874236 -3.266733 0.804158 3.853564 -3.444808 4.509808 3.856154 -4.011448 3.751136 3.877706 -4.159160 0.245378 3.858824 -1.392857 0.235714 3.866633 -1.630379 0.620530 3.863939 -2.137879 3.307652 3.865833 -2.277927 4.967683 3.862805 -2.767586 0.630251 3.886708 -2.916837 3.086122 3.865000 -3.121379 5.822069 3.860517 -3.238194 2.315139 3.858333 -1.041948 6.053831 3.877857 -1.072161 3.000879 3.886667 -1.071473 4.387649 3.889467 -1.089537 2.161907 3.891526 -1.725268 4.902282 3.888254 -1.741048 2.981210 3.882097 -2.041583 6.221636 3.893298 -2.311548 6.239409 3.899572 -2.343905 5.936381 3.876476 -2.356045 5.205522 3.885149 -2.416818 4.559318 3.871364 -2.457843 1.560667 3.887294 -2.880462 1.830923 3.868308 -3.182508 0.538482 3.889571 -3.414054 0.011351 3.875135 -3.442055 1.854466 3.882648 -3.870278 1.447500 3.865278 -4.133096 2.104184 3.880544 -4.126016 5.020398 3.884382 -1.062308 1.223590 3.880256 -1.332128 0.940426 3.885957 -1.354314 4.280131 3.890588 -1.484259 3.502889 3.902519 -2.215044 4.725575 3.887699 -2.410140 1.281121 3.897383 -2.554127 0.247922 3.900000 -2.539763 6.096746 3.905030 -2.728371 6.302664 3.905145 -2.742199 2.634894 3.886738 -2.950735 4.568382 3.878088 -2.982245 3.511633 3.875918 -3.413097 1.542258 3.890194 -3.821959 1.691031 3.884021 -3.916574 3.094815 3.885463 -4.118641 5.570924 3.889511 -4.135045 0.496396 3.887838 -1.074895 3.447622 3.902238 -1.207647 3.928941 3.897529 -1.760492 5.662077 3.900492 -1.817834 5.914331 3.899299 -2.164541 1.194031 3.909439 -2.281833 2.496000 3.899750 -2.872903 2.840968 3.888226 -2.889346 4.821308 3.899346 -3.058333 6.082613 3.907613 -3.070530 0.945303 3.905530 -3.354669 2.974587 3.899504 -3.417505 5.487027 3.916881 -3.767880 6.019954 3.902028 -3.801765 4.163137 3.887451 -3.819785 4.872366 3.894194 -4.128087 3.507652 3.897913 -1.724321 4.325309 3.907037 -1.803188 5.389710 3.906449 -2.073256 1.860930 3.912558 -2.592700 3.440900 3.906500 -2.782827 0.120169 3.913924 -2.861646 1.128608 3.902785 -2.970928 0.299283 3.917342 -3.104324 1.198649 3.904324 -3.231019 0.160370 3.909861 -3.723417 3.733583 3.905250 -3.757400 4.412700 3.902200 -3.778661 1.199643 3.905625 -4.102824 0.762137 3.912519 -4.092645 5.827025 3.908512 -1.085419 4.653935 3.917097 -1.112279 2.483628 3.927349 -1.140637 0.264111 3.929151 -1.384311 5.622800 3.918356 -1.381343 5.144179 3.916716 -1.735655 3.981138 3.922448 -1.774819 4.632691 3.927108 -1.808542 5.141042 3.908333 -1.885698 1.671396 3.933077 -2.355000 1.030676 3.917297 -3.051471 5.272206 3.913529 -3.431364 2.451061 3.910152 -3.826696 0.189554 3.912143 -1.120667 3.693167 3.917500 -1.410000 0.013659 3.930000 -1.447867 3.982000 3.927200 -1.718065 2.136129 3.920000 -1.875156 0.482595 3.941661 -1.879059 2.657412 3.920941 -2.030288 5.040385 3.924423 -2.393962 4.324528 3.919623 -2.520315 0.521374 3.942027 -2.634545 0.853831 3.927338 -2.745048 5.330571 3.924571 -2.862208 4.337083 3.932917 -3.394216 0.385226 3.938711 -3.462143 3.337619 3.924762 -3.793968 5.326825 3.928175 -1.861351 2.411892 3.927297 -1.970320 0.041715 3.952384 -2.073031 5.947478 3.952876 -2.192685 5.701644 3.947616 -2.620537 3.176157 3.946777 -2.906632 5.521969 3.941451 -2.963333 3.757634 3.933441 -3.534716 1.176023 3.938295 -3.548932 6.144369 3.944612 -3.664707 5.098000 3.951488 -3.702292 1.907000 3.944375 -4.066696 6.085507 3.940088 -1.121394 4.909212 3.953333 -1.417277 3.245982 3.959063 -1.445176 1.852196 3.956549 -1.969375 0.924375 3.943958 -2.076455 0.308973 3.971149 -2.418036 1.910357 3.941250 -2.705797 4.015217 3.939420 -3.003043 2.366242 3.956025 -3.108365 1.459519 3.943942 -3.131439 4.819928 3.951799 -3.307322 1.047541 3.953224 -3.313723 6.391702 3.952128 -3.389401 3.580539 3.947784 -3.433043 3.861159 3.943333 -3.741584 6.339306 3.956377 -1.431587 1.586508 3.950317 -1.421378 6.167774 3.968127 -1.508778 2.872333 3.961556 -1.682638 0.857242 3.978633 -1.946168 4.425911 3.977430 -2.519096 2.406497 3.955593 -2.591886 5.132982 3.959868 -2.752143 3.641224 3.951735 -2.857952 5.097128 3.966862 -3.142857 3.101048 3.961905 -3.325130 1.312597 3.961104 -3.327596 5.915385 3.957596 -3.336505 2.087849 3.962527 -3.401478 2.722435 3.962174 -3.713889 5.775926 3.957222 -3.859000 4.633364 3.959364 -4.059259 4.415231 3.960509 -4.061579 6.356118 3.955526 -1.138643 5.172362 3.970905 -1.146667 1.819677 3.970645 -1.168052 2.745233 3.976919 -1.179963 0.531355 3.974139 -1.438571 0.742294 3.976494 -1.897360 3.363360 3.974960 -1.918000 6.400000 3.944000 -1.969126 2.896764 3.974595 -2.166406 4.217266 3.971875 -2.394024 0.788293 3.963537 -2.478011 3.655580 3.970994 -2.580781 5.653906 3.963906 -2.612491 2.854684 3.972379 -3.203557 2.552420 3.975656 -3.370667 4.737333 3.975778 -4.075000 1.328276 3.963621 -1.229889 5.923667 3.993111 -1.460955 4.584777 3.986115 -1.531410 1.080865 3.989647 -1.679803 1.496908 3.984211 -1.815604 6.149780 3.975824 -2.690690 4.517816 3.977816 -3.072870 1.708148 3.978426 -3.177869 4.567951 3.982787 -3.320537 4.320289 3.976818 -3.480478 0.853072 3.993242 -3.654141 2.157071 3.976667 -3.668633 5.533381 3.978273 -3.708828 0.969609 3.982422 -3.795844 0.445325 3.971169 -4.034076 1.596902 3.988696 -4.060000 1.015278 3.973148 -4.050396 4.790990 3.975941 -1.149490 4.159796 3.985510 -1.163176 3.225203 3.989932 -1.158266 5.433988 3.992775 -1.522937 5.847619 3.991825 -1.923130 1.163652 3.984000 -1.936447 1.413553 3.983684 -1.953333 4.815167 3.983750 -2.555789 4.727594 3.984135 -2.863881 1.485224 3.993582 -3.226452 3.338548 3.975968 -3.272617 4.058505 3.990000 -3.662043 3.972787 4.005809 -3.737778 0.721667 3.971944 -1.480651 2.152055 4.008664 -1.493559 1.335254 3.994576 -1.528309 3.751654 4.008640 -2.003121 3.830709 3.998936 -2.171720 2.095161 3.994839 -2.618046 4.255977 3.996437 -3.209722 3.787639 3.997639 -3.642574 3.508713 3.993366 -3.668765 1.392469 3.997284 -4.014143 2.302929 3.996929 -1.174043 1.569787 4.000851 -1.195385 0.798077 4.011058 -1.552593 2.613992 4.016626 -1.889204 4.162301 4.014248 -2.025264 5.489421 4.020378 -2.149137 1.635268 4.020655 -2.225543 2.970870 4.016957 -2.519130 5.395489 4.016033 -2.749442 0.396000 4.017907 -3.272000 5.287905 4.009048 -3.656526 2.677371 4.018638 -3.971456 1.844175 4.006796 -1.562379 5.342103 4.022172 -2.137395 2.701261 4.015462 -2.422847 3.910569 4.025907 -3.077714 4.229486 4.025600 -3.133553 5.067237 4.014079 -3.624582 0.064558 4.035895 -3.644667 2.401778 4.018556 -3.973489 3.308006 4.026822 -4.021324 0.068971 4.008676 -1.172708 5.679583 4.024583 -1.232868 1.332574 4.037721 -1.635098 6.322451 4.046803 -1.883923 1.985414 4.030608 -3.054423 2.749038 4.020192 -3.261343 5.689627 4.034925 -3.596150 4.847914 4.033155 -3.607051 1.640000 4.034423 -3.620196 4.580833 4.030931 -3.972107 5.170868 4.033802 -3.998970 2.903273 4.028364 -1.211837 1.084490 4.030408 -1.485652 4.833370 4.034130 -1.578532 5.071147 4.051009 -1.629899 0.437475 4.044007 -1.961341 2.226951 4.035366 -2.115556 0.755556 4.032593 -2.622308 1.999038 4.033654 -3.547455 0.576818 4.051273 -3.631944 2.985000 4.044583 -3.663305 3.251674 4.052833 -4.003902 0.329512 4.028537 -1.184935 6.166623 4.036364 -1.258153 2.286908 4.058835 -1.557931 0.159770 4.038046 -1.956522 5.741739 4.044348 -2.046183 3.149167 4.060161 -2.071088 2.455026 4.058549 -2.179605 3.656974 4.046645 -2.284118 0.571000 4.056059 -2.301500 3.211583 4.045667 -2.519739 5.884870 4.047130 -2.977036 0.528458 4.058696 -2.998252 3.286699 4.042233 -3.008382 1.941156 4.055723 -3.042654 3.964691 4.048395 -3.151750 3.553000 4.043250 -3.241519 1.869494 4.046203 -3.424214 5.075000 4.052643 -3.983438 4.137500 4.047031 -3.983469 5.426735 4.044286 -1.235093 4.492500 4.061944 -1.251232 2.021667 4.059420 -1.268105 2.985333 4.072070 -1.540000 4.272745 4.045882 -1.596813 3.092637 4.050659 -1.639075 3.367746 4.068208 -1.669583 1.740556 4.048889 -2.351440 0.314647 4.068152 -2.375349 2.776395 4.059651 -2.573182 1.760455 4.048864 -2.895506 0.788892 4.071139 -3.012622 5.724085 4.059085 -3.150498 0.733817 4.070498 -3.581289 4.230028 4.064818 -3.924339 2.647845 4.075776 -3.974464 0.582679 4.055357 -1.274863 3.451096 4.075479 -1.671325 2.328400 4.080675 -1.736788 2.805907 4.064767 -1.755170 3.593333 4.065850 -1.800112 0.240615 4.068492 -1.968904 5.233151 4.066849 -2.174454 4.886639 4.075042 -2.199159 0.096726 4.077345 -2.199727 5.146909 4.069727 -2.426809 4.941712 4.070934 -2.772703 2.444919 4.077676 -3.155814 6.257519 4.067442 -3.175948 0.351046 4.081307 -3.954922 3.573047 4.065781 -1.293926 6.381846 4.088926 -2.088242 4.624424 4.079697 -2.116387 6.381849 4.077227 -2.166684 1.003211 4.079895 -2.457485 0.062695 4.086437 -2.758406 5.787943 4.094524 -2.820913 1.721142 4.086393 -2.922311 6.366642 4.086764 -2.990517 0.106034 4.072586 -3.123953 5.477945 4.086996 -3.546950 5.312293 4.088392 -3.546667 5.908404 4.080939 -3.612683 0.324146 4.066829 -3.915388 3.894828 4.085862 -3.912196 5.686627 4.087843 -1.306749 2.550000 4.098848 -2.157586 1.378793 4.081034 -2.576116 2.620083 4.086281 -2.694523 4.920492 4.096769 -2.748185 1.009963 4.101593 -2.957197 2.980071 4.099834 -3.270641 1.605385 4.088077 -3.371342 3.154204 4.127942 -3.938875 2.080375 4.086625 -1.283467 3.723467 4.095467 -1.605691 6.049675 4.101301 -1.664854 4.475437 4.093495 -1.698364 1.275636 4.093273 -2.172872 6.140745 4.094362 -2.191875 4.000313 4.093281 -2.269903 5.390388 4.103350 -2.326667 2.314063 4.094271 -2.358774 3.461806 4.101548 -2.376119 4.158209 4.086866 -2.408837 2.085116 4.100349 -2.456364 3.016606 4.103394 -2.781635 1.267788 4.095000 -3.157874 2.207874 4.097087 -3.564692 3.725000 4.103231 -3.870444 6.145444 4.114290 -3.926517 0.824494 4.094157 -1.311690 5.000352 4.114542 -1.344164 0.284947 4.115089 -1.553516 5.631641 4.111563 -1.650806 1.989032 4.095323 -1.828526 5.008237 4.119359 -2.109486 3.411200 4.112400 -2.281979 5.884599 4.111283 -2.342673 4.662508 4.116898 -2.417857 1.427857 4.112083 -2.489187 0.963902 4.112033 -2.623611 2.236389 4.100278 -2.652621 3.795931 4.106000 -2.697075 6.055975 4.120849 -2.813571 2.738661 4.119286 -2.820292 4.686642 4.106058 -2.853112 4.129751 4.111411 -2.906494 2.174113 4.113247 -2.925789 3.559211 4.100263 -2.949097 5.969375 4.103611 -2.995736 1.086822 4.104341 -3.213063 2.912523 4.112252 -3.386466 0.165414 4.109323 -3.519681 1.995745 4.108617 -3.894000 1.411590 4.112615 -3.918298 1.160426 4.103830 -1.280877 4.728596 4.108772 -1.299744 3.987179 4.116538 -1.325789 5.282782 4.130902 -1.732331 5.810339 4.129280 -1.773263 0.648178 4.122246 -1.780719 5.527964 4.118263 -2.229483 4.409138 4.111034 -2.310274 1.201918 4.117397 -2.387547 5.631863 4.129741 -2.411894 6.112727 4.121288 -2.492475 4.436568 4.128515 -2.645389 0.685171 4.128131 -2.653636 1.526783 4.126364 -2.720359 5.517545 4.122395 -2.769535 3.303372 4.116860 -2.928490 5.306615 4.119740 -2.979943 4.489716 4.120398 -3.363703 6.110167 4.131109 -1.586429 4.037857 4.126071 -1.704898 4.776871 4.132313 -2.252638 1.891656 4.125767 -2.357013 6.369497 4.132013 -2.960627 4.914269 4.138478 -3.461948 1.449351 4.137143 -3.486912 5.626324 4.133088 -3.510476 6.327429 4.120095 -3.855654 3.093145 4.137915 -3.873609 4.349112 4.126568 -1.322388 1.714478 4.127164 -1.321087 4.236739 4.136413 -1.365153 0.928282 4.138650 -1.732527 3.841648 4.138242 -1.770343 1.046514 4.147943 -1.804444 3.190667 4.140444 -2.590000 6.288678 4.135289 -2.630282 3.521567 4.153605 -2.681739 0.183370 4.134130 -2.705341 3.027045 4.134318 -3.121439 1.300758 4.140909 -3.422566 2.245044 4.141239 -3.456080 2.552049 4.152606 -3.833010 4.849465 4.149465 -3.839389 1.670229 4.150687 -1.327879 5.537879 4.147273 -1.410866 0.548656 4.161936 -1.765921 2.563026 4.143947 -2.287037 2.557037 4.138889 -2.374528 1.675283 4.138113 -2.434333 5.194833 4.154389 -2.550968 1.215161 4.144194 -2.597183 4.064225 4.142394 -3.472273 3.427348 4.153182 -1.809070 0.018023 4.166628 -1.888000 6.331497 4.180395 -2.685750 5.269250 4.160125 -3.442746 3.962977 4.174827 -3.546120 1.048770 4.167319 -3.786078 5.896667 4.151961 -1.360678 5.784153 4.167712 -1.381646 0.031013 4.161013 -1.418356 1.484612 4.180776 -2.759804 4.372255 4.162647 -2.896541 3.799248 4.169323 -3.003520 2.558715 4.174413 -3.429726 1.767260 4.161370 -3.448776 2.852653 4.164082 -3.835313 0.177604 4.161771 -1.386883 1.198182 4.170779 -1.399200 2.778933 4.176800 -1.905475 1.770380 4.187152 -1.930815 0.849741 4.185630 -2.516944 3.261389 4.187361 -3.037444 1.546457 4.178655 -3.300665 0.925831 4.190818 -3.448285 4.455793 4.185696 -3.832000 2.428909 4.176545 -1.378909 6.042636 4.184636 -1.757206 5.276520 4.190882 -1.863497 4.586993 4.192587 -2.563196 0.421753 4.182990 -3.336488 3.644080 4.195318 -3.760373 5.163593 4.200814 -3.780947 5.434579 4.190421 -3.781049 3.434012 4.195988 -3.796154 2.841692 4.184923 -1.833788 6.043652 4.204573 -1.902731 0.435419 4.201145 -1.913409 1.294091 4.200568 -2.062097 4.175645 4.186774 -2.136757 5.648649 4.193243 -2.364719 3.714607 4.197640 -2.947861 0.314975 4.205323 -3.351898 1.217810 4.195839 -3.397627 0.397966 4.191525 -3.398163 4.867959 4.186327 -3.761321 1.922000 4.205321 -3.778943 0.656179 4.203496 -3.792404 3.701827 4.197692 -3.793765 4.120353 4.197647 -1.442268 4.452862 4.212528 -1.447722 1.905886 4.210506 -1.463909 3.590453 4.220041 -1.564433 0.772296 4.227995 -1.937399 3.959641 4.212960 -1.993729 1.524068 4.198305 -2.002563 0.183266 4.219246 -2.142703 0.384865 4.204324 -2.361239 0.770642 4.212339 -2.799455 1.952228 4.209554 -3.220625 2.420188 4.211250 -3.224818 2.679909 4.206364 -3.265556 4.650427 4.218860 -3.308824 5.862353 4.198627 -3.357396 0.658958 4.206875 -3.370698 4.208372 4.204884 -3.752719 2.192120 4.214424 -1.446917 2.368417 4.215333 -1.456293 3.267854 4.219561 -1.793671 4.280058 4.227312 -1.800128 2.134231 4.229231 -1.878263 2.960297 4.224746 -1.890704 2.371972 4.215775 -1.945145 3.681503 4.212428 -2.050746 5.894030 4.226806 -3.201277 4.390851 4.207872 -3.219358 3.393850 4.229599 -3.304082 2.043469 4.206735 -3.731794 6.356500 4.223941 -3.781351 0.960811 4.213243 -1.746508 1.482937 4.238333 -1.884167 3.422583 4.227333 -1.981121 4.817375 4.244484 -2.039922 2.005273 4.246545 -2.109260 2.827577 4.243903 -2.593720 4.669795 4.235768 -2.600000 2.826092 4.227931 -3.191879 3.855030 4.235697 -3.189310 4.970345 4.225345 -3.341474 5.446421 4.220105 -3.584889 0.795778 4.222667 -3.778846 0.403462 4.214231 -1.457317 3.011463 4.231707 -1.461753 3.854639 4.236701 -3.153958 4.111042 4.240313 -3.302932 5.191152 4.243508 -1.983881 2.596866 4.241194 -2.039935 5.082810 4.252680 -2.124087 2.272198 4.255728 -2.138085 0.630372 4.254787 -2.146279 3.816977 4.246163 -3.092638 3.155337 4.255215 -3.176400 0.153000 4.256500 -3.644798 6.085253 4.259495 -3.705741 5.684136 4.248889 -3.727759 1.208448 4.239310 -1.473950 6.306807 4.252521 -1.523095 4.934000 4.266429 -2.032015 5.383460 4.270228 -2.038216 4.416865 4.266541 -2.220492 3.070758 4.264470 -3.156563 5.672500 4.256172 -3.287015 6.364259 4.268601 -3.688889 1.471242 4.260719 -1.524311 5.436347 4.270539 -1.547198 2.137857 4.270440 -1.549250 0.337500 4.265333 -1.547455 1.041909 4.270000 -1.570251 1.677538 4.273668 -1.595647 0.079483 4.279009 -1.905055 5.683956 4.277418 -2.232347 1.520102 4.276939 -2.486176 5.425588 4.275074 -2.592000 2.445444 4.270500 -2.941571 5.518846 4.278910 -2.951255 3.379176 4.278980 -3.216667 1.756092 4.268621 -3.626197 4.687508 4.284164 -3.683448 3.913966 4.266897 -3.688750 4.433611 4.265417 -3.702593 2.637593 4.265185 -1.508478 5.184348 4.273696 -1.549188 2.591015 4.279239 -3.046726 6.243673 4.288540 -3.055605 0.862803 4.282994 -3.078394 3.624599 4.290255 -1.532941 4.678971 4.281912 -1.548020 4.227228 4.287525 -1.554086 5.898710 4.290645 -1.565714 1.314643 4.287619 -2.265227 3.319773 4.280909 -2.285609 4.986346 4.300128 -2.465328 5.937810 4.282993 -2.937143 5.795866 4.302006 -2.986862 4.295372 4.306676 -3.032062 5.143093 4.282371 -3.582606 0.240394 4.305273 -3.606727 4.963200 4.299345 -3.676000 0.010000 4.280667 -1.978824 1.076824 4.293294 -2.119353 6.258557 4.304677 -2.152924 1.254503 4.302865 -2.246392 6.040619 4.299072 -2.439262 3.935403 4.310940 -2.480400 2.214467 4.301067 -2.779673 5.066667 4.296993 -2.923910 1.298269 4.316597 -2.962195 1.766765 4.316968 -2.997188 0.621875 4.300313 -3.039072 2.827629 4.298557 -3.080297 2.000396 4.294059 -3.128544 5.992492 4.311715 -3.251351 1.465946 4.293694 -3.609955 3.276532 4.304730 -3.667660 3.011702 4.286809 -1.650462 2.837370 4.320636 -2.039000 3.246429 4.305286 -2.140220 1.762802 4.315165 -2.160449 0.895000 4.313596 -2.188302 3.567170 4.318459 -2.180685 4.617808 4.307397 -2.240736 0.192393 4.312577 -2.369253 2.865000 4.314770 -2.479015 4.209562 4.312956 -2.501304 0.212372 4.314032 -2.563879 1.968318 4.315935 -2.686416 1.743410 4.314393 -2.764310 0.509914 4.317586 -2.801656 6.326225 4.312715 -2.928379 0.066421 4.320926 -3.030959 4.724110 4.296986 -3.041673 2.266809 4.319377 -3.147817 1.112792 4.310558 -3.578505 0.533737 4.317153 -3.631702 1.714787 4.301277 -3.624300 2.411200 4.304300 -1.644769 3.426690 4.325587 -2.237667 4.286000 4.310667 -2.249333 5.252417 4.319583 -2.368828 1.049375 4.327930 -2.495314 1.561882 4.329446 -2.562570 4.922793 4.324022 -2.629231 0.010000 4.308462 -2.658502 1.353913 4.319855 -2.741253 2.191798 4.328392 -2.791610 0.785381 4.324831 -2.818996 3.611528 4.323668 -2.840078 3.136039 4.326824 -2.868145 6.060806 4.316290 -3.181016 0.456203 4.322246 -1.658316 3.122105 4.336316 -1.665974 0.552403 4.333442 -1.688981 1.913719 4.340413 -2.303750 2.034259 4.334815 -2.332584 2.411461 4.327753 -2.349630 0.412963 4.314444 -2.702955 3.929167 4.326667 -2.805439 4.805088 4.331930 -2.830843 1.538795 4.324337 -2.855169 4.551356 4.332203 -2.877704 1.035111 4.329037 -2.958047 3.990118 4.332189 -3.137547 5.362642 4.324717 -3.521488 5.847741 4.340854 -3.569650 5.486434 4.331049 -3.604706 3.559412 4.319412 -3.596800 4.215467 4.322933 -1.658459 5.650824 4.343262 -1.638000 6.137226 4.341290 -1.672864 4.486667 4.348967 -2.203143 4.038000 4.327429 -2.253889 5.498889 4.334259 -2.449405 3.471071 4.343571 -2.502727 0.595657 4.361145 -2.535307 5.690000 4.346842 -2.567725 3.052515 4.340299 -2.576524 3.703777 4.347253 -2.697931 5.885172 4.329310 -2.741420 4.193977 4.341761 -2.851932 2.431364 4.335909 -3.537655 5.226966 4.345241 -1.646709 3.728101 4.341392 -2.264980 5.790648 4.358178 -2.377500 0.010000 4.327500 -2.399076 1.312554 4.356304 -2.389434 1.789434 4.345472 -2.606494 6.134945 4.357860 -2.633235 1.086765 4.335000 -2.693206 3.364667 4.363714 -2.726962 2.642405 4.345443 -3.552063 1.941429 4.345397 -1.662475 3.979208 4.352277 -1.695789 2.329035 4.357281 -1.721842 5.092829 4.371382 -2.372953 6.246062 4.360259 -2.382881 4.476017 4.363898 -2.627625 4.442375 4.354625 -2.755682 0.254545 4.353409 -2.803288 2.876301 4.356027 -2.832128 5.303830 4.352979 -3.240448 2.963632 4.358969 -3.490905 3.782387 4.368107 -3.529189 1.289595 4.356486 -3.522604 6.357988 4.357337 -3.542258 2.186452 4.352581 -1.679832 6.383613 4.364454 -1.744808 0.913333 4.367821 -1.762068 1.183346 4.375677 -2.381563 4.749792 4.361875 -2.490851 2.654468 4.362340 -2.545410 0.863934 4.369262 -2.572941 6.385765 4.361059 -2.572308 5.194835 4.373242 -3.506667 2.733548 4.364301 -1.740659 4.811923 4.385714 -2.709459 5.513378 4.369730 -1.766395 0.330349 4.383256 -1.785546 2.573843 4.393100 -1.869191 0.694220 4.391156 -2.250000 2.643855 4.384880 -3.302930 2.251245 4.400330 -3.414346 1.067991 4.399393 -3.413360 6.092400 4.399040 -3.476889 1.529444 4.382333 -1.780150 5.878100 4.403150 -1.839664 0.086765 4.402437 -3.366831 5.626541 4.411715 -3.387686 2.509628 4.411529 -3.418191 0.805106 4.401702 -3.461188 3.092772 4.391287 -1.753871 5.407903 4.404516 -1.790130 1.676364 4.399870 -3.372039 0.088092 4.412895 -3.422033 3.420440 4.405659 -1.832656 3.578984 4.420078 -1.869385 4.101423 4.429231 -3.417193 4.560000 4.413158 -3.422449 4.800612 4.410612 -3.420000 4.073171 4.410976 -1.835120 3.283600 4.426720 -1.854615 3.835804 4.430490 -2.985375 2.620625 4.420500 -3.402115 4.316154 4.420000 -3.396567 5.046269 4.422687 -3.411875 1.763333 4.415417 -1.888414 2.816414 4.439379 -1.921985 6.370773 4.454072 -1.942976 1.352390 4.447024 -2.421905 3.221429 4.430000 -3.267258 3.224839 4.427903 -3.381739 0.334348 4.422609 -1.874386 4.610175 4.446053 -1.895455 6.102216 4.451591 -1.929106 1.872846 4.450244 -2.031634 0.500113 4.465380 -3.285890 3.633252 4.453804 -3.339167 1.993000 4.443167 -3.336800 5.342000 4.445400 -3.357778 0.573056 4.435556 -1.881967 4.357705 4.450984 -1.927667 5.234667 4.459778 -1.941207 4.969310 4.462299 -1.943193 2.361849 4.458739 -1.946067 3.064719 4.449888 -2.281107 3.778730 4.464139 -3.202211 4.889158 4.469579 -3.222500 2.714812 4.468925 -3.276398 1.279814 4.458882 -1.911379 2.111379 4.455517 -1.956587 5.523571 4.473571 -2.021105 5.799830 4.480397 -2.016705 1.605549 4.475780 -2.955467 4.987378 4.470178 -3.297115 5.873654 4.459615 -1.968889 0.906481 4.470556 -2.041504 0.232481 4.475564 -2.030139 3.425486 4.484167 -3.167750 4.372083 4.478500 -3.182201 5.152327 4.488239 -3.202281 6.209298 4.483333 -3.211528 0.930833 4.478750 -3.288889 3.885000 4.465278 -2.023051 2.607712 4.486102 -2.085117 4.752368 4.498889 -2.162039 5.105137 4.514118 -2.188956 0.027071 4.501650 -3.137778 2.434192 4.498485 -3.164298 0.261818 4.490083 -3.178559 4.106695 4.490508 -3.193238 4.630286 4.487714 -3.222206 1.627059 4.479853 -2.112585 4.194153 4.506356 -2.388241 6.031667 4.507454 -3.110000 0.017125 4.501000 -3.133874 1.860270 4.500450 -3.146815 3.428000 4.500444 -3.150125 0.681375 4.496250 -2.043220 3.683559 4.499322 -2.078488 3.928256 4.506163 -2.080877 1.126491 4.502105 -2.143235 2.845252 4.511807 -2.142185 0.737059 4.510000 -2.162036 3.174253 4.515701 -2.195234 1.414299 4.517196 -2.420727 5.516000 4.502909 -3.092024 5.753988 4.513988 -2.083636 4.481091 4.509818 -2.129890 6.037403 4.519945 -2.136481 2.158333 4.517222 -2.147413 5.365035 4.521608 -2.171013 1.912278 4.520253 -2.517957 0.374946 4.532177 -2.611892 2.870579 4.528996 -2.639500 2.342538 4.529577 -2.965216 6.326264 4.529954 -3.017746 0.466879 4.518786 -3.054196 3.141538 4.521748 -3.087407 1.429012 4.517407 -3.125645 2.122581 4.510000 -2.182571 2.419524 4.527810 -2.261818 1.677219 4.531604 -2.284662 3.413818 4.537534 -2.299140 0.529892 4.534140 -2.368175 3.002000 4.546975 -2.898807 3.353263 4.541649 -2.928312 4.164262 4.540295 -2.974531 3.611563 4.533281 -2.984802 5.996980 4.534109 -3.035253 1.178687 4.525758 -3.055048 3.859429 4.526857 -3.099677 5.502903 4.517742 -2.201294 6.287824 4.538647 -2.201583 5.622734 4.538705 -2.387429 2.229968 4.546286 -2.384335 5.253536 4.550875 -2.450701 0.081274 4.545796 -2.657893 2.056588 4.556825 -2.673548 1.546828 4.540538 -2.763293 5.149102 4.553802 -2.802667 3.819304 4.549739 -2.887919 2.252483 4.546309 -2.906238 0.700693 4.542772 -2.928047 1.623395 4.540744 -2.914365 1.994444 4.544683 -2.962179 4.728974 4.541859 -3.044590 2.888197 4.530984 -2.280435 0.271957 4.538913 -2.294800 0.918600 4.542200 -2.301515 4.893788 4.551667 -2.312439 1.174878 4.547073 -2.309103 4.029655 4.550828 -2.726194 4.601754 4.558694 -2.725085 4.331017 4.563941 -2.774916 1.125028 4.553911 -2.844211 5.784737 4.541228 -2.941930 4.460526 4.547018 -2.967167 0.940333 4.540500 -2.979506 5.288395 4.543951 -2.291538 4.609385 4.556769 -2.456503 3.606713 4.563497 -2.515185 1.033426 4.557130 -2.511747 3.871710 4.564758 -2.524069 5.024372 4.568009 -2.575205 1.286712 4.559110 -2.623849 5.376653 4.566318 -2.613053 5.920929 4.567212 -2.669851 0.613806 4.562612 -2.685503 4.064550 4.566720 -2.712057 0.869220 4.561986 -2.715388 3.560728 4.563107 -2.717687 6.388582 4.564104 -2.746135 1.800491 4.560245 -2.738658 4.873087 4.567517 -2.769551 6.130843 4.562978 -2.781688 0.388831 4.558831 -2.833500 3.021857 4.559286 -2.835000 2.745700 4.561000 -2.867373 5.508814 4.558559 -2.935610 0.197561 4.545122 -2.286970 4.363636 4.558182 -2.410946 1.958784 4.560405 -2.410723 5.755904 4.566145 -2.408519 2.482593 4.561111 -2.430769 1.498205 4.565385 -2.454750 0.745000 4.564750 -2.476559 4.215484 4.570753 -2.509652 4.752609 4.570870 -2.621308 2.607196 4.570280 -2.648615 5.639692 4.572615 -2.698732 0.138310 4.561972 -2.851094 1.366250 4.559688 -2.393023 2.731163 4.565581 -2.503182 1.733030 4.570000 -2.523095 6.235595 4.577262 -2.551757 3.370135 4.575676 -2.614267 3.130667 4.572133 -2.845000 2.492000 4.567000 -2.509355 4.466290 4.579032 -3.527562 3.019352 0.627099 -3.443333 3.203333 0.580000 \ No newline at end of file diff --git a/apps/cpu/BeadPack/paper/1-s2.0-S0309170813000183-main.pdf b/apps/cpu/BeadPack/paper/1-s2.0-S0309170813000183-main.pdf deleted file mode 100644 index 127843eccb4d05dc32b1fbeabc2c81fffc7043fc..0000000000000000000000000000000000000000 Binary files a/apps/cpu/BeadPack/paper/1-s2.0-S0309170813000183-main.pdf and /dev/null differ diff --git a/apps/cpu/CheckpointConverter/CMakeLists.txt b/apps/cpu/CheckpointConverter/CMakeLists.txt deleted file mode 100644 index ee2615af2b22422878f6e18e7070585f20d242f6..0000000000000000000000000000000000000000 --- a/apps/cpu/CheckpointConverter/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(CheckpointConverter) - -INCLUDE(${APPS_ROOT}/IncludsList.cmake) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(cpc BINARY) diff --git a/apps/cpu/CheckpointConverter/cbc.cfg b/apps/cpu/CheckpointConverter/cbc.cfg deleted file mode 100644 index 3f00fe22452a988622c7fff90c5701877c4d9c7d..0000000000000000000000000000000000000000 --- a/apps/cpu/CheckpointConverter/cbc.cfg +++ /dev/null @@ -1,3 +0,0 @@ -path = d:/temp/BreugemChannelAnisotrop -step = 100 -numberOfProcesses = 4 \ No newline at end of file diff --git a/apps/cpu/CheckpointConverter/cpc.cpp b/apps/cpu/CheckpointConverter/cpc.cpp deleted file mode 100644 index a34e758db522fb3cc72a7bedd6eef6c8cc20a49c..0000000000000000000000000000000000000000 --- a/apps/cpu/CheckpointConverter/cpc.cpp +++ /dev/null @@ -1,57 +0,0 @@ -#include <iostream> -#include <string> - -#include "VirtualFluids.h" - -using namespace std; - - -void run(string configname) -{ - try - { - vf::basics::ConfigurationFile config; - config.load(configname); - - string path = config.getString("path"); - int step = config.getValue<int>("step"); - int numberOfProcesses = config.getValue<int>("numberOfProcesses"); - - SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - SPtr<Grid3D> grid(new Grid3D(comm)); - - CheckpointConverter converter(grid, path, comm); - converter.convert(step, numberOfProcesses); - } - 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[]) -{ - if (argv != NULL) - { - if (argv[1] != NULL) - { - run(string(argv[1])); - } - else - { - cout << "Configuration file is missing!" << endl; - } - } - -} - diff --git a/apps/cpu/ConcreteExtrusion/CMakeLists.txt b/apps/cpu/ConcreteExtrusion/CMakeLists.txt deleted file mode 100644 index 9d9cc157c8bdd2ed6412979cd7fb32d37fc3e3e2..0000000000000000000000000000000000000000 --- a/apps/cpu/ConcreteExtrusion/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(ConcreteExtrusion) - -vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES ConcreteExtrusion.cpp ) \ No newline at end of file diff --git a/apps/cpu/ConcreteExtrusion/ConcreteExtrusion.cfg b/apps/cpu/ConcreteExtrusion/ConcreteExtrusion.cfg deleted file mode 100644 index abc2436d34371e663eca09ce83c3052cd2e71c37..0000000000000000000000000000000000000000 --- a/apps/cpu/ConcreteExtrusion/ConcreteExtrusion.cfg +++ /dev/null @@ -1,37 +0,0 @@ -pathname = D:/temp/JetBreakupSharpInterfaceShortTest3 -pathGeo = d:/Projects/TRR277/Project/WP2/JetBreakup - -numOfThreads = 18 -availMem = 10e9 - -#Grid -blocknx = 25 25 25 - -factorLx = 2.0 -factorLy = 2.5 -factorLz = 2.5 - -#Simulation -case = 3 -U_LB = 0.003 #inlet velocity -interfaceWidth = 3 -D = 10 #0.0001 # m -D_LB = 50 - -contactAngle = 110.0 -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 = 10000 - -cpStart = 10000 -cpStep = 10000 - -outTime = 100 -endTime = 100000#36000 \ No newline at end of file diff --git a/apps/cpu/ConcreteExtrusion/ConcreteExtrusion.cpp b/apps/cpu/ConcreteExtrusion/ConcreteExtrusion.cpp deleted file mode 100644 index b9801265dcbee8c71f44172ecea388e90ff1ae24..0000000000000000000000000000000000000000 --- a/apps/cpu/ConcreteExtrusion/ConcreteExtrusion.cpp +++ /dev/null @@ -1,652 +0,0 @@ -#include <iostream> -#include <memory> -#include <string> - -#include "MultiphaseFlow/MultiphaseFlow.h" -#include "NonNewtonianFluids/NonNewtonianFluids.h" -#include "VirtualFluids.h" - -using namespace std; - -void setInflowBC(real x1, real x2, real x3, real radius, int dir) -{ -} - -void run(string configname) -{ - using namespace vf::lbm::dir; - - try { - - // Sleep(30000); - - vf::basics::ConfigurationFile config; - config.load(configname); - - string pathname = config.getValue<string>("pathname"); - string pathGeo = config.getValue<string>("pathGeo"); - int numOfThreads = config.getValue<int>("numOfThreads"); - vector<int> blocknx = config.getVector<int>("blocknx"); - real U_LB = config.getValue<real>("U_LB"); - int interfaceWidth = config.getValue<int>("interfaceWidth"); - real theta = config.getValue<real>("contactAngle"); - real D_LB = config.getValue<real>("D_LB"); - real phiL = config.getValue<real>("phi_L"); - real phiH = config.getValue<real>("phi_H"); - real tauH = config.getValue<real>("Phase-field Relaxation"); - real mob = config.getValue<real>("Mobility"); - - real endTime = config.getValue<real>("endTime"); - real outTime = config.getValue<real>("outTime"); - real availMem = config.getValue<real>("availMem"); - - bool logToFile = config.getValue<bool>("logToFile"); - real restartStep = config.getValue<real>("restartStep"); - real cpStart = config.getValue<real>("cpStart"); - real cpStep = config.getValue<real>("cpStep"); - bool newStart = config.getValue<bool>("newStart"); - - int caseN = config.getValue<int>("case"); - - real factorLx = config.getValue<real>("factorLx"); - real factorLy = config.getValue<real>("factorLy"); - real factorLz = config.getValue<real>("factorLz"); - - - SPtr<vf::parallel::Communicator> comm = vf::parallel::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); - - real rho_h = 0, rho_l = 0, r_rho = 0, mu_h = 0, /*mu_l,*/ Uo = 0, D = 0, sigma = 0; - real Dg = 10; - - switch (caseN) { - case 1: - // density of heavy fluid (kg/m^3) - rho_h = 848; - // density of light fluid (kg/m^3) - rho_l = 34.5; - // density ratio - r_rho = rho_h / rho_l; - // dynamic viscosity of heavy fluid (Pa � s) - mu_h = 2.87e-3; - // dynamic viscosity of light fluid (Pa � s) - // mu_l = 1.97e-5; - // velocity (m/s) - Uo = 100; - // diameter of jet (m) - D = 0.0001; - // surface tension (N/m) - sigma = 0.03; - break; - case 2: - // density of heavy fluid (kg/m^3) - rho_h = 848; - // density of light fluid (kg/m^3) - rho_l = 1.205; - // density ratio - r_rho = rho_h / rho_l; - // dynamic viscosity of heavy fluid (Pa � s) - mu_h = 2.87e-3; - // dynamic viscosity of light fluid (Pa � s) - // mu_l = 1.84e-5; - // velocity (m/s) - Uo = 200; - // diameter of jet (m) - D = 0.0001; - // surface tension (N/m) - sigma = 0.03; - break; - case 3: - // density of heavy fluid (kg/m^3) - rho_h = 1000; - // density of light fluid (kg/m^3) - rho_l = 1.0; - // density ratio - r_rho = rho_h / rho_l; - // dynamic viscosity of heavy fluid (Pa � s) - mu_h = 2.87e-3; - // dynamic viscosity of light fluid (Pa � s) - // mu_l = 1.84e-5; - // velocity (m/s) - Uo = 200; - // diameter of jet (m) - D = 0.0001; - Dg = 10; - // surface tension (N/m) - sigma = 0.03; - break; - } - - real Re = rho_h * Uo * D / mu_h; - real We = rho_h * Uo * Uo * D / sigma; - - real dx = Dg / D_LB; - real nu_h = U_LB * D_LB / Re; - real nu_l = nu_h; - nu_h *= 0.1; - - //real rho_h_LB = 1; - // surface tension - real sigma_LB = 0.0; //rho_h_LB *U_LB *U_LB *D_LB / We; - - // LBMReal dLB = 0; // = length[1] / dx; - real rhoLB = 0.0; - // LBMReal nuLB = nu_l; //(uLB*dLB) / Re; - - real beta = 12.0 * sigma_LB / interfaceWidth; - real kappa = 1.5 * interfaceWidth * sigma_LB; - - //double tau0 = 715.218181094648*1000.; // Pa - //double muConcrete = 2.1133054011798826; // [Pa s] - //real u = Uo; //[m/s] - - - //double Bm = (tau0 * D) / (muConcrete * u); - double tau0_LB = 0.02; - //Bm *nu_h *U_LB / (D / dx); - - SPtr<Rheology> rheo = Rheology::getInstance(); - rheo->setYieldStress(tau0_LB); - - - if (myid == 0) { - UBLOG(logINFO, "Parameters:"); - UBLOG(logINFO, "U_LB = " << U_LB); - UBLOG(logINFO, "rho = " << rhoLB); - UBLOG(logINFO, "nu_l = " << nu_l); - UBLOG(logINFO, "nu_h = " << nu_h); - UBLOG(logINFO, "Re = " << Re); - UBLOG(logINFO, "We = " << We); - UBLOG(logINFO, "dx = " << dx); - UBLOG(logINFO, "sigma = " << sigma); - UBLOG(logINFO, "sigma_LB = " << sigma_LB); - UBLOG(logINFO, "tau0_LB = " << tau0_LB); - UBLOG(logINFO, "density ratio = " << r_rho); - // UBLOG(logINFO, "number of levels = " << refineLevel + 1); - UBLOG(logINFO, "numOfThreads = " << numOfThreads); - UBLOG(logINFO, "path = " << pathname); - } - - // bounding box - - real Lx = factorLx * Dg; - real Ly = factorLy * Dg; - real Lz = factorLz * Dg; - - real g_minX1 = 0; - real g_minX2 = -0.5 * Ly; - real g_minX3 = -0.5 * Lz; - - // double g_maxX1 = 8.0*D; - // double g_maxX2 = 2.5*D; - // double g_maxX3 = 2.5*D; - - real g_maxX1 = Lx; - real g_maxX2 = 0.5 * Ly; - real g_maxX3 = 0.5 * Lz; - - SPtr<LBMUnitConverter> conv(new LBMUnitConverter()); - - // const int baseLevel = 0; - - SPtr<LBMKernel> kernel; - - // kernel = SPtr<LBMKernel>(new MultiphaseScratchCumulantLBMKernel()); - // kernel = SPtr<LBMKernel>(new MultiphaseCumulantLBMKernel()); - // kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsCumulantLBMKernel()); - // kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel()); - // kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsPressureFilterLBMKernel()); - // kernel = SPtr<LBMKernel>(new MultiphasePressureFilterLBMKernel()); - // kernel = SPtr<LBMKernel>(new MultiphaseSimpleVelocityBaseExternalPressureLBMKernel()); - kernel = make_shared<MultiphaseScaleDistributionLBMKernel>(); - //kernel = make_shared<MultiphaseSharpInterfaceLBMKernel>(); - - kernel->setWithForcing(false); - kernel->setForcingX1(0.0); - kernel->setForcingX2(0.0); - kernel->setForcingX3(0.0); - - kernel->setPhiL(phiL); - kernel->setPhiH(phiH); - kernel->setPhaseFieldRelaxation(tauH); - kernel->setMobility(mob); - - // nuL, nuG, densityRatio, beta, kappa, theta, - - kernel->setCollisionFactorMultiphase(nu_h, nu_l); - kernel->setDensityRatio(r_rho); - kernel->setMultiphaseModelParameters(beta, kappa); - kernel->setContactAngle(theta); - kernel->setInterfaceWidth(interfaceWidth); - // dynamicPointerCast<MultiphasePressureFilterLBMKernel>(kernel)->setPhaseFieldBC(0.0); - kernel->setSigma(sigma_LB); - - SPtr<BCSet> bcProc(new BCSet()); - // BCSetPtr bcProc(new ThinWallBCSet()); - - kernel->setBCSet(bcProc); - - SPtr<Grid3D> grid(new Grid3D(comm)); - //grid->setPeriodicX1(true); - grid->setPeriodicX2(true); - grid->setPeriodicX3(true); - grid->setGhostLayerWidth(2); - - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE)); - - ////////////////////////////////////////////////////////////////////////// - // restart - SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart)); - // SPtr<MPIIORestartSimulationObserver> rcp(new MPIIORestartSimulationObserver(grid, rSch, pathname, comm)); - SPtr<MPIIOMigrationSimulationObserver> rcp(new MPIIOMigrationSimulationObserver(grid, rSch, metisVisitor, pathname, comm)); - // SPtr<MPIIOMigrationBESimulationObserver> rcp(new MPIIOMigrationBESimulationObserver(grid, rSch, pathname, comm)); - // rcp->setNu(nuLB); - // rcp->setNuLG(nuL, nuG); - // rcp->setDensityRatio(densityRatio); - - rcp->setLBMKernel(kernel); - rcp->setBCSet(bcProc); - ////////////////////////////////////////////////////////////////////////// - // BC Adapter - ////////////////////////////////////////////////////////////////////////////// - mu::Parser fctF1; - //u_actual(r) = U_max * (4 / (D^2) * (R^2 - r^2)) - //fctF1.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))"); - //fctF1.SetExpr("vx1*(1-(sqrt((x2-y0)^2+(x3-z0)^2))/(R))"); - //fctF1.SetExpr("vy1*(1-(sqrt((x2-x0)^2+(x3-z0)^2)/R))^0.1"); - fctF1.SetExpr("vx1"); - //fctF1.DefineConst("vx1", 0); - fctF1.DefineConst("vx1", U_LB); - fctF1.DefineConst("R", 0.5*Dg); - fctF1.DefineConst("y0", (g_minX2+g_maxX2)/2); - fctF1.DefineConst("z0", (g_minX3+g_maxX3)/2); - SPtr<BC> velBCF1(new MultiphaseVelocityBC(true, false, false, fctF1, phiH, 0.0, BCFunction::INFCONST)); - - mu::Parser fctF2; - fctF2.SetExpr("vx1"); - fctF2.DefineConst("vx1", U_LB); - fctF2.SetExpr("vx1"); - fctF2.DefineConst("vx1", U_LB); - - // real startTime = 1; - // SPtr<BC> velBCF1(new MultiphaseVelocityBC(true, false, false, fctF1, phiH, 0.0, startTime)); - //SPtr<BC> velBCF2(new MultiphaseVelocityBC(true, false, false, fctF2, phiH, startTime, endTime)); - SPtr<BC> velBCF2(new MultiphaseVelocityBC(false, true, false, fctF2, phiH, 0.0, BCFunction::INFCONST)); - - - - SPtr<BC> noSlipBC(new NoSlipBC()); - noSlipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNoSlipBCStrategy())); - - SPtr<BC> denBC(new PressureBC(rhoLB)); - denBC->setBCStrategy(SPtr<BCStrategy>(new MultiphasePressureBCStrategy())); - - // SPtr<BC> slipBC(new SlipBC()); - // slipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseSlipBCStrategy())); - - mu::Parser fctPhi_F1; - fctPhi_F1.SetExpr("phiH"); - 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); - - velBCF1->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - velBCF2->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - - ////////////////////////////////////////////////////////////////////////////////// - // BC visitor - MultiphaseBoundaryConditionsBlockVisitor bcVisitor; - - // SPtr<D3Q27Interactor> inflowF1Int; - // SPtr<D3Q27Interactor> cylInt; - - SPtr<D3Q27Interactor> inflowInt; - - //if (newStart) { - - // if (newStart) { - - real inflowLength = 10; - - // geometry - 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->readMeshFromSTLFileBinary(pathGeo + "/" + geoFile, false); - // GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance()); - // if (myid == 0) - // UBLOG(logINFO, "Read geoFile:stop"); - // inflow - // GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1, g_minX2 - 0.5 * dx, g_minX3, g_maxX1, g_minX2 - 1.0 * - // dx, g_maxX3)); - // GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1 * 0.5 - dx, g_minX2 - dx, g_minX3 * 0.5 - dx, - // g_maxX1 * 0.5 + dx, g_minX2, g_maxX3 * 0.5 + dx)); - // if (myid == 0) - // GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname + "/geo/geoInflowF1", - // WbWriterVtkXmlASCII::getInstance()); - - //GbCylinder3DPtr geoInflow(new GbCylinder3D(g_minX1 - 2.0*dx, 0.0, 0.0, g_minX1, 0.0, 0.0, Dg / 2.0)); - - GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1 - 2.0 * dx, g_minX2 + inflowLength, g_minX3 + (g_maxX3 - g_minX3) / 3.0, g_minX1 + 2.0 * dx, 3 * inflowLength + g_minX2, g_maxX3 - (g_maxX3 - g_minX3) / 3.0)); - - if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname + "/geo/geoInflow", WbWriterVtkXmlASCII::getInstance()); - - GbCylinder3DPtr geoSolid(new GbCylinder3D(g_minX1 - 2.0 * dx, g_maxX2 / 2.0, g_maxX3 / 2.0, g_minX1+2.0*dx, g_maxX2 / 2.0, g_maxX3 / 2.0, 1.5*D / 2.0)); - if (myid == 0) GbSystem3D::writeGeoObject(geoSolid.get(), pathname + "/geo/geoSolid", WbWriterVtkXmlASCII::getInstance()); - - SPtr<GbTriFaceMesh3D> meshInflowPipe = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshInflowPipe:start"); - meshInflowPipe->readMeshFromSTLFileBinary(pathGeo + "/JetTube4.stl", false); - //meshInflowPipe->readMeshFromSTLFileASCII(pathGeo + "/JetTubeScaled5.stl", false); - if (myid == 0) UBLOG(logINFO, "Read meshInflowPipe:end"); - //meshInflowPipe->scale(1e-04, 1e-04, 1e-04); - if (myid == 0) GbSystem3D::writeGeoObject(meshInflowPipe.get(), pathname + "/geo/meshInflowPipe", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrInflowPipe = std::make_shared<D3Q27TriFaceMeshInteractor>(meshInflowPipe, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::POINTS); - - // GbCylinder3DPtr cylinder2( - // new GbCylinder3D(0.0, g_minX2 - 2.0 * dx / 2.0, 0.0, 0.0, g_minX2 + 4.0 * dx, 0.0, 8.0+2.0*dx)); - // if (myid == 0) - // GbSystem3D::writeGeoObject(cylinder2.get(), pathname + "/geo/cylinder2", - // WbWriterVtkXmlASCII::getInstance()); - // outflow - // GbCuboid3DPtr geoOutflow(new GbCuboid3D(-1.0, -1, -1.0, 121.0, 1.0, 121.0)); // For JetBreakup (Original) - // GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1, g_maxX2 - 40 * dx, g_minX3, g_maxX1, g_maxX2, g_maxX3)); - GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_maxX1 + 2.0 * dx, g_maxX2 + 2.0 * dx, g_maxX3 + 2.0 * dx)); - if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + "/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); - - // double blockLength = blocknx[0] * dx; - - if (myid == 0) { - 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); - - SPtr<WriteBlocksSimulationObserver> ppblocks(new WriteBlocksSimulationObserver(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - - // SPtr<Interactor3D> tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBC, - // Interactor3D::SOLID, Interactor3D::POINTS)); - - // inflowF1Int = - // SPtr<D3Q27Interactor>(new D3Q27Interactor(cylinder1, grid, noSlipBC, Interactor3D::SOLID)); - // inflowF1Int->addBC(velBCF2); - - SPtr<D3Q27Interactor> outflowInt(new D3Q27Interactor(geoOutflow, grid, denBC, Interactor3D::SOLID)); - - // Create boundary conditions geometry - GbCuboid3DPtr wallXmin(new GbCuboid3D(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_minX1, g_maxX2 + 2.0 * dx, g_maxX3 + 2.0 * dx)); - GbSystem3D::writeGeoObject(wallXmin.get(), pathname + "/geo/wallXmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallXmax(new GbCuboid3D(g_maxX1, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_maxX1 + 2.0 * dx, g_maxX2 + 2.0 * dx, g_maxX3 + 2.0 * dx)); - GbSystem3D::writeGeoObject(wallXmax.get(), pathname + "/geo/wallXmax", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallZmin(new GbCuboid3D(g_minX1 - 2.0*dx, g_minX2 - 2.0*dx, g_minX3 - 2.0*dx, g_maxX1 + 2.0*dx, g_maxX2 + 2.0*dx, g_minX3)); - GbSystem3D::writeGeoObject(wallZmin.get(), pathname + "/geo/wallZmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallZmax(new GbCuboid3D(g_minX1 - 2.0*dx, g_minX2 - 2.0*dx, g_maxX3, g_maxX1 + 2.0*dx, g_maxX2 + 2.0*dx, g_maxX3 + 2.0*dx)); - GbSystem3D::writeGeoObject(wallZmax.get(), pathname + "/geo/wallZmax", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallYmin(new GbCuboid3D(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_maxX1 + 2.0 * dx, g_minX2, g_maxX3 + 2.0 * dx)); - GbSystem3D::writeGeoObject(wallYmin.get(), pathname + "/geo/wallYmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallYmax(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)); - GbSystem3D::writeGeoObject(wallYmax.get(), pathname + "/geo/wallYmax", WbWriterVtkXmlASCII::getInstance()); - - // Add boundary conditions to grid generator - SPtr<D3Q27Interactor> wallXminInt(new D3Q27Interactor(wallXmin, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallXmaxInt(new D3Q27Interactor(wallXmax, grid, velBCF2, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallZminInt(new D3Q27Interactor(wallZmin, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallZmaxInt(new D3Q27Interactor(wallZmax, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallYminInt(new D3Q27Interactor(wallYmin, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallYmaxInt(new D3Q27Interactor(wallYmax, grid, noSlipBC, Interactor3D::SOLID)); - - -////////////////////////// - - GbCuboid3DPtr wallInfZmin(new GbCuboid3D(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_minX1 + inflowLength * dx, g_maxX2 + 2.0 * dx, (g_maxX3 + g_minX3) / 2.0 - inflowLength)); - GbSystem3D::writeGeoObject(wallInfZmin.get(), pathname + "/geo/wallInfZmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallInfZmax(new GbCuboid3D(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, (g_maxX3 + g_minX3) / 2.0 + inflowLength, g_minX1 + inflowLength * dx, g_maxX2 + 2.0 * dx, g_maxX3 + 2.0 * dx)); - GbSystem3D::writeGeoObject(wallInfZmax.get(), pathname + "/geo/wallInfZmax", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallInfYmin(new GbCuboid3D(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_minX1 + inflowLength * dx, g_minX2 + inflowLength, g_maxX3 + 2.0 * dx)); - GbSystem3D::writeGeoObject(wallInfYmin.get(), pathname + "/geo/wallInfYmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallInfYmax(new GbCuboid3D(g_minX1 - 2.0 * dx, 3* inflowLength+g_minX2, g_minX3 - 2.0 * dx, g_minX1 + inflowLength * dx, g_maxX2 + 2.0 * dx, g_maxX3)); - GbSystem3D::writeGeoObject(wallInfYmax.get(), pathname + "/geo/wallInfYmax", WbWriterVtkXmlASCII::getInstance()); - - // Add boundary conditions to grid generator - SPtr<D3Q27Interactor> wallInfZminInt(new D3Q27Interactor(wallInfZmin, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallInfZmaxInt(new D3Q27Interactor(wallInfZmax, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallInfYminInt(new D3Q27Interactor(wallInfYmin, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallInfYmaxInt(new D3Q27Interactor(wallInfYmax, grid, noSlipBC, Interactor3D::SOLID)); -////////////////////////////////////// - - - - - - // cylInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(cylinder1, grid, velBCF1, Interactor3D::SOLID)); - // cylInt->addBC(velBCF2); - // SPtr<D3Q27Interactor> cyl2Int(new D3Q27Interactor(cylinder2, grid, noSlipBC, - // Interactor3D::SOLID)); - - inflowInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, velBCF1, Interactor3D::SOLID)); - //inflowInt->addBC(velBCF2); - - GbCylinder3DPtr geoAirInflow(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2 / 2.0, g_maxX3 / 2.0, g_minX1, g_maxX2 / 2.0, g_maxX3 / 2.0, D * 0.9 / 2.0)); - if (myid == 0) GbSystem3D::writeGeoObject(geoAirInflow.get(), pathname + "/geo/geoAirInflow", WbWriterVtkXmlASCII::getInstance()); - SPtr<D3Q27Interactor> inflowAirInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoAirInflow, grid, velBCF2, Interactor3D::SOLID)); - - SPtr<D3Q27Interactor> solidInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoSolid, grid, noSlipBC, Interactor3D::SOLID)); - - - InteractorsHelper intHelper(grid, metisVisitor, true); - //intHelper.addInteractor(cylInt); - //intHelper.addInteractor(tubes); - //intHelper.addInteractor(outflowInt); - // intHelper.addInteractor(cyl2Int); - //intHelper.addInteractor(intrInflowPipe); - intHelper.addInteractor(wallXminInt); - intHelper.addInteractor(wallXmaxInt); - //intHelper.addInteractor(wallZminInt); - //intHelper.addInteractor(wallZmaxInt); - //intHelper.addInteractor(wallYminInt); - //intHelper.addInteractor(wallYmaxInt); - - intHelper.addInteractor(wallInfZminInt); - intHelper.addInteractor(wallInfZmaxInt); - intHelper.addInteractor(wallInfYminInt); - intHelper.addInteractor(wallInfYmaxInt); - - intHelper.addInteractor(inflowInt); - //intHelper.addInteractor(outflowInt); - //intHelper.addInteractor(inflowAirInt); - - intHelper.selectBlocks(); - - ppblocks->update(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); - real needMemAll = real(numberOfNodesPerBlockWithGhostLayer * (27 * sizeof(real) + sizeof(int) + sizeof(float) * 4)); - real needMem = needMemAll / real(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"); - } - - MultiphaseSetKernelBlockVisitor kernelVisitor(kernel, nu_h, nu_l, availMem, needMem); - - grid->accept(kernelVisitor); - - //if (!newStart) { - // rcp->readBlocks((int)restartStep); - // grid->accept(metisVisitor); - // rcp->readDataSet((int)restartStep); - // grid->setTimeStep(restartStep); - //} - - intHelper.setBC(); - - if (newStart) { - - // initialization of distributions - // mu::Parser fct1; - // fct1.SetExpr("phiL"); - // fct1.DefineConst("phiL", phiL); - real x1c = g_minX1 - Dg*5; // (g_maxX1 - g_minX1-1)/2; // - real x2c = (g_minX2 + g_maxX2) / 2; - real x3c = (g_minX3 + g_maxX3) / 2; - - mu::Parser fct1; - fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); - //fct1.SetExpr("(0.5-0.5*tanh(2*(sqrt((x1/radius-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness))-(0.5-0.5*tanh(2*(sqrt((x1/radius-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius2)/interfaceThickness))"); - // fct1.SetExpr("x1 < 4*dx ? (0.5-0.5*tanh(2*(1-4*dx)*(sqrt((x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)) : 0"); - fct1.DefineConst("x1c", x1c); - fct1.DefineConst("x2c", x2c); - fct1.DefineConst("x3c", x3c); - fct1.DefineConst("dx", dx); - fct1.DefineConst("radius", 5.0*Dg + (inflowLength-1)*dx /* + 2. * dx*/); - fct1.DefineConst("radius2", Dg / 4.); - fct1.DefineConst("interfaceThickness", interfaceWidth * dx); - - mu::Parser fct2; - // fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1/radius-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); - fct2.SetExpr("x1 < 4*dx ? (0.5-0.5*tanh(2*(1-4*dx)*(sqrt((x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)) : 0"); - fct2.DefineConst("x1c", x1c); - fct2.DefineConst("x2c", x2c); - fct2.DefineConst("x3c", x3c); - fct2.DefineConst("dx", dx); - fct2.DefineConst("radius", 0.5 * D /* + 2. * dx*/); - fct2.DefineConst("interfaceThickness", interfaceWidth * dx); - - MultiphaseVelocityFormInitDistributionsBlockVisitor initVisitor; - //initVisitor.setPhi(fct1); - grid->accept(initVisitor); - } - - // boundary conditions grid - { - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - SPtr<WriteBoundaryConditionsSimulationObserver> ppgeo(new WriteBoundaryConditionsSimulationObserver(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - ppgeo->update(0); - ppgeo.reset(); - } - - if (myid == 0) UBLOG(logINFO, "Preprocess - end"); - //} else { - if (!newStart) { - rcp->restart((int)restartStep); - grid->setTimeStep(restartStep); - SPtr<WriteBlocksSimulationObserver> ppblocks(new WriteBlocksSimulationObserver(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - ppblocks->update(10000); - if (myid == 0) UBLOG(logINFO, "Restart - end"); - } - - // TwoDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm); - // grid->accept(setConnsVisitor); - - // ThreeDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm); - - grid->accept(bcVisitor); - - //ThreeDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm); - TwoDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm); - grid->accept(setConnsVisitor); - - SPtr<UbScheduler> visSch(new UbScheduler(outTime)); - real t_ast, t; - t_ast = 7.19; - t = (int)(t_ast/(U_LB/(D_LB))); - visSch->addSchedule(t,t,t); //t=7.19 - // SPtr<WriteMultiphaseQuantitiesSimulationObserver> pp(new WriteMultiphaseQuantitiesSimulationObserver( - // grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - SPtr<WriteSharpInterfaceQuantitiesSimulationObserver> pp(new WriteSharpInterfaceQuantitiesSimulationObserver(grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - pp->update(0); - - SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100)); - SPtr<NUPSCounterSimulationObserver> npr(new NUPSCounterSimulationObserver(grid, nupsSch, numOfThreads, comm)); - - // SPtr<UbScheduler> timeBCSch(new UbScheduler(1, startTime, startTime)); - // auto timeDepBC = make_shared<TimeDependentBCSimulationObserver>(TimeDependentBCSimulationObserver(grid, timeBCSch)); - // timeDepBC->addInteractor(inflowInt); - -#ifdef _OPENMP - omp_set_num_threads(numOfThreads); -#endif - - SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1)); - SPtr<Simulation> simulation(new Simulation(grid, stepGhostLayer, endTime)); - simulation->addSimulationObserver(npr); - simulation->addSimulationObserver(pp); - // simulation->addSimulationObserver(timeDepBC); - // simulation->addSimulationObserver(timeDepBC); - simulation->addSimulationObserver(rcp); - - if (myid == 0) UBLOG(logINFO, "Simulation-start"); - simulation->run(); - 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/CouetteFlow/CMakeLists.txt b/apps/cpu/CouetteFlow/CMakeLists.txt deleted file mode 100644 index 3a2b634002b82edeeaa785a371ee9a2f153f0ea5..0000000000000000000000000000000000000000 --- a/apps/cpu/CouetteFlow/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(CouetteFlow) - -vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES cflow.cpp ) \ No newline at end of file diff --git a/apps/cpu/CouetteFlow/cf1.cfg b/apps/cpu/CouetteFlow/cf1.cfg deleted file mode 100644 index 0fa9976114e4092b59426acecaadf47fbbf0e5dc..0000000000000000000000000000000000000000 --- a/apps/cpu/CouetteFlow/cf1.cfg +++ /dev/null @@ -1,32 +0,0 @@ -pathname = d:/temp/BinghamNewTest2 - -numOfThreads = 4 -availMem = 8e9 -logToFile = false - -# blocknx = 2 32 32 -# boundingBox = 0.25 32 32 -# deltax = 0.125 #0.25 #0.5 #1 - -# nuLB = 0.05 -# forcing = 1e-7 #2e-7 #4e-7 #8e-7 - -# outTime = 10000 -# endTime = 1920000 #480000 #120000 #30000 - -blocknx = 2 32 2 -boundingBox = 2 32 2 -deltax = 1 - -#nuLB = 0.05 -forcing = 8e-7 -#n = 0.8 -#tau0 = 3e-6 - -velocity = 1e-3 -n = 0.4 -Re = 1 -Bn = 0.01 - -outTime = 1000 -endTime = 50000000 \ No newline at end of file diff --git a/apps/cpu/CouetteFlow/cflow.cpp b/apps/cpu/CouetteFlow/cflow.cpp deleted file mode 100644 index d2c1d5b4775857e1c502b713b692c6bf8264f783..0000000000000000000000000000000000000000 --- a/apps/cpu/CouetteFlow/cflow.cpp +++ /dev/null @@ -1,312 +0,0 @@ -#include <iostream> -#include <string> - -#include "VirtualFluids.h" -#include "NonNewtonianFluids/NonNewtonianFluids.h" - -using namespace std; - - -void bflow(string configname) -{ - using namespace vf::lbm::dir; - - try - { - vf::basics::ConfigurationFile config; - config.load(configname); - - string pathname = config.getValue<string>("pathname"); - int numOfThreads = config.getValue<int>("numOfThreads"); - vector<int> blocknx = config.getVector<int>("blocknx"); - vector<real> boundingBox = config.getVector<real>("boundingBox"); - //double nuLB = config.getValue<double>("nuLB"); - real endTime = config.getValue<real>("endTime"); - real outTime = config.getValue<real>("outTime"); - real availMem = config.getValue<real>("availMem"); - //int refineLevel = config.getValue<int>("refineLevel"); - bool logToFile = config.getValue<bool>("logToFile"); - //double restartStep = config.getValue<double>("restartStep"); - real deltax = config.getValue<real>("deltax"); - //double cpStep = config.getValue<double>("cpStep"); - //double cpStepStart = config.getValue<double>("cpStepStart"); - //bool newStart = config.getValue<bool>("newStart"); - real forcing = config.getValue<real>("forcing"); - //double n = config.getValue<double>("n"); - //double k = config.getValue<double>("k"); - //double tau0 = config.getValue<double>("tau0"); - real velocity = config.getValue<real>("velocity"); - real n = config.getValue<real>("n"); -// double Re = config.getValue<double>("Re"); -// double Bn = config.getValue<double>("Bn"); - - SPtr<vf::parallel::Communicator> comm = vf::parallel::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()); - } - } - - real rhoLB = 0.0; - - SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter()); - - //bounding box - //double g_minX1 = 0; - //double g_minX2 = 0; - //double g_minX3 = 0; - - //double g_maxX1 = boundingBox[0]; - //double g_maxX2 = boundingBox[1]; - //double g_maxX3 = boundingBox[2]; - - real g_minX1 = 0.0; - real g_minX2 = -boundingBox[1]/2.0; - real g_minX3 = -boundingBox[2]/2.0; - - real g_maxX1 = boundingBox[0]; - real g_maxX2 = boundingBox[1]/2.0; - real g_maxX3 = boundingBox[2]/2.0; - - real blockLength = 3.0 * deltax; - -// double h = (g_maxX2) / 2.0; -// double dex = g_maxX1; - - //LBMReal tau0 = 1.2e-7; - //LBMReal k = nuLB; - //LBMReal n = 0.4; - - - real d = boundingBox[1]; - real U = velocity; - real Gamma = U / d; - - real k = 0.05; // (U * d) / (Re * std::pow(Gamma, n - 1)); - real tau0 = 1e-6;// Bn* k* std::pow(Gamma, n); - - real beta = 14; - real c = 10; // 1.0 / 6.0; - real mu0 = 1e-4; - - SPtr<Rheology> thix = Rheology::getInstance(); - //Herschel-Bulkley - thix->setPowerIndex(n); - thix->setViscosityParameter(k); - thix->setYieldStress(tau0); - //Powell-Eyring - thix->setBeta(beta); - thix->setC(c); - thix->setMu0(mu0); - - SPtr<BC> noSlipBC(new NoSlipBC()); - //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new RheologyHerschelBulkleyModelNoSlipBCStrategy())); - //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new RheologyPowellEyringModelNoSlipBCStrategy())); - noSlipBC->setBCStrategy(SPtr<BCStrategy>(new RheologyBinghamModelNoSlipBCStrategy())); - - //BS visitor - BoundaryConditionsBlockVisitor bcVisitor; - - SPtr<BCSet> bcProc; - bcProc = SPtr<BCSet>(new BCSet()); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new PowellEyringModelLBMKernel()); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new HerschelBulkleyModelLBMKernel()); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new RheologyK17LBMKernel()); - SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new RheologyBinghamModelLBMKernel()); - kernel->setForcingX1(forcing); - kernel->setWithForcing(true); - kernel->setBCSet(bcProc); - - - SPtr<Grid3D> grid(new Grid3D(comm)); - grid->setPeriodicX1(true); - grid->setPeriodicX2(false); - grid->setPeriodicX3(true); - grid->setDeltaX(deltax); - grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - - 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()); - - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - if (myid == 0) - { - UBLOG(logINFO, "Parameters:"); - UBLOG(logINFO, "forcing = " << forcing); - UBLOG(logINFO, "rho = " << rhoLB); - //UBLOG(logINFO, "nu = " << nuLB); - UBLOG(logINFO, "U = " << U); - UBLOG(logINFO, "Re = " << (U * d) / (k * std::pow(Gamma, n - 1))); - UBLOG(logINFO, "Bn = " << tau0 / (k * std::pow(Gamma, n))); - UBLOG(logINFO, "k = " << k); - UBLOG(logINFO, "n = " << n); - UBLOG(logINFO, "tau0 = " << tau0); - UBLOG(logINFO, "deltax = " << deltax); - //UBLOG(logINFO, "number of levels = " << refineLevel + 1); - UBLOG(logINFO, "numOfThreads = " << numOfThreads); - UBLOG(logINFO, "Preprozess - start"); - } - - //walls - //GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 + blockLength, g_maxX2 + blockLength, g_minX3)); - //if (myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname + "/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - - //GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_maxX3, g_maxX1 + blockLength, g_maxX2 + blockLength, g_maxX3 + blockLength)); - //if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname + "/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallYmin(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 + blockLength, g_minX2, g_maxX3 + blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname + "/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallYmax(new GbCuboid3D(g_minX1 - blockLength, g_maxX2, g_minX3 - blockLength, g_maxX1 + blockLength, g_maxX2 + blockLength, g_maxX3 + blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname + "/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance()); - - //wall interactors - //SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, noSlipBC, Interactor3D::SOLID)); - //SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, noSlipBC, Interactor3D::SOLID)); - - SPtr<D3Q27Interactor> addWallYminInt(new D3Q27Interactor(addWallYmin, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, noSlipBC, Interactor3D::SOLID)); - - //////////////////////////////////////////// - //METIS - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::KWAY)); - //////////////////////////////////////////// - /////delete solid blocks - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - //intHelper.addInteractor(addWallZminInt); - //intHelper.addInteractor(addWallZmaxInt); - intHelper.addInteractor(addWallYminInt); - intHelper.addInteractor(addWallYmaxInt); - intHelper.selectBlocks(); - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end"); - ////////////////////////////////////// - - SPtr<SimulationObserver> ppblocks(new WriteBlocksSimulationObserver(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - ppblocks->update(0); - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nodb = (blocknx[0]) * (blocknx[1]) * (blocknx[2]); - unsigned long nod = nob * (blocknx[0]) * (blocknx[1]) * (blocknx[2]); - unsigned long nodg = nob * (blocknx[0] + gl) * (blocknx[1] + gl) * (blocknx[1] + gl); - real needMemAll = real(nodg * (27 * sizeof(real) + sizeof(int) + sizeof(float) * 4)); - real needMem = needMemAll / real(comm->getNumberOfProcesses()); - - if (myid == 0) - { - UBLOG(logINFO, "Number of blocks = " << nob); - UBLOG(logINFO, "Number of nodes = " << nod); - 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 * nodb); - } - UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); - } - - SetKernelBlockVisitor kernelVisitor(kernel, k, availMem, needMem); - grid->accept(kernelVisitor); - - //BC - intHelper.setBC(); - - //initialization of distributions - InitDistributionsBlockVisitor initVisitor; - grid->accept(initVisitor); - - - if (myid == 0) UBLOG(logINFO, "Preprozess - end"); - - - //set connectors - //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator()); - //SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, k, iProcessor); - //grid->accept(setConnsVisitor); - - OneDistributionSetConnectorsBlockVisitor setConnsVisitor(comm); - grid->accept(setConnsVisitor); - - grid->accept(bcVisitor); - - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - WriteBoundaryConditionsSimulationObserver ppgeo = WriteBoundaryConditionsSimulationObserver(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), comm); - ppgeo.update(1); - - SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100)); - SPtr<SimulationObserver> npr(new NUPSCounterSimulationObserver(grid, nupsSch, numOfThreads, comm)); - - //write data for visualization of macroscopic quantities - SPtr<UbScheduler> visSch(new UbScheduler(outTime)); - SPtr<WriteMacroscopicQuantitiesSimulationObserver> writeMQSimulationObserver(new WriteMacroscopicQuantitiesSimulationObserver(grid, visSch, pathname, - WbWriterVtkXmlASCII::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm)); - - SPtr<WriteThixotropyQuantitiesSimulationObserver> writeThixotropicMQSimulationObserver(new WriteThixotropyQuantitiesSimulationObserver(grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm)); - - SPtr<UbScheduler> stepGhostLayer(new UbScheduler(outTime)); - SPtr<Simulation> simulation(new Simulation(grid, stepGhostLayer, endTime)); - simulation->addSimulationObserver(npr); - simulation->addSimulationObserver(writeMQSimulationObserver); - simulation->addSimulationObserver(writeThixotropicMQSimulationObserver); - //simulation->addSimulationObserver(migSimulationObserver); - //simulation->addSimulationObserver(restartSimulationObserver); - - if (myid == 0) UBLOG(logINFO, "Simulation-start"); - simulation->run(); - 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[]) -{ - if (argv != NULL) - { - if (argv[1] != NULL) - { - //pflowForcing(string(argv[1])); - bflow(string(argv[1])); - } - else - { - cout << "Configuration file is missing!" << endl; - } - } - - return 0; -} diff --git a/apps/cpu/DHIT/CMakeLists.txt b/apps/cpu/DHIT/CMakeLists.txt deleted file mode 100644 index e1ffbe8e27f2b9260b10381ec0d29988248cbcd0..0000000000000000000000000000000000000000 --- a/apps/cpu/DHIT/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(dhit) - -INCLUDE(${APPS_ROOT}/IncludsList.cmake) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(dhit BINARY) diff --git a/apps/cpu/DHIT/dhit.cfg b/apps/cpu/DHIT/dhit.cfg deleted file mode 100644 index 6aa2779c2acd45b7421b4795ae9d59a831e4fccc..0000000000000000000000000000000000000000 --- a/apps/cpu/DHIT/dhit.cfg +++ /dev/null @@ -1,21 +0,0 @@ -pathname = d:/temp/DHIT_Green -numOfThreads = 4 -availMem = 11e9 - -#Grid -length = 128 128 128 -blocknx = 32 32 32 - -initTime = 10 - -outTime = 1 -endTime = 10 - -logToFile = false - -#Simulation -initFile = d:/Projects/DHIT/Velocities.txt -nuLB = 1.2395e-2 -uRMS = 0.0234 -lambda = 0.1 - diff --git a/apps/cpu/DHIT/dhit.cpp b/apps/cpu/DHIT/dhit.cpp deleted file mode 100644 index 3143aa1c8f79ceb4c69aca04bac193025a604392..0000000000000000000000000000000000000000 --- a/apps/cpu/DHIT/dhit.cpp +++ /dev/null @@ -1,269 +0,0 @@ -#include <iostream> -#include <string> - -#include "VirtualFluids.h" - -using namespace std; - - -void run(string configname) -{ - try - { - //Sleep(30000); - - vf::basics::ConfigurationFile config; - config.load(configname); - - string pathname = config.getString("pathname"); - int numOfThreads = config.getInt("numOfThreads"); - vector<int> blocknx = config.getVector<int>("blocknx"); - double endTime = config.getDouble("endTime"); - double outTime = config.getDouble("outTime"); - double availMem = config.getDouble("availMem"); - vector<double> length = config.getVector<double>("length"); - bool logToFile = config.getBool("logToFile"); - string initFile = config.getString("initFile"); - double nuLB = config.getDouble("nuLB"); - double uRMS = config.getDouble("uRMS"); - double lambda = config.getDouble("lambda"); - double initTime = config.getDouble("initTime"); - - SPtr<vf::parallel::Communicator> comm = vf::parallel::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()); - } - } - - //LBMReal uLB = 0.032; - LBMReal dx = 1.0; - LBMReal rhoLB = 0.0; - - - - SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter()); - - //bounding box - double g_minX1 = 0.0; - double g_minX2 = 0.0; - double g_minX3 = 0.0; - - double g_maxX1 = length[0];//-1.0; - double g_maxX2 = length[1];//-1.0; - double g_maxX3 = length[2];//-1.0; - - //geometry - SPtr<GbObject3D> box(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); - if (myid == 0) GbSystem3D::writeGeoObject(box.get(), pathname + "/geo/box", WbWriterVtkXmlBinary::getInstance()); - - 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()); - - - double blockLength = blocknx[0] * dx; - - SPtr<Grid3D> grid(new Grid3D(comm)); - - if (myid == 0) - { - //UBLOG(logINFO, "uLb = " << uLB); - UBLOG(logINFO, "rho = " << rhoLB); - UBLOG(logINFO, "nuLb = " << nuLB); - UBLOG(logINFO, "uRMS = " << uRMS); - UBLOG(logINFO, "lambda = " << lambda); - UBLOG(logINFO, "Re = " << (uRMS*lambda)/nuLB); - UBLOG(logINFO, "dx = " << dx); - UBLOG(logINFO, "length = " << length[0] << " " << length[1] << " " << length[2]); - UBLOG(logINFO, "blocknx = " << blocknx[0] << " " << blocknx[1] << " " << blocknx[2]); - UBLOG(logINFO, "number of processes = " << comm->getNumberOfProcesses()); - UBLOG(logINFO, "number of threads = " << numOfThreads); - UBLOG(logINFO, "Preprocess - start"); - } - - grid->setDeltaX(dx); - grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - grid->setPeriodicX1(true); - grid->setPeriodicX2(true); - grid->setPeriodicX3(true); - - if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - WriteBlocksSPtr<CoProcessor> ppblocks(new WriteBlocksCoProcessor(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW)); - InteractorsHelper intHelper(grid, metisVisitor); - //intHelper.addInteractor(boxInt); - intHelper.selectBlocks(); - - ppblocks->process(0); - ppblocks.reset(); - - //set connectors - InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator()); - SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - grid->accept(setConnsVisitor); - - //domain decomposition for threads - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - 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"); - } - - SPtr<LBMKernel> kernel; - - //kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL)); - kernel = SPtr<LBMKernel>(new InitDensityLBMKernel(blocknx[0], blocknx[1], blocknx[2])); - - SPtr<BCProcessor> bcProc(new BCProcessor()); - kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem); - grid->accept(kernelVisitor); - - intHelper.setBC(); - - //initialization of distributions - InitDistributionsBlockVisitor initVisitor(nuLB, rhoLB); - double u_LB = 0.01; - mu::Parser inflowProfileVx1, inflowProfileVx2, inflowProfileVx3; - inflowProfileVx1.DefineConst("U", u_LB); - inflowProfileVx1.DefineConst("PI", PI); - inflowProfileVx1.DefineConst("L1", g_maxX1-g_minX1); - inflowProfileVx1.DefineConst("L2", g_maxX2-g_minX2); - inflowProfileVx1.DefineConst("L3", g_maxX3-g_minX3); - inflowProfileVx1.SetExpr("U*cos(2.0*PI*x1/L1)*sin(2.0*PI*x2/L2)*sin(2.0*PI*x3/L3)"); - inflowProfileVx2.DefineConst("U", u_LB); - inflowProfileVx2.DefineConst("PI", PI); - inflowProfileVx2.DefineConst("L1", g_maxX1-g_minX1); - inflowProfileVx2.DefineConst("L2", g_maxX2-g_minX2); - inflowProfileVx2.DefineConst("L3", g_maxX3-g_minX3); - inflowProfileVx2.SetExpr("-U*cos(2.0*PI*x1/L1)*sin(2.0*PI*x2/L2)*cos(2.0*PI*x3/L3)"); - inflowProfileVx3.DefineConst("U", u_LB); - inflowProfileVx3.DefineConst("PI", PI); - inflowProfileVx3.DefineConst("L1", g_maxX1-g_minX1); - inflowProfileVx3.DefineConst("L2", g_maxX2-g_minX2); - inflowProfileVx3.DefineConst("L3", g_maxX3-g_minX3); - inflowProfileVx3.SetExpr("-U/2.0*sin(8.0*PI*(x1)/(L1))*cos(8.0*PI*(x3)/L3)"); - initVisitor.setVx1(inflowProfileVx1); - initVisitor.setVx2(inflowProfileVx2); - initVisitor.setVx3(inflowProfileVx3); - //InitDistributionsFromFileBlockVisitor initVisitor(nuLB, rhoLB, initFile); - grid->accept(initVisitor); - - //boundary conditions grid - { - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - WriteBoundaryConditionsSPtr<CoProcessor> ppgeo( - new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - grid->coProcess(0); - } - - if (myid == 0) UBLOG(logINFO, "Preprocess - end"); - - if (myid == 0) - { - UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - } - - SPtr<UbScheduler> outputSch(new UbScheduler(outTime)); - WriteMacroscopicQuantitiesCoProcessor pp(grid, outputSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm); - - SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100)); - NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); - - const SPtr<ConcreteCalculatorFactory> calculatorFactory = std::make_shared<ConcreteCalculatorFactory>(outputSch); - CalculationManagerPtr initialisation(new CalculationManager(grid, numOfThreads, endTime, calculatorFactory, CalculatorType::HYBRID)); - if (myid == 0) UBLOG(logINFO, "Initialisation-start"); - initialisation->calculate(); - if (myid == 0) UBLOG(logINFO, "Initialisation-end"); - - - kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], IncompressibleCumulantLBMKernel::NORMAL)); - kernel->setBCProcessor(bcProc); - SetKernelBlockVisitor kernelVisitor2(kernel, nuLB, availMem, needMem, SetKernelBlockVisitor::ChangeKernel); - grid->accept(kernelVisitor2); - - SPtr<UbScheduler> visSch(new UbScheduler(outTime)); - - if (myid==0) UBLOG(logINFO, "Simulation-start"); - grid->setTimeStep(initTime+1.0); - - const SPtr<ConcreteCalculatorFactory> calculatorFactory2 = std::make_shared<ConcreteCalculatorFactory>(visSch); - CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, calculatorFactory2, CalculatorType::HYBRID)); - 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[]) -{ - if (argv != NULL) - { - if (argv[1] != NULL) - { - run(string(argv[1])); - } - else - { - cout << "Configuration file is missing!" << endl; - } - } - -} - diff --git a/apps/cpu/DLR-F16-Porous/CMakeLists.txt b/apps/cpu/DLR-F16-Porous/CMakeLists.txt deleted file mode 100644 index 915b463bc2ae8dd535dff489381544b904c7a85e..0000000000000000000000000000000000000000 --- a/apps/cpu/DLR-F16-Porous/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(f16porous) - -INCLUDE(${APPS_ROOT}/IncludsList.cmake) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(f16porous BINARY) diff --git a/apps/cpu/DLR-F16-Porous/f16-porous.cfg b/apps/cpu/DLR-F16-Porous/f16-porous.cfg deleted file mode 100644 index 021da4643590b198587751e92385d821f4eb6630..0000000000000000000000000000000000000000 --- a/apps/cpu/DLR-F16-Porous/f16-porous.cfg +++ /dev/null @@ -1,65 +0,0 @@ -pathOut = d:/temp/DLR-F16-Porous -pathGeo = d:/Projects/SFB880/DLR-F16/Geometry - -fngFileNoTapeFull = F16_broad_Quad_noTape_full.stl -fngFileFull = F16_broad_Quad_thickTape_full.stl - -fngFileNoTapeBody = F16_broad_Quad_noTape_body.stl -fngFileBody = F16_broad_Quad_thickTape_body.stl - -fngFileTE = F16_broad_Quad_trailingEdge.stl - -#pmNX = 537 2286 1122 -pmNX = 537 2286 10 -lthreshold = 11538 -uthreshold = 65535 -voxelDeltaX = 0.013393e-3 0.013393e-3 0.013393e-3 -pathGeoTEvoxel = d:/Projects/SFB880/DLR-F16/A4_Forschungsdaten_Scan_Ganzer_Abschnitt_Hinterkante_Tychsen/CT-2017-019_2/F16-TE-PA80-110-537x2286x10_11538_rotate.raw - -accuracy = 0 - -numOfThreads = 1 -availMem = 3.5e9 - -logToFile = false - -#x1min x1max x2min x2max x3min x3max [m] -boundingBox = -0.3 1.17 0.0 0.03 -1.17 1.17 - -blockNx = 10 10 10 - -refineLevel = 6 - -#deltaXfine = 0.003 #level 0 -#deltaXfine = 0.0015 #level 1 -#deltaXfine = 0.00075 #level 2 -#deltaXfine = 0.000375 #level 3 -#deltaXfine = 0.0001875 #level 4 -#deltaXfine = 0.00009375 #level 5 -deltaXfine = 0.000046875 #level 6 -#deltaXfine = 0.0000234375 #level 7 - -startDistance = -1.0e-3 -refineDistance = 0.6e-3 - -writeBlocksToFile = true - -newStart = true -restartStep = 30 - -nupsStep = 1000 1000 10000000 - -cpStep = 40 -cpStart = 40 - -outTimeStep = 40 -outTimeStart = 40 - -timeAvStart = 0 -timeAvStop = 40000 - -endTime = 40 - - - - diff --git a/apps/cpu/DLR-F16-Porous/f16.cpp b/apps/cpu/DLR-F16-Porous/f16.cpp deleted file mode 100644 index 1263e7752ce9d6d6f5dacbfd12a09a5b258506ed..0000000000000000000000000000000000000000 --- a/apps/cpu/DLR-F16-Porous/f16.cpp +++ /dev/null @@ -1,775 +0,0 @@ -#include <iostream> -#include <string> - -#include <PointerDefinitions.h> -#include "VirtualFluids.h" -#include <omp.h> -using namespace std; - - -////////////////////////////////////////////////////////////////////////// -void initPteBlock(SPtr<Grid3D> grid, SPtr<Block3D> block) -{ - int gridRank = grid->getRank(); - int blockRank = block->getRank(); - - if (blockRank == gridRank) - { - SPtr<ILBMKernel> kernel = block->getKernel(); - if (!kernel) - throw UbException(UB_EXARGS, "The LBM kernel isn't exist in block: "+block->toString()); - - SPtr<BCArray3D> bcArray = kernel->getBCProcessor()->getBCArray(); - SPtr<DistributionArray3D> distributions = kernel->getDataSet()->getFdistributions(); - - LBMReal f[D3Q27System::ENDF+1]; - - size_t nx1 = distributions->getNX1(); - size_t nx2 = distributions->getNX2(); - size_t nx3 = distributions->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++) - { - D3Q27System::calcCompFeq(f, 0, 0, 0, 0); - distributions->setPostCollisionDistribution(f, ix1, ix2, ix3); - distributions->setPreCollisionDistribution(f, ix1, ix2, ix3); - } - block->setActive(true); - } -} -////////////////////////////////////////////////////////////////////////// -void initPteFs(SPtr<Grid3D> grid, vector<SPtr<Block3D>>& vectorTE) -{ - for (SPtr<Block3D> block : vectorTE) - { - initPteBlock(grid, block); - } -} -////////////////////////////////////////////////////////////////////////// - -void run(string configname) -{ - try - { - vf::basics::ConfigurationFile config; - config.load(configname); - - string pathOut = config.getValue<string>("pathOut"); - string pathGeo = config.getValue<string>("pathGeo"); - string fngFileNoTapeFull = config.getValue<string>("fngFileNoTapeFull"); - string fngFileFull = config.getValue<string>("fngFileFull"); - string fngFileNoTapeBody = config.getValue<string>("fngFileNoTapeBody"); - string fngFileBody = config.getValue<string>("fngFileBody"); - string fngFileTE = config.getValue<string>("fngFileTE"); - - int accuracy = config.getValue<int>("accuracy"); - int numOfThreads = config.getValue<int>("numOfThreads"); - vector<int> blockNx = config.getVector<int>("blockNx"); - vector<double> boundingBox = config.getVector<double>("boundingBox"); - double restartStep = config.getValue<double>("restartStep"); - double cpStart = config.getValue<double>("cpStart"); - double cpStep = config.getValue<double>("cpStep"); - int endTime = config.getValue<int>("endTime"); - double outTimeStep = config.getValue<double>("outTimeStep"); - double outTimeStart = config.getValue<double>("outTimeStart"); - double availMem = config.getValue<double>("availMem"); - int refineLevel = config.getValue<int>("refineLevel"); - bool logToFile = config.getValue<bool>("logToFile"); - double deltaXfine = config.getValue<double>("deltaXfine"); - double refineDistance = config.getValue<double>("refineDistance"); - double startDistance = config.getValue<double>("startDistance"); - vector<double> nupsStep = config.getVector<double>("nupsStep"); - bool newStart = config.getValue<bool>("newStart"); - bool writeBlocks = config.getValue<bool>("writeBlocks"); - - double timeAvStart = config.getValue<double>("timeAvStart"); - double timeAvStop = config.getValue<double>("timeAvStop"); - - vector<int> pmNX = config.getVector<int>("pmNX"); - double lthreshold = config.getValue<double>("lthreshold"); - double uthreshold = config.getValue<double>("uthreshold"); - vector<float> voxelDeltaX = config.getVector<float>("voxelDeltaX"); - string pathGeoTEvoxel = config.getValue<string>("pathGeoTEvoxel"); - - - - SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - if (logToFile) - { -#if defined(__unix__) - if (myid==0) - { - const char* str = pathOut.c_str(); - mkdir(str, S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH); - } -#endif - - if (myid==0) - { - stringstream logFilename; - logFilename<<pathOut+"/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - } - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 1"); - UBLOG(logINFO, "PID = "<<myid<<" Total Physical Memory (RAM): "<<Utilities::getTotalPhysMem()); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used: "<<Utilities::getPhysMemUsed()); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - - - //the geometry is in mm - - double g_minX1 = boundingBox[0];//*1000.0; - double g_minX2 = boundingBox[2];//*1000.0; - double g_minX3 = boundingBox[4];//*1000.0; - double g_maxX1 = boundingBox[1];//*1000.0; - double g_maxX2 = boundingBox[3];//*1000.0; - double g_maxX3 = boundingBox[5];//*1000.0; - //deltaXfine *=1000.0; - - ////////////////////////////////////////////////////////////////////////// - double deltaXcoarse = deltaXfine*(double)(1<<refineLevel); - ////////////////////////////////////////////////////////////////////////// - double blockLength = (double)blockNx[0]*deltaXcoarse; - - //########################################################################## - //## physical parameters - //########################################################################## - double Re = 1e6; - - double rhoLB = 0.0; - double rhoReal = 1.2041; //(kg/m3) - //double nueReal = 153.5e-7; //m^2/s - double uReal = 55; //m/s - double lReal = 0.3;//m - //double uReal = Re*nueReal / lReal; - double nuReal = (uReal*lReal)/Re; //m^2/s - - //##Machzahl: - //#Ma = uReal/csReal - double Ma = 0.15;//Ma-Real! - double csReal = uReal / Ma; - double hLB = lReal / deltaXcoarse; - - LBMUnitConverter unitConverter(lReal, csReal, rhoReal, hLB); - - double uLB = uReal * unitConverter.getFactorVelocityWToLb(); - double nuLB = nuReal * unitConverter.getFactorViscosityWToLb(); - double lLB = lReal/deltaXcoarse; - //double nuLB = (uLB*lLB)/Re; //0.005; - //double nuLB = 0.005; - - SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter()); - - const int baseLevel = 0; - - //////////////////////////////////////////////////////////////////////// - //Grid - ////////////////////////////////////////////////////////////////////////// - SPtr<Grid3D> grid(new Grid3D(comm)); - - //BC adapters - SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter()); - noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new ThinWallNoSlipBCAlgorithm())); - - //SPtr<BCAdapter> slipBCAdapter(new SlipBCAdapter()); - //slipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new SlipBCAlgorithm())); - - mu::Parser fct; - fct.SetExpr("U"); - fct.DefineConst("U", uLB); - SPtr<BCAdapter> velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); - velBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityWithDensityBCAlgorithm())); - - //fct.SetExpr("U"); - //fct.DefineConst("U", 0.01); - //SPtr<BCAdapter> velBCAdapterOut(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); - //velBCAdapterOut->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityBCAlgorithm())); - - SPtr<BCAdapter> outflowBCAdapter(new DensityBCAdapter(rhoLB)); - outflowBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NonReflectingOutflowBCAlgorithm())); - - BoundaryConditionsBlockVisitor bcVisitor; - bcVisitor.addBC(noSlipBCAdapter); - bcVisitor.addBC(velBCAdapter); - bcVisitor.addBC(outflowBCAdapter); - - SPtr<BCProcessor> bcProc; - //bcProc = SPtr<BCProcessor>(new BCProcessor()); - bcProc = SPtr<BCProcessor>(new ThinWallBCProcessor()); - - SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel()); - //t = 21.8, P = 1.0145 atm, Relative Humidity = 45.8, Second Coefficient of Viscosity = 3120 - //Ash, R. L., Zuckerwar, A. J., & Zheng, Z. (1991). Second coefficient of viscosity in air. - double bulckViscosity = 3120 * nuLB; - dynamicPointerCast<CompressibleCumulant4thOrderViscosityLBMKernel>(kernel)->setBulkViscosity(bulckViscosity); - kernel->setBCProcessor(bcProc); - - SPtr<LBMKernel> spKernel = SPtr<LBMKernel>(new CompressibleCumulantLBMKernel()); - spKernel->setBCProcessor(bcProc); - ////////////////////////////////////////////////////////////////////////// - //restart - SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart)); - SPtr<MPIIORestartCoProcessor> restartCoProcessor(new MPIIORestartCoProcessor(grid, rSch, pathOut, comm)); - restartCoProcessor->setLBMKernel(kernel); - restartCoProcessor->setBCProcessor(bcProc); - - SPtr<UbScheduler> mSch(new UbScheduler(cpStep, cpStart)); - SPtr<MPIIOMigrationCoProcessor> migCoProcessor(new MPIIOMigrationCoProcessor(grid, mSch, pathOut+"/mig", comm)); - migCoProcessor->setLBMKernel(kernel); - migCoProcessor->setBCProcessor(bcProc); - ////////////////////////////////////////////////////////////////////////// - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 2"); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - - if (myid==0) - { - UBLOG(logINFO, "Parameters:"); - UBLOG(logINFO, "* Re = "<<Re); - UBLOG(logINFO, "* Ma = "<<Ma); - UBLOG(logINFO, "* velocity (uReal) = "<<uReal<<" m/s"); - UBLOG(logINFO, "* viscosity (nuReal) = "<<nuReal<<" m^2/s"); - UBLOG(logINFO, "* chord length (lReal)= "<<lReal<<" m"); - UBLOG(logINFO, "* velocity LB (uLB) = "<<uLB); - UBLOG(logINFO, "* viscosity LB (nuLB) = "<<nuLB); - UBLOG(logINFO, "* chord length (l_LB) = "<<lLB<<" dx_base"); - UBLOG(logINFO, "* dx_base = "<<deltaXcoarse<<" m"); - UBLOG(logINFO, "* dx_refine = "<<deltaXfine<<" m"); - UBLOG(logINFO, "* blocknx = "<<blockNx[0]<<"x"<<blockNx[1]<<"x"<<blockNx[2]); - UBLOG(logINFO, "* refineDistance = "<<refineDistance); - UBLOG(logINFO, "* number of levels = "<<refineLevel+1); - UBLOG(logINFO, "* number of threads = "<<numOfThreads); - UBLOG(logINFO, "* number of processes = "<<comm->getNumberOfProcesses()); - UBLOG(logINFO, "* path = "<<pathOut); - } - - if (newStart) - { - //////////////////////////////////////////////////////////////////////// - //define grid - ////////////////////////////////////////////////////////////////////////// - grid->setDeltaX(deltaXcoarse); - grid->setBlockNX(blockNx[0], blockNx[1], blockNx[2]); - - SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); - if (myid==0) GbSystem3D::writeGeoObject(gridCube.get(), pathOut+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance()); - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - grid->setPeriodicX1(false); - grid->setPeriodicX2(true); - grid->setPeriodicX3(false); - - if (myid==0) - { - UBLOG(logINFO, "Preprocessing - start"); - UBLOG(logINFO, "PID = "<<myid<<" Point 3"); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - ////////////////////////////////////////////////////////////////////////// - - - //voxelMatrixTransformation(pmNX, lthreshold, uthreshold, voxelDeltaX, pathGeoTEvoxel, pathOut, comm); - - //return; - - - SPtr<GbTriFaceMesh3D> fngMeshTE; - if (myid==0) UBLOG(logINFO, "Read fngMeshTE:start"); - fngMeshTE = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+fngFileTE, "fngMeshTE", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); - if (myid==0) UBLOG(logINFO, "Read fngMeshTE:end"); - fngMeshTE->rotate(0.0, 0.5, 0.0); - fngMeshTE->translate(0.0, 0.0, 0.0012 - 0.0000192); - if (myid==0) GbSystem3D::writeGeoObject(fngMeshTE.get(), pathOut+"/geo/fngMeshTE", WbWriterVtkXmlBinary::getInstance()); - - SPtr<Interactor3D> fngIntrTE = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshTE, grid, noSlipBCAdapter, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy)); - - double zTranslate = -0.0001308; - - if (refineLevel>0 && myid==0 && writeBlocks) - { - if (myid==0) UBLOG(logINFO, "Refinement - start"); - int rank = grid->getRank(); - grid->setRank(0); - - SPtr<GbTriFaceMesh3D> fngMeshNoTapeFull; - if (myid==0) UBLOG(logINFO, "Read fngFileNoTapeFull:start"); - fngMeshNoTapeFull = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+fngFileNoTapeFull, "fngMeshNoTapeBody", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); - if (myid==0) UBLOG(logINFO, "Read fngFileNoTapeFull:end"); - fngMeshNoTapeFull->rotate(0.0, 0.5, 0.0); - if (myid==0) GbSystem3D::writeGeoObject(fngMeshNoTapeFull.get(), pathOut+"/geo/fngMeshNoTapeFull", WbWriterVtkXmlBinary::getInstance()); - - SPtr<Interactor3D> fngIntrNoTapeFull = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshNoTapeFull, grid, noSlipBCAdapter, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy)); - - int level; - - level = 1; - if (refineLevel - level >= 0) - { - dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrNoTapeFull)->refineBlockGridToLevel(level, startDistance, refineDistance); - } - - level = 2; - if (refineLevel - level >= 0) - { - dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrNoTapeFull)->refineBlockGridToLevel(level, startDistance, refineDistance); - } - - level = 3; - if (refineLevel - level >= 0) - { - dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrNoTapeFull)->refineBlockGridToLevel(level, startDistance, 24.0*refineDistance); - } - - level = 4; - if (refineLevel - level >= 0) - { - dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrNoTapeFull)->refineBlockGridToLevel(level, startDistance, 12.0*refineDistance); - } - - level = 5; - if (refineLevel - level >= 0) - { - dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrNoTapeFull)->refineBlockGridToLevel(level, startDistance, 6.0*refineDistance); - } - - level = 6; - if (refineLevel - level >= 0) - { - dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrNoTapeFull)->refineBlockGridToLevel(level, startDistance, 3.0*refineDistance); - RefineCrossAndInsideGbObjectBlockVisitor refVisitorTE(fngMeshTE, level); - grid->accept(refVisitorTE); - } - - ///////delete solid blocks - if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - start"); - - SPtr<GbTriFaceMesh3D> fngMeshNoTapeBody; - if (myid==0) UBLOG(logINFO, "Read fngFileNoTapeBody:start"); - fngMeshNoTapeBody = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+fngFileNoTapeBody, "fngMeshNoTapeBody", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); - if (myid==0) UBLOG(logINFO, "Read fngFileNoTapeBody:end"); - fngMeshNoTapeBody->rotate(0.0, 0.5, 0.0); - fngMeshNoTapeBody->translate(0.0, 0.0, zTranslate); - //fngMeshNoTapeBody->translate(0.0, 0.0, -0.00011); - - if (myid==0) GbSystem3D::writeGeoObject(fngMeshNoTapeBody.get(), pathOut+"/geo/fngMeshNoTapeBody", WbWriterVtkXmlBinary::getInstance()); - - SPtr<Interactor3D> fngIntrNoTapeBody = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshNoTapeBody, grid, noSlipBCAdapter, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy));//, Interactor3D::POINTS)); - - SetSolidBlocksBlockVisitor v(fngIntrNoTapeBody); - grid->accept(v); - std::vector<SPtr<Block3D>>& sb = fngIntrNoTapeBody->getSolidBlockSet(); - for (SPtr<Block3D> block : sb) - { - grid->deleteBlock(block); - } - fngIntrNoTapeBody->removeSolidBlocks(); - fngIntrNoTapeBody->removeBcBlocks(); - - - if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - end"); - ////////////////////////////////////////// - - { - WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm); - ppblocks.process(0); - } - - grid->setRank(rank); - - RatioBlockVisitor ratioVisitor(refineLevel); - CheckRatioBlockVisitor checkRatio(refineLevel); - int count = 0; - - do { - if (myid==0) UBLOG(logINFO, "ratioVisitor - start"); - grid->accept(ratioVisitor); - if (myid==0) UBLOG(logINFO, "ratioVisitor - end"); - if (myid==0) UBLOG(logINFO, "checkRatio - start"); - checkRatio.resetState(); - grid->accept(checkRatio); - if (myid==0) UBLOG(logINFO, "checkRatio - end"); - if (myid==0) UBLOG(logINFO, "count = "<<count++<<" state = "<<checkRatio.getState()); - } while (!checkRatio.getState()); - - - { - WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm); - ppblocks.process(1); - } - - OverlapBlockVisitor overlapVisitor(refineLevel, false); - grid->accept(overlapVisitor); - - if (myid==0) UBLOG(logINFO, "Refinement - end"); - } - else if (refineLevel>0 && !writeBlocks) - { - migCoProcessor->readBlocks(0); - } - grid->updateDistributedBlocks(comm); - - std::vector<int> dirs; - for (int i = D3Q27System::E; i<=D3Q27System::TS; i++) - { - dirs.push_back(i); - } - SetInterpolationDirsBlockVisitor interDirsVisitor(dirs); - grid->accept(interDirsVisitor); - - //walls - GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3)); - if (myid==0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathOut+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if (myid==0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathOut+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance()); - - //wall interactors - SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, velBCAdapter, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, velBCAdapter, Interactor3D::SOLID)); - - //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(), pathOut+"/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(), pathOut+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); - - //inflow - SPtr<D3Q27Interactor> inflowIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID)); - - //outflow - SPtr<D3Q27Interactor> outflowIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, outflowBCAdapter, Interactor3D::SOLID)); - - //airfoil - SPtr<GbTriFaceMesh3D> fngMeshBody; - if (myid==0) UBLOG(logINFO, "Read fngFileBody:start"); - fngMeshBody = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+fngFileBody, "fngMeshBody", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); - if (myid==0) UBLOG(logINFO, "Read fngFileBody:end"); - fngMeshBody->rotate(0.0, 0.5, 0.0); - //fngMeshBody->translate(0.0, 0.0, -0.00011); - fngMeshBody->translate(0.0, 0.0, zTranslate); - if (myid==0) GbSystem3D::writeGeoObject(fngMeshBody.get(), pathOut+"/geo/fngMeshBody", WbWriterVtkXmlBinary::getInstance()); - - SPtr<Interactor3D> fngIntrBody = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshBody, grid, noSlipBCAdapter, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy)); - fngMeshBody.reset(); - - GbCuboid3DPtr geoAddWallP(new GbCuboid3D(0.269, g_minX2-blockLength, 0.0016, 0.27028, g_maxX2+blockLength, 0.0076)); - if (myid==0) GbSystem3D::writeGeoObject(geoAddWallP.get(), pathOut+"/geo/geoAddWallP", WbWriterVtkXmlASCII::getInstance()); - SPtr<D3Q27Interactor> addWallPIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoAddWallP, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - ////////////////////////////////////////////////////////////////////////// - vector<double> origin(3); - origin[0] = 0; - origin[1] = 0; - origin[2] = 0; - - double vmZtranslate = 0.0042 - 0.007587; - - SPtr<GbVoxelMatrix3D> voxelMatrix1(new GbVoxelMatrix3D(pmNX[0], pmNX[1], pmNX[2], 0, lthreshold, uthreshold)); - voxelMatrix1->readMatrixFromRawFile<unsigned short>(pathGeoTEvoxel, GbVoxelMatrix3D::BigEndian); - voxelMatrix1->setVoxelMatrixDelta(voxelDeltaX[0], voxelDeltaX[1], voxelDeltaX[2]); - voxelMatrix1->setVoxelMatrixMininum(origin[0], origin[1], origin[2]); - - voxelMatrix1->rotate90aroundZ(); - voxelMatrix1->rotate90aroundZ(); - voxelMatrix1->rotate90aroundZ(); - voxelMatrix1->rotate90aroundX(); - voxelMatrix1->translate(0.2813, 0, vmZtranslate); - double offset = ((g_maxX2-g_minX2)/2.0 - voxelMatrix1->getLengthX2())/2.0; - voxelMatrix1->setVoxelMatrixMinX2(g_minX2+offset); - - if (myid==0) voxelMatrix1->writeToVTKImageDataAppended(pathOut+"/geo/fngTEvoxel1"); - - SPtr<D3Q27Interactor> fngIntrTEvoxel1 = SPtr<D3Q27Interactor>(new D3Q27Interactor(voxelMatrix1, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - SPtr<GbVoxelMatrix3D> voxelMatrix2(new GbVoxelMatrix3D(pmNX[0], pmNX[1], pmNX[2], 0, lthreshold, uthreshold)); - voxelMatrix2->readMatrixFromRawFile<unsigned short>(pathGeoTEvoxel, GbVoxelMatrix3D::BigEndian); - voxelMatrix2->setVoxelMatrixDelta(voxelDeltaX[0], voxelDeltaX[1], voxelDeltaX[2]); - voxelMatrix2->setVoxelMatrixMininum(origin[0], origin[1], origin[2]); - - voxelMatrix2->rotate90aroundZ(); - voxelMatrix2->rotate90aroundZ(); - voxelMatrix2->rotate90aroundZ(); - voxelMatrix2->rotate90aroundX(); - voxelMatrix2->translate(0.2813, 0, vmZtranslate); - voxelMatrix2->mirrorY(); - voxelMatrix2->setVoxelMatrixMinX2(voxelMatrix1->getX2Maximum()); - - if (myid==0) voxelMatrix2->writeToVTKImageDataAppended(pathOut+"/geo/fngTEvoxel2"); - - SPtr<D3Q27Interactor> fngIntrTEvoxel2 = SPtr<D3Q27Interactor>(new D3Q27Interactor(voxelMatrix2, grid, noSlipBCAdapter, Interactor3D::SOLID)); - ////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////// - //METIS - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::KWAY)); - //////////////////////////////////////////// - /////delete solid blocks - if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - intHelper.addInteractor(inflowIntr); - intHelper.addInteractor(outflowIntr); - intHelper.addInteractor(addWallZminInt); - intHelper.addInteractor(addWallZmaxInt); - intHelper.addInteractor(fngIntrBody); - intHelper.addInteractor(addWallPIntr); - intHelper.addInteractor(fngIntrTEvoxel1); - intHelper.addInteractor(fngIntrTEvoxel2); - intHelper.selectBlocks(); - - if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - end"); - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 4"); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - ////////////////////////////////////// - - 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"); - } - - if (writeBlocks) - { - migCoProcessor->writeBlocks(0); - } - - { - WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm); - ppblocks.process(2); - } - - SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem); - grid->accept(kernelVisitor); - - if (myid==0) UBLOG(logINFO, "SetKernelBlockVisitor:end"); - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 5"); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - - if (refineLevel>0) - { - SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - if (myid==0) UBLOG(logINFO, "SetUndefinedNodesBlockVisitor:end"); - - //BC - intHelper.setBC(); - - if (myid==0) UBLOG(logINFO, "intHelper.setBC():end"); - if (myid==0) UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - - if (myid==0) UBLOG(logINFO, "vectorTE:start"); - SetSolidBlocksBlockVisitor v1(fngIntrTE); - grid->accept(v1); - SetBcBlocksBlockVisitor v2(fngIntrTE); - grid->accept(v2); - std::vector<SPtr<Block3D>>& vectorTE = fngIntrTE->getSolidBlockSet(); - std::vector<SPtr<Block3D>>& bb = fngIntrTE->getBcBlocks(); - vectorTE.insert(vectorTE.end(), bb.begin(), bb.end()); - if (myid==0) UBLOG(logINFO, "vectorTE:end"); - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 6"); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - - //initialization of distributions - InitDistributionsBlockVisitor initVisitor; - initVisitor.setVx1(fct); - grid->accept(initVisitor); - - initPteFs(grid, vectorTE); - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 7"); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - - //Post process - { - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - WriteBoundaryConditionsCoProcessor ppgeo(grid, geoSch, pathOut, WbWriterVtkXmlBinary::getInstance(), comm); - ppgeo.process(0); - } - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 8"); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - - ///////////////////////////////////////////////////////////////////////////// - if (myid==0) UBLOG(logINFO, "Preprozess - end"); - } - else - { - //restartCoProcessor->restart((int)restartStep); - migCoProcessor->restart((int)restartStep); - grid->setTimeStep(restartStep); - - WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm); - ppblocks.process(3); - //////////////////////////////////////////////////////////////////////////// - } - ////set connectors - SPtr<Interpolator> iProcessor(new CompressibleOffsetMomentsInterpolator()); - dynamicPointerCast<CompressibleOffsetMomentsInterpolator>(iProcessor)->setBulkViscosity(nuLB, bulckViscosity); - SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - grid->accept(setConnsVisitor); - - //bcVisitor should be accept after initialization!!!! - grid->accept(bcVisitor); - if (myid == 0) UBLOG(logINFO, "grid->accept(bcVisitor):end"); - - ////sponge layer - GbCuboid3DPtr spongeLayerX1max(new GbCuboid3D(g_maxX1 - 0.35, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 + blockLength, g_maxX2 + blockLength, g_maxX3 + blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(spongeLayerX1max.get(), pathOut + "/geo/spongeLayerX1max", WbWriterVtkXmlASCII::getInstance()); - SpongeLayerBlockVisitor slVisitorX1max(spongeLayerX1max, spKernel, nuLB, D3Q27System::E); - grid->accept(slVisitorX1max); - - SPtr<UbScheduler> nupsSch(new UbScheduler(nupsStep[0], nupsStep[1], nupsStep[2])); - std::shared_ptr<NUPSCounterCoProcessor> nupsCoProcessor(new NUPSCounterCoProcessor(grid, nupsSch, numOfThreads, comm)); - - SPtr<UbScheduler> stepSch(new UbScheduler(outTimeStep, outTimeStart)); - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 9"); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - - SPtr<WriteMacroscopicQuantitiesCoProcessor> writeMQCoProcessor(new WriteMacroscopicQuantitiesCoProcessor(grid, stepSch, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - - SPtr<GbObject3D> bbBox(new GbCuboid3D(g_minX1-blockLength, (g_maxX2-g_minX2)/2.0, g_minX3-blockLength, g_maxX1+blockLength, (g_maxX2-g_minX2)/2.0+deltaXcoarse, g_maxX3+blockLength)); - if (myid==0) GbSystem3D::writeGeoObject(bbBox.get(), pathOut+"/geo/bbBox", WbWriterVtkXmlASCII::getInstance()); - SPtr<WriteMQFromSelectionCoProcessor> writeMQSelectCoProcessor(new WriteMQFromSelectionCoProcessor(grid, stepSch, bbBox, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - - SPtr<UbScheduler> tavSch(new UbScheduler(1, timeAvStart, timeAvStop)); - SPtr<TimeAveragedValuesCoProcessor> tav(new TimeAveragedValuesCoProcessor(grid, pathOut, WbWriterVtkXmlBinary::getInstance(), tavSch, comm, - TimeAveragedValuesCoProcessor::Density | TimeAveragedValuesCoProcessor::Velocity | TimeAveragedValuesCoProcessor::Fluctuations)); - tav->setWithGhostLayer(true); - - //set microfons - SPtr<UbScheduler> stepMV(new UbScheduler(1, 0, 1000000)); - SPtr<MicrophoneArrayCoProcessor> micCoProcessor(new MicrophoneArrayCoProcessor(grid, stepSch, pathOut, comm)); - double offsetX1 = 0.017; - double offsetZ1 = 0.11375; - std::vector<UbTupleFloat3> nodes; - for (int i = 0; i <= 10; i++) - { - micCoProcessor->addMicrophone(Vector3D(0.3 + deltaXcoarse + offsetX1 * double(i), 0.015, 0.0 - offsetZ1 * double(i))); - nodes.push_back(UbTupleFloat3(float(0.3 + deltaXcoarse + offsetX1 * float(i)), float(0.015), float(0.0 - offsetZ1 * float(i)))); - } - double offsetX2 = 0.1; - for (int i = 0; i <= 6; i++) - { - micCoProcessor->addMicrophone(Vector3D(0.17 + offsetX2 * double(i), 0.015, -1.1375)); - nodes.push_back(UbTupleFloat3(float(0.17 + offsetX2 * float(i)), float(0.015), float(-1.1375))); - } - - if (myid == 0) WbWriterVtkXmlBinary::getInstance()->writeNodes(pathOut + "/geo/mic", nodes); - /////////////////////////////////////////////////////////// - - //omp_set_num_threads(numOfThreads); - SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1)); - SPtr<Calculator> calculator(new BasicCalculator(grid, stepGhostLayer, endTime)); - calculator->addCoProcessor(nupsCoProcessor); - calculator->addCoProcessor(micCoProcessor); - calculator->addCoProcessor(restartCoProcessor); - calculator->addCoProcessor(writeMQSelectCoProcessor); - calculator->addCoProcessor(writeMQCoProcessor); - calculator->addCoProcessor(tav); - - if (myid==0) UBLOG(logINFO, "Simulation-start"); - calculator->calculate(); - if (myid==0) UBLOG(logINFO, "Simulation-end"); - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 10"); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - } - 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[]) -{ - - if (argv!=NULL) - { - if (argv[1]!=NULL) - { - run(string(argv[1])); - } - else - { - cout<<"Configuration file must be set!: "<<argv[0]<<" <config file>"<<endl<<std::flush; - } - } - - //test_run(); - - //SuperMUC - //MPI_Finalize(); - - return 0; -} - diff --git a/apps/cpu/DLR-F16-Solid/CMakeLists.txt b/apps/cpu/DLR-F16-Solid/CMakeLists.txt deleted file mode 100644 index f7a6686b451de9e72a280b6f52287ba70e8df092..0000000000000000000000000000000000000000 --- a/apps/cpu/DLR-F16-Solid/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(f16solid) - -INCLUDE(${APPS_ROOT}/IncludsList.cmake) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(f16solid BINARY) diff --git a/apps/cpu/DLR-F16-Solid/f16-solid-coarse.cfg b/apps/cpu/DLR-F16-Solid/f16-solid-coarse.cfg deleted file mode 100644 index 1539187c8acb6a8a7610d4e43541dfcfe744baa6..0000000000000000000000000000000000000000 --- a/apps/cpu/DLR-F16-Solid/f16-solid-coarse.cfg +++ /dev/null @@ -1,63 +0,0 @@ -pathOut = d:/temp/DLR-F16-Solid-L1-BV -pathGeo = d:/Projects/SFB880/DLR-F16/Geometry - -fngFileWhole1 = F16_broad_Quad_noTape_full.stl -fngFileWhole2 = F16_broad_Quad_thickTape_full.stl - -accuracy = 0 - -reinit = false -pathReInit = /work/koskuche/DLR-F16_L1 -stepReInit = 10000 - -numOfThreads = 8 -availMem = 10e9 - -logToFile = false - -#x1min x1max x2min x2max x3min x3max [m] -#boundingBox = -0.90 2.1 0.0 0.03 -0.66 0.66 -#boundingBox = -0.90 1.5 0.0 0.03 -0.66 0.66 -#boundingBox = -0.125 0.45 0.0 0.03 -1.05 0.1 - -#boundingBox = -0.125 1.5 0.0 0.03 -1.1 0.3 -#boundingBox = -0.90 1.5 0.0 0.03 -1.05 0.66 -#boundingBox = -0.30 2.52 0.0 0.03 -2.08 2.08 -boundingBox = -0.3 1.17 0.0 0.03 -1.17 1.17 - -blockNx = 10 10 10 - -refineLevel = 1 - -#deltaXfine = 0.003 #level 0 -deltaXfine = 0.0015 #level 1 -#deltaXfine = 0.00075 #level 2 -#deltaXfine = 0.000375 #level 3 -#deltaXfine = 0.0001875 #level 4 -#deltaXfine = 0.00009375 #level 5 -#deltaXfine = 0.000046875 #level 6 -#deltaXfine = 0.0000234375 #level 7 - -startDistance = -1.0e-3 -refineDistance = 0.6e-3 -#refineDistance = 30.0e-3 - -writeBlocksToFile = false - -newStart = false -restartStep = 15010 - -cpStep = 10 -cpStart = 10 - -outTimeStep = 10 -outTimeStart = 10 - -timeAvStart = 14000 -timeAvStop = 15000 - -nupsStep = 100 100 10000000 - -endTime = 15020 - - diff --git a/apps/cpu/DLR-F16-Solid/f16-solid.cfg b/apps/cpu/DLR-F16-Solid/f16-solid.cfg deleted file mode 100644 index 4ea69bbd461f84c50a109926c03bc8a188eb44a7..0000000000000000000000000000000000000000 --- a/apps/cpu/DLR-F16-Solid/f16-solid.cfg +++ /dev/null @@ -1,56 +0,0 @@ -pathOut = d:/temp/DLR-F16-Solid -pathGeo = d:/Projects/SFB880/DLR-F16/Geometry - -fngFileWhole1 = F16_broad_Quad_noTape_full.stl -fngFileWhole2 = F16_broad_Quad_thickTape_full.stl - -accuracy = 1 - -numOfThreads = 4 -availMem = 10e9 - -logToFile = false - -#x1min x1max x2min x2max x3min x3max [m] -#boundingBox = -0.3 1.17 0.0 0.03 -1.17 1.17 -boundingBox = -0.3 1.17 0.0 0.03 -0.7 0.7 - -blockNx = 10 10 10 - -refineLevel = 3 - -#deltaXfine = 0.003 #level 0 -#deltaXfine = 0.0015 #level 1 -#deltaXfine = 0.00075 #level 2 -#deltaXfine = 0.000375 #level 3 -#deltaXfine = 0.0001875 #level 4 -deltaXfine = 0.00009375 #level 5 -#deltaXfine = 0.000046875 #level 6 -#deltaXfine = 0.0000234375 #level 7 - -startDistance = -1.0e-3 -refineDistance = 0.6e-3 -#refineDistance = 1e-3 - -writeBlocksToFile = true - -newStart = true -restartStep = 238000 - -cpStep = 1000 -cpStart = 3000 - -outTimeStep = 100 -outTimeStart = 100 - -endTime = 238000 - - -#Cp -pcpStart = 1000000 -pcpStop = 1000000 - -timeAvStart = 100 -timeAvStop = 40000 - -nupsStep = 1000 1000 10000000 diff --git a/apps/cpu/DLR-F16-Solid/f16.cpp b/apps/cpu/DLR-F16-Solid/f16.cpp deleted file mode 100644 index cf08ef73aac0d8279aa84e62b717700017163a7f..0000000000000000000000000000000000000000 --- a/apps/cpu/DLR-F16-Solid/f16.cpp +++ /dev/null @@ -1,755 +0,0 @@ -#include <iostream> -#include <string> - -#include <PointerDefinitions.h> -#include "VirtualFluids.h" -#include <omp.h> -using namespace std; - -void run(string configname) -{ - try - { - vf::basics::ConfigurationFile config; - config.load(configname); - - string pathOut = config.getValue<string>("pathOut"); - string pathGeo = config.getValue<string>("pathGeo"); - string fngFileWhole1 = config.getValue<string>("fngFileWhole1"); - string fngFileWhole2 = config.getValue<string>("fngFileWhole2"); - //string tapeFile = config.getValue<string>("tapeFile"); - int accuracy = config.getValue<int>("accuracy"); - int numOfThreads = config.getValue<int>("numOfThreads"); - vector<int> blockNx = config.getVector<int>("blockNx"); - vector<double> boundingBox = config.getVector<double>("boundingBox"); - double restartStep = config.getValue<double>("restartStep"); - double cpStart = config.getValue<double>("cpStart"); - double cpStep = config.getValue<double>("cpStep"); - int endTime = config.getValue<int>("endTime"); - double outTimeStep = config.getValue<double>("outTimeStep"); - double outTimeStart = config.getValue<double>("outTimeStart"); - double availMem = config.getValue<double>("availMem"); - int refineLevel = config.getValue<int>("refineLevel"); - bool logToFile = config.getValue<bool>("logToFile"); - double deltaXfine = config.getValue<double>("deltaXfine"); - double refineDistance = config.getValue<double>("refineDistance"); - double startDistance = config.getValue<double>("startDistance"); - vector<double> nupsStep = config.getVector<double>("nupsStep"); - bool newStart = config.getValue<bool>("newStart"); - bool writeBlocks = config.getValue<bool>("writeBlocks"); - //string pathReInit = config.getValue<string>("pathReInit"); - //int stepReInit = config.getValue<int>("stepReInit"); - //bool reinit = config.getValue<bool>("reinit"); - - //double pcpStart = config.getValue<double>("pcpStart"); - //double pcpStop = config.getValue<double>("pcpStop"); - - double timeAvStart = config.getValue<double>("timeAvStart"); - double timeAvStop = config.getValue<double>("timeAvStop"); - - SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - if (logToFile) - { -#if defined(__unix__) - if (myid==0) - { - const char* str = pathOut.c_str(); - mkdir(str, S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH); - } -#endif - - if (myid==0) - { - stringstream logFilename; - logFilename<<pathOut+"/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - } - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 1"); - UBLOG(logINFO, "PID = "<<myid<<" Total Physical Memory (RAM): "<<Utilities::getTotalPhysMem()); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used: "<<Utilities::getPhysMemUsed()); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - - - //the geometry is in mm - - double g_minX1 = boundingBox[0];//*1000.0; - double g_minX2 = boundingBox[2];//*1000.0; - double g_minX3 = boundingBox[4];//*1000.0; - double g_maxX1 = boundingBox[1];//*1000.0; - double g_maxX2 = boundingBox[3];//*1000.0; - double g_maxX3 = boundingBox[5];//*1000.0; - //deltaXfine *=1000.0; - - ////////////////////////////////////////////////////////////////////////// - double deltaXcoarse = deltaXfine*(double)(1<<refineLevel); - ////////////////////////////////////////////////////////////////////////// - double blockLength = (double)blockNx[0]*deltaXcoarse; - - //########################################################################## - //## physical parameters - //########################################################################## - double Re = 1e6; - - double rhoLB = 0.0; - double rhoReal = 1.2041; //(kg/m3) - //double nueReal = 153.5e-7; //m^2/s - double uReal = 50; //m/s - double lReal = 0.3;//m - //double uReal = Re*nueReal / lReal; - double nuReal = (uReal*lReal)/Re; //m^2/s - - //##Machzahl: - //#Ma = uReal/csReal - double Ma = 0.15;//Ma-Real! - double csReal = uReal / Ma; - double hLB = lReal / deltaXcoarse; - - LBMUnitConverter unitConverter(lReal, csReal, rhoReal, hLB); - - double uLB = uReal * unitConverter.getFactorVelocityWToLb(); - double nuLB = nuReal * unitConverter.getFactorViscosityWToLb(); - double lLB = lReal/deltaXcoarse; - //double nuLB = (uLB*lLB)/Re; //0.005; - //double nuLB = 0.005; - - if (myid==0) UBLOG(logINFO, unitConverter.toString()); - - - SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter()); - - const int baseLevel = 0; - - //SPtr<GbObject3D> mic6(new GbCuboid3D(0.3, 0.015, -0.46+4.25*deltaXcoarse, 0.3+deltaXcoarse, 0.015+deltaXcoarse, -0.46+5.25*deltaXcoarse)); - //if (myid==0) GbSystem3D::writeGeoObject(mic6.get(), pathOut+"/geo/mic6", WbWriterVtkXmlBinary::getInstance()); - - //GbCuboid3DPtr spongeLayerX1max(new GbCuboid3D(g_maxX1-0.35, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - //if (myid==0) GbSystem3D::writeGeoObject(spongeLayerX1max.get(), pathOut+"/geo/spongeLayerX1max", WbWriterVtkXmlASCII::getInstance()); - //return; - - - //////////////////////////////////////////////////////////////////////// - //Grid - ////////////////////////////////////////////////////////////////////////// - SPtr<Grid3D> grid(new Grid3D(comm)); - - //BC adapters - SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter()); - noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm())); - - SPtr<BCAdapter> slipBCAdapter(new SlipBCAdapter()); - slipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new SlipBCAlgorithm())); - - mu::Parser fct; - fct.SetExpr("U"); - fct.DefineConst("U", uLB); - SPtr<BCAdapter> velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); - velBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityWithDensityBCAlgorithm())); - - //fct.SetExpr("U"); - //fct.DefineConst("U", 0.01); - //SPtr<BCAdapter> velBCAdapterOut(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); - //velBCAdapterOut->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityBCAlgorithm())); - - SPtr<BCAdapter> outflowBCAdapter(new DensityBCAdapter(rhoLB)); - outflowBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NonReflectingOutflowBCAlgorithm())); - - BoundaryConditionsBlockVisitor bcVisitor; - bcVisitor.addBC(noSlipBCAdapter); - bcVisitor.addBC(velBCAdapter); - bcVisitor.addBC(outflowBCAdapter); - - SPtr<BCProcessor> bcProc; - bcProc = SPtr<BCProcessor>(new BCProcessor()); - - SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel()); - //t = 21.8, P = 1.0145 atm, Relative Humidity = 45.8, Second Coefficient of Viscosity = 3120 - //Ash, R. L., Zuckerwar, A. J., & Zheng, Z. (1991). Second coefficient of viscosity in air. - double bulckViscosity = 3120 * nuLB; - dynamicPointerCast<CompressibleCumulant4thOrderViscosityLBMKernel>(kernel)->setBulkViscosity(bulckViscosity); - - kernel->setBCProcessor(bcProc); - - SPtr<LBMKernel> spKernel = SPtr<LBMKernel>(new CompressibleCumulantLBMKernel()); - spKernel->setBCProcessor(bcProc); - ////////////////////////////////////////////////////////////////////////// - //restart - //SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart)); - //SPtr<MPIIORestartCoProcessor> restartCoProcessor(new MPIIORestartCoProcessor(grid, rSch, pathOut, comm)); - //restartCoProcessor->setLBMKernel(kernel); - //restartCoProcessor->setBCProcessor(bcProc); - - SPtr<UbScheduler> mSch(new UbScheduler(cpStep, cpStart)); - SPtr<MPIIOMigrationCoProcessor> migCoProcessor(new MPIIOMigrationCoProcessor(grid, mSch, pathOut+"/mig", comm)); - migCoProcessor->setLBMKernel(kernel); - migCoProcessor->setBCProcessor(bcProc); - ////////////////////////////////////////////////////////////////////////// - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 2"); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - - if (myid==0) - { - UBLOG(logINFO, "Parameters:"); - UBLOG(logINFO, "* Re = "<<Re); - UBLOG(logINFO, "* Ma = "<<Ma); - UBLOG(logINFO, "* velocity (uReal) = "<<uReal<<" m/s"); - UBLOG(logINFO, "* viscosity (nuReal) = "<<nuReal<<" m^2/s"); - UBLOG(logINFO, "* chord length (lReal)= "<<lReal<<" m"); - UBLOG(logINFO, "* velocity LB (uLB) = "<<uLB); - UBLOG(logINFO, "* viscosity LB (nuLB) = "<<nuLB); - UBLOG(logINFO, "* chord length (l_LB) = "<<lLB<<" dx_base"); - UBLOG(logINFO, "* dx_base = "<<deltaXcoarse<<" m"); - UBLOG(logINFO, "* dx_refine = "<<deltaXfine<<" m"); - UBLOG(logINFO, "* blocknx = "<<blockNx[0]<<"x"<<blockNx[1]<<"x"<<blockNx[2]); - UBLOG(logINFO, "* refineDistance = "<<refineDistance); - UBLOG(logINFO, "* number of levels = "<<refineLevel+1); - UBLOG(logINFO, "* number of threads = "<<numOfThreads); - UBLOG(logINFO, "* number of processes = "<<comm->getNumberOfProcesses()); - UBLOG(logINFO, "* path = "<<pathOut); - } - - if (newStart) - { - //////////////////////////////////////////////////////////////////////// - //define grid - ////////////////////////////////////////////////////////////////////////// - grid->setDeltaX(deltaXcoarse); - grid->setBlockNX(blockNx[0], blockNx[1], blockNx[2]); - - SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); - if (myid==0) GbSystem3D::writeGeoObject(gridCube.get(), pathOut+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance()); - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - grid->setPeriodicX1(false); - grid->setPeriodicX2(true); - grid->setPeriodicX3(false); - - - //GbCuboid3DPtr spongeLayerX1max(new GbCuboid3D(g_maxX1-0.4, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - //if (myid==0) GbSystem3D::writeGeoObject(spongeLayerX1max.get(), pathOut+"/geo/spongeLayerX1max", WbWriterVtkXmlASCII::getInstance()); - - if (myid==0) - { - UBLOG(logINFO, "Preprocessing - start"); - } - - { - WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm); - ppblocks.process(0); - } - - //SPtr<GbObject3D> fngMeshWhole(new GbCylinder3D(15.0, 0.0, 0.0, 15.0, 100.0, 0.0, 25.0)); - //GbSystem3D::writeGeoObject(fngMeshWhole.get(), pathOut + "/geo/fngMeshWholeCylinder", WbWriterVtkXmlBinary::getInstance()); - - SPtr<GbTriFaceMesh3D> fngMeshWhole1; - if (myid==0) UBLOG(logINFO, "Read fngFileWhole1:start"); - fngMeshWhole1 = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+fngFileWhole1, "fngMeshWhole1", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); - if (myid==0) UBLOG(logINFO, "Read fngFileWhole1:end"); - fngMeshWhole1->rotate(0.0, 0.5, 0.0); - //fngMeshWhole->scale(1e3,1e3,1e3); - //fngMeshWhole->translate(1.932008e-5-149.867,-0.03-49.95,-0.0172298-1.32814); - if (myid==0) GbSystem3D::writeGeoObject(fngMeshWhole1.get(), pathOut+"/geo/fngMeshWhole1", WbWriterVtkXmlBinary::getInstance()); - - SPtr<GbTriFaceMesh3D> fngMeshWhole2; - if (myid==0) UBLOG(logINFO, "Read fngFileWhole2:start"); - fngMeshWhole2 = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+fngFileWhole2, "fngMeshWhole2", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); - if (myid==0) UBLOG(logINFO, "Read fngFileWhole2:end"); - fngMeshWhole2->rotate(0.0, 0.5, 0.0); - //fngMeshWhole->scale(1e3,1e3,1e3); - //fngMeshWhole->translate(1.932008e-5-149.867,-0.03-49.95,-0.0172298-1.32814); - if (myid==0) GbSystem3D::writeGeoObject(fngMeshWhole2.get(), pathOut+"/geo/fngMeshWhole2", WbWriterVtkXmlBinary::getInstance()); - - //SPtr<GbTriFaceMesh3D> tapeMesh; - //if (myid==0) UBLOG(logINFO, "Read fngFileWhole:start"); - //tapeMesh = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+tapeFile, "tapeMesh", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); - //if (myid==0) UBLOG(logINFO, "Read fngFileWhole:end"); - //tapeMesh->rotate(0.0, 0.5, 0.0); - ////fngMeshWhole->scale(1e3,1e3,1e3); - //tapeMesh->translate(0.0,0.0,-0.001085); - //if (myid==0) GbSystem3D::writeGeoObject(tapeMesh.get(), pathOut+"/geo/tapeMesh", WbWriterVtkXmlBinary::getInstance()); - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 3"); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - ////////////////////////////////////////////////////////////////////////// - SPtr<Interactor3D> fngIntrWhole1 = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshWhole1, grid, noSlipBCAdapter, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy));//, Interactor3D::POINTS)); - SPtr<Interactor3D> fngIntrWhole2 = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshWhole2, grid, noSlipBCAdapter, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy)); - - if (refineLevel>0 && myid==0 && writeBlocks) - { - if (myid==0) UBLOG(logINFO, "Refinement - start"); - int rank = grid->getRank(); - grid->setRank(0); - - - int level; - - level = 1; - if (refineLevel - level >= 0) - { - dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrWhole1)->refineBlockGridToLevel(level, startDistance, refineDistance); - //SPtr<GbObject3D> refCylinderL1(new GbCylinder3D(0.3, -0.03, 0.001, 0.3, 0.06, 0.001, 0.1)); - //RefineCrossAndInsideGbObjectBlockVisitor refVisitorCylinderL1(refCylinderL1, level); - //grid->accept(refVisitorCylinderL1); - - //SPtr<GbObject3D> refBoxL1(new GbCuboid3D(0.15, -0.03, -0.035, 0.45, 0.06, 0.035)); - //if (myid==0) GbSystem3D::writeGeoObject(refBoxL1.get(), pathOut+"/geo/refBoxL1", WbWriterVtkXmlASCII::getInstance()); - //RefineCrossAndInsideGbObjectBlockVisitor refVisitorBoxL1(refBoxL1, level); - //grid->accept(refVisitorBoxL1); - } - - level = 2; - if (refineLevel - level >= 0) - { - dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrWhole1)->refineBlockGridToLevel(level, startDistance, refineDistance); - } - - level = 3; - if (refineLevel - level >= 0) - { - //SPtr<GbObject3D> refCylinderL1(new GbCylinder3D(0.015, -0.03, 0.0, 0.015, 0.06, 0.0, 0.03)); - //GbSystem3D::writeGeoObject(refCylinderL1.get(), pathOut + "/geo/refCylinderL1", WbWriterVtkXmlBinary::getInstance()); - //RefineCrossAndInsideGbObjectBlockVisitor refVisitorCylinderL1(refCylinderL1, level); - //grid->accept(refVisitorCylinderL1); - - ////SPtr<GbObject3D> refBoxL1(new GbCuboid3D(0.015, -0.03, -0.03, 1.100, 0.06, 0.03)); - ////SPtr<GbObject3D> refBoxL1(new GbCuboid3D(0.12, -0.02625, -0.03, 1.0, 0.06, 0.03)); - //SPtr<GbObject3D> refBoxL1(new GbCuboid3D(0.12, -0.02625, -0.03, 0.34, 0.06, 0.03)); - //if (myid==0) GbSystem3D::writeGeoObject(refBoxL1.get(), pathOut+"/geo/refBoxL1", WbWriterVtkXmlASCII::getInstance()); - //RefineCrossAndInsideGbObjectBlockVisitor refVisitorBoxL1(refBoxL1, level); - //grid->accept(refVisitorBoxL1); - - //SPtr<GbObject3D> refCylinderL1(new GbCylinder3D(0.3, -0.03, 0.001, 0.3, 0.06, 0.001, 0.03)); - //GbSystem3D::writeGeoObject(refCylinderL1.get(), pathOut + "/geo/refCylinderL1", WbWriterVtkXmlBinary::getInstance()); - //RefineCrossAndInsideGbObjectBlockVisitor refVisitorCylinderL1(refCylinderL1, level); - //grid->accept(refVisitorCylinderL1); - - SPtr<GbObject3D> refBoxL2(new GbCuboid3D(0.15, -0.03, -0.015, 0.42, 0.06, 0.015)); - if (myid==0) GbSystem3D::writeGeoObject(refBoxL2.get(), pathOut+"/geo/refBoxL2", WbWriterVtkXmlASCII::getInstance()); - RefineCrossAndInsideGbObjectBlockVisitor refVisitorBoxL2(refBoxL2, level); - grid->accept(refVisitorBoxL2); - - //dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrWhole1)->refineBlockGridToLevel(level, startDistance, 24.0*refineDistance); - dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrWhole1)->refineBlockGridToLevel(level, startDistance, 12.0*refineDistance); - } - - //level = 4; - //if (refineLevel - level >= 0) - //{ - // //SPtr<GbObject3D> refCylinderL2(new GbCylinder3D(0.015, -0.03, 0.0, 0.015, 0.06, 0.0, 0.03)); - // //GbSystem3D::writeGeoObject(refCylinderL2.get(), pathOut + "/geo/refCylinderL2", WbWriterVtkXmlBinary::getInstance()); - // //RefineCrossAndInsideGbObjectBlockVisitor refVisitorCylinderL2(refCylinderL2, level); - // //grid->accept(refVisitorCylinderL2); - - // //SPtr<GbObject3D> refBoxL2(new GbCuboid3D(0.15, -0.03, -0.015, 0.7, 0.06, 0.015)); - // SPtr<GbObject3D> refBoxL2(new GbCuboid3D(0.15, -0.03, -0.015, 0.42, 0.06, 0.015)); - // if (myid==0) GbSystem3D::writeGeoObject(refBoxL2.get(), pathOut+"/geo/refBoxL2", WbWriterVtkXmlASCII::getInstance()); - // RefineCrossAndInsideGbObjectBlockVisitor refVisitorBoxL2(refBoxL2, level); - // grid->accept(refVisitorBoxL2); - - // //SPtr<GbObject3D> refCylinderL1(new GbCylinder3D(0.3, -0.03, 0.001, 0.3, 0.06, 0.001, 0.03)); - // //GbSystem3D::writeGeoObject(refCylinderL1.get(), pathOut + "/geo/refCylinderL1", WbWriterVtkXmlBinary::getInstance()); - // //RefineCrossAndInsideGbObjectBlockVisitor refVisitorCylinderL1(refCylinderL1, level); - // //grid->accept(refVisitorCylinderL1); - - // dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrWhole1)->refineBlockGridToLevel(level, startDistance, 6.0*refineDistance); - //} - - //level = 5; - //if (refineLevel - level >= 0) - //{ - // //SPtr<GbObject3D> refCylinderL3(new GbCylinder3D(0.015, -0.03, 0.0, 0.015, 0.06, 0.0, 0.025)); - // //GbSystem3D::writeGeoObject(refCylinderL3.get(), pathOut + "/geo/refCylinderL3", WbWriterVtkXmlBinary::getInstance()); - // //RefineCrossAndInsideGbObjectBlockVisitor refVisitorCylinderL3(refCylinderL3, level); - // //grid->accept(refVisitorCylinderL3); - - // //SPtr<GbObject3D> refBoxL3(new GbCuboid3D(0.15, -0.03, -0.010, 0.32, 0.06, 0.012)); - // //if (myid==0) GbSystem3D::writeGeoObject(refBoxL3.get(), pathOut+"/geo/refBoxL3", WbWriterVtkXmlASCII::getInstance()); - // //RefineCrossAndInsideGbObjectBlockVisitor refVisitorBoxL3(refBoxL3, level); - // //grid->accept(refVisitorBoxL3); - - // dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrWhole1)->refineBlockGridToLevel(level, startDistance, 6.0*refineDistance); - //} - - //level = 6; - //if (refineLevel - level >= 0) - //{ - // //SPtr<GbObject3D> refBoxL4(new GbCuboid3D(0.15, -0.03, -0.005, 0.31, 0.06, 0.01)); - // //if (myid==0) GbSystem3D::writeGeoObject(refBoxL4.get(), pathOut+"/geo/refBoxL4", WbWriterVtkXmlASCII::getInstance()); - // //RefineCrossAndInsideGbObjectBlockVisitor refVisitorBoxL4(refBoxL4, level); - // //grid->accept(refVisitorBoxL4); - - // dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrWhole1)->refineBlockGridToLevel(level, startDistance, 3.0*refineDistance); - //} - - //level = 7; - //if (refineLevel - level >= 0) - //{ - // dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrWhole1)->refineBlockGridToLevel(level, startDistance, refineDistance); - //} - - //dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrWhole1)->refineBlockGridToLevel(refineLevel, startDistance, refineDistance); - // - - /////delete solid blocks - if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - start"); - - SetSolidBlocksBlockVisitor v(fngIntrWhole1); - grid->accept(v); - std::vector<SPtr<Block3D>>& sb = fngIntrWhole1->getSolidBlockSet(); - for (SPtr<Block3D> block : sb) - { - grid->deleteBlock(block); - } - fngIntrWhole1->removeSolidBlocks(); - fngIntrWhole1->removeBcBlocks(); - - //SPtr<GbObject3D> delBox(new GbCuboid3D(0.03, -0.03, -0.010, 0.2, 0.06, 0.012)); - //if (myid==0) GbSystem3D::writeGeoObject(delBox.get(), pathOut+"/geo/delBox", WbWriterVtkXmlASCII::getInstance()); - //SPtr<D3Q27Interactor> delBoxInter(new D3Q27Interactor(delBox, grid, noSlipBCAdapter, Interactor3D::SOLID)); - //SetSolidBlockVisitor v(delBoxInter, BlockType::SOLID); - //grid->accept(v); - //std::vector<SPtr<Block3D>>& sb = delBoxInter->getSolidBlockSet(); - //for (SPtr<Block3D> block : sb) - //{ - // grid->deleteBlock(block); - //} - //delBoxInter->removeSolidBlocks(); - //delBoxInter->removeBcBlocks(); - - if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - end"); - //////////////////////////////////////// - - { - WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm); - ppblocks.process(1); - } - - grid->setRank(rank); - - RatioBlockVisitor ratioVisitor(refineLevel); - CheckRatioBlockVisitor checkRatio(refineLevel); - int count = 0; - - do { - if (myid==0) UBLOG(logINFO, "ratioVisitor - start"); - grid->accept(ratioVisitor); - if (myid==0) UBLOG(logINFO, "ratioVisitor - end"); - if (myid==0) UBLOG(logINFO, "checkRatio - start"); - checkRatio.resetState(); - grid->accept(checkRatio); - if (myid==0) UBLOG(logINFO, "checkRatio - end"); - if (myid==0) UBLOG(logINFO, "count = "<<count++<<" state = "<<checkRatio.getState()); - } while (!checkRatio.getState()); - - - { - WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm); - ppblocks.process(2); - } - - OverlapBlockVisitor overlapVisitor(refineLevel, false); - grid->accept(overlapVisitor); - - if (myid==0) UBLOG(logINFO, "Refinement - end"); - } - //else - //{ - // migCoProcessor->readBlocks(0); - //} - grid->updateDistributedBlocks(comm); - - //if (writeBlocks) - //{ - // migCoProcessor->writeBlocks(0); - //} - - std::vector<int> dirs; - for (int i = D3Q27System::E; i<=D3Q27System::TS; i++) - { - dirs.push_back(i); - } - SetInterpolationDirsBlockVisitor interDirsVisitor(dirs); - grid->accept(interDirsVisitor); - - //walls - GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3)); - if (myid==0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathOut+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if (myid==0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathOut+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance()); - - //wall interactors - SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, velBCAdapter, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, velBCAdapter, Interactor3D::SOLID)); - - //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(), pathOut+"/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(), pathOut+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); - - //inflow - SPtr<D3Q27Interactor> inflowIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID)); - - //outflow - SPtr<D3Q27Interactor> outflowIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, outflowBCAdapter, Interactor3D::SOLID)); - - //////////////////////////////////////////// - //METIS - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B, MetisPartitioner::RECURSIVE)); - //std::dynamic_pointer_cast<MetisPartitioningGridVisitor>(metisVisitor)->setNumberOfProcesses(4000); - //////////////////////////////////////////// - /////delete solid blocks - if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - intHelper.addInteractor(inflowIntr); - intHelper.addInteractor(outflowIntr); - intHelper.addInteractor(addWallZminInt); - intHelper.addInteractor(addWallZmaxInt); - intHelper.addInteractor(fngIntrWhole2); - intHelper.selectBlocks(); - - if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - end"); - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 4"); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - ////////////////////////////////////// - - { - WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm); - ppblocks.process(3); - } - - - 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"); - } - - SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem); - grid->accept(kernelVisitor); - - if (myid==0) UBLOG(logINFO, "SetKernelBlockVisitor:end"); - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 5"); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - - if (refineLevel>0) - { - SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - if (myid==0) UBLOG(logINFO, "SetUndefinedNodesBlockVisitor:end"); - - //BC - intHelper.setBC(); - - - if (myid==0) UBLOG(logINFO, "intHelper.setBC():end"); - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 6"); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - - //initialization of distributions - InitDistributionsBlockVisitor initVisitor; - initVisitor.setVx1(fct); - grid->accept(initVisitor); - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 7"); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - - //Post process - { - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - WriteBoundaryConditionsCoProcessor ppgeo(grid, geoSch, pathOut, WbWriterVtkXmlBinary::getInstance(), comm); - ppgeo.process(0); - } - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 8"); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - - if (myid==0) UBLOG(logINFO, "Preprozess - end"); - } - else - { - //restartCoProcessor->restart((int)restartStep); - migCoProcessor->restart((int)restartStep); - grid->setTimeStep(restartStep); - //////////////////////////////////////////////////////////////////////////// - WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm); - ppblocks.process(0); - //////////////////////////////////////////////////////////////////////////// - } - - ////set connectors - SPtr<Interpolator> iProcessor(new CompressibleOffsetMomentsInterpolator()); - dynamicPointerCast<CompressibleOffsetMomentsInterpolator>(iProcessor)->setBulkViscosity(nuLB, bulckViscosity); - SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - grid->accept(setConnsVisitor); - - //bcVisitor should be accept after initialization!!!! - grid->accept(bcVisitor); - if (myid == 0) UBLOG(logINFO, "grid->accept(bcVisitor):end"); - - ////sponge layer - GbCuboid3DPtr spongeLayerX1max(new GbCuboid3D(g_maxX1-0.35, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if (myid==0) GbSystem3D::writeGeoObject(spongeLayerX1max.get(), pathOut+"/geo/spongeLayerX1max", WbWriterVtkXmlASCII::getInstance()); - SpongeLayerBlockVisitor slVisitorX1max(spongeLayerX1max, spKernel, nuLB, D3Q27System::E); - grid->accept(slVisitorX1max); - - SPtr<UbScheduler> nupsSch(new UbScheduler(nupsStep[0], nupsStep[1], nupsStep[2])); - std::shared_ptr<CoProcessor> nupsCoProcessor(new NUPSCounterCoProcessor(grid, nupsSch, numOfThreads, comm)); - - SPtr<UbScheduler> stepSch(new UbScheduler(outTimeStep, outTimeStart)); - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 9"); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - - SPtr<CoProcessor> writeMQCoProcessor(new WriteMacroscopicQuantitiesCoProcessor(grid, stepSch, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - - SPtr<GbObject3D> bbBox(new GbCuboid3D(g_minX1-blockLength, (g_maxX2-g_minX2)/2.0, g_minX3-blockLength, g_maxX1+blockLength, (g_maxX2-g_minX2)/2.0+deltaXcoarse, g_maxX3+blockLength)); - if (myid==0) GbSystem3D::writeGeoObject(bbBox.get(), pathOut+"/geo/bbBox", WbWriterVtkXmlASCII::getInstance()); - SPtr<WriteMQFromSelectionCoProcessor> writeMQSelectCoProcessor(new WriteMQFromSelectionCoProcessor(grid, stepSch, bbBox, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - - SPtr<UbScheduler> tavSch(new UbScheduler(1, timeAvStart, timeAvStop)); - SPtr<TimeAveragedValuesCoProcessor> tav(new TimeAveragedValuesCoProcessor(grid, pathOut, WbWriterVtkXmlBinary::getInstance(), tavSch, comm, - TimeAveragedValuesCoProcessor::Density | TimeAveragedValuesCoProcessor::Velocity | TimeAveragedValuesCoProcessor::Fluctuations)); - tav->setWithGhostLayer(true); - - SPtr<UbScheduler> stepMV(new UbScheduler(1, 0, 1000000)); - SPtr<MicrophoneArrayCoProcessor> micCoProcessor(new MicrophoneArrayCoProcessor(grid, stepSch, pathOut, comm) ); - double offsetX1 = 0.017; - double offsetZ1 = 0.11375; - std::vector<UbTupleFloat3> nodes; - //for (int i = 0; i <= 10; i++) - for (int i = 0; i <= 6; i++) - { - micCoProcessor->addMicrophone(Vector3D(0.3+deltaXcoarse+offsetX1*double(i), 0.015, 0.0-offsetZ1*double(i))); - nodes.push_back(UbTupleFloat3(float(0.3+deltaXcoarse+offsetX1*float(i)), float(0.015), float(0.0-offsetZ1*float(i)))); - } - //double offsetX2 = 0.1; - //for (int i = 0; i <= 6; i++) - //{ - // micCoProcessor->addMicrophone(Vector3D(0.17+offsetX2*double(i), 0.015, -1.1375)); - // nodes.push_back(UbTupleFloat3(float(0.17+offsetX2*float(i)), float(0.015), float(-1.1375))); - //} - - if (myid==0) WbWriterVtkXmlBinary::getInstance()->writeNodes(pathOut+"/geo/mic", nodes); - - //omp_set_num_threads(numOfThreads); - SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1)); - SPtr<Calculator> calculator(new BasicCalculator(grid, stepGhostLayer, endTime)); - calculator->addCoProcessor(nupsCoProcessor); - calculator->addCoProcessor(micCoProcessor); - //calculator->addCoProcessor(restartCoProcessor); - calculator->addCoProcessor(migCoProcessor); - //calculator->addCoProcessor(writeMQSelectCoProcessor); - calculator->addCoProcessor(writeMQCoProcessor); - calculator->addCoProcessor(tav); - - - if (myid==0) UBLOG(logINFO, "Simulation-start"); - calculator->calculate(); - if (myid==0) UBLOG(logINFO, "Simulation-end"); - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 10"); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - } - 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 must be set!: "<<argv[0]<<" <config file>"<<endl<<std::flush; - } - } - - //test_run(); - - //SuperMUC - //MPI_Finalize(); - - return 0; -} - diff --git a/apps/cpu/DLR-F16/Bombadil.cfg b/apps/cpu/DLR-F16/Bombadil.cfg deleted file mode 100644 index f8b9ebd61b7f0b8f18bb6351dfd22acd70085800..0000000000000000000000000000000000000000 --- a/apps/cpu/DLR-F16/Bombadil.cfg +++ /dev/null @@ -1,27 +0,0 @@ -pathOut = d:/temp/fng -pathGeo = d:/Projects/SFB880/FNG/A1_Forschungsdaten_Profilgeometrie_STL_CATIA_Rossian -fngFileWhole = f16-ascii.stl -fngFileBodyPart = f16-body-part-ascii.stl -fngFileTrailingEdge = f16-trailing-edge-ascii.stl - -numOfThreads = 1 -availMem = 20e9 -refineLevel = 3 -blockNx = 16 16 16 -uLB = 0.1 - -#x1min x1max x2min x2max x3min x3max [mm] -boundingBox = -50 400 45 55 -60 80 -deltaXfine = 0.1 - -restartStep = 10000 -restartStepStart = 10000 - -outTime = 1000 -endTime = 1000 - -logToFile = false - -porousTralingEdge = false - -thinWall = false \ No newline at end of file diff --git a/apps/cpu/DLR-F16/CMakeLists.txt b/apps/cpu/DLR-F16/CMakeLists.txt deleted file mode 100644 index 3ed3128e03a02a782427078f73ec49c5cca5d805..0000000000000000000000000000000000000000 --- a/apps/cpu/DLR-F16/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(f16) - -INCLUDE(${APPS_ROOT}/IncludsList.cmake) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(f16 BINARY) diff --git a/apps/cpu/DLR-F16/DLR-F16-Phoenix.cfg b/apps/cpu/DLR-F16/DLR-F16-Phoenix.cfg deleted file mode 100644 index 2bb8dbd6935744104f3022d7186a84444d08f7e3..0000000000000000000000000000000000000000 --- a/apps/cpu/DLR-F16/DLR-F16-Phoenix.cfg +++ /dev/null @@ -1,54 +0,0 @@ -pathOut = /home/koskuche/work/DLR-F16 -pathGeo = /home/koskuche/data/DLR-F16 -fngFileWhole = f16-ascii.stl -#fngFileWhole = grundgeometrie-direkter-export.stl -#fngFileWhole = grundgeometrie-mittel.stl - -#fngFileWhole = cylinder.ASCII.stl - -fngFileBodyPart = f16-body-part-ascii.stl -fngFileTrailingEdge = f16-trailing-edge-ascii.stl -zigZagTape = 2zackenbaender0.stl - -numOfThreads = 20 -availMem = 64e9 -refineLevel = 8 -blockNx = 7 6 7 -#blockNx = 21 6 13 -#blockNx = 294 12 247 -uLB = 0.1 - -#x1min x1max x2min x2max x3min x3max [m] -boundingBox = -0.90 1.20 0.035 0.065 -0.65 0.65 -#boundingBox = -0.1 0.60 0.035 0.065 -0.3 0.3 -#boundingBox = -10e-3 310e-3 0.035 0.065 -21e-3 21e-3 - -#boundingBox = -0.255 0.27 0.035 0.065 -0.17 0.155 -#boundingBox = -0.255 0.27 0.035 0.185 -0.17 0.155 - -#deltaXfine = 0.005 #level 0 -#deltaXfine = 0.0025 #level 1 -#deltaXfine = 0.00125 #level 2 -#deltaXfine = 0.000625 #level 3 -#deltaXfine = 0.0003125 #level 4 -#deltaXfine = 0.00015625 #level 5 -#deltaXfine = 0.000078125 #level 6 -#deltaXfine = 0.0000390625 #level 7 -deltaXfine = 0.00001953125 #level 8 - - -refineDistance = 0.1 - -restartStep = 100 -restartStepStart = 100 - -outTime = 100 -endTime = 100 - -logToFile = true - -porousTralingEdge = false - -thinWall = false - -nupsStep = 10 10 10000000 diff --git a/apps/cpu/DLR-F16/F16Bombadil.cfg b/apps/cpu/DLR-F16/F16Bombadil.cfg deleted file mode 100644 index 8dcb782d09ad79474841cfd0e9f803c59f0e49aa..0000000000000000000000000000000000000000 --- a/apps/cpu/DLR-F16/F16Bombadil.cfg +++ /dev/null @@ -1,39 +0,0 @@ -pathOut = d:/temp/fngPorous -pathGeo = d:/Projects/SFB880/FNG/A1_Forschungsdaten_Profilgeometrie_STL_CATIA_Rossian -#fngFileWhole = f16-ascii.stl -fngFileWhole = grundgeometrie-direkter-export.stl -fngFileBodyPart = f16-body-part-ascii.stl -fngFileTrailingEdge = f16-trailing-edge-ascii.stl -zigZagTape = 2zackenbaender0.stl - -numOfThreads = 4 -availMem = 20e9 -refineLevel = 8 -#blockNx = 8 4 8 -blockNx = 21 6 13 -uLB = 0.1 - -#x1min x1max x2min x2max x3min x3max [m] -boundingBox = -0.90 1.20 0.035 0.065 -0.65 0.65 - -#deltaXfine = 0.001 -#deltaXfine = 0.00375 -#deltaXfine = 1.46484375e-5 -#deltaXfine = 0.00001171875 -#deltaXfine = 9.765625e-6 -deltaXfine = 19.53125e-6 -#10e-6 - -refineDistance = 0.3 - -restartStep = 10000 -restartStepStart = 10000 - -outTime = 1 -endTime = 2000 - -logToFile = false - -porousTralingEdge = true - -thinWall = false diff --git a/apps/cpu/DLR-F16/F16BombadilTest.cfg b/apps/cpu/DLR-F16/F16BombadilTest.cfg deleted file mode 100644 index 3902693838407cc490b95848e28ec76b3e81fa6e..0000000000000000000000000000000000000000 --- a/apps/cpu/DLR-F16/F16BombadilTest.cfg +++ /dev/null @@ -1,51 +0,0 @@ -pathOut = d:/temp/f16Grid_x21 -pathGeo = d:/Projects/SFB880/DLR-F16/A1_Forschungsdaten_Profilgeometrie_STL_CATIA_Rossian -#fngFileWhole = f16-ascii.stl -fngFileWhole = grundgeometrie-direkter-export.stl -#fngFileWhole = grundgeometrie-mittel.stl -fngFileBodyPart = f16-body-part-ascii.stl -fngFileTrailingEdge = f16-trailing-edge-ascii.stl -zigZagTape = 2zackenbaender0.stl - -numOfThreads = 4 -availMem = 10e9 -refineLevel = 8 -blockNx = 21 6 6 -#blockNx = 21 6 13 -#blockNx = 294 12 247 -uLB = 0.1 - -#x1min x1max x2min x2max x3min x3max [m] -boundingBox = -0.90 1.20 0.035 0.065 -0.65 0.65 -#boundingBox = -0.90 1.20 0.035 0.065 -0.65 0.65048 -#boundingBox = -0.1 0.60 0.035 0.065 -0.3 0.3 -#boundingBox = -10e-3 310e-3 0.035 0.065 -21e-3 21e-3 - -#deltaXfine = 0.005 #level 0 -#deltaXfine = 0.0025 #level 1 -#deltaXfine = 0.00125 #level 2 -#deltaXfine = 0.000625 #level 3 -#deltaXfine = 0.0003125 #level 4 -#deltaXfine = 0.00015625 #level 5 -#deltaXfine = 0.000078125 #level 6 -#deltaXfine = 0.0000390625 #level 7 -deltaXfine = 0.00001953125 #level 8 - - -refineDistance = 0.3 - -restartStep = 100000 -restartStepStart = 100000 - -outTime = 1000 -endTime = 200000 - -logToFile = false - -porousTralingEdge = false - -thinWall = false - -testBox=false - -nupsStep = 10 10 10000000 \ No newline at end of file diff --git a/apps/cpu/DLR-F16/F16BombadilTest10e-6.cfg b/apps/cpu/DLR-F16/F16BombadilTest10e-6.cfg deleted file mode 100644 index a694947ec9dc141fdb84d310ea0868d47c3dbe56..0000000000000000000000000000000000000000 --- a/apps/cpu/DLR-F16/F16BombadilTest10e-6.cfg +++ /dev/null @@ -1,72 +0,0 @@ -pathOut = d:/temp/DLR-F16 -pathGeo = d:/Projects/SFB880/DLR-F16/A1_Forschungsdaten_Profilgeometrie_STL_CATIA_Rossian -#fngFileWhole = f16-ascii.stl -fngFileWhole = grundgeometrie-direkter-export.stl -#fngFileWhole = grundgeometrie-mittel.stl -fngFileBodyPart = f16-body-part-ascii.stl -fngFileTrailingEdge = f16-trailing-edge-ascii.stl -zigZagTape = 2zackenbaender0.stl - -numOfThreads = 1 -availMem = 13e9 -refineLevel = 9 #10 -#blockNx = 7 8 8 -#blockNx = 7 6 7 -blockNx = 21 6 13 -uLB = 0.1 - -#x1min x1max x2min x2max x3min x3max [m] -boundingBox = -0.90 1.20 0.035 0.065 -0.65 0.65 - -#boundingBox = -0.90 1.1992 0.035 0.065 -0.65 0.65 -#boundingBox = -0.1 0.635 0.035 0.065 -0.3 0.3 -#boundingBox = -10e-3 310e-3 0.035 0.065 -21e-3 25e-3 - -#boundingBox = 0 65.6e-3 35e-3 75e-3 -30e-3 0 - - -#deltaXfine = 5120e-6 #level 0 -#deltaXfine = 2560e-6 #level 1 -#deltaXfine = 1280e-6 #level 2 -#deltaXfine = 640e-6 #level 3 -#deltaXfine = 320e-6 #level 4 -#deltaXfine = 160e-6 #level 5 -#deltaXfine = 80e-6 #level 6 -#deltaXfine = 40e-6 #level 7 -#deltaXfine = 20e-6 #level 8 -#deltaXfine = 10e-6 #level 9 -#deltaXfine = 0.000009765625 - -#deltaXfine = 0.005 #level 0 -#deltaXfine = 0.0025 #level 1 -#deltaXfine = 0.00125 #level 2 -#deltaXfine = 0.000625 #level 3 -#deltaXfine = 0.0003125 #level 4 -#deltaXfine = 0.00015625 #level 5 -#deltaXfine = 0.000078125 #level 6 -#deltaXfine = 0.0000390625 #level 7 -#deltaXfine = 0.00001953125 #level 8 -deltaXfine = 0.000009765625 #level 9 - -#deltaXfine = 6.5e-6 - -startDistance = -1.0 -refineDistance = 0.3 - -newStart = true -restartStep = 10 - -cpStart = 1 -cpStep = 1 - -outTime = 1000 -endTime = 1 - -logToFile = false - -porousTralingEdge = true - -thinWall = false - - -nupsStep = 100 100 10000000 \ No newline at end of file diff --git a/apps/cpu/DLR-F16/F16BombadilTestSmall.cfg b/apps/cpu/DLR-F16/F16BombadilTestSmall.cfg deleted file mode 100644 index 9b56585d541d9898a86f45779ed664626cb30d24..0000000000000000000000000000000000000000 --- a/apps/cpu/DLR-F16/F16BombadilTestSmall.cfg +++ /dev/null @@ -1,53 +0,0 @@ -pathOut = d:/temp/fng6 -pathGeo = d:/Projects/SFB880/FNG/A1_Forschungsdaten_Profilgeometrie_STL_CATIA_Rossian -#fngFileWhole = f16-ascii.stl -fngFileWhole = grundgeometrie-direkter-export.stl -#fngFileWhole = grundgeometrie-mittel.stl -fngFileBodyPart = f16-body-part-ascii.stl -fngFileTrailingEdge = f16-trailing-edge-ascii.stl -zigZagTape = 2zackenbaender0.stl - -numOfThreads = 1 -availMem = 10e9 -refineLevel = 1 -#blockNx = 8 4 8 -blockNx = 21 6 13 -#blockNx = 294 12 247 -uLB = 0.1 - -#x1min x1max x2min x2max x3min x3max [m] -#boundingBox = -0.90 1.20 0.035 0.065 -0.65 0.65 -#boundingBox = -0.1 0.60 0.035 0.065 -0.3 0.3 -#boundingBox = -10e-3 310e-3 0.035 0.065 -21e-3 21e-3 - -boundingBox = -0.360 0.660 0.035 0.065 -0.30 0.30 - - -#deltaXfine = 0.005 #level 0 -#deltaXfine = 0.0025 #level 1 -#deltaXfine = 0.00125 #level 2 -#deltaXfine = 0.000625 #level 3 -#deltaXfine = 0.0003125 #level 4 -#deltaXfine = 0.00015625 #level 5 -#deltaXfine = 0.000078125 #level 6 -#deltaXfine = 0.0000390625 #level 7 -deltaXfine = 0.00001953125 #level 8 - - -refineDistance = 0.3 - -restartStep = 100 -restartStepStart = 100 - -outTime = 100 -endTime = 100 - -logToFile = false - -porousTralingEdge = false - -thinWall = false - -testBox=true - -nupsStep = 10 10 10000000 \ No newline at end of file diff --git a/apps/cpu/DLR-F16/f16-porous.cfg b/apps/cpu/DLR-F16/f16-porous.cfg deleted file mode 100644 index 61af6835e123413323944897a562fbfe1f9782fc..0000000000000000000000000000000000000000 --- a/apps/cpu/DLR-F16/f16-porous.cfg +++ /dev/null @@ -1,78 +0,0 @@ -15 -fngFileWhole1 = grundgeometrie-direkter-export.stl -fngFileWhole2 = f16-ascii.stl -#fngFileWhole = grundgeometrie-mittel.stl -fngFileBodyPart = f16-body-part-ascii.stl -fngFileTrailingEdge = f16-trailing-edge-ascii.stl -zigZagTape = 2zackenbaender0.stl -#sampleFilename = f16-pte-669x2945x1119.raw -#sampleFilename = f16-pte-669x2945x100.raw -#sampleFilename = f16-pte-15.stl #test10_1.stl -sampleFilename = output.stl - - -#pathReInit = d:/temp/DLR-F16_L0_vx0_V -pathReInit = d:/temp/DLR-F16_L2_init -stepReInit = 0 - -numOfThreads = 1 -availMem = 13e9 - -uLB = 0.1 - -#x1min x1max x2min x2max x3min x3max [m] -#deltaXfine = 0.00001171875 -#deltaXfine = 0.00075 -boundingBox = -0.90 1.20 0.035 0.065 -0.65 0.65 -blockNx = 10 10 10 - -#deltaXfine = 13393e-9 -#boundingBox = -0.90 1.19145087 0.035 0.06928608 -0.65 0.65 -#blockNx = 10 10 10 - -#boundingBox = -0.90 1.19998697917 0.035 6.49869791667e-2 -0.65 0.65 -#deltaXfine = 1.30208333333e-5 -#blockNx = 9 9 9 - -refineLevel = 0 - -deltaXfine = 0.003 #level 0 -#deltaXfine = 0.0015 #level 1 -#deltaXfine = 0.00075 #level 2 -#deltaXfine = 0.000375 #level 3 -#deltaXfine = 0.0001875 #level 4 -#deltaXfine = 0.00009375 #level 5 -#deltaXfine = 0.000046875 #level 6 -#deltaXfine = 0.0000234375 #level 7 -#deltaXfine = 0.00001171875 #level 8 -#deltaXfine = 13393e-9 #level 8 - -startDistance = -1.0 -refineDistance = 0.3 - -writeBlocksToFile = true - -newStart = true -restartStep = 60000 - -cpStart = 60000 -cpStep = 60000 - -outTimeStep = 60000 -outTimeStart = 60000 -endTime = 60000 - -logToFile = false - -porousTralingEdge = false - -thinWall = true - -#Cp -pcpStart = 10 -pcpStop = 100 -p_inf = -0.00759931 - - - -nupsStep = 1000 1000 10000000 \ No newline at end of file diff --git a/apps/cpu/DLR-F16/f16-solid.cfg b/apps/cpu/DLR-F16/f16-solid.cfg deleted file mode 100644 index abe0c13f3e45530bd7833727f9314bdd244dbb2e..0000000000000000000000000000000000000000 --- a/apps/cpu/DLR-F16/f16-solid.cfg +++ /dev/null @@ -1,81 +0,0 @@ -pathOut = d:/temp/DLR-F16_L0_A -pathGeo = d:/Projects/SFB880/DLR-F16/A1_Forschungsdaten_Profilgeometrie_STL_CATIA_Rossian -fngFileWhole1 = grundgeometrie-direkter-export.stl -fngFileWhole2 = f16-ascii.stl - -#fngFileWhole = grundgeometrie-mittel.stl -fngFileBodyPart = f16-body-part-ascii.stl -fngFileTrailingEdge = f16-trailing-edge-ascii.stl -zigZagTape = 2zackenbaender0.stl -#sampleFilename = f16-pte-669x2945x1119.raw -#sampleFilename = f16-pte-669x2945x100.raw -#sampleFilename = f16-pte-15.stl #test10_1.stl -sampleFilename = output.stl - -pathReInit = /work/koskuche/DLR-F16_L7 -stepReInit = 10000 - -numOfThreads = 4 -availMem = 3e9 - -uLB = 0.1 - -#x1min x1max x2min x2max x3min x3max [m] -#deltaXfine = 0.00001171875 -#deltaXfine = 0.00075 -boundingBox = -0.90 1.20 0.035 0.065 -0.65 0.65 -blockNx = 10 10 10 - -#deltaXfine = 13393e-9 -#boundingBox = -0.90 1.19145087 0.035 0.06928608 -0.65 0.65 -#blockNx = 10 10 10 - -#boundingBox = -0.90 1.19998697917 0.035 6.49869791667e-2 -0.65 0.65 -#deltaXfine = 1.30208333333e-5 -#blockNx = 9 9 9 - -refineLevel = 0 - -deltaXfine = 0.003 #level 0 -#deltaXfine = 0.0015 #level 1 -#deltaXfine = 0.00075 #level 2 -#deltaXfine = 0.000375 #level 3 -#deltaXfine = 0.0001875 #level 4 -#deltaXfine = 0.00009375 #level 5 -#deltaXfine = 0.000046875 #level 6 -#eltaXfine = 0.0000234375 #level 7 -#deltaXfine = 0.00001171875 #level 8 - -startDistance = -1.0 -#refineDistance = 1.2 -refineDistance = 0.6 -#refineDistance = 0.3 - -writeBlocksToFile = true - -newStart = false -restartStep = 15000 -chunk = 160 - -cpStep = 20000 -cpStart = 20000 - -outTimeStep = 20000 -outTimeStart = 20000 - -endTime = 20000 - -logToFile = false - -porousTralingEdge = false - -thinWall = false - -#Cp -pcpStart = 1000000 -pcpStop = 1000000 - -timeAvStart = 1000000 -timeAvStop = 1400000 - -nupsStep = 100 100 10000000 diff --git a/apps/cpu/DLR-F16/f16.cpp b/apps/cpu/DLR-F16/f16.cpp deleted file mode 100644 index 639a73c3863d6e725ad048e44e0f9be12faf3909..0000000000000000000000000000000000000000 --- a/apps/cpu/DLR-F16/f16.cpp +++ /dev/null @@ -1,1305 +0,0 @@ -#include <iostream> -#include <string> - - -#include "VirtualFluids.h" -#include <omp.h> -using namespace std; - -double rangeRandom1() -{ - return (2.0*rand())/RAND_MAX-1.0; -} - -void setBC(SPtr<Grid3D> grid, string pathGeo, string fngFileWhole, string zigZagTape, vector<double> boundingBox, double uLB, double rhoLB, double blockLength, SPtr<BCProcessor> bcProcessor) -{ - SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - std::vector<std::vector<SPtr<Block3D>> > blockVector; - int minInitLevel; - int maxInitLevel; - int gridRank; - - gridRank = comm->getProcessID(); - minInitLevel = grid->getCoarsestInitializedLevel(); - maxInitLevel = grid->getFinestInitializedLevel(); - blockVector.resize(maxInitLevel+1); - for (int level = minInitLevel; level<=maxInitLevel; level++) - { - grid->getBlocks(level, gridRank, true, blockVector[level]); - } - - for (int level = minInitLevel; level<=maxInitLevel; level++) - { - for(SPtr<Block3D> block : blockVector[level]) - { - if (block) - { - SPtr<ILBMKernel> kernel = block->getKernel(); - kernel->setBCProcessor(bcProcessor->clone(kernel)); - } - } - } - - SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - - SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter()); - noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm())); - if (myid==0) UBLOG(logINFO, "Read fngFileWhole:start"); - SPtr<GbTriFaceMesh3D> fngMeshWhole = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+fngFileWhole, "fngMeshWhole", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); - if (myid==0) UBLOG(logINFO, "Read fngFileWhole:end"); - fngMeshWhole->rotate(0.0, 0.5, 0.0); - SPtr<D3Q27TriFaceMeshInteractor> fngIntrWhole = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshWhole, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - if (myid==0) UBLOG(logINFO, "Read zigZagTape:start"); - string ZckbndFilename = pathGeo+"/"+zigZagTape; - SPtr<GbTriFaceMesh3D> meshBand1(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape1")); - meshBand1->rotate(0.0, 5, 0.0); - meshBand1->translate(15, 0, -12.850); - // Zackenband2 - SPtr<GbTriFaceMesh3D> meshBand2(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape2")); - meshBand2->rotate(0.0, 5, 0.0); - meshBand2->translate(15, 5, -12.850); - - SPtr<GbTriFaceMesh3D> meshBand5(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape5")); - meshBand5->rotate(0.0, -1, 0.0); - meshBand5->rotate(0.0, 0.0, 180.0); - //meshBand5->translate(30, 0, -37.3); - meshBand5->translate(30, 0, -37.2); - - // Zackenband6 - SPtr<GbTriFaceMesh3D> meshBand6(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape6")); - meshBand6->rotate(0.0, -1, 0.0); - meshBand6->rotate(0.0, 0.0, 180.0); - //meshBand6->translate(30, 5, -37.3); - meshBand6->translate(30, 5, -37.2); - - SPtr<D3Q27TriFaceMeshInteractor> triBand1Interactor(new D3Q27TriFaceMeshInteractor(meshBand1, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES)); - SPtr<D3Q27TriFaceMeshInteractor> triBand2Interactor(new D3Q27TriFaceMeshInteractor(meshBand2, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES)); - SPtr<D3Q27TriFaceMeshInteractor> triBand3Interactor(new D3Q27TriFaceMeshInteractor(meshBand5, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES)); - SPtr<D3Q27TriFaceMeshInteractor> triBand4Interactor(new D3Q27TriFaceMeshInteractor(meshBand6, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES)); - - mu::Parser fct; - fct.SetExpr("U"); - fct.DefineConst("U", uLB); - SPtr<BCAdapter> velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); - velBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityWithDensityBCAlgorithm())); - - SPtr<BCAdapter> outflowBCAdapter(new DensityBCAdapter(rhoLB)); - outflowBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NonReflectingOutflowBCAlgorithm())); - - double g_minX1 = boundingBox[0]*1000.0; - double g_minX2 = boundingBox[2]*1000.0; - double g_minX3 = boundingBox[4]*1000.0; - - double g_maxX1 = boundingBox[1]*1000.0; - double g_maxX2 = boundingBox[3]*1000.0; - double g_maxX3 = boundingBox[5]*1000.0; - - GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3)); - - GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - - SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, velBCAdapter, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, velBCAdapter, Interactor3D::SOLID)); - //inflow - GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_minX1, g_maxX2+blockLength, g_maxX3+blockLength)); - //outflow - GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - //inflow - SPtr<D3Q27Interactor> inflowIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID)); - //outflow - SPtr<D3Q27Interactor> outflowIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, outflowBCAdapter, Interactor3D::SOLID)); - - SetSolidBlockVisitor v1(fngIntrWhole, BlockType::BC); - grid->accept(v1); - - SetSolidBlockVisitor v2(triBand1Interactor, BlockType::BC); - grid->accept(v2); - - SetSolidBlockVisitor v3(triBand1Interactor, BlockType::BC); - grid->accept(v3); - - SetSolidBlockVisitor v4(triBand2Interactor, BlockType::BC); - grid->accept(v4); - - SetSolidBlockVisitor v5(triBand3Interactor, BlockType::BC); - grid->accept(v5); - - SetSolidBlockVisitor v6(triBand4Interactor, BlockType::BC); - grid->accept(v6); - - SetSolidBlockVisitor v7(addWallZminInt, BlockType::BC); - grid->accept(v7); - - SetSolidBlockVisitor v8(addWallZmaxInt, BlockType::BC); - grid->accept(v8); - - SetSolidBlockVisitor v9(inflowIntr, BlockType::BC); - grid->accept(v9); - - SetSolidBlockVisitor v10(outflowIntr, BlockType::BC); - grid->accept(v10); - - inflowIntr->initInteractor(); - outflowIntr->initInteractor(); - addWallZminInt->initInteractor(); - addWallZmaxInt->initInteractor(); - fngIntrWhole->initInteractor(); - triBand1Interactor->initInteractor(); - triBand2Interactor->initInteractor(); - triBand3Interactor->initInteractor(); - triBand3Interactor->initInteractor(); - triBand4Interactor->initInteractor(); -} - -void run(string configname) -{ - try - { - - vf::basics::ConfigurationFile config; - config.load(configname); - - string pathOut = config.getValue<string>("pathOut"); - string pathGeo = config.getValue<string>("pathGeo"); - string fngFileWhole1 = config.getValue<string>("fngFileWhole1"); - string fngFileWhole2 = config.getValue<string>("fngFileWhole2"); - string fngFileTrailingEdge = config.getValue<string>("fngFileTrailingEdge"); - string fngFileBodyPart = config.getValue<string>("fngFileBodyPart"); - string zigZagTape = config.getValue<string>("zigZagTape"); - int numOfThreads = config.getValue<int>("numOfThreads"); - vector<int> blockNx = config.getVector<int>("blockNx"); - vector<double> boundingBox = config.getVector<double>("boundingBox"); - double uLB = config.getValue<double>("uLB"); - double restartStep = config.getValue<double>("restartStep"); - double cpStart = config.getValue<double>("cpStart"); - double cpStep = config.getValue<double>("cpStep"); - double endTime = config.getValue<double>("endTime"); - double outTimeStep = config.getValue<double>("outTimeStep"); - double outTimeStart = config.getValue<double>("outTimeStart"); - double availMem = config.getValue<double>("availMem"); - int refineLevel = config.getValue<int>("refineLevel"); - bool logToFile = config.getValue<bool>("logToFile"); - bool porousTralingEdge = config.getValue<bool>("porousTralingEdge"); - double deltaXfine = config.getValue<double>("deltaXfine")*1000.0; - bool thinWall = config.getValue<bool>("thinWall"); - double refineDistance = config.getValue<double>("refineDistance"); - double startDistance = config.getValue<double>("startDistance"); - vector<double> nupsStep = config.getVector<double>("nupsStep"); - bool newStart = config.getValue<bool>("newStart"); - bool writeBlocks = config.getValue<bool>("writeBlocks"); - string sampleFilename = config.getValue<string>("sampleFilename"); - string pathReInit = config.getValue<string>("pathReInit"); - int stepReInit = config.getValue<int>("stepReInit"); - - double pcpStart = config.getValue<double>("pcpStart"); - double pcpStop = config.getValue<double>("pcpStop"); - //double p_inf = config.getValue<double>("p_inf"); - - double timeAvStart = config.getValue<double>("timeAvStart"); - double timeAvStop = config.getValue<double>("timeAvStop"); - - int chunk = config.getValue<int>("chunk"); - - - SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - if (logToFile) - { -#if defined(__unix__) - if (myid==0) - { - const char* str = pathOut.c_str(); - mkdir(str, S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH); - } -#endif - - if (myid==0) - { - stringstream logFilename; - logFilename<<pathOut+"/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - } - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 1"); - UBLOG(logINFO, "PID = "<<myid<<" Total Physical Memory (RAM): "<<Utilities::getTotalPhysMem()); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used: "<<Utilities::getPhysMemUsed()); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - - - //the geometry is in mm - - double g_minX1 = boundingBox[0]*1000.0; - double g_minX2 = boundingBox[2]*1000.0; - double g_minX3 = boundingBox[4]*1000.0; - - double g_maxX1 = boundingBox[1]*1000.0; - double g_maxX2 = boundingBox[3]*1000.0; - double g_maxX3 = boundingBox[5]*1000.0; - - ////////////////////////////////////////////////////////////////////////// - double deltaXcoarse = deltaXfine*(double)(1<<refineLevel); - //double nx2_temp = floor((g_maxX2 - g_minX2) / (deltaXcoarse*(double)blockNx[0])); - - //deltaXcoarse = (g_maxX2 - g_minX2) / (nx2_temp*(double)blockNx[0]); - //UBLOG(logINFO, "nx2_temp:"<<nx2_temp); - //g_maxX2 -= 0.5* deltaXcoarse; - ////////////////////////////////////////////////////////////////////////// - double blockLength = (double)blockNx[0]*deltaXcoarse; - - //########################################################################## - //## physical parameters - //########################################################################## - double Re = 1e6; - - double rhoLB = 0.0; - double rhoReal = 1.2041; //(kg/m3) - //double nueReal = 153.5e-7; //m^2/s - double uReal = 55; //m/s - double lReal = 0.3;//m - //double uReal = Re*nueReal / lReal; - double nuReal = (uReal*lReal)/Re; //m^2/s - - //##Machzahl: - //#Ma = uReal/csReal - double Ma = 0.15;//Ma-Real! - //double csReal = uReal / Ma; - //double hLB = lReal / deltaXcoarse; - - //LBMUnitConverter unitConverter(lReal, csReal, rhoReal, hLB); - - //double u_LB = uReal * unitConverter.getFactorVelocityWToLb(); - //double nu_LB = nueReal * unitConverter.getFactorViscosityWToLb(); - double lLB = lReal*1000.0/deltaXcoarse; - double nuLB = (uLB*lLB)/Re; //0.005; - //double nuLB = 0.005; - - SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter()); - - const int baseLevel = 0; - - //////////////////////////////////////////////////////////////////////// - //Grid - ////////////////////////////////////////////////////////////////////////// - SPtr<Grid3D> grid(new Grid3D(comm)); - - //BC adapters - SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter()); - if (thinWall) - { - noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new ThinWallNoSlipBCAlgorithm())); - } - else - { - noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm())); - } - - SPtr<BCAdapter> slipBCAdapter(new SlipBCAdapter()); - slipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new SlipBCAlgorithm())); - - mu::Parser fct; - fct.SetExpr("U"); - fct.DefineConst("U", uLB); - SPtr<BCAdapter> velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); - velBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityWithDensityBCAlgorithm())); - //velBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityBCAlgorithm())); - - SPtr<BCAdapter> outflowBCAdapter(new DensityBCAdapter(rhoLB)); - outflowBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NonReflectingOutflowBCAlgorithm())); - //denBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NonEqDensityBCAlgorithm())); - - BoundaryConditionsBlockVisitor bcVisitor; - bcVisitor.addBC(noSlipBCAdapter); - //bcVisitor.addBC(slipBCAdapter); - bcVisitor.addBC(velBCAdapter); - bcVisitor.addBC(outflowBCAdapter); - - SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant2LBMKernel(blockNx[0], blockNx[1], blockNx[2], CompressibleCumulant2LBMKernel::NORMAL)); - SPtr<BCProcessor> bcProc; - if (thinWall) - { - bcProc = SPtr<BCProcessor>(new ThinWallBCProcessor()); - } - else - { - bcProc = SPtr<BCProcessor>(new BCProcessor()); - } - kernel->setBCProcessor(bcProc); - ////////////////////////////////////////////////////////////////////////// - //restart - SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart)); - //MPIIORestartCoProcessor rcp(grid, rSch, pathOut, comm); - //rcp.setChunk(chunk); - - SPtr<UbScheduler> rSch2(new UbScheduler(restartStep)); - //RestartCoProcessor rp(grid, rSch2, comm, pathOut, RestartCoProcessor::BINARY); - - //MPIIORestart2CoProcessor rcp2(grid, rSch2, pathOut+"/mpiio2", comm); - //rcp2.setLBMKernel(kernel); - //rcp2.setBCProcessor(bcProc); - - - MPIIORestart1CoProcessor rcp3(grid, rSch, pathOut+"/mpiio3", comm); - rcp3.setLBMKernel(kernel); - rcp3.setBCProcessor(bcProc); - - //MPIIORestart3CoProcessor rcp4(grid, rSch, pathOut+"/mpiio4", comm); - //rcp4.setLBMKernel(kernel); - //rcp4.setBCProcessor(bcProc); - ////////////////////////////////////////////////////////////////////////// - - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 2"); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - - //if (grid->getTimeStep() == 0) - if (newStart) - { - //////////////////////////////////////////////////////////////////////// - //define grid - ////////////////////////////////////////////////////////////////////////// - grid->setDeltaX(deltaXcoarse); - grid->setBlockNX(blockNx[0], blockNx[1], blockNx[2]); - - SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); - if (myid==0) GbSystem3D::writeGeoObject(gridCube.get(), pathOut+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance()); - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - grid->setPeriodicX1(false); - grid->setPeriodicX2(true); - grid->setPeriodicX3(false); - - if (myid==0) - { - UBLOG(logINFO, "Parameters:"); - UBLOG(logINFO, "* Re = "<<Re); - UBLOG(logINFO, "* Ma = "<<Ma); - UBLOG(logINFO, "* velocity (uReal) = "<<uReal<<" m/s"); - UBLOG(logINFO, "* viscosity (nuReal) = "<<nuReal<<" m^2/s"); - UBLOG(logINFO, "* chord length (lReal)= "<<lReal<<" m"); - UBLOG(logINFO, "* velocity LB (uLB) = "<<uLB); - UBLOG(logINFO, "* viscosity LB (nuLB) = "<<nuLB); - UBLOG(logINFO, "* chord length (l_LB) = "<<lLB<<" dx_base"); - UBLOG(logINFO, "* dx_base = "<<deltaXcoarse/1000<<" m"); - UBLOG(logINFO, "* dx_refine = "<<deltaXfine/1000<<" m"); - UBLOG(logINFO, "* blocknx = "<<blockNx[0]<<"x"<<blockNx[1]<<"x"<<blockNx[2]); - UBLOG(logINFO, "* refineDistance = "<<refineDistance); - UBLOG(logINFO, "* number of levels = "<<refineLevel+1); - UBLOG(logINFO, "* number of threads = "<<numOfThreads); - UBLOG(logINFO, "* number of processes = "<<comm->getNumberOfProcesses()); - UBLOG(logINFO, "Preprozess - start"); - } - - SPtr<GbTriFaceMesh3D> fngMeshWhole1; - SPtr<GbTriFaceMesh3D> fngMeshWhole2; - SPtr<GbTriFaceMesh3D> fngMeshBodyPart; - SPtr<GbTriFaceMesh3D> fngMeshTrailingEdge; - SPtr<GbTriFaceMesh3D> porousTrailingEdge; - if (porousTralingEdge) - { - if (myid==0) UBLOG(logINFO, "Read fngFileBodyPart:start"); - fngMeshBodyPart = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+fngFileBodyPart, "fngMeshBody", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); - if (myid==0) UBLOG(logINFO, "Read fngFileBodyPart:end"); - fngMeshBodyPart->rotate(0.0, 0.5, 0.0); - if (myid==0) GbSystem3D::writeGeoObject(fngMeshBodyPart.get(), pathOut+"/geo/fngMeshBody", WbWriterVtkXmlBinary::getInstance()); - - if (myid==0) UBLOG(logINFO, "Read fngFileTrailingEdge:start"); - fngMeshTrailingEdge = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+fngFileTrailingEdge, "fngMeshTrailingEdge", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); - if (myid==0) UBLOG(logINFO, "Read fngFileTrailingEdge:end"); - fngMeshTrailingEdge->rotate(0.0, 0.5, 0.0); - fngMeshTrailingEdge->translate(-0.05, 0, 1.3); - if (myid==0) GbSystem3D::writeGeoObject(fngMeshTrailingEdge.get(), pathOut+"/geo/fngMeshTrailingEdge", WbWriterVtkXmlBinary::getInstance()); - - if (myid==0) UBLOG(logINFO, "Read porousTrailingEdge:start"); - //porousTrailingEdge = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+sampleFilename, "porousTrailingEdge", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); - porousTrailingEdge = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo+"/"+sampleFilename, "porousTrailingEdge", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); - if (myid==0) UBLOG(logINFO, "Read porousTrailingEdge:end"); - porousTrailingEdge->rotate(90, -90, 0.0); - porousTrailingEdge->rotate(0, -4.3, 0.0); - //porousTrailingEdge->translate(280.5, 40.0, 3.5); - porousTrailingEdge->translate(276, 15.95, 3.5); - if (myid==0) GbSystem3D::writeGeoObject(porousTrailingEdge.get(), pathOut+"/geo/porousTrailingEdge", WbWriterVtkXmlASCII::getInstance()); - - //string samplePathname = pathGeo+"/"+sampleFilename; - - //int pmNX1 = 669; - //int pmNX2 = 2945; - //int pmNX3 = 100; - - //double deltaVoxelX1 = 13393e-6; - //double deltaVoxelX2 = 13393e-6; - //double deltaVoxelX3 = 13393e-6; - - //double lthreshold = 11538; - //double uthreshold = 65535; - - //if (myid==0) UBLOG(logINFO, "read voxel matrix: start"); - //GbVoxelMatrix3DPtr porousTrailingEdge(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0.0 , lthreshold, uthreshold)); - //porousTrailingEdge->readMatrixFromRawFile<unsigned short>(samplePathname, GbVoxelMatrix3D::BigEndian); - //porousTrailingEdge->setVoxelMatrixDelta((float)deltaVoxelX1, (float)deltaVoxelX2, (float)deltaVoxelX3); - //porousTrailingEdge->setVoxelMatrixMininum(0.0, 0.0, 0.0); - //if (myid==0) UBLOG(logINFO, "read voxel matrix: end"); - - //if (myid==0) UBLOG(logINFO, "rotate voxel matrix: start"); - //porousTrailingEdge->rotate90aroundZ(); - //porousTrailingEdge->rotate90aroundZ(); - //porousTrailingEdge->rotate90aroundZ(); - //porousTrailingEdge->rotate90aroundX(); - //porousTrailingEdge->rotateAroundY(0.07); - //porousTrailingEdge->translate(276, 15.95, 3.26); - // - //if (myid==0) UBLOG(logINFO, "rotate voxel matrix: end"); - - ////if (myid==0) porousTrailingEdge->writeToVTKImageDataASCII(pathOut+"/geo/PorousTrailingEdge"); - //if (myid==0) porousTrailingEdge->writeToVTKImageDataAppended(pathOut+"/geo/PorousTrailingEdge"); - - } - else - { - //if (myid==0) UBLOG(logINFO, "Read fngFileWhole1:start"); - //fngMeshWhole1 = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+fngFileWhole1, "fngMeshWhole1", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); - //if (myid==0) UBLOG(logINFO, "Read fngFileWhole1:end"); - //fngMeshWhole1->rotate(0.0, 0.5, 0.0); - //if (myid==0) GbSystem3D::writeGeoObject(fngMeshWhole1.get(), pathOut+"/geo/fngMeshWhole1", WbWriterVtkXmlBinary::getInstance()); - - if (myid==0) UBLOG(logINFO, "Read fngFileWhole2:start"); - fngMeshWhole2 = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+fngFileWhole2, "fngMeshWhole2", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); - if (myid==0) UBLOG(logINFO, "Read fngFileWhole2:end"); - fngMeshWhole2->rotate(0.0, 0.5, 0.0); - if (myid==0) GbSystem3D::writeGeoObject(fngMeshWhole2.get(), pathOut+"/geo/fngMeshWhole2", WbWriterVtkXmlBinary::getInstance()); - } - - ////////////////////////////////////////////////////////////////////////// - // Zackenband - ////////////////////////////////////////////////////////////////////////// - //top - ////////////////////////////////////////////////////////////////////////// - if (myid==0) UBLOG(logINFO, "Read zigZagTape:start"); - string ZckbndFilename = pathGeo+"/"+zigZagTape; - SPtr<GbTriFaceMesh3D> meshBand1(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape1")); - meshBand1->rotate(0.0, 5, 0.0); - meshBand1->translate(15, 0, -12.850); - if (myid==0) GbSystem3D::writeGeoObject(meshBand1.get(), pathOut+"/geo/zigZagTape1", WbWriterVtkXmlASCII::getInstance()); - // Zackenband2 - SPtr<GbTriFaceMesh3D> meshBand2(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape2")); - meshBand2->rotate(0.0, 5, 0.0); - meshBand2->translate(15, 5, -12.850); - if (myid==0) GbSystem3D::writeGeoObject(meshBand2.get(), pathOut+"/geo/zigZagTape2", WbWriterVtkXmlASCII::getInstance()); - //// Zackenband3 - //SPtr<GbTriFaceMesh3D> meshBand3(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape3")); - //meshBand3->rotate(0.0, 5, 0.0); - //meshBand3->translate(15, 0, -12.35); - //if (myid==0) GbSystem3D::writeGeoObject(meshBand3.get(), pathOut+"/geo/zigZagTape3", WbWriterVtkXmlASCII::getInstance()); - //// Zackenband4 - //SPtr<GbTriFaceMesh3D> meshBand4(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape4")); - //meshBand4->rotate(0.0, 5, 0.0); - //meshBand4->translate(15, 5, -12.35); - //if (myid==0) GbSystem3D::writeGeoObject(meshBand4.get(), pathOut+"/geo/zigZagTape4", WbWriterVtkXmlASCII::getInstance()); - - //bottom - SPtr<GbTriFaceMesh3D> meshBand5(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape5")); - meshBand5->rotate(0.0, -1, 0.0); - meshBand5->rotate(0.0, 0.0, 180.0); - //meshBand5->translate(30, 0, -37.3); - meshBand5->translate(30, 0, -37.2); - if (myid==0) GbSystem3D::writeGeoObject(meshBand5.get(), pathOut+"/geo/zigZagTape5", WbWriterVtkXmlASCII::getInstance()); - // Zackenband6 - SPtr<GbTriFaceMesh3D> meshBand6(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape6")); - meshBand6->rotate(0.0, -1, 0.0); - meshBand6->rotate(0.0, 0.0, 180.0); - //meshBand6->translate(30, 5, -37.3); - meshBand6->translate(30, 5, -37.2); - if (myid==0) GbSystem3D::writeGeoObject(meshBand6.get(), pathOut+"/geo/zigZagTape6", WbWriterVtkXmlASCII::getInstance()); - //// Zackenband7 - //SPtr<GbTriFaceMesh3D> meshBand7(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape7")); - //meshBand7->rotate(0.0, 5, 0.0); - //meshBand7->translate(15, 0, -12.35); - //if (myid==0) GbSystem3D::writeGeoObject(meshBand7.get(), pathOut+"/geo/zigZagTape7", WbWriterVtkXmlASCII::getInstance()); - //// Zackenband8 - //SPtr<GbTriFaceMesh3D> meshBan8(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape8")); - //meshBan8->rotate(0.0, 5, 0.0); - //meshBan8->translate(15, 5, -12.35); - //if (myid==0) GbSystem3D::writeGeoObject(meshBan8.get(), pathOut+"/geo/zigZagTape8", WbWriterVtkXmlASCII::getInstance()); - if (myid==0) UBLOG(logINFO, "Read zigZagTape:end"); - - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 3"); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - ////////////////////////////////////////////////////////////////////////// - //return; - - //SPtr<Interactor3D> fngIntrWhole1; - SPtr<Interactor3D> fngIntrWhole2; - SPtr<Interactor3D> fngIntrBodyPart; - SPtr<Interactor3D> fngIntrTrailingEdge; - SPtr<Interactor3D> porousIntrTrailingEdge; - - if (porousTralingEdge) - { - fngIntrBodyPart = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshBodyPart, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES)); - fngIntrTrailingEdge = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshTrailingEdge, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES)); - porousIntrTrailingEdge = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(porousTrailingEdge, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES)); - } - else - { - //fngIntrWhole1 = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshWhole1, grid, noSlipBCAdapter, Interactor3D::SOLID)); - fngIntrWhole2 = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshWhole2, grid, noSlipBCAdapter, Interactor3D::SOLID));//, Interactor3D::POINTS)); - } - - SPtr<D3Q27TriFaceMeshInteractor> triBand1Interactor(new D3Q27TriFaceMeshInteractor(meshBand1, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES)); - SPtr<D3Q27TriFaceMeshInteractor> triBand2Interactor(new D3Q27TriFaceMeshInteractor(meshBand2, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES)); - SPtr<D3Q27TriFaceMeshInteractor> triBand3Interactor(new D3Q27TriFaceMeshInteractor(meshBand5, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES)); - SPtr<D3Q27TriFaceMeshInteractor> triBand4Interactor(new D3Q27TriFaceMeshInteractor(meshBand6, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES)); - - if (refineLevel>0&&myid==0&&writeBlocks) - { - if (myid==0) UBLOG(logINFO, "Refinement - start"); - //RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel); - //refineHelper.addGbObject(geo, refineLevel); - //refineHelper.refine(); - - //RefineAroundGbObjectHelper refineHelper1(grid, refineLevel-1, boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(geoIntr1), 0.0, 10.0, comm); - //refineHelper1.refine(); - //RefineAroundGbObjectHelper refineHelper2(grid, refineLevel, boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(geoIntr2), -1.0, 5.0, comm); - //refineHelper2.refine(); - - - int rank = grid->getRank(); - grid->setRank(0); - - if (porousTralingEdge) - { - dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrBodyPart)->refineBlockGridToLevel(refineLevel-1, startDistance, refineDistance); - } - else - { - dynamicPointerCast<D3Q27TriFaceMeshInteractor>(fngIntrWhole2)->refineBlockGridToLevel(refineLevel, startDistance, refineDistance); - } - - //boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(triBand1Interactor)->refineBlockGridToLevel(refineLevel, 0.0, refineDistance); - //boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(triBand2Interactor)->refineBlockGridToLevel(refineLevel, 0.0, refineDistance); - //boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(triBand3Interactor)->refineBlockGridToLevel(refineLevel, 0.0, refineDistance); - //boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(triBand4Interactor)->refineBlockGridToLevel(refineLevel, 0.0, refineDistance); - - - //SPtr<GbObject3D> fngBox(new GbCuboid3D(fngMeshWhole->getX1Minimum(), fngMeshWhole->getX2Minimum(), fngMeshWhole->getX3Minimum(), - // fngMeshWhole->getX1Maximum(), fngMeshWhole->getX2Maximum(), fngMeshWhole->getX3Maximum())); - //if (myid==0) GbSystem3D::writeGeoObject(fngBox.get(), pathOut+"/geo/fngBox", WbWriterVtkXmlASCII::getInstance()); - - //RefineCrossAndInsideGbObjectBlockVisitor refVisitor0(fngBox, refineLevel); - //grid->accept(refVisitor0); - - - //SPtr<GbObject3D> bandTopBox(new GbCuboid3D(meshBand1->getX1Minimum(), meshBand1->getX2Minimum(), meshBand1->getX3Minimum(), - // meshBand1->getX1Maximum(), meshBand1->getX2Maximum(), meshBand1->getX3Maximum())); - //if (myid==0) GbSystem3D::writeGeoObject(bandTopBox.get(), pathOut+"/geo/bandTopBox", WbWriterVtkXmlASCII::getInstance()); - - //RefineCrossAndInsideGbObjectBlockVisitor refVisitor1(bandTopBox, refineLevel-1); - //grid->accept(refVisitor1); - - //SPtr<GbObject3D> bandBottomBox(new GbCuboid3D(meshBand5->getX1Minimum(), meshBand5->getX2Minimum(), meshBand5->getX3Minimum(), - // meshBand5->getX1Maximum(), meshBand5->getX2Maximum(), meshBand5->getX3Maximum())); - //if (myid==0) GbSystem3D::writeGeoObject(bandBottomBox.get(), pathOut+"/geo/bandBottomBox", WbWriterVtkXmlASCII::getInstance()); - - //RefineCrossAndInsideGbObjectBlockVisitor refVisitor2(bandBottomBox, refineLevel-1); - //grid->accept(refVisitor2); - - //SPtr<GbObject3D> teBox1(new GbCuboid3D(269.0, 0.0, 1.0, 270.0, 100.0, 8.5)); - // for porous teY - //SPtr<GbObject3D> teBox1(new GbCuboid3D(269.0, 0.0, -10.0, 310.0, 100.0, 20.5)); - //SPtr<GbObject3D> teBox1(new GbCuboid3D(200.0, 0.0, -20.0, 400.0, 100.0, 20.0)); - //if (myid==0) GbSystem3D::writeGeoObject(teBox1.get(), pathOut+"/geo/teBox1", WbWriterVtkXmlASCII::getInstance()); - - //RefineCrossAndInsideGbObjectBlockVisitor refVisitor3(teBox1, 5); - //grid->accept(refVisitor3); - - //SPtr<GbObject3D> teBox2(new GbCuboid3D(271.0, 0.0, 3.0, 279.0, 100.0, 5.7)); - //if (myid==0) GbSystem3D::writeGeoObject(teBox2.get(), pathOut+"/geo/teBox2", WbWriterVtkXmlASCII::getInstance()); - - //RefineCrossAndInsideGbObjectBlockVisitor refVisitor4(teBox2, refineLevel); - //grid->accept(refVisitor4); - - //level 1 - SPtr<GbObject3D> wakeBoxL1(new GbCuboid3D(200.0, 0.0, -20.0, 2000.0, 100.0, 20.0)); - if (myid==0) GbSystem3D::writeGeoObject(wakeBoxL1.get(), pathOut+"/geo/wakeBoxL1", WbWriterVtkXmlASCII::getInstance()); - RefineCrossAndInsideGbObjectBlockVisitor refVisitorWakeBoxL1(wakeBoxL1, 1); - grid->accept(refVisitorWakeBoxL1); - - //level 4 - //SPtr<GbObject3D> teBoxL5(new GbCuboid3D(200.0, 0.0, -20.0, 400.0, 100.0, 20.0)); - //if (myid==0) GbSystem3D::writeGeoObject(teBoxL5.get(), pathOut+"/geo/teBoxL5", WbWriterVtkXmlASCII::getInstance()); - //RefineCrossAndInsideGbObjectBlockVisitor refVisitorTeBoxL5(teBoxL5, 4); - //grid->accept(refVisitorTeBoxL5); - - //level 5 - //SPtr<GbObject3D> teBoxL6(new GbCuboid3D(270.0, 0.0, -3.0, 320.0, 100.0, 10.0)); - //if (myid==0) GbSystem3D::writeGeoObject(teBoxL6.get(), pathOut+"/geo/teBoxL6", WbWriterVtkXmlASCII::getInstance()); - //RefineCrossAndInsideGbObjectBlockVisitor refVisitorTeBoxL6(teBoxL6, 5); - //grid->accept(refVisitorTeBoxL6); - - grid->setRank(rank); - - { - WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm); - ppblocks.process(0); - } - - //////////////////////////////////////////// - //METIS - //SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::KWAY)); - //////////////////////////////////////////// - /////delete solid blocks - if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - start"); - //InteractorsHelper intHelper(grid, metisVisitor); - //if (porousTralingEdge) - //{ - // intHelper.addInteractor(fngIntrBodyPart); - //} - //else - //{ - // intHelper.addInteractor(fngIntrWhole); - //} - ////////////////////////////////////////////////////////////////////////// - - //intHelper.selectBlocks(); - - if (porousTralingEdge) - { - SetSolidBlockVisitor v(fngIntrBodyPart, BlockType::SOLID); - grid->accept(v); - std::vector<SPtr<Block3D>>& sb = fngIntrBodyPart->getSolidBlockSet(); - for(SPtr<Block3D> block : sb) - { - grid->deleteBlock(block); - } - fngIntrBodyPart->removeSolidBlocks(); - fngIntrBodyPart->removeBcBlocks(); - } - else - { - SetSolidBlockVisitor v(fngIntrWhole2, BlockType::SOLID); - grid->accept(v); - std::vector<SPtr<Block3D>>& sb = fngIntrWhole2->getSolidBlockSet(); - for(SPtr<Block3D> block : sb) - { - grid->deleteBlock(block); - } - fngIntrWhole2->removeSolidBlocks(); - fngIntrWhole2->removeBcBlocks(); - } - - if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - end"); - ////////////////////////////////////// - - //if (porousTralingEdge) - //{ - // grid->setRank(0); - // boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(fngIntrTrailingEdge)->refineBlockGridToLevel(refineLevel, startDistance, refineDistance); - // grid->setRank(rank); - - // //SPtr<GbObject3D> trailingEdgeCube(new GbCuboid3D(fngMeshTrailingEdge->getX1Minimum()-blockLength, fngMeshTrailingEdge->getX2Minimum(), fngMeshTrailingEdge->getX3Minimum()-blockLength/2.0, - // // fngMeshTrailingEdge->getX1Maximum()+blockLength, fngMeshTrailingEdge->getX2Maximum(), fngMeshTrailingEdge->getX3Maximum()+blockLength/2.0)); - // //if (myid == 0) GbSystem3D::writeGeoObject(trailingEdgeCube.get(), pathOut + "/geo/trailingEdgeCube", WbWriterVtkXmlASCII::getInstance()); - - // //RefineCrossAndInsideGbObjectBlockVisitor refVisitor(trailingEdgeCube, refineLevel); - // //grid->accept(refVisitor); - //} - - RatioBlockVisitor ratioVisitor(refineLevel); - CheckRatioBlockVisitor checkRatio(refineLevel); - int count = 0; - - do { - grid->accept(ratioVisitor); - checkRatio.resetState(); - grid->accept(checkRatio); - if (myid==0) UBLOG(logINFO, "count = "<<count++<<" state = "<<checkRatio.getState()); - } while (!checkRatio.getState()); - - //RatioSmoothBlockVisitor ratioSmoothVisitor(refineLevel); - //grid->accept(ratioSmoothVisitor); - - { - WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm); - ppblocks.process(1); - } - - OverlapBlockVisitor overlapVisitor(refineLevel, false); - grid->accept(overlapVisitor); - - //std::vector<int> dirs; - //for (int i = D3Q27System::E; i <= D3Q27System::TS; i++) - //{ - // dirs.push_back(i); - //} - //SetInterpolationDirsBlockVisitor interDirsVisitor(dirs); - //grid->accept(interDirsVisitor); - - if (myid==0) UBLOG(logINFO, "Refinement - end"); - } - grid->updateDistributedBlocks(comm); - - //if (writeBlocks) - //{ - // grid->updateDistributedBlocks(comm); - // rcp.writeBlocks(0); - //} - //else - //{ - //rcp.readBlocks(restartStep); - //grid->setTimeStep(restartStep); - //} - - //return; - - //Sleep(1000*myid); - - - - - std::vector<int> dirs; - for (int i = D3Q27System::E; i<=D3Q27System::TS; i++) - { - dirs.push_back(i); - } - SetInterpolationDirsBlockVisitor interDirsVisitor(dirs); - grid->accept(interDirsVisitor); - - //walls - GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3)); - if (myid==0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathOut+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if (myid==0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathOut+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance()); - - - - //wall interactors - //SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, slipBCAdapter, Interactor3D::SOLID)); - //SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, slipBCAdapter, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, velBCAdapter, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, velBCAdapter, Interactor3D::SOLID)); - - //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(), pathOut+"/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(), pathOut+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); - - //inflow - SPtr<D3Q27Interactor> inflowIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID)); - - //outflow - SPtr<D3Q27Interactor> outflowIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, outflowBCAdapter, Interactor3D::SOLID)); - - //////////////////////////////////////////// - //METIS - //grid->deleteBlockIDs(); - //RenumberBlockVisitor renumber; - //grid->accept(renumber); - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::KWAY)); - //////////////////////////////////////////// - /////delete solid blocks - if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - intHelper.addInteractor(inflowIntr); - intHelper.addInteractor(outflowIntr); - intHelper.addInteractor(addWallZminInt); - intHelper.addInteractor(addWallZmaxInt); - intHelper.addInteractor(triBand1Interactor); - intHelper.addInteractor(triBand2Interactor); - intHelper.addInteractor(triBand3Interactor); - intHelper.addInteractor(triBand4Interactor); - - - if (porousTralingEdge) - { - intHelper.addInteractor(fngIntrBodyPart); - intHelper.addInteractor(porousIntrTrailingEdge); - - //string samplePathname = pathGeo+"/"+sampleFilename; - - //double pmNX1 = 669; - //double pmNX2 = 2945; - //double pmNX3 = 1119; - - //double deltaVoxelX1 = 13393e-6; - //double deltaVoxelX2 = 13393e-6; - //double deltaVoxelX3 = 13393e-6; - // - //double lthreshold = 11538; - //double uthreshold = 65535; - - //if (myid==0) UBLOG(logINFO, "read voxel matrix: start"); - //GbVoxelMatrix3DPtr porousTrailingEdge(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold)); - //porousTrailingEdge->readMatrixFromRawFile<unsigned short>(samplePathname, GbVoxelMatrix3D::BigEndian); - //porousTrailingEdge->setVoxelMatrixDelta((float)deltaVoxelX1, (float)deltaVoxelX2, (float)deltaVoxelX3); - //porousTrailingEdge->setVoxelMatrixMininum(0.0, 0.0, 0.0); - //if (myid==0) UBLOG(logINFO, "read voxel matrix: end"); - - //if (myid==0) UBLOG(logINFO, "rotate voxel matrix: start"); - //porousTrailingEdge->rotate90aroundZ(); - //porousTrailingEdge->rotate90aroundX(); - //if (myid==0) UBLOG(logINFO, "rotate voxel matrix: end"); - - //if (myid==0) porousTrailingEdge->writeToVTKImageDataASCII(pathOut+"/geo/PorousTrailingEdge"); - } - else - { - intHelper.addInteractor(fngIntrWhole2); - } - - ////////////////////////////////////////////////////////////////////////// - intHelper.selectBlocks(); - - if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - end"); - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 4"); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - ////////////////////////////////////// - - { - WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm); - ppblocks.process(2); - } - - 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"); - } - - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulantLBMKernel(blockNx[0], blockNx[1], blockNx[2], CompressibleCumulantLBMKernel::NORMAL)); - ////SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel(blockNx[0], blockNx[1], blockNx[2], IncompressibleCumulantLBMKernel::NORMAL)); - - //SPtr<BCProcessor> bcProc; - - //if (thinWall) - //{ - //bcProc = SPtr<BCProcessor>(new ThinWallBCProcessor()); - //} - //else - //{ - //bcProc = SPtr<BCProcessor>(new BCProcessor()); - //} - - //kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem); - grid->accept(kernelVisitor); - - if (myid==0) UBLOG(logINFO, "SetKernelBlockVisitor:end"); - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 5"); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - - if (refineLevel>0) - { - SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - if (myid==0) UBLOG(logINFO, "SetUndefinedNodesBlockVisitor:end"); - - //BC - intHelper.setBC(); - if (myid==0) UBLOG(logINFO, "intHelper.setBC():end"); - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 6"); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - - - - //initialization of distributions - mu::Parser inflowProfileVx1, inflowProfileVx2, inflowProfileVx3; - inflowProfileVx1.SetExpr("U*rangeRandom1()"); - inflowProfileVx1.DefineConst("U", uLB); - inflowProfileVx1.DefineFun("rangeRandom1", rangeRandom1); - inflowProfileVx2.SetExpr("0.1*U*rangeRandom1()"); - inflowProfileVx2.DefineConst("U", uLB); - inflowProfileVx2.DefineFun("rangeRandom1", rangeRandom1); - inflowProfileVx3.SetExpr("0.1*U*rangeRandom1()"); - inflowProfileVx3.DefineConst("U", uLB); - inflowProfileVx3.DefineFun("rangeRandom1", rangeRandom1); - - InitDistributionsBlockVisitor initVisitor1(nuLB, rhoLB); - initVisitor1.setVx1(fct); - ////initVisitor.setVx1(inflowProfileVx1); - ////initVisitor.setVx2(inflowProfileVx2); - ////initVisitor.setVx3(inflowProfileVx3); - ////initVisitor.setNu(nuLB); - grid->accept(initVisitor1); - - - - ////set connectors - InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator()); - SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - grid->accept(setConnsVisitor); - - - //SPtr<Grid3D> oldGrid(new Grid3D(comm)); - // - ////with MPIIORestartCoProcessor - //SPtr<UbScheduler> iSch(new UbScheduler()); - //MPIIORestart1CoProcessor rcpInit(oldGrid, iSch, pathReInit, comm); - //rcpInit.setChunk(chunk); - //rcpInit.restart(stepReInit); - - //////with MPIIORestart2CoProcessor - ////SPtr<UbScheduler> iSch(new UbScheduler()); - ////MPIIORestart2CoProcessor rcp(oldGrid, iSch, pathReInit, comm); - ////rcp.readBlocks(stepReInit); - ////SPtr<Grid3DVisitor> newMetisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::KWAY)); - ////oldGrid->accept(newMetisVisitor); - ////rcp.readDataSet(stepReInit); - ////rcp.readBoundaryConds(stepReInit); - - //InitDistributionsWithInterpolationGridVisitor initVisitor(oldGrid, iProcessor, nuLB); - //grid->accept(initVisitor); - - //domain decomposition for threads - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - //bcVisitor should be accept after initialization!!!! - grid->accept(bcVisitor); - if (myid==0) UBLOG(logINFO, "grid->accept(bcVisitor):end"); - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 7"); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - - - //Postrozess - { - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - WriteBoundaryConditionsCoProcessor ppgeo(grid, geoSch, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm); - ppgeo.process(0); - } - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 8"); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - - //fngIntrWhole1.reset(); - fngIntrWhole2.reset(); - - ////SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart)); - ////MPIIORestartCoProcessor rcp(grid, rSch, pathOut, comm); - - GbCuboid3DPtr sponfeLayerBB1(new GbCuboid3D(g_maxX1-750, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if (myid==0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathOut+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); - SpongeLayerBlockVisitor slVisitor(sponfeLayerBB1); - - if (myid==0) UBLOG(logINFO, "Preprozess - end"); - } - else - { - - //rcp2.process(restartStep); - //return; - ////////////////////////////////////////////////////////////////////////// - //////MPIIORestart2CoProcessor - //SPtr<UbScheduler> iSch(new UbScheduler()); - //rcp2.readBlocks(restartStep); - //grid->updateDistributedBlocks(comm); - - //SPtr<Grid3DVisitor> newMetisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::KWAY)); - //grid->accept(newMetisVisitor); - - //rcp2.restart((int)restartStep); - //grid->setTimeStep(restartStep); - - //rcp.readBlocks(restartStep); - //rcp.readDataSet(restartStep); - //rcp.readBoundaryConds(restartStep); - //grid->setTimeStep(restartStep); - - //setBC(grid, pathGeo, fngFileWhole2, zigZagTape, boundingBox, uLB, rhoLB, blockLength, bcProc); - - //rp.process(restartStep); - - rcp3.restart((int)restartStep); - grid->setTimeStep(restartStep); - - //{ - //WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut+"/mpiio3", WbWriterVtkXmlASCII::getInstance(), comm); - //ppblocks.process(0); - //} - - //{ - //SPtr<UbScheduler> stepSch(new UbScheduler(1)); - //WriteMacroscopicQuantitiesCoProcessor pp(grid, stepSch, pathOut+"/mpiio3", WbWriterVtkXmlBinary::getInstance(), conv, comm); - //pp.process(restartStep); - //} - - //{ - - //SPtr<UbScheduler> geoSch(new UbScheduler(1)); - //WriteBoundaryConditionsCoProcessor ppgeo(grid, geoSch, pathOut+"/mpiio3", WbWriterVtkXmlBinary::getInstance(), conv, comm); - //ppgeo.process(0); - //} - - //rcp3.process(restartStep); - - //return; - - - - - - - //////////////////////////////////////////////////////////////////////////// - InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - grid->accept(setConnsVisitor); - - grid->accept(bcVisitor); - - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - } - - SPtr<UbScheduler> nupsSch(new UbScheduler(nupsStep[0], nupsStep[1], nupsStep[2])); - NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); - - SPtr<UbScheduler> stepSch(new UbScheduler(outTimeStep,outTimeStart)); - - - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 9"); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - - //////////////////////////////////////////////////////////////////////// - ////MPIIORestart2CoProcessor - //grid->deleteBlockIDs(); - //RenumberBlockVisitor renumber; - //grid->accept(renumber); - //SPtr<UbScheduler> iSch(new UbScheduler(1)); - //MPIIORestart2CoProcessor rcpInit(grid, iSch, pathOut+"/mpiio2", comm); - //rcpInit.process(0); - //////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - ////MPIIORestartCoProcessor - //SPtr<UbScheduler> iSch(new UbScheduler(1)); - //MPIIORestartCoProcessor rcpInit(grid, iSch, pathOut, comm); - //rcpInit.process(0); - ////////////////////////////////////////////////////////////////////////// - - WriteMacroscopicQuantitiesCoProcessor pp(grid, stepSch, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm); - //pp.process(0); - - //rcp.process(0); - - //return; - - ////////////////////////////////////////////////////////////////////////// - ////Forces calculation - ////////////////////////////////////////////////////////////////////////// - //if (myid==0) UBLOG(logINFO, "Read fngFileWhole2:start"); - //SPtr<GbTriFaceMesh3D> fngMeshWhole2 = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+fngFileWhole2, "fngMeshWhole2", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); - //if (myid==0) UBLOG(logINFO, "Read fngFileWhole2:end"); - //fngMeshWhole2->rotate(0.0, 0.5, 0.0); - //SPtr<D3Q27TriFaceMeshInteractor> fngIntrWhole2 = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshWhole2, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - //SetSolidBlockVisitor fngVisitor(fngIntrWhole2, SetSolidBlockVisitor::BC); - //grid->accept(fngVisitor); - //fngIntrWhole2->initInteractor(); - - //grid->accept(bcVisitor); - - //string ZckbndFilename = pathGeo+"/"+zigZagTape; - //SPtr<GbTriFaceMesh3D> meshBand1(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape1")); - //meshBand1->rotate(0.0, 5, 0.0); - //meshBand1->translate(15, 0, -12.850); - //// Zackenband2 - //SPtr<GbTriFaceMesh3D> meshBand2(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape2")); - //meshBand2->rotate(0.0, 5, 0.0); - //meshBand2->translate(15, 5, -12.850); - - //SPtr<GbTriFaceMesh3D> meshBand5(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape5")); - //meshBand5->rotate(0.0, -1, 0.0); - //meshBand5->rotate(0.0, 0.0, 180.0); - //meshBand5->translate(30, 0, -37.2); - //// Zackenband6 - //SPtr<GbTriFaceMesh3D> meshBand6(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape6")); - //meshBand6->rotate(0.0, -1, 0.0); - //meshBand6->rotate(0.0, 0.0, 180.0); - //meshBand6->translate(30, 5, -37.2); - - //SPtr<D3Q27TriFaceMeshInteractor> triBand1Interactor(new D3Q27TriFaceMeshInteractor(meshBand1, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES)); - //SPtr<D3Q27TriFaceMeshInteractor> triBand2Interactor(new D3Q27TriFaceMeshInteractor(meshBand2, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES)); - //SPtr<D3Q27TriFaceMeshInteractor> triBand3Interactor(new D3Q27TriFaceMeshInteractor(meshBand5, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES)); - //SPtr<D3Q27TriFaceMeshInteractor> triBand4Interactor(new D3Q27TriFaceMeshInteractor(meshBand6, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES)); - - //SetSolidOrTransBlockVisitor band1Visitor(triBand1Interactor, SetSolidOrTransBlockVisitor::TRANS); - //grid->accept(band1Visitor); - //triBand1Interactor->initInteractor(); - - //SetSolidOrTransBlockVisitor band2Visitor(triBand2Interactor, SetSolidOrTransBlockVisitor::TRANS); - //grid->accept(band2Visitor); - //triBand2Interactor->initInteractor(); - - //SetSolidOrTransBlockVisitor band3Visitor(triBand3Interactor, SetSolidOrTransBlockVisitor::TRANS); - //grid->accept(band3Visitor); - //triBand3Interactor->initInteractor(); - - //SetSolidOrTransBlockVisitor band4Visitor(triBand4Interactor, SetSolidOrTransBlockVisitor::TRANS); - //grid->accept(band4Visitor); - //triBand4Interactor->initInteractor(); - - //double b = 30; //wingspan - //double t = 300; //chord length - //double area = (b*t)/(deltaXcoarse*deltaXcoarse); - //double v = uLB; - - //CalculateForcesCoProcessor fp(grid, stepSch, pathOut + "/forces/forces.txt", comm, v, area); - //fp.addInteractor(fngIntrWhole2); - //fp.addInteractor(triBand1Interactor); - //fp.addInteractor(triBand2Interactor); - //fp.addInteractor(triBand3Interactor); - //fp.addInteractor(triBand4Interactor); - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - ////Cp calculation - ////////////////////////////////////////////////////////////////////////// - //SPtr<UbScheduler> pcpSch(new UbScheduler(1, pcpStart, pcpStop)); - - //double planeCenter = g_minX2+(g_maxX2-g_minX2)/2.0; - //double planeX2min = planeCenter-deltaXfine; - //double planeX2max = planeCenter;//planeCenter+deltaXfine; - //GbCuboid3DPtr plane(new GbCuboid3D(g_minX1,planeX2min,g_minX3,g_maxX1,planeX2max,g_maxX3)); - //if (myid==0) GbSystem3D::writeGeoObject(plane.get(), pathOut+"/geo/plane", WbWriterVtkXmlASCII::getInstance()); - - //PressureCoefficientCoProcessor pcp(grid, pcpSch, plane, pathOut+"/cp/cp", comm); - //pcp.addInteractor(fngIntrWhole2); - ////////////////////////////////////////////////////////////////////////// - - SPtr<UbScheduler> tavSch(new UbScheduler(1, timeAvStart, timeAvStop)); - TimeAveragedValuesSPtr<CoProcessor> tav(new TimeAveragedValuesCoProcessor(grid, pathOut, WbWriterVtkXmlBinary::getInstance(), tavSch, comm, - TimeAveragedValuesCoProcessor::Density | TimeAveragedValuesCoProcessor::Velocity | TimeAveragedValuesCoProcessor::Fluctuations)); - tav->setWithGhostLayer(true); - - SPtr<IntegrateValuesHelper> mic1(new IntegrateValuesHelper(grid, comm,300-deltaXcoarse,35,-600-deltaXcoarse, - 300,65,-600)); - if (myid==0) GbSystem3D::writeGeoObject(mic1->getBoundingBox().get(), pathOut+"/geo/mic1", WbWriterVtkXmlBinary::getInstance()); - SPtr<UbScheduler> stepMV(new UbScheduler(1)); - //TimeseriesCoProcessor tsp1(grid, stepMV, mic1, pathOut+"/mic/mic1", comm); - - //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, stepSch)); - //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, tavSch, CalculationManager::MPI)); - - - const SPtr<ConcreteCalculatorFactory> calculatorFactory = std::make_shared<ConcreteCalculatorFactory>(stepSch); - CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, calculatorFactory, CalculatorType::PREPOSTBC)); - - if (myid==0) UBLOG(logINFO, "Simulation-start"); - calculation->calculate(); - if (myid==0) UBLOG(logINFO, "Simulation-end"); - - //////////////////////////////////////////////////////////////////////// - //MPIIORestart2CoProcessor - //grid->deleteBlockIDs(); - //RenumberBlockVisitor renumber; - //grid->accept(renumber); - //SPtr<UbScheduler> iSch(new UbScheduler(1)); - //MPIIORestart2CoProcessor rcpInit(grid, iSch, pathOut+"/mpiio2", comm); - //rcpInit.process(0); - //////////////////////////////////////////////////////////////////////// - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Point 10"); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - } - 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[]) -{ - - if (argv!=NULL) - { - if (argv[1]!=NULL) - { - run(string(argv[1])); - } - else - { - cout<<"Configuration file must be set!: "<<argv[0]<<" <config file>"<<endl<<std::flush; - } - } - - return 0; -} - diff --git a/apps/cpu/DLR-F16/startJobPhoenix.slrm b/apps/cpu/DLR-F16/startJobPhoenix.slrm deleted file mode 100644 index 6d6cddb976f0f5c82272068ec08b642f81f55415..0000000000000000000000000000000000000000 --- a/apps/cpu/DLR-F16/startJobPhoenix.slrm +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash -#SBATCH -J f16 -#SBATCH --ntasks=300 -#SBATCH --ntasks-per-node=1 -#SBATCH --time=08:00:00 - -module load lib/boost/1.63.0/intel -module load mpi/intelmpi/2017.2.174 -module load intel-studio-2017 - -APP=./f16 -CONF=./DLR-F16-Phoenix.cfg - -mpiexec $APP $CONF \ No newline at end of file diff --git a/apps/cpu/DamBreak/CMakeLists.txt b/apps/cpu/DamBreak/CMakeLists.txt deleted file mode 100644 index 685499d26a806bdaa6d969c705b21eb6d9aaff6c..0000000000000000000000000000000000000000 --- a/apps/cpu/DamBreak/CMakeLists.txt +++ /dev/null @@ -1,3 +0,0 @@ -PROJECT(DamBreak) - -vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES main.cpp ) diff --git a/apps/cpu/DamBreak/config.cfg b/apps/cpu/DamBreak/config.cfg deleted file mode 100644 index 016e34072c1ff69e284cc1743ad684cb1a382e82..0000000000000000000000000000000000000000 --- a/apps/cpu/DamBreak/config.cfg +++ /dev/null @@ -1,44 +0,0 @@ -#pathname = d:/temp/MultiphaseDropletTest -pathname = E:/Multiphase/DropletTest_Test - -numOfThreads = 4 -availMem = 10e9 - -#Grid - -boundingBox = 0 256 512 768 0 3 -blocknx = 16 16 3 - -dx = 1 -refineLevel = 0 - -#Simulation -uLB = 0 #0.001#0.005#0.005 -Re = 10 -nuL = 1e-2 #1e-5# 1.0e-5 #!1e-2 -nuG = 0.015811388300841892 #5e-2 #1e-4 # 1e-8 # 1.16e-4 #!1e-2 -densityRatio = 10 -sigma = 1.0850694444444444e-06 #1e-10 #1e-6 # 1e-5 #4.66e-3 #surface tension 1e-4 ./. 1e-5 -interfaceThickness = 4.096 -radius = 25.6 -contactAngle = 110.0 -#gravity = 0.0 -gravity = -1.0348028606838648e-08 #-5.04e-6 -phi_L = 0.0 -phi_H = 1.0 -Phase-field Relaxation = 0.6 -Mobility = 0.056 # 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 = 1000 -cpStep = 1000 - -outTime = 100 -endTime = 10000 - -rStep = 159990 #160000 \ No newline at end of file diff --git a/apps/cpu/DamBreak/main.cpp b/apps/cpu/DamBreak/main.cpp deleted file mode 100644 index f89416ac42f84504a6584ebbde68e28318457cbf..0000000000000000000000000000000000000000 --- a/apps/cpu/DamBreak/main.cpp +++ /dev/null @@ -1,473 +0,0 @@ -#include <iostream> -#include <string> -#include <memory> - -#if defined(__unix__) -#include <stdio.h> -#include <stdlib.h> -#endif - -#include "VirtualFluids.h" -#include "MultiphaseFlow/MultiphaseFlow.h" -#include "NonNewtonianFluids/NonNewtonianFluids.h" - -using namespace std; - -void run(string configname) -{ - using namespace vf::lbm::dir; - - try { - vf::basics::ConfigurationFile config; - config.load(configname); - - string pathname = config.getValue<string>("pathname"); - int numOfThreads = config.getValue<int>("numOfThreads"); - vector<int> blocknx = config.getVector<int>("blocknx"); - vector<real> boundingBox = config.getVector<real>("boundingBox"); - real uLB = config.getValue<real>("uLB"); - real nuL = config.getValue<real>("nuL"); - real nuG = config.getValue<real>("nuG"); - real densityRatio = config.getValue<real>("densityRatio"); - real sigma = config.getValue<real>("sigma"); - real interfaceThickness = config.getValue<real>("interfaceThickness"); - real radius = config.getValue<real>("radius"); - real theta = config.getValue<real>("contactAngle"); - //double gr = config.getValue<double>("gravity"); - real phiL = config.getValue<real>("phi_L"); - real phiH = config.getValue<real>("phi_H"); - real tauH = config.getValue<real>("Phase-field Relaxation"); - real mob = config.getValue<real>("Mobility"); - - real endTime = config.getValue<real>("endTime"); - real outTime = config.getValue<real>("outTime"); - real availMem = config.getValue<real>("availMem"); - int refineLevel = config.getValue<int>("refineLevel"); - real Re = config.getValue<real>("Re"); - real dx = config.getValue<real>("dx"); - bool logToFile = config.getValue<bool>("logToFile"); - real restartStep = config.getValue<real>("restartStep"); - real cpStart = config.getValue<real>("cpStart"); - real cpStep = config.getValue<real>("cpStep"); - bool newStart = config.getValue<bool>("newStart"); - //double rStep = config.getValue<double>("rStep"); - - SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - if (myid == 0) - UBLOG(logINFO, "Droplet Test: 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()); - } - } - - std::string fileName = "./LastTimeStep" + std::to_string((int)boundingBox[1]) + ".txt"; - -//#if defined(__unix__) -// double lastTimeStep = 0; -// //if (!newStart) -// { -// std::ifstream ifstr(fileName); -// ifstr >> lastTimeStep; -// restartStep = lastTimeStep; -// if(endTime >= lastTimeStep) -// endTime = lastTimeStep + rStep; -// else -// return; -// } -//#endif - - //Sleep(30000); - - // LBMReal dLB = 0; // = length[1] / dx; - real rhoLB = 0.0; - real nuLB = nuL; //(uLB*dLB) / Re; - - //diameter of circular droplet - real D = 2.0*radius; - - //density retio - real r_rho = densityRatio; - - //density of heavy fluid - real rho_h = 1.0; - //density of light fluid - real rho_l = rho_h / r_rho; - - //kinimatic viscosity - real nu_h = nuL; - //LBMReal nu_l = nuG; - //#dynamic viscosity - real mu_h = rho_h * nu_h; - - //gravity - real g_y = Re* Re* mu_h* mu_h / (rho_h * (rho_h - rho_l) * D * D * D); - //Eotvos number - real Eo = 10; // 0.100; - //surface tension - sigma =0*0.001; - //0 * rho_h *g_y *D *D / Eo; - - //g_y = 0; - - real beta = 12.0 * sigma / interfaceThickness; - real kappa = 1.5 * interfaceThickness * sigma; - - if (myid == 0) { - //UBLOG(logINFO, "uLb = " << uLB); - //UBLOG(logINFO, "rho = " << rhoLB); - UBLOG(logINFO, "D = " << D); - UBLOG(logINFO, "nuL = " << nuL); - UBLOG(logINFO, "nuG = " << nuG); - UBLOG(logINFO, "Re = " << Re); - UBLOG(logINFO, "Eo = " << Eo); - UBLOG(logINFO, "g_y = " << g_y); - UBLOG(logINFO, "sigma = " << sigma); - UBLOG(logINFO, "dx = " << dx); - UBLOG(logINFO, "Preprocess - start"); - } - - SPtr<LBMUnitConverter> conv(new LBMUnitConverter()); - - //const int baseLevel = 0; - - - SPtr<Rheology> thix = Rheology::getInstance(); - thix->setYieldStress(0*1e-1); //(1.0e-2); - - SPtr<LBMKernel> kernel; - - //kernel = SPtr<LBMKernel>(new MultiphaseScratchCumulantLBMKernel()); - // kernel = SPtr<LBMKernel>(new MultiphaseCumulantLBMKernel()); - //kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsPressureFilterLBMKernel()); - //kernel = SPtr<LBMKernel>(new MultiphasePressureFilterLBMKernel()); - kernel = make_shared< MultiphaseScaleDistributionLBMKernel>(); - //kernel = SPtr<LBMKernel>(new MultiphaseSharpInterfaceLBMKernel()); - // kernel = make_shared<MultiphaseSharpInterfaceLBMKernel>(); - - mu::Parser fgr; - fgr.SetExpr("-(rho-rho_l)*g_y"); - fgr.DefineConst("rho_l", rho_l); - fgr.DefineConst("g_y", g_y); - - kernel->setWithForcing(true); - kernel->setForcingX1(0.0); - kernel->setForcingX2(fgr); - kernel->setForcingX3(0.0); - - kernel->setPhiL(phiL); - kernel->setPhiH(phiH); - kernel->setPhaseFieldRelaxation(tauH); - kernel->setMobility(mob); - kernel->setInterfaceWidth(interfaceThickness); - - - kernel->setCollisionFactorMultiphase(nuL, nuG); - kernel->setDensityRatio(densityRatio); - kernel->setMultiphaseModelParameters(beta, kappa); - kernel->setContactAngle(theta); - kernel->setSigma(sigma); - - SPtr<BCSet> bcProc(new BCSet()); - // BCSetPtr bcProc(new ThinWallBCSet()); - - kernel->setBCSet(bcProc); - - SPtr<BC> noSlipBC(new NoSlipBC()); - noSlipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNoSlipBCStrategy())); - - SPtr<BC> outflowBC(new PressureBC(rhoLB)); - outflowBC->setBCStrategy(SPtr<BCStrategy>(new MultiphasePressureBCStrategy())); - - ////////////////////////////////////////////////////////////////////////////////// - // BC visitor - MultiphaseBoundaryConditionsBlockVisitor bcVisitor; - - SPtr<Grid3D> grid(new Grid3D(comm)); - grid->setDeltaX(dx); - grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - grid->setPeriodicX1(false);//true); - grid->setPeriodicX2(false); - grid->setPeriodicX3(true); - grid->setGhostLayerWidth(2); - - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE)); - - ////////////////////////////////////////////////////////////////////////// - // restart - SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart)); - //SPtr<MPIIORestartSimulationObserver> rcp(new MPIIORestartSimulationObserver(grid, rSch, pathname, comm)); - SPtr<MPIIOMigrationSimulationObserver> rcp(new MPIIOMigrationSimulationObserver(grid, rSch, metisVisitor, pathname, comm)); - //SPtr<MPIIOMigrationBESimulationObserver> rcp(new MPIIOMigrationBESimulationObserver(grid, rSch, pathname, comm)); - // rcp->setNu(nuLB); - // rcp->setNuLG(nuL, nuG); - // rcp->setDensityRatio(densityRatio); - - rcp->setLBMKernel(kernel); - rcp->setBCSet(bcProc); - ////////////////////////////////////////////////////////////////////////// - - if (newStart) { - - // bounding box - real g_minX1 = boundingBox[0]; - real g_minX2 = boundingBox[2]; - real g_minX3 = boundingBox[4]; - - real g_maxX1 = boundingBox[1]; - real g_maxX2 = boundingBox[3]; - real g_maxX3 = boundingBox[5]; - - // geometry - 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()); - - - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - real dx2 = 2.0 * dx; - GbCuboid3DPtr wallYmin(new GbCuboid3D(g_minX1 - dx2, g_minX2 - dx2, g_minX3 - dx2, g_maxX1 + dx2, g_minX2, g_maxX3 + dx2)); - GbSystem3D::writeGeoObject(wallYmin.get(), pathname + "/geo/wallYmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallYmax(new GbCuboid3D(g_minX1 - dx2, g_maxX2, g_minX3 - dx2, g_maxX1 + dx2, g_maxX2 + dx2, g_maxX3 + dx2)); - GbSystem3D::writeGeoObject(wallYmax.get(), pathname + "/geo/wallYmax", WbWriterVtkXmlASCII::getInstance()); - - SPtr<D3Q27Interactor> wallYminInt(new D3Q27Interactor(wallYmin, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallYmaxInt(new D3Q27Interactor(wallYmax, grid, noSlipBC, Interactor3D::SOLID)); - - //walls in x direction - - GbCuboid3DPtr wallXmin(new GbCuboid3D(g_minX1 - dx2, g_minX2 - dx2, g_minX3 - dx2, g_minX1, g_maxX2+dx2, g_maxX3 + dx2)); - GbSystem3D::writeGeoObject(wallXmin.get(), pathname + "/geo/wallXmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallXmax(new GbCuboid3D(g_maxX1 , g_minX2-dx2, g_minX3 - dx2, g_maxX1 + dx2, g_maxX2 + dx2, g_maxX3 + dx2)); - GbSystem3D::writeGeoObject(wallXmax.get(), pathname + "/geo/wallXmax", WbWriterVtkXmlASCII::getInstance()); - - SPtr<D3Q27Interactor> wallXminInt(new D3Q27Interactor(wallXmin, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallXmaxInt(new D3Q27Interactor(wallXmax, grid, noSlipBC, Interactor3D::SOLID)); - - SPtr<WriteBlocksSimulationObserver> ppblocks(new WriteBlocksSimulationObserver( - grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - - InteractorsHelper intHelper(grid, metisVisitor, true); - intHelper.addInteractor(wallYminInt); - intHelper.addInteractor(wallYmaxInt); - intHelper.addInteractor(wallXminInt); - intHelper.addInteractor(wallXmaxInt); - intHelper.selectBlocks(); - - ppblocks->update(0); - ppblocks.reset(); - - unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks(); - int ghostLayer = 5; - 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); - real needMemAll = - real(numberOfNodesPerBlockWithGhostLayer * (27 * sizeof(real) + sizeof(int) + sizeof(float) * 4)); - real needMem = needMemAll / real(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"); - } - - MultiphaseSetKernelBlockVisitor kernelVisitor(kernel, nuL, nuG, availMem, needMem); - - grid->accept(kernelVisitor); - - if (refineLevel > 0) { - SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - - intHelper.setBC(); - - // initialization of distributions - real x1c = 2.5 * D; // (g_maxX1 - g_minX1-1)/2; // - real x2c = 12.5 * D; //(g_maxX2 - g_minX2-1)/2; - real x3c = 1.5; // 2.5 * D; - //1.5; // 2.5 * D; //(g_maxX3 - g_minX3-1)/2; - //LBMReal x3c = 2.5 * D; - mu::Parser fct1; - //fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+0*(x3-x3c)^2)-radius)/interfaceThickness)"); - fct1.SetExpr("(x1-x1c<-100 && x3>3 ? 1: 0)"); - //fct1.SetExpr("(x1-x1c<-100 ? 1: 0)"); - // fct1.SetExpr("(((x1-x1c)*(x1-x1c+1)<180 ? 1: 0)*(x2>530? 1:0)*(sin(x2*0.3)>-0.1?1:0)-0.5*0)"); - // *(x2 > 530 ? 1 : 0) "); - fct1.DefineConst("x1c", x1c); - fct1.DefineConst("x2c", x2c); - fct1.DefineConst("x3c", x3c); - fct1.DefineConst("radius", radius/2); - fct1.DefineConst("interfaceThickness", interfaceThickness); - - mu::Parser fct2; - fct2.SetExpr("0.5*uLB-uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+0*(x3-x3c)^2)-radius)/interfaceThickness)"); - //fct2.SetExpr("uLB"); - fct2.DefineConst("uLB", uLB); - fct2.DefineConst("x1c", x1c); - fct2.DefineConst("x2c", x2c); - fct2.DefineConst("x3c", x3c); - fct2.DefineConst("radius", radius); - fct2.DefineConst("interfaceThickness", interfaceThickness); - - //MultiphaseInitDistributionsBlockVisitor initVisitor(densityRatio); - MultiphaseVelocityFormInitDistributionsBlockVisitor initVisitor; - initVisitor.setPhi(fct1); - initVisitor.setVx2(fct2); - grid->accept(initVisitor); - - // boundary conditions grid - { - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - SPtr<WriteBoundaryConditionsSimulationObserver> ppgeo(new WriteBoundaryConditionsSimulationObserver( - grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - ppgeo->update(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); - - if (myid == 0) - UBLOG(logINFO, "Restart - end"); - } - - grid->accept(bcVisitor); - - //TwoDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm); - //grid->accept(setConnsVisitor); - - //ThreeDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm); - //grid->accept(setConnsVisitor); - - TwoDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm); - grid->accept(setConnsVisitor); - - SPtr<UbScheduler> visSch(new UbScheduler(outTime)); - real t_ast, t; - t_ast = 2; - t = (int)(t_ast/std::sqrt(g_y/D)); - visSch->addSchedule(t,t,t); //t=2 - t_ast = 3; - t = (int)(t_ast/std::sqrt(g_y/D)); - visSch->addSchedule(t,t,t); //t=3 - t_ast = 4; - t = (int)(t_ast/std::sqrt(g_y/D)); - visSch->addSchedule(t,t,t); //t=4 - t_ast = 5; - t = (int)(t_ast/std::sqrt(g_y/D)); - visSch->addSchedule(t,t,t); //t=5 - t_ast = 6; - t = (int)(t_ast/std::sqrt(g_y/D)); - visSch->addSchedule(t,t,t); //t=6 - t_ast = 7; - t = (int)(t_ast/std::sqrt(g_y/D)); - visSch->addSchedule(t,t,t); //t=7 - t_ast = 9; - t = (int)(t_ast/std::sqrt(g_y/D)); - visSch->addSchedule(t,t,t); //t=9 - - SPtr<WriteSharpInterfaceQuantitiesSimulationObserver> pp(new WriteSharpInterfaceQuantitiesSimulationObserver( - grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - //if(grid->getTimeStep() == 0) - pp->update(0); - - SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100)); - SPtr<NUPSCounterSimulationObserver> npr(new NUPSCounterSimulationObserver(grid, nupsSch, numOfThreads, comm)); - - omp_set_num_threads(numOfThreads); - - SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1)); - SPtr<Simulation> simulation(new Simulation(grid, stepGhostLayer, endTime)); - simulation->addSimulationObserver(npr); - simulation->addSimulationObserver(pp); - //simulation->addSimulationObserver(rcp); - - - if (myid == 0) - UBLOG(logINFO, "Simulation-start"); - simulation->run(); - if (myid == 0) - UBLOG(logINFO, "Simulation-end"); - -//#if defined(__unix__) -// //if (!newStart) -// //{ -// if (myid == 0) -// { -// std::ofstream ostr(fileName); -// ostr << endTime; -// cout << "start sbatch\n"; -// //system("./start.sh"); -// //system("echo test!"); -// std::string str = "sbatch startJob" + std::to_string((int)boundingBox[1]) + ".sh"; -// //system("sbatch startJob512.sh"); -// system(str.c_str()); -// } -// //MPI_Barrier((MPI_Comm)comm->getNativeCommunicator()); -// //} -//#endif - - } 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/FallingSphere/CMakeLists.txt b/apps/cpu/FallingSphere/CMakeLists.txt deleted file mode 100644 index 6166198643b30304eb1a943d9454cad1a0b8a12d..0000000000000000000000000000000000000000 --- a/apps/cpu/FallingSphere/CMakeLists.txt +++ /dev/null @@ -1,3 +0,0 @@ -PROJECT(FallingSphere) - -vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} LiggghtsCoupling FILES FallingSphere.cpp ) diff --git a/apps/cpu/FallingSphere/FallingSphere.cpp b/apps/cpu/FallingSphere/FallingSphere.cpp deleted file mode 100644 index 1a9060fcd0c725ea4dc4994dd68c3c91c2cc36ac..0000000000000000000000000000000000000000 --- a/apps/cpu/FallingSphere/FallingSphere.cpp +++ /dev/null @@ -1,173 +0,0 @@ -#include <iostream> -#include <string> -#include <memory> - -#include "VirtualFluids.h" - -#include "LiggghtsCoupling/LiggghtsCoupling.h" - -using namespace std; - - -int main(int argc, char *argv[]) -{ - std::shared_ptr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - - // bounding box - double g_minX1 = 0; - double g_minX2 = 0; - double g_minX3 = 0; - - double g_maxX1 = 1; - double g_maxX2 = 1; - double g_maxX3 = 10; - - int blockNX[3] = { 32, 32, 32 }; - double dx = 1./32.; - - double d_part = 0.25; - double r_p = d_part / 2.0; - - //int blockNX[3] = { 10, 10, 10 }; - //double dx = 0.05; - - - double nuLB = 1e-2; - - SPtr<LBMKernel> kernel = make_shared<IBcumulantK17LBMKernel>(); - SPtr<BCSet> bcProc = make_shared<BCSet>(); - kernel->setBCSet(bcProc); - - SPtr<BC> noSlipBC(new NoSlipBC()); - noSlipBC->setBCStrategy(SPtr<BCStrategy>(new NoSlipInterpolated())); - ////////////////////////////////////////////////////////////////////////////////// - // BC visitor - BoundaryConditionsBlockVisitor bcVisitor; - - SPtr<Grid3D> grid = make_shared<Grid3D>(comm); - grid->setPeriodicX1(true); - grid->setPeriodicX2(true); - grid->setPeriodicX3(false); - grid->setDeltaX(dx); - grid->setBlockNX(blockNX[0], blockNX[1], blockNX[2]); - - string outputPath = "f:/temp/FallingSpheresTestMPI"; - - UbSystem::makeDirectory(outputPath); - UbSystem::makeDirectory(outputPath + "/liggghts"); - - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::dMMM, MetisPartitioner::RECURSIVE)); - - SPtr<GbObject3D> gridCube = make_shared <GbCuboid3D>(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3); - if (myid == 0) - GbSystem3D::writeGeoObject(gridCube.get(), outputPath + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - double dx2 = 2.0 * dx; - GbCuboid3DPtr wallZmin( - new GbCuboid3D(g_minX1 - dx2, g_minX2 - dx2, g_minX3 - dx2, g_maxX1 + dx2, g_maxX2 + dx2, g_minX3)); - GbSystem3D::writeGeoObject(wallZmin.get(), outputPath + "/geo/wallZmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallZmax( - new GbCuboid3D(g_minX1 - dx2, g_minX2 - dx2, g_maxX3, g_maxX1 + dx2, g_maxX2 + dx2, g_maxX3 + dx2)); - GbSystem3D::writeGeoObject(wallZmax.get(), outputPath + "/geo/wallZmax", WbWriterVtkXmlASCII::getInstance()); - - SPtr<D3Q27Interactor> wallZminInt(new D3Q27Interactor(wallZmin, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallZmaxInt(new D3Q27Interactor(wallZmax, grid, noSlipBC, Interactor3D::SOLID)); - - - SPtr<SimulationObserver> ppblocks = make_shared<WriteBlocksSimulationObserver>(grid, SPtr<UbScheduler>(new UbScheduler(1)), outputPath, WbWriterVtkXmlBinary::getInstance(), comm); - ppblocks->update(0); - - MPI_Comm mpi_comm = *(MPI_Comm *)(comm->getNativeCommunicator()); - LiggghtsCouplingWrapper wrapper(argv, mpi_comm); - SPtr<UbScheduler> lScheduler = make_shared<UbScheduler>(1); - string inFile1 = "d:/Projects/VirtualFluids_Develop/apps/cpu/FallingSphere/in.lbdem"; - string inFile2 = "d:/Projects/VirtualFluids_Develop/apps/cpu/FallingSphere/in2.lbdem"; - - // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, 1.480, 2060, r_p/dx); - // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, LBMUnitConverter::AIR_20C, r_p / dx); - SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, 0.1, 1000, r_p / dx, 0.01); - std::cout << units->toString() << std::endl; - - double v_frac = 0.1; - double dt_phys = units->getFactorTimeLbToW(); - int demSubsteps = 10; - double dt_dem = dt_phys / (double)demSubsteps; - int vtkSteps = 100; - string demOutDir = outputPath; - - wrapper.execCommand("echo none"); - - wrapper.setVariable("d_part", d_part); - // wrapper.setVariable("r_part", d_part/2.); - // wrapper.setVariable("v_frac", v_frac); - - wrapper.execFile((char *)inFile1.c_str()); - - SPtr<LiggghtsCouplingSimulationObserver> lcSimulationObserver = make_shared<LiggghtsCouplingSimulationObserver>(grid, lScheduler, comm, wrapper, demSubsteps, units); - SPtr<Grid3DVisitor> partVisitor = make_shared<LiggghtsPartitioningGridVisitor>((g_maxX1 - g_minX1) / dx, (g_maxX2 - g_minX2) / dx, (g_maxX3 - g_minX3) / dx, wrapper.lmp); - - //// set timestep and output directory - wrapper.setVariable("t_step", dt_dem); - wrapper.setVariable("dmp_stp", vtkSteps * demSubsteps); - wrapper.setVariable("dmp_dir", demOutDir); - - wrapper.execFile((char *)inFile2.c_str()); - wrapper.runUpto(demSubsteps - 1); - - InteractorsHelper intHelper(grid, partVisitor, false); - intHelper.addInteractor(wallZminInt); - intHelper.addInteractor(wallZmaxInt); - intHelper.selectBlocks(); - - ppblocks->update(1); - ppblocks.reset(); - - SetKernelBlockVisitor kernelVisitor(kernel, nuLB, 1e9, 1e9); - grid->accept(kernelVisitor); - - intHelper.setBC(); - - InitDistributionsBlockVisitor initVisitor; - grid->accept(initVisitor); - - // boundary conditions grid - { - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - SPtr<WriteBoundaryConditionsSimulationObserver> ppgeo(new WriteBoundaryConditionsSimulationObserver( - grid, geoSch, outputPath, WbWriterVtkXmlBinary::getInstance(), comm)); - ppgeo->update(0); - ppgeo.reset(); - } - - grid->accept(bcVisitor); - - OneDistributionSetConnectorsBlockVisitor setConnsVisitor(comm); - grid->accept(setConnsVisitor); - - - // write data for visualization of macroscopic quantities - SPtr<UbScheduler> visSch(new UbScheduler(vtkSteps)); - SPtr<WriteMacroscopicQuantitiesSimulationObserver> writeMQSimulationObserver( - new WriteMacroscopicQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), - SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm)); - - int numOfThreads = 1; - omp_set_num_threads(numOfThreads); - - int endTime = 3000; //20; - SPtr<Simulation> simulation(new Simulation(grid, lScheduler, endTime)); - simulation->addSimulationObserver(lcSimulationObserver); - simulation->addSimulationObserver(writeMQSimulationObserver); - - if (myid == 0) UBLOG(logINFO, "Simulation-start"); - simulation->run(); - if (myid == 0) UBLOG(logINFO, "Simulation-end"); - - - return 0; -} diff --git a/apps/cpu/FallingSphere/in.lbdem b/apps/cpu/FallingSphere/in.lbdem deleted file mode 100644 index 5d0cfb511774c5270918f4e7007224d36080232c..0000000000000000000000000000000000000000 --- a/apps/cpu/FallingSphere/in.lbdem +++ /dev/null @@ -1,75 +0,0 @@ -echo none - -units si -atom_style granular -atom_modify map array - - - -communicate single vel yes - -boundary f f f -newton off - -processors 1 1 * -region box block 0. 1. 0. 1. 0. 10. units box -create_box 1 box - -variable skin equal 0.01 -neighbor ${skin} bin -neigh_modify delay 0 binsize 0.01 one 1000 - -fix grav all gravity 0.981 vector 0 0 -1 - - -fix m1 all property/global youngsModulus peratomtype 1e8 -fix m2 all property/global poissonsRatio peratomtype 0.4 -fix m3 all property/global coefficientRestitution peratomtypepair 1 0.95 -fix m4 all property/global coefficientFriction peratomtypepair 1 0.45 -fix m5 all property/global coefficientRollingFriction peratomtypepair 1 0.020 - -# lb coupling fix -fix lbcoupling all couple/lb/onetoone - - -pair_style gran model hertz tangential history rolling_friction cdt -pair_coeff * * - -fix 1 all nve/sphere - -fix xwalls1 all wall/gran model hertz tangential history primitive type 1 xplane 0. -fix xwalls2 all wall/gran model hertz tangential history primitive type 1 xplane 1. -fix ywalls1 all wall/gran model hertz tangential history primitive type 1 yplane 0. -fix ywalls2 all wall/gran model hertz tangential history primitive type 1 yplane 1. -fix zwalls1 all wall/gran model hertz tangential history primitive type 1 zplane 0. -fix zwalls2 all wall/gran model hertz tangential history primitive type 1 zplane 10. - -create_atoms 1 single 0.5 0.5 9.75 -#create_atoms 1 single 0.38 0.05 0.05 - -set group all diameter ${d_part} density 2400 - -atom_modify sort 0 0.0 - -#fix pts1 all particletemplate/sphere 1 atom_type 1 density constant 1000 radius constant 0.015 -#fix pts2 all particletemplate/sphere 1 atom_type 1 density constant 1000 radius constant 0.01 -#fix pts1 all particletemplate/sphere 1 atom_type 1 density constant 1100 radius constant ${r_part} - -# fix pdd1 all particledistribution/discrete 6778 1 pts1 1.0 -# #fix pdd2 all particledistribution/discrete 6778 2 pts2 0.2 pts3 0.8 - -# # region insreg block 0.1 0.9 0.1 0.9 1.3 1.9 units box - - -# #fix ins all insert/pack seed 1001 distributiontemplate pdd1 insert_every once & -# # overlapcheck yes particles_in_region 350 region insreg ntry_mc 10000 -# fix ins all insert/pack seed 1001 distributiontemplate pdd1 insert_every once & - # overlapcheck yes volumefraction_region ${v_frac} region insreg ntry_mc 10000 -# #fix ins all insert/pack seed 1001 distributiontemplate pdd2 insert_every once & -# # overlapcheck yes volumefraction_region 0.05 region insreg ntry_mc 10000 -# #fix ins all insert/pack seed 1001 distributiontemplate pdd1 insert_every once & -# # overlapcheck yes particles_in_region 1 region insreg ntry_mc 10000 - -echo none - -run 1 diff --git a/apps/cpu/FallingSphere/in2.lbdem b/apps/cpu/FallingSphere/in2.lbdem deleted file mode 100644 index f11767f12f37fd34e218c528761c8a09e968660c..0000000000000000000000000000000000000000 --- a/apps/cpu/FallingSphere/in2.lbdem +++ /dev/null @@ -1,25 +0,0 @@ - -echo none - -timestep ${t_step} - -# thermo settings -fix ts all check/timestep/gran 10000 0.1 0.1 -compute 1 all erotate/sphere -thermo_style custom step atoms ke c_1 f_ts[1] f_ts[2] cpu -thermo 10000 -thermo_modify lost ignore norm no flush yes -compute_modify thermo_temp dynamic yes - -# particle dump -variable dmp_fname string ${dmp_dir}d_*.liggghts - -# dump dmp all custom ${dmp_stp} ${dmp_fname} & -# id type type x y z ix iy iz vx vy vz fx fy fz omegax omegay omegaz radius - -# dump dmp all custom ${dmp_stp} ${dmp_dir}d_*.liggghts & -# id type type x y z ix iy iz vx vy vz fx fy fz omegax omegay omegaz radius - -dump dmp all custom/vtk ${dmp_stp} ${dmp_dir}/liggghts/atom_*.vtk id type type x y z ix iy iz vx vy vz fx fy fz omegax omegay omegaz radius - -echo none \ No newline at end of file diff --git a/apps/cpu/HerschelBulkleyModel/CMakeLists.txt b/apps/cpu/HerschelBulkleyModel/CMakeLists.txt deleted file mode 100644 index d2499fb70e451de1c40c841135607aa1a6799e93..0000000000000000000000000000000000000000 --- a/apps/cpu/HerschelBulkleyModel/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(HerschelBulkleyModel) - -vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES hbflow.cpp ) \ No newline at end of file diff --git a/apps/cpu/HerschelBulkleyModel/hbf1.cfg b/apps/cpu/HerschelBulkleyModel/hbf1.cfg deleted file mode 100644 index 2eed172d57ee45a3c8884de41f67194381ee746a..0000000000000000000000000000000000000000 --- a/apps/cpu/HerschelBulkleyModel/hbf1.cfg +++ /dev/null @@ -1,37 +0,0 @@ -pathname = d:/temp/BinghamNewNewConvergenceAcousticScaling_20it/256 - -#pathname = d:/temp/Newton45/32 - -numOfThreads = 4 -availMem = 8e9 -logToFile = false - -# blocknx = 2 32 32 -# boundingBox = 0.25 32 32 -# deltax = 0.125 #0.25 #0.5 #1 - -# nuLB = 0.05 -# forcing = 1e-7 #2e-7 #4e-7 #8e-7 - -# outTime = 10000 -# endTime = 1920000 #480000 #120000 #30000 - -blocknx = 2 32 2 -boundingBox = 2 32 2 -deltax = 1 - -scaleFactor = 8 - -nuLB = 0.005 -forcing = 6e-9 -tau0 = 3e-8 - -#n = 0.8 - -velocity = 1e-3 -n = 0.4 -Re = 1 -Bn = 0.01 - -outTime = 1000 -endTime = 1000000 \ No newline at end of file diff --git a/apps/cpu/HerschelBulkleyModel/hbflow.cpp b/apps/cpu/HerschelBulkleyModel/hbflow.cpp deleted file mode 100644 index 2f7b01b0f8e4b93161241dbe6c4d2ecf8483b59c..0000000000000000000000000000000000000000 --- a/apps/cpu/HerschelBulkleyModel/hbflow.cpp +++ /dev/null @@ -1,370 +0,0 @@ -#include <iostream> -#include <string> - -#include "VirtualFluids.h" -#include "NonNewtonianFluids/NonNewtonianFluids.h" - -using namespace std; - - -void bflow(string configname) -{ - using namespace vf::lbm::dir; - - try - { - vf::basics::ConfigurationFile config; - config.load(configname); - - string pathname = config.getValue<string>("pathname"); - int numOfThreads = config.getValue<int>("numOfThreads"); - vector<int> blocknx = config.getVector<int>("blocknx"); - vector<real> boundingBox = config.getVector<real>("boundingBox"); - real nuLB = config.getValue<real>("nuLB"); - real endTime = config.getValue<real>("endTime"); - real outTime = config.getValue<real>("outTime"); - real availMem = config.getValue<real>("availMem"); - //int refineLevel = config.getValue<int>("refineLevel"); - bool logToFile = config.getValue<bool>("logToFile"); - //double restartStep = config.getValue<double>("restartStep"); - real deltax = config.getValue<real>("deltax"); - //double cpStep = config.getValue<double>("cpStep"); - //double cpStepStart = config.getValue<double>("cpStepStart"); - //bool newStart = config.getValue<bool>("newStart"); - real forcing = config.getValue<real>("forcing"); - //double n = config.getValue<double>("n"); - //double k = config.getValue<double>("k"); - real tau0 = config.getValue<real>("tau0"); - real velocity = config.getValue<real>("velocity"); - real n = config.getValue<real>("n"); -// double Re = config.getValue<double>("Re"); -// double Bn = config.getValue<double>("Bn"); - real scaleFactor = config.getValue<real>("scaleFactor"); - - SPtr<vf::parallel::Communicator> comm = vf::parallel::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()); - } - } - - real rhoLB = 0.0; - - SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter()); - - //bounding box - //double g_minX1 = -0.707107+1.0; - //double g_minX2 = -1.41421+1.0; - //double g_minX3 = 1.0; - - //double g_maxX1 = boundingBox[0]; - //double g_maxX2 = boundingBox[1]; - //double g_maxX3 = boundingBox[2]+1.0; - - real g_minX1 = 0.0; - real g_minX2 = -boundingBox[1]/2.0; - real g_minX3 = -boundingBox[2]/2.0; - - real g_maxX1 = boundingBox[0]; - real g_maxX2 = boundingBox[1]/2.0; - real g_maxX3 = boundingBox[2]/2.0; - - - - real blockLength = 3.0 * deltax; - -// double h = (g_maxX2) / 2.0; -// double dex = g_maxX1; - - //LBMReal tau0 = 1.2e-7; - //LBMReal k = nuLB; - //LBMReal n = 0.4; - - - real d = boundingBox[1]; - real U = velocity; - real Gamma = U / d; - - //double scaleFactor = 2.0; - - // Diffusive Scaling - - //double k = 0.005; // (U * d) / (Re * std::pow(Gamma, n - 1)); - //double tau0 = 3e-5 / (scaleFactor * scaleFactor);// *4.0);//*4.0);// Bn* k* std::pow(Gamma, n); - //forcing /= scaleFactor * scaleFactor * scaleFactor; - //endTime *= scaleFactor * scaleFactor; - //deltax /= scaleFactor; - - // Acoustic Scaling - - real k = nuLB * scaleFactor; - //double tau0 = 3e-5; - forcing /= scaleFactor; - endTime *= scaleFactor; - deltax /= scaleFactor; - - //outTime = endTime; - - real beta = 14; - real c = 10; // 1.0 / 6.0; - real mu0 = 1e-4; - - SPtr<Rheology> thix = Rheology::getInstance(); - //Herschel-Bulkley - thix->setPowerIndex(n); - thix->setViscosityParameter(k); - thix->setYieldStress(tau0); - //Powell-Eyring - thix->setBeta(beta); - thix->setC(c); - thix->setMu0(mu0); - - SPtr<BC> noSlipBC(new NoSlipBC()); - //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new RheologyHerschelBulkleyModelNoSlipBCStrategy())); - //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new RheologyPowellEyringModelNoSlipBCStrategy())); - //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new RheologyBinghamModelNoSlipBCStrategy())); - - mu::Parser fctVx; - fctVx.SetExpr("u"); - fctVx.DefineConst("u", 0.001); - - - SPtr<BC> velocityBC(new VelocityBC(true, false, false, fctVx, 0, BCFunction::INFCONST)); - //velocityBC->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated())); - velocityBC->setBCStrategy(SPtr<BCStrategy>(new RheologyBinghamModelVelocityBCStrategy())); - - //BS visitor - BoundaryConditionsBlockVisitor bcVisitor; - //bcVisitor.addBC(noSlipBC); - //bcVisitor.addBC(velocityBC); - - SPtr<BCSet> bcProc; - bcProc = SPtr<BCSet>(new BCSet()); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new PowellEyringModelLBMKernel()); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new HerschelBulkleyModelLBMKernel()); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new RheologyK17LBMKernel()); - SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new RheologyBinghamModelLBMKernel()); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new BinghamModelLBMKernel()); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel()); - - //double forcingXY = forcing / sqrt(2.0); - //kernel->setForcingX1(forcingXY); - //kernel->setForcingX2(forcingXY); - - kernel->setForcingX1(forcing); - kernel->setWithForcing(true); - kernel->setBCSet(bcProc); - - - SPtr<Grid3D> grid(new Grid3D(comm)); - grid->setPeriodicX1(true); - grid->setPeriodicX2(false); - grid->setPeriodicX3(true); - grid->setDeltaX(deltax); - grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - - 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()); - - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - if (myid == 0) - { - UBLOG(logINFO, "Parameters:"); - UBLOG(logINFO, "forcing = " << forcing); - UBLOG(logINFO, "rho = " << rhoLB); - //UBLOG(logINFO, "nu = " << nuLB); - UBLOG(logINFO, "U = " << U); - UBLOG(logINFO, "Re = " << (U * d) / (k * std::pow(Gamma, n - 1))); - UBLOG(logINFO, "Bn = " << tau0 / (k * std::pow(Gamma, n))); - UBLOG(logINFO, "k = " << k); - UBLOG(logINFO, "n = " << n); - UBLOG(logINFO, "tau0 = " << tau0); - UBLOG(logINFO, "deltax = " << deltax); - //UBLOG(logINFO, "number of levels = " << refineLevel + 1); - UBLOG(logINFO, "numOfThreads = " << numOfThreads); - UBLOG(logINFO, "Preprozess - start"); - } - - //walls - //GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 + blockLength, g_maxX2 + blockLength, g_minX3)); - //if (myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname + "/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - - //GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_maxX3, g_maxX1 + blockLength, g_maxX2 + blockLength, g_maxX3 + blockLength)); - //if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname + "/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallYmin(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 + blockLength, g_minX2, g_maxX3 + blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname + "/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallYmax(new GbCuboid3D(g_minX1 - blockLength, g_maxX2, g_minX3 - blockLength, g_maxX1 + blockLength, g_maxX2 + blockLength, g_maxX3 + blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname + "/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance()); - - //GbCuboid3DPtr addWallXY(new GbCuboid3D(g_minX1 - 0.5*deltax, g_minX2 - 0.5 * deltax, g_minX3 - 0.5 * deltax, g_maxX1 + 0.5 * deltax, g_maxX2 + 0.5 * deltax, g_maxX3 + 0.5 * deltax)); - //if (myid == 0) GbSystem3D::writeGeoObject(addWallXY.get(), pathname + "/geo/addWallXY", WbWriterVtkXmlASCII::getInstance()); - - //SPtr<GbTriFaceMesh3D> wall45(new GbTriFaceMesh3D()); - //wall45->readMeshFromSTLFile("d:/Projects/TRR277/Project/WP1/PF45/Geo/wall45_ASCII.stl", true); - - - //wall interactors - //SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, noSlipBC, Interactor3D::SOLID)); - //SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, noSlipBC, Interactor3D::SOLID)); - - SPtr<D3Q27Interactor> addWallYminInt(new D3Q27Interactor(addWallYmin, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, noSlipBC, Interactor3D::SOLID)); - - //SPtr<D3Q27TriFaceMeshInteractor> wall45Int(new D3Q27TriFaceMeshInteractor(wall45, grid, noSlipBC, Interactor3D::SOLID)); - - //////////////////////////////////////////// - //METIS - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE)); - //////////////////////////////////////////// - /////delete solid blocks - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - //intHelper.addInteractor(addWallZminInt); - //intHelper.addInteractor(addWallZmaxInt); - intHelper.addInteractor(addWallYminInt); - intHelper.addInteractor(addWallYmaxInt); - //intHelper.addInteractor(wall45Int); - intHelper.selectBlocks(); - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end"); - ////////////////////////////////////// - - SPtr<SimulationObserver> ppblocks(new WriteBlocksSimulationObserver(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - ppblocks->update(0); - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nodb = (blocknx[0]) * (blocknx[1]) * (blocknx[2]); - unsigned long nod = nob * (blocknx[0]) * (blocknx[1]) * (blocknx[2]); - unsigned long nodg = nob * (blocknx[0] + gl) * (blocknx[1] + gl) * (blocknx[1] + gl); - real needMemAll = real(nodg * (27 * sizeof(real) + sizeof(int) + sizeof(float) * 4)); - real needMem = needMemAll / real(comm->getNumberOfProcesses()); - - if (myid == 0) - { - UBLOG(logINFO, "Number of blocks = " << nob); - UBLOG(logINFO, "Number of nodes = " << nod); - 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 * nodb); - } - UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); - } - - SetKernelBlockVisitor kernelVisitor(kernel, k, availMem, needMem); - grid->accept(kernelVisitor); - - //BC - intHelper.setBC(); - - //initialization of distributions - InitDistributionsBlockVisitor initVisitor; - grid->accept(initVisitor); - - - if (myid == 0) UBLOG(logINFO, "Preprozess - end"); - - - //set connectors - //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator()); - //SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, k, iProcessor); - //grid->accept(setConnsVisitor); - - OneDistributionSetConnectorsBlockVisitor setConnsVisitor(comm); - grid->accept(setConnsVisitor); - - grid->accept(bcVisitor); - - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - WriteBoundaryConditionsSimulationObserver ppgeo = WriteBoundaryConditionsSimulationObserver(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), comm); - ppgeo.update(1); - - SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100)); - SPtr<SimulationObserver> npr(new NUPSCounterSimulationObserver(grid, nupsSch, numOfThreads, comm)); - - SPtr<UbScheduler> forceSch(new UbScheduler(1000)); - //real dummy = 1; - SPtr<CalculateTorqueSimulationObserver> fp = std::make_shared<CalculateTorqueSimulationObserver>(grid, forceSch, pathname + "/forces/forces.csv", comm); - fp->addInteractor(addWallYminInt); - - SPtr<CalculateTorqueSimulationObserver> fp2 = std::make_shared<CalculateTorqueSimulationObserver>(grid, forceSch, pathname + "/forces/forces2.csv", comm); - fp2->addInteractor(addWallYmaxInt); - - //write data for visualization of macroscopic quantities - SPtr<UbScheduler> visSch(new UbScheduler(outTime)); - SPtr<WriteMacroscopicQuantitiesSimulationObserver> writeMQSimulationObserver(new WriteMacroscopicQuantitiesSimulationObserver(grid, visSch, pathname, - WbWriterVtkXmlASCII::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm)); - - SPtr<WriteThixotropyQuantitiesSimulationObserver> writeThixotropicMQSimulationObserver(new WriteThixotropyQuantitiesSimulationObserver(grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm)); - - SPtr<UbScheduler> stepGhostLayer(new UbScheduler(outTime)); - SPtr<Simulation> simulation(new Simulation(grid, stepGhostLayer, endTime)); - simulation->addSimulationObserver(npr); - simulation->addSimulationObserver(writeMQSimulationObserver); - simulation->addSimulationObserver(writeThixotropicMQSimulationObserver); - simulation->addSimulationObserver(fp); - simulation->addSimulationObserver(fp2); - //simulation->addSimulationObserver(migSimulationObserver); - //simulation->addSimulationObserver(restartSimulationObserver); - - if (myid == 0) UBLOG(logINFO, "Simulation-start"); - simulation->run(); - 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[]) -{ - if (argv != NULL) - { - if (argv[1] != NULL) - { - //pflowForcing(string(argv[1])); - bflow(string(argv[1])); - } - else - { - cout << "Configuration file is missing!" << endl; - } - } - - return 0; -} diff --git a/apps/cpu/HerschelBulkleySphere/CMakeLists.txt b/apps/cpu/HerschelBulkleySphere/CMakeLists.txt deleted file mode 100644 index 87ecc61f0ce915be47d16b15133d155411067877..0000000000000000000000000000000000000000 --- a/apps/cpu/HerschelBulkleySphere/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(HerschelBulkleySphere) - -vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES hbsphere.cpp ) \ No newline at end of file diff --git a/apps/cpu/HerschelBulkleySphere/hbsphere.cfg b/apps/cpu/HerschelBulkleySphere/hbsphere.cfg deleted file mode 100644 index ee4b49ef79ab0a589f355725a5b5bd61a376ee4c..0000000000000000000000000000000000000000 --- a/apps/cpu/HerschelBulkleySphere/hbsphere.cfg +++ /dev/null @@ -1,29 +0,0 @@ -outputPath = d:/temp/Herschel-Bulkley_sphere_Re_200_n_0.3_Bn_0.01_slip - -numOfThreads = 4 -availMem = 8e9 -logToFile = false - -blocknx = 25 25 25 -boundingBox = 125 50 50 -deltax = 1 - -refineLevel = 0 - -radius = 5 -sphereCenter = 25 25 25 - -velocity = 1e-3 -n = 0.3 -Re = 200 -Bn = 0.01 - - -newStart = true -restartStep = 100000 - -cpStart = 100000 -cpStep = 100000 - -outTime = 10000 -endTime = 100000 \ No newline at end of file diff --git a/apps/cpu/HerschelBulkleySphere/hbsphere.cpp b/apps/cpu/HerschelBulkleySphere/hbsphere.cpp deleted file mode 100644 index f700359ea5bb84d2e3873128635cdefb90418834..0000000000000000000000000000000000000000 --- a/apps/cpu/HerschelBulkleySphere/hbsphere.cpp +++ /dev/null @@ -1,394 +0,0 @@ -#include <iostream> -#include <string> - -#include "VirtualFluids.h" -#include "NonNewtonianFluids/NonNewtonianFluids.h" - -using namespace std; - - -void bflow(string configname) -{ - using namespace vf::lbm::dir; - - try - { - vf::basics::ConfigurationFile config; - config.load(configname); - - string outputPath = config.getValue<string>("outputPath"); - int numOfThreads = config.getValue<int>("numOfThreads"); - vector<int> blocknx = config.getVector<int>("blocknx"); - vector<real> boundingBox = config.getVector<real>("boundingBox"); - //double nuLB = config.getValue<double>("nuLB"); - real endTime = config.getValue<real>("endTime"); - real outTime = config.getValue<real>("outTime"); - real availMem = config.getValue<real>("availMem"); - int refineLevel = config.getValue<int>("refineLevel"); - bool logToFile = config.getValue<bool>("logToFile"); - real restartStep = config.getValue<real>("restartStep"); - real deltax = config.getValue<real>("deltax"); - real radius = config.getValue<real>("radius"); - real cpStep = config.getValue<real>("cpStep"); - real cpStart = config.getValue<real>("cpStart"); - bool newStart = config.getValue<bool>("newStart"); - real velocity = config.getValue<real>("velocity"); - real n = config.getValue<real>("n"); - real Re = config.getValue<real>("Re"); - real Bn = config.getValue<real>("Bn"); - vector<real> sphereCenter = config.getVector<real>("sphereCenter"); - - SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - if (logToFile) - { -#if defined(__unix__) - if (myid == 0) - { - const char* str = outputPath.c_str(); - mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); - } -#endif - - if (myid == 0) - { - stringstream logFilename; - logFilename << outputPath + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - } - - real rhoLB = 0.0; - - SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter()); - - //bounding box - - real g_minX1 = 0; - real g_minX2 = 0; - real g_minX3 = 0; - - real g_maxX1 = boundingBox[0]; - real g_maxX2 = boundingBox[1]; - real g_maxX3 = boundingBox[2]; - - //double g_minX1 = -boundingBox[0]/2.0; - //double g_minX2 = -boundingBox[1] / 2.0; - //double g_minX3 = -boundingBox[2]/2.0; - - //double g_maxX1 = boundingBox[0]/2.0; - //double g_maxX2 = boundingBox[1]/2.0; - //double g_maxX3 = boundingBox[2]/2.0; - - real blockLength = 3.0 * deltax; - - real d = 2.0 * radius; - real U = velocity; - real Gamma = U / d; - - real k = (U * d) / (Re * std::pow(Gamma, n - 1)); - real tau0 = Bn * k * std::pow(Gamma, n); - - //double k = 0.05; // (U * d) / (Re * std::pow(Gamma, n - 1)); - //double tau0 = 3e-6; //Bn * k * std::pow(Gamma, n); - - //double forcing = 8e-7; - - real omegaMin = 1.0e-8; - - SPtr<Rheology> thix = Rheology::getInstance(); - thix->setPowerIndex(n); - thix->setViscosityParameter(k); - thix->setYieldStress(tau0); - thix->setOmegaMin(omegaMin); - - SPtr<BC> noSlipBC(new NoSlipBC()); - //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new NoSlipInterpolated())); - noSlipBC->setBCStrategy(SPtr<BCStrategy>(new RheologyHerschelBulkleyModelNoSlipBCStrategy())); - //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new RheologyBinghamModelNoSlipBCStrategy())); - - SPtr<BC> slipBC(new SlipBC()); - slipBC->setBCStrategy(SPtr<BCStrategy>(new SlipBounceBack())); - - mu::Parser fct; - fct.SetExpr("U"); - fct.DefineConst("U", velocity); - //double H = boundingBox[1]; - //mu::Parser fct; - //fct.SetExpr("16*U*x2*x3*(H-x2)*(H-x3)/H^4"); - //fct.DefineConst("U", U); - //fct.DefineConst("H", H); - SPtr<BC> velocityBC(new VelocityBC(true, false, false, fct, 0, BCFunction::INFCONST)); - velocityBC->setBCStrategy(SPtr<BCStrategy>(new VelocityBounceBack())); - //velocityBC->setBCStrategy(SPtr<BCStrategy>(new VelocityWithPressureInterpolated())); - - SPtr<BC> densityBC(new PressureBC()); - densityBC->setBCStrategy(SPtr<BCStrategy>(new PressureNonEquilibrium())); - //densityBC->setBCStrategy(SPtr<BCStrategy>(new OutflowNonReflecting())); - - - //BS visitor - BoundaryConditionsBlockVisitor bcVisitor; - - SPtr<BCSet> bcProc; - bcProc = SPtr<BCSet>(new BCSet()); - - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CumulantLBMKernel()); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel()); - SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new RheologyK17LBMKernel()); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new HerschelBulkleyModelLBMKernel()); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new BinghamModelLBMKernel()); - kernel->setBCSet(bcProc); - //kernel->setForcingX1(forcing); - //kernel->setWithForcing(true); - - SPtr<Grid3D> grid(new Grid3D(comm)); - grid->setPeriodicX1(false); - grid->setPeriodicX2(true); - grid->setPeriodicX3(true); - grid->setDeltaX(deltax); - grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - - SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); - if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), outputPath + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); - - //sphere - SPtr<GbObject3D> sphere(new GbSphere3D(sphereCenter[0], sphereCenter[1], sphereCenter[2], radius)); - GbSystem3D::writeGeoObject(sphere.get(), outputPath + "/geo/sphere", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27Interactor> sphereInt(new D3Q27Interactor(sphere, grid, noSlipBC, Interactor3D::SOLID)); - - //////////////////////////////////////////// - //METIS - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::KWAY)); - //////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - //restart - SPtr<UbScheduler> mSch(new UbScheduler(cpStep, cpStart)); - SPtr<MPIIOMigrationSimulationObserver> restartSimulationObserver(new MPIIOMigrationSimulationObserver(grid, mSch, metisVisitor, outputPath, comm)); - restartSimulationObserver->setLBMKernel(kernel); - restartSimulationObserver->setBCSet(bcProc); - //restartSimulationObserver->setNu(k); - ////////////////////////////////////////////////////////////////////////// - - if (myid == 0) - { - UBLOG(logINFO, "Parameters:"); - //UBLOG(logINFO, "forcing = " << forcing); - UBLOG(logINFO, "rho = " << rhoLB); - UBLOG(logINFO, "U = " << U); - UBLOG(logINFO, "Re = " << (U * d) / (k * std::pow(Gamma, n - 1))); - UBLOG(logINFO, "Bn = " << tau0 /(k * std::pow(Gamma, n))); - UBLOG(logINFO, "k = " << k); - UBLOG(logINFO, "n = " << n); - UBLOG(logINFO, "tau0 = " << tau0); - UBLOG(logINFO, "deltax = " << deltax); - UBLOG(logINFO, "number of levels = " << refineLevel + 1); - UBLOG(logINFO, "number of threads = " << numOfThreads); - UBLOG(logINFO, "number of processes = " << comm->getNumberOfProcesses()); - UBLOG(logINFO, "blocknx = " << blocknx[0] << " " << blocknx[1] << " " << blocknx[2]); - UBLOG(logINFO, "boundingBox = " << boundingBox[0] << " " << boundingBox[1] << " " << boundingBox[2]); - UBLOG(logINFO, "sphereCenter = " << sphereCenter[0] << " " << sphereCenter[1] << " " << sphereCenter[2]); - UBLOG(logINFO, "output path = " << outputPath); - UBLOG(logINFO, "Preprozess - start"); - } - - if (newStart) - { - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - if (refineLevel > 0) - { - GbCuboid3DPtr refCube(new GbCuboid3D(-10, -10, -10, 0, 0, 0)); - if (myid == 0) GbSystem3D::writeGeoObject(refCube.get(), outputPath + "/geo/refCube", WbWriterVtkXmlASCII::getInstance()); - - if (myid == 0) UBLOG(logINFO, "Refinement - start"); - RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel, comm); - //refineHelper.addGbObject(sphere, refineLevel); - refineHelper.addGbObject(refCube, refineLevel); - refineHelper.refine(); - if (myid == 0) UBLOG(logINFO, "Refinement - end"); - } - - //walls - GbCuboid3DPtr wallZmin(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 + blockLength, g_maxX2 + blockLength, g_minX3)); - if (myid == 0) GbSystem3D::writeGeoObject(wallZmin.get(), outputPath + "/geo/wallZmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr wallZmax(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_maxX3, g_maxX1 + blockLength, g_maxX2 + blockLength, g_maxX3 + blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(wallZmax.get(), outputPath + "/geo/wallZmax", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr wallYmin(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 + blockLength, g_minX2, g_maxX3 + blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(wallYmin.get(), outputPath + "/geo/wallYmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr wallYmax(new GbCuboid3D(g_minX1 - blockLength, g_maxX2, g_minX3 - blockLength, g_maxX1 + blockLength, g_maxX2 + blockLength, g_maxX3 + blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(wallYmax.get(), outputPath + "/geo/wallYmax", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr wallXmin(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_minX3 - blockLength, g_minX1, g_maxX2 + blockLength, g_maxX3 + blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(wallXmin.get(), outputPath + "/geo/wallXmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr wallXmax(new GbCuboid3D(g_maxX1, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 + blockLength, g_maxX2 + blockLength, g_maxX3 + blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(wallXmax.get(), outputPath + "/geo/wallXmax", WbWriterVtkXmlASCII::getInstance()); - - //wall interactors - SPtr<D3Q27Interactor> wallZminInt(new D3Q27Interactor(wallZmin, grid, slipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallZmaxInt(new D3Q27Interactor(wallZmax, grid, slipBC, Interactor3D::SOLID)); - - SPtr<D3Q27Interactor> wallYminInt(new D3Q27Interactor(wallYmin, grid, slipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallYmaxInt(new D3Q27Interactor(wallYmax, grid, slipBC, Interactor3D::SOLID)); - - SPtr<D3Q27Interactor> wallXminInt(new D3Q27Interactor(wallXmin, grid, velocityBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallXmaxInt(new D3Q27Interactor(wallXmax, grid, densityBC, Interactor3D::SOLID)); - - //////////////////////////////////////////// - //METIS - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::KWAY)); - //////////////////////////////////////////// - /////delete solid blocks - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - intHelper.addInteractor(wallXminInt); - intHelper.addInteractor(wallXmaxInt); - intHelper.addInteractor(wallYminInt); - intHelper.addInteractor(wallYmaxInt); - intHelper.addInteractor(wallZminInt); - intHelper.addInteractor(wallZmaxInt); - intHelper.addInteractor(sphereInt); - intHelper.selectBlocks(); - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end"); - ////////////////////////////////////// - - SPtr<SimulationObserver> ppblocks(new WriteBlocksSimulationObserver(grid, SPtr<UbScheduler>(new UbScheduler(1)), outputPath, WbWriterVtkXmlBinary::getInstance(), comm)); - ppblocks->update(0); - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nodb = (blocknx[0]) * (blocknx[1]) * (blocknx[2]); - unsigned long nod = nob * (blocknx[0]) * (blocknx[1]) * (blocknx[2]); - unsigned long nodg = nob * (blocknx[0] + gl) * (blocknx[1] + gl) * (blocknx[1] + gl); - real needMemAll = real(nodg * (27 * sizeof(real) + sizeof(int) + sizeof(float) * 4)); - real needMem = needMemAll / real(comm->getNumberOfProcesses()); - - if (myid == 0) - { - UBLOG(logINFO, "Number of blocks = " << nob); - UBLOG(logINFO, "Number of nodes = " << nod); - 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 * nodb); - } - UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); - } - - SetKernelBlockVisitor kernelVisitor(kernel, k, availMem, needMem); - grid->accept(kernelVisitor); - - if (refineLevel > 0) - { - SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - //BC - intHelper.setBC(); - - //initialization of distributions - InitDistributionsBlockVisitor initVisitor; - grid->accept(initVisitor); - - - if (myid == 0) UBLOG(logINFO, "Preprozess - end"); - } - else - { - restartSimulationObserver->restart((int)restartStep); - grid->setTimeStep(restartStep); - SetBcBlocksBlockVisitor v(sphereInt); - grid->accept(v); - sphereInt->initInteractor(); - } - - omp_set_num_threads(numOfThreads); - - //set connectors - //InterpolationProcessorPtr iProcessor(new ThixotropyInterpolationProcessor()); - //static_pointer_cast<ThixotropyInterpolationProcessor>(iProcessor)->setOmegaMin(thix->getOmegaMin()); - //SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, k, iProcessor); - //grid->accept(setConnsVisitor); - - OneDistributionSetConnectorsBlockVisitor setConnsVisitor(comm); - grid->accept(setConnsVisitor); - - grid->accept(bcVisitor); - - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - WriteBoundaryConditionsSimulationObserver ppgeo = WriteBoundaryConditionsSimulationObserver(grid, geoSch, outputPath, WbWriterVtkXmlASCII::getInstance(), comm); - ppgeo.update(0); - - SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100)); - SPtr<SimulationObserver> npr(new NUPSCounterSimulationObserver(grid, nupsSch, numOfThreads, comm)); - - //write data for visualization of macroscopic quantities - SPtr<UbScheduler> visSch(new UbScheduler(outTime)); - //SPtr<UbScheduler> visSch(new UbScheduler(10,1)); - SPtr<WriteMacroscopicQuantitiesSimulationObserver> writeMQSimulationObserver(new WriteMacroscopicQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm)); - //writeMQSimulationObserver->update(0); - - real area = UbMath::PI*radius*radius; - SPtr<UbScheduler> forceSch(new UbScheduler(100)); - SPtr<CalculateForcesSimulationObserver> fp = make_shared<CalculateForcesSimulationObserver>(grid, forceSch, outputPath + "/forces/forces.txt", comm, velocity, area); - fp->addInteractor(sphereInt); - - SPtr<WriteThixotropyQuantitiesSimulationObserver> writeThixotropicMQSimulationObserver(new WriteThixotropyQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm)); - - SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1)); - SPtr<Simulation> simulation(new Simulation(grid, stepGhostLayer, endTime)); - simulation->addSimulationObserver(npr); - simulation->addSimulationObserver(fp); - simulation->addSimulationObserver(writeMQSimulationObserver); - simulation->addSimulationObserver(writeThixotropicMQSimulationObserver); - simulation->addSimulationObserver(restartSimulationObserver); - - if (myid == 0) UBLOG(logINFO, "Simulation-start"); - simulation->run(); - 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[]) -{ - if (argv != NULL) - { - if (argv[1] != NULL) - { - //pflowForcing(string(argv[1])); - bflow(string(argv[1])); - } - else - { - cout << "Configuration file is missing!" << endl; - } - } - - return 0; -} diff --git a/apps/cpu/JetBreakup/CMakeLists.txt b/apps/cpu/JetBreakup/CMakeLists.txt deleted file mode 100644 index 9a21c8044d53cedaec4a27a37b420b687bd21132..0000000000000000000000000000000000000000 --- a/apps/cpu/JetBreakup/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(JetBreakup) - -vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES JetBreakup.cpp ) \ No newline at end of file diff --git a/apps/cpu/JetBreakup/JetBreakup.cfg b/apps/cpu/JetBreakup/JetBreakup.cfg deleted file mode 100644 index 0900bcc997331ecdb4993e35e96d48aa888709cc..0000000000000000000000000000000000000000 --- a/apps/cpu/JetBreakup/JetBreakup.cfg +++ /dev/null @@ -1,37 +0,0 @@ -pathname = D:/temp/JetBreakupSharpInterfaceShortTest3 -pathGeo = d:/Projects/TRR277/Project/WP2/JetBreakup - -numOfThreads = 18 -availMem = 10e9 - -#Grid -blocknx = 25 25 25 - -factorLx = 16 -factorLy = 5 -factorLz = 5 - -#Simulation -case = 3 -U_LB = 0.003 #inlet velocity -interfaceWidth = 3 -D = 10 #0.0001 # m -D_LB = 50 - -contactAngle = 110.0 -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 = 10000 - -cpStart = 10000 -cpStep = 10000 - -outTime = 100 -endTime = 100000#36000 \ No newline at end of file diff --git a/apps/cpu/JetBreakup/JetBreakup.cpp b/apps/cpu/JetBreakup/JetBreakup.cpp deleted file mode 100644 index 79c5934b3e2366b9d113e09bb0e15614020c667a..0000000000000000000000000000000000000000 --- a/apps/cpu/JetBreakup/JetBreakup.cpp +++ /dev/null @@ -1,683 +0,0 @@ -#include <iostream> -#include <memory> -#include <string> - -#include "MultiphaseFlow/MultiphaseFlow.h" -#include "NonNewtonianFluids/NonNewtonianFluids.h" -#include "VirtualFluids.h" - -using namespace std; - -void setInflowBC(real x1, real x2, real x3, real radius, int dir) -{ -} - -void run(string configname) -{ - using namespace vf::lbm::dir; - - try { - - // Sleep(30000); - - vf::basics::ConfigurationFile config; - config.load(configname); - - string pathname = config.getValue<string>("pathname"); - string pathGeo = config.getValue<string>("pathGeo"); - int numOfThreads = config.getValue<int>("numOfThreads"); - vector<int> blocknx = config.getVector<int>("blocknx"); - real U_LB = config.getValue<real>("U_LB"); - int interfaceWidth = config.getValue<int>("interfaceWidth"); - real theta = config.getValue<real>("contactAngle"); - real D_LB = config.getValue<real>("D_LB"); - real phiL = config.getValue<real>("phi_L"); - real phiH = config.getValue<real>("phi_H"); - real tauH = config.getValue<real>("Phase-field Relaxation"); - real mob = config.getValue<real>("Mobility"); - - real endTime = config.getValue<real>("endTime"); - real outTime = config.getValue<real>("outTime"); - real availMem = config.getValue<real>("availMem"); - - bool logToFile = config.getValue<bool>("logToFile"); - real restartStep = config.getValue<real>("restartStep"); - real cpStart = config.getValue<real>("cpStart"); - real cpStep = config.getValue<real>("cpStep"); - bool newStart = config.getValue<bool>("newStart"); - - int caseN = config.getValue<int>("case"); - - real factorLx = config.getValue<real>("factorLx"); - real factorLy = config.getValue<real>("factorLy"); - real factorLz = config.getValue<real>("factorLz"); - - //real dx = config.getValue<real>("dx"); - - - SPtr<vf::parallel::Communicator> comm = vf::parallel::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); - - real rho_h = 0, rho_l = 0, r_rho = 0, mu_h = 0, /*mu_l,*/ Uo = 0, D = 0, sigma = 0; - real Dg = 10; - - switch (caseN) { - case 1: - // density of heavy fluid (kg/m^3) - rho_h = 848; - // density of light fluid (kg/m^3) - rho_l = 34.5; - // density ratio - r_rho = rho_h / rho_l; - // dynamic viscosity of heavy fluid (Pa � s) - mu_h = 2.87e-3; - // dynamic viscosity of light fluid (Pa � s) - // mu_l = 1.97e-5; - // velocity (m/s) - Uo = 100; - // diameter of jet (m) - D = 0.0001; - // surface tension (N/m) - sigma = 0.03; - break; - case 2: - // density of heavy fluid (kg/m^3) - rho_h = 848; - // density of light fluid (kg/m^3) - rho_l = 1.205; - // density ratio - r_rho = rho_h / rho_l; - // dynamic viscosity of heavy fluid (Pa � s) - mu_h = 2.87e-3; - // dynamic viscosity of light fluid (Pa � s) - // mu_l = 1.84e-5; - // velocity (m/s) - Uo = 200; - // diameter of jet (m) - D = 0.0001; - // surface tension (N/m) - sigma = 0.03; - break; - case 3: - // density of heavy fluid (kg/m^3) - rho_h = 1000; - // density of light fluid (kg/m^3) - rho_l = 1.0; - // density ratio - r_rho = rho_h / rho_l; - // dynamic viscosity of heavy fluid (Pa � s) - mu_h = 2.87e-3; - // dynamic viscosity of light fluid (Pa � s) - // mu_l = 1.84e-5; - // velocity (m/s) - Uo = 200; - // diameter of jet (m) - D = 0.0001; - Dg = 100; - // surface tension (N/m) - sigma = 0.03; - break; - } - - real Re = rho_h * Uo * D / mu_h; - real We = rho_h * Uo * Uo * D / sigma; - - real dx = Dg / D_LB; - //real D_LB = Dg / dx; - real nu_h = U_LB * D_LB / Re; - real nu_l = nu_h; - nu_h *= 0.1; - - //real rho_h_LB = 1; - // surface tension - real sigma_LB = 0.0; //rho_h_LB *U_LB *U_LB *D_LB / We; - - // LBMReal dLB = 0; // = length[1] / dx; - real rhoLB = 0.0; - // LBMReal nuLB = nu_l; //(uLB*dLB) / Re; - - real beta = 12.0 * sigma_LB / interfaceWidth; - real kappa = 1.5 * interfaceWidth * sigma_LB; - - //double tau0 = 715.218181094648*1000.; // Pa - //double muConcrete = 2.1133054011798826; // [Pa s] - //real u = Uo; //[m/s] - - - //double Bm = (tau0 * D) / (muConcrete * u); - double tau0_LB = 0; - //0.02; - //Bm *nu_h *U_LB / (D / dx); - - SPtr<Rheology> rheo = Rheology::getInstance(); - rheo->setYieldStress(tau0_LB); - - - if (myid == 0) { - UBLOG(logINFO, "Parameters:"); - UBLOG(logINFO, "U_LB = " << U_LB); - UBLOG(logINFO, "rho = " << rhoLB); - UBLOG(logINFO, "nu_l = " << nu_l); - UBLOG(logINFO, "nu_h = " << nu_h); - UBLOG(logINFO, "Re = " << Re); - UBLOG(logINFO, "We = " << We); - UBLOG(logINFO, "dx = " << dx); - UBLOG(logINFO, "sigma = " << sigma); - UBLOG(logINFO, "sigma_LB = " << sigma_LB); - UBLOG(logINFO, "tau0_LB = " << tau0_LB); - UBLOG(logINFO, "density ratio = " << r_rho); - // UBLOG(logINFO, "number of levels = " << refineLevel + 1); - UBLOG(logINFO, "numOfThreads = " << numOfThreads); - UBLOG(logINFO, "path = " << pathname); - } - - // bounding box - - real Lx = factorLx * Dg; - real Ly = factorLy * Dg; - real Lz = factorLz * Dg; - - real g_minX1 = 0; - real g_minX2 = -0.5 * Ly; - real g_minX3 = -0.5 * Lz; - - real g_maxX1 = Lx; - real g_maxX2 = 0.5 * Ly; - real g_maxX3 = 0.5 * Lz; - - //real g_minX1 = -0.5 * Lx; - //real g_minX2 = 0; - //real g_minX3 = -0.5 * Lz; - - //real g_maxX1 = 0.5 * Lx; - //real g_maxX2 = Ly; - //real g_maxX3 = 0.5 * Lz; - - //real g_minX1 = -0.5 * Lx; - //real g_minX2 = -0.5 * Ly; - //real g_minX3 = 0; - - //real g_maxX1 = 0.5 * Lx; - //real g_maxX2 = 0.5 * Ly; - //real g_maxX3 = Lz; - - - // double g_maxX1 = 8.0*D; - // double g_maxX2 = 2.5*D; - // double g_maxX3 = 2.5*D; - - SPtr<LBMUnitConverter> conv(new LBMUnitConverter()); - - // const int baseLevel = 0; - - SPtr<LBMKernel> kernel; - - // kernel = SPtr<LBMKernel>(new MultiphaseScratchCumulantLBMKernel()); - // kernel = SPtr<LBMKernel>(new MultiphaseCumulantLBMKernel()); - // kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsCumulantLBMKernel()); - // kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel()); - // kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsPressureFilterLBMKernel()); - // kernel = SPtr<LBMKernel>(new MultiphasePressureFilterLBMKernel()); - // kernel = SPtr<LBMKernel>(new MultiphaseSimpleVelocityBaseExternalPressureLBMKernel()); - kernel = make_shared<MultiphaseScaleDistributionLBMKernel>(); - //kernel = make_shared<MultiphaseSharpInterfaceLBMKernel>(); - - kernel->setWithForcing(false); - kernel->setForcingX1(0.0); - kernel->setForcingX2(0.0); - kernel->setForcingX3(0.0); - - kernel->setPhiL(phiL); - kernel->setPhiH(phiH); - kernel->setPhaseFieldRelaxation(tauH); - kernel->setMobility(mob); - - // nuL, nuG, densityRatio, beta, kappa, theta, - - kernel->setCollisionFactorMultiphase(nu_h, nu_l); - kernel->setDensityRatio(r_rho); - kernel->setMultiphaseModelParameters(beta, kappa); - kernel->setContactAngle(theta); - kernel->setInterfaceWidth(interfaceWidth); - // dynamicPointerCast<MultiphasePressureFilterLBMKernel>(kernel)->setPhaseFieldBC(0.0); - kernel->setSigma(sigma_LB); - - SPtr<BCSet> bcProc(new BCSet()); - // BCSetPtr bcProc(new ThinWallBCSet()); - - kernel->setBCSet(bcProc); - - SPtr<Grid3D> grid(new Grid3D(comm)); - // grid->setPeriodicX1(true); - // grid->setPeriodicX2(true); - // grid->setPeriodicX3(true); - grid->setGhostLayerWidth(2); - - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE)); - - ////////////////////////////////////////////////////////////////////////// - // restart - SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart)); - // SPtr<MPIIORestartSimulationObserver> rcp(new MPIIORestartSimulationObserver(grid, rSch, pathname, comm)); - SPtr<MPIIOMigrationSimulationObserver> rcp(new MPIIOMigrationSimulationObserver(grid, rSch, metisVisitor, pathname, comm)); - // SPtr<MPIIOMigrationBESimulationObserver> rcp(new MPIIOMigrationBESimulationObserver(grid, rSch, pathname, comm)); - // rcp->setNu(nuLB); - // rcp->setNuLG(nuL, nuG); - // rcp->setDensityRatio(densityRatio); - - rcp->setLBMKernel(kernel); - rcp->setBCSet(bcProc); - ////////////////////////////////////////////////////////////////////////// - // BC Adapter - ////////////////////////////////////////////////////////////////////////////// - mu::Parser fctF1; - //u_actual(r) = U_max * (4 / (D^2) * (R^2 - r^2)) - //fctF1.SetExpr("vx1*(1-((x2-y0)^2+(x3-z0)^2)/(R^2))"); - //fctF1.SetExpr("vx1*(1-(sqrt((x2-y0)^2+(x3-z0)^2))/(R))"); - //fctF1.SetExpr("vy1*(1-(sqrt((x2-x0)^2+(x3-z0)^2)/R))^0.1"); - fctF1.SetExpr("vx1"); - //fctF1.DefineConst("vx1", 0); - fctF1.DefineConst("vx1", U_LB); - fctF1.DefineConst("R", 0.5*Dg); - fctF1.DefineConst("y0", (g_minX2+g_maxX2)/2); - fctF1.DefineConst("z0", (g_minX3+g_maxX3)/2); - SPtr<BC> velBCF1(new MultiphaseVelocityBC(true, false, false, fctF1, phiH, 0.0, BCFunction::INFCONST)); - - mu::Parser fctF2; - fctF2.SetExpr("vx1"); - fctF2.DefineConst("vx1", U_LB); - fctF2.SetExpr("vx1"); - fctF2.DefineConst("vx1", U_LB); - - // real startTime = 1; - // SPtr<BC> velBCF1(new MultiphaseVelocityBC(true, false, false, fctF1, phiH, 0.0, startTime)); - //SPtr<BC> velBCF2(new MultiphaseVelocityBC(true, false, false, fctF2, phiH, startTime, endTime)); - SPtr<BC> velBCF2(new MultiphaseVelocityBC(true, false, false, fctF2, phiL, 0.0, BCFunction::INFCONST)); - - short wetting = 1; - SPtr<BC> noSlipBC(new NoSlipBC(wetting)); - noSlipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNoSlipBCStrategy())); - - SPtr<BC> denBC(new PressureBC(rhoLB)); - denBC->setBCStrategy(SPtr<BCStrategy>(new MultiphasePressureBCStrategy())); - - // SPtr<BC> slipBC(new SlipBC()); - // slipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseSlipBCStrategy())); - - mu::Parser fctPhi_F1; - fctPhi_F1.SetExpr("phiH"); - 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); - - velBCF1->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - //velBCF2->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - - ////////////////////////////////////////////////////////////////////////////////// - // BC visitor - MultiphaseBoundaryConditionsBlockVisitor bcVisitor; - - // SPtr<D3Q27Interactor> inflowF1Int; - // SPtr<D3Q27Interactor> cylInt; - - SPtr<D3Q27Interactor> inflowInt; - - //if (newStart) { - - // if (newStart) { - - - - // geometry - 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->readMeshFromSTLFileBinary(pathGeo + "/" + geoFile, false); - // GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance()); - // if (myid == 0) - // UBLOG(logINFO, "Read geoFile:stop"); - // inflow - // GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1, g_minX2 - 0.5 * dx, g_minX3, g_maxX1, g_minX2 - 1.0 * - // dx, g_maxX3)); - // GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1 * 0.5 - dx, g_minX2 - dx, g_minX3 * 0.5 - dx, - // g_maxX1 * 0.5 + dx, g_minX2, g_maxX3 * 0.5 + dx)); - // if (myid == 0) - // GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname + "/geo/geoInflowF1", - // WbWriterVtkXmlASCII::getInstance()); - - GbCylinder3DPtr geoInflow(new GbCylinder3D(g_minX1 - 2.0*dx, 0.0, 0.0, g_minX1, 0.0, 0.0, Dg / 2.0)); - - //GbCylinder3DPtr geoInflow(new GbCylinder3D(0.0, g_minX2 - 2.0 * dx, 0.0, 0.0, g_minX2, 0.0, Dg / 2.0)); - - //GbCylinder3DPtr geoInflow(new GbCylinder3D(0.0, 0.0, g_minX3 - 2.0 * dx, 0.0, 0.0, g_minX3, Dg / 2.0)); - - - - //GbCylinder3DPtr geoSolid(new GbCylinder3D(g_minX1 - 2.0 * dx, g_maxX2 / 2.0, g_maxX3 / 2.0, g_minX1+2.0*dx, g_maxX2 / 2.0, g_maxX3 / 2.0, 1.5*D / 2.0)); - //if (myid == 0) GbSystem3D::writeGeoObject(geoSolid.get(), pathname + "/geo/geoSolid", WbWriterVtkXmlASCII::getInstance()); - - SPtr<GbTriFaceMesh3D> meshInflowPipe = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshInflowPipe:start"); - //meshInflowPipe->readMeshFromSTLFileBinary(pathGeo + "/JetTube4.stl", false); - meshInflowPipe->readMeshFromSTLFileBinary(pathGeo + "/JetTubeX50.stl", false); - //meshInflowPipe->readMeshFromSTLFileASCII(pathGeo + "/JetTubeScaled5.stl", false); - if (myid == 0) UBLOG(logINFO, "Read meshInflowPipe:end"); - //meshInflowPipe->scale(1e-04, 1e-04, 1e-04); - if (myid == 0) GbSystem3D::writeGeoObject(meshInflowPipe.get(), pathname + "/geo/meshInflowPipe", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrInflowPipe = std::make_shared<D3Q27TriFaceMeshInteractor>(meshInflowPipe, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::POINTS); - - // GbCylinder3DPtr cylinder2( - // new GbCylinder3D(0.0, g_minX2 - 2.0 * dx / 2.0, 0.0, 0.0, g_minX2 + 4.0 * dx, 0.0, 8.0+2.0*dx)); - // if (myid == 0) - // GbSystem3D::writeGeoObject(cylinder2.get(), pathname + "/geo/cylinder2", - // WbWriterVtkXmlASCII::getInstance()); - // outflow - // GbCuboid3DPtr geoOutflow(new GbCuboid3D(-1.0, -1, -1.0, 121.0, 1.0, 121.0)); // For JetBreakup (Original) - // GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1, g_maxX2 - 40 * dx, g_minX3, g_maxX1, g_maxX2, g_maxX3)); - GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_maxX1 + 2.0 * dx, g_maxX2 + 2.0 * dx, g_maxX3 + 2.0 * dx)); - if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + "/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); - - // double blockLength = blocknx[0] * dx; - - if (myid == 0) { - 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); - - SPtr<WriteBlocksSimulationObserver> ppblocks(new WriteBlocksSimulationObserver(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - - // SPtr<Interactor3D> tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBC, - // Interactor3D::SOLID, Interactor3D::POINTS)); - - // inflowF1Int = - // SPtr<D3Q27Interactor>(new D3Q27Interactor(cylinder1, grid, noSlipBC, Interactor3D::SOLID)); - // inflowF1Int->addBC(velBCF2); - - SPtr<D3Q27Interactor> outflowInt(new D3Q27Interactor(geoOutflow, grid, denBC, Interactor3D::SOLID)); - - // Create boundary conditions geometry - GbCuboid3DPtr wallXmin(new GbCuboid3D(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_minX1, g_maxX2 + 2.0 * dx, g_maxX3 + 2.0 * dx)); - GbSystem3D::writeGeoObject(wallXmin.get(), pathname + "/geo/wallXmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallXmax(new GbCuboid3D(g_maxX1, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_maxX1 + 2.0 * dx, g_maxX2 + 2.0 * dx, g_maxX3 + 2.0 * dx)); - GbSystem3D::writeGeoObject(wallXmax.get(), pathname + "/geo/wallXmax", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallZmin(new GbCuboid3D(g_minX1 - 2.0*dx, g_minX2 - 2.0*dx, g_minX3 - 2.0*dx, g_maxX1 + 2.0*dx, g_maxX2 + 2.0*dx, g_minX3)); - GbSystem3D::writeGeoObject(wallZmin.get(), pathname + "/geo/wallZmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallZmax(new GbCuboid3D(g_minX1 - 2.0*dx, g_minX2 - 2.0*dx, g_maxX3, g_maxX1 + 2.0*dx, g_maxX2 + 2.0*dx, g_maxX3 + 2.0*dx)); - GbSystem3D::writeGeoObject(wallZmax.get(), pathname + "/geo/wallZmax", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallYmin(new GbCuboid3D(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_maxX1 + 2.0 * dx, g_minX2, g_maxX3 + 2.0 * dx)); - GbSystem3D::writeGeoObject(wallYmin.get(), pathname + "/geo/wallYmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallYmax(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)); - GbSystem3D::writeGeoObject(wallYmax.get(), pathname + "/geo/wallYmax", WbWriterVtkXmlASCII::getInstance()); - - // Add boundary conditions to grid generator - SPtr<D3Q27Interactor> wallXminInt(new D3Q27Interactor(wallXmin, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallXmaxInt(new D3Q27Interactor(wallXmax, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallZminInt(new D3Q27Interactor(wallZmin, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallZmaxInt(new D3Q27Interactor(wallZmax, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallYminInt(new D3Q27Interactor(wallYmin, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallYmaxInt(new D3Q27Interactor(wallYmax, grid, noSlipBC, Interactor3D::SOLID)); - - -////////////////////////// - real inflowLength = 10; - real difX2 = (g_maxX2 - g_minX2) / 2.0 - 0.5*Dg; - real difX3 = (g_maxX3 - g_minX3) / 2.0 - 0.5 * Dg; - GbCuboid3DPtr wallInfZmin(new GbCuboid3D(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_minX1 + inflowLength * dx, g_maxX2 + 2.0 * dx, g_minX3 + difX3)); - GbSystem3D::writeGeoObject(wallInfZmin.get(), pathname + "/geo/wallInfZmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallInfZmax(new GbCuboid3D(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, g_maxX3 - difX3, g_minX1 + inflowLength * dx, g_maxX2 + 2.0 * dx, g_maxX3 + 2.0 * dx)); - GbSystem3D::writeGeoObject(wallInfZmax.get(), pathname + "/geo/wallInfZmax", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallInfYmin(new GbCuboid3D(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_minX1 + inflowLength * dx, g_minX2 + difX2, g_maxX3)); - GbSystem3D::writeGeoObject(wallInfYmin.get(), pathname + "/geo/wallInfYmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallInfYmax(new GbCuboid3D(g_minX1 - 2.0 * dx, g_maxX2 - difX2, g_minX3 - 2.0 * dx, g_minX1 + inflowLength * dx, g_maxX2 + 2.0 * dx, g_maxX3)); - GbSystem3D::writeGeoObject(wallInfYmax.get(), pathname + "/geo/wallInfYmax", WbWriterVtkXmlASCII::getInstance()); - - // Add boundary conditions to grid generator - SPtr<D3Q27Interactor> wallInfZminInt(new D3Q27Interactor(wallInfZmin, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallInfZmaxInt(new D3Q27Interactor(wallInfZmax, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallInfYminInt(new D3Q27Interactor(wallInfYmin, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallInfYmaxInt(new D3Q27Interactor(wallInfYmax, grid, noSlipBC, Interactor3D::SOLID)); - - - - //GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1 - 2.0 * dx, g_minX2 + difX2, g_minX3 + difX3, g_minX1 + 2.0 * dx, g_maxX2 - difX2, g_maxX3 - difX3)); - - if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname + "/geo/geoInflow", WbWriterVtkXmlASCII::getInstance()); - ////////////////////////////////////// - - - - - - // cylInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(cylinder1, grid, velBCF1, Interactor3D::SOLID)); - // cylInt->addBC(velBCF2); - // SPtr<D3Q27Interactor> cyl2Int(new D3Q27Interactor(cylinder2, grid, noSlipBC, - // Interactor3D::SOLID)); - - inflowInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, velBCF1, Interactor3D::SOLID)); - //inflowInt->addBC(velBCF2); - - GbCylinder3DPtr geoAirInflow(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2 / 2.0, g_maxX3 / 2.0, g_minX1, g_maxX2 / 2.0, g_maxX3 / 2.0, D * 0.9 / 2.0)); - if (myid == 0) GbSystem3D::writeGeoObject(geoAirInflow.get(), pathname + "/geo/geoAirInflow", WbWriterVtkXmlASCII::getInstance()); - SPtr<D3Q27Interactor> inflowAirInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoAirInflow, grid, velBCF2, Interactor3D::SOLID)); - - //SPtr<D3Q27Interactor> solidInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoSolid, grid, noSlipBC, Interactor3D::SOLID)); - - - InteractorsHelper intHelper(grid, metisVisitor, false); - //intHelper.addInteractor(cylInt); - //intHelper.addInteractor(tubes); - //intHelper.addInteractor(outflowInt); - // intHelper.addInteractor(cyl2Int); - intHelper.addInteractor(intrInflowPipe); - intHelper.addInteractor(wallXminInt); - intHelper.addInteractor(wallXmaxInt); - intHelper.addInteractor(wallZminInt); - intHelper.addInteractor(wallZmaxInt); - intHelper.addInteractor(wallYminInt); - intHelper.addInteractor(wallYmaxInt); - - //intHelper.addInteractor(wallInfZminInt); - //intHelper.addInteractor(wallInfZmaxInt); - //intHelper.addInteractor(wallInfYminInt); - //intHelper.addInteractor(wallInfYmaxInt); - - intHelper.addInteractor(inflowInt); - //intHelper.addInteractor(outflowInt); - //intHelper.addInteractor(inflowAirInt); - - intHelper.selectBlocks(); - - ppblocks->update(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); - real needMemAll = real(numberOfNodesPerBlockWithGhostLayer * (27 * sizeof(real) + sizeof(int) + sizeof(float) * 4)); - real needMem = needMemAll / real(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"); - } - - MultiphaseSetKernelBlockVisitor kernelVisitor(kernel, nu_h, nu_l, availMem, needMem); - - grid->accept(kernelVisitor); - - //if (!newStart) { - // rcp->readBlocks((int)restartStep); - // grid->accept(metisVisitor); - // rcp->readDataSet((int)restartStep); - // grid->setTimeStep(restartStep); - //} - - intHelper.setBC(); - - if (newStart) { - - // initialization of distributions - // mu::Parser fct1; - // fct1.SetExpr("phiL"); - // fct1.DefineConst("phiL", phiL); - real x1c = g_minX1 - Dg*5; // (g_maxX1 - g_minX1-1)/2; // - real x2c = (g_minX2 + g_maxX2) / 2; - real x3c = (g_minX3 + g_maxX3) / 2; - - mu::Parser fct1; - fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); - //fct1.SetExpr("(0.5-0.5*tanh(2*(sqrt((x1/radius-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness))-(0.5-0.5*tanh(2*(sqrt((x1/radius-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius2)/interfaceThickness))"); - // fct1.SetExpr("x1 < 4*dx ? (0.5-0.5*tanh(2*(1-4*dx)*(sqrt((x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)) : 0"); - fct1.DefineConst("x1c", x1c); - fct1.DefineConst("x2c", x2c); - fct1.DefineConst("x3c", x3c); - fct1.DefineConst("dx", dx); - fct1.DefineConst("radius", 5.0*Dg + (inflowLength-1)*dx /* + 2. * dx*/); - fct1.DefineConst("radius2", Dg / 4.); - fct1.DefineConst("interfaceThickness", interfaceWidth * dx); - - mu::Parser fct2; - // fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1/radius-x1c)^2+(x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)"); - fct2.SetExpr("x1 < 4*dx ? (0.5-0.5*tanh(2*(1-4*dx)*(sqrt((x2-x2c)^2+(x3-x3c)^2)-radius)/interfaceThickness)) : 0"); - fct2.DefineConst("x1c", x1c); - fct2.DefineConst("x2c", x2c); - fct2.DefineConst("x3c", x3c); - fct2.DefineConst("dx", dx); - fct2.DefineConst("radius", 0.5 * D /* + 2. * dx*/); - fct2.DefineConst("interfaceThickness", interfaceWidth * dx); - - MultiphaseVelocityFormInitDistributionsBlockVisitor initVisitor; - //initVisitor.setPhi(fct1); - grid->accept(initVisitor); - } - - // boundary conditions grid - { - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - SPtr<WriteBoundaryConditionsSimulationObserver> ppgeo(new WriteBoundaryConditionsSimulationObserver(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - ppgeo->update(0); - ppgeo.reset(); - } - - if (myid == 0) UBLOG(logINFO, "Preprocess - end"); - //} else { - if (!newStart) { - rcp->restart((int)restartStep); - grid->setTimeStep(restartStep); - SPtr<WriteBlocksSimulationObserver> ppblocks(new WriteBlocksSimulationObserver(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - ppblocks->update(10000); - if (myid == 0) UBLOG(logINFO, "Restart - end"); - } - - // TwoDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm); - // grid->accept(setConnsVisitor); - - // ThreeDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm); - - grid->accept(bcVisitor); - - //ThreeDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm); - TwoDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm); - grid->accept(setConnsVisitor); - - SPtr<UbScheduler> visSch(new UbScheduler(outTime)); - real t_ast, t; - t_ast = 7.19; - t = (int)(t_ast/(U_LB/(D_LB))); - visSch->addSchedule(t,t,t); //t=7.19 - // SPtr<WriteMultiphaseQuantitiesSimulationObserver> pp(new WriteMultiphaseQuantitiesSimulationObserver( - // grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - SPtr<WriteSharpInterfaceQuantitiesSimulationObserver> pp(new WriteSharpInterfaceQuantitiesSimulationObserver(grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - pp->update(0); - - SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100)); - SPtr<NUPSCounterSimulationObserver> npr(new NUPSCounterSimulationObserver(grid, nupsSch, numOfThreads, comm)); - - // SPtr<UbScheduler> timeBCSch(new UbScheduler(1, startTime, startTime)); - // auto timeDepBC = make_shared<TimeDependentBCSimulationObserver>(TimeDependentBCSimulationObserver(grid, timeBCSch)); - // timeDepBC->addInteractor(inflowInt); - -#ifdef _OPENMP - omp_set_num_threads(numOfThreads); -#endif - - SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1)); - SPtr<Simulation> simulation(new Simulation(grid, stepGhostLayer, endTime)); - simulation->addSimulationObserver(npr); - simulation->addSimulationObserver(pp); - // simulation->addSimulationObserver(timeDepBC); - // simulation->addSimulationObserver(timeDepBC); - simulation->addSimulationObserver(rcp); - - if (myid == 0) UBLOG(logINFO, "Simulation-start"); - simulation->run(); - 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/JetBreakup/JetBreakup.cpp.new b/apps/cpu/JetBreakup/JetBreakup.cpp.new deleted file mode 100644 index 1c03deebdc1c6bfa195735c2cdf1dbb4ba0a8212..0000000000000000000000000000000000000000 --- a/apps/cpu/JetBreakup/JetBreakup.cpp.new +++ /dev/null @@ -1,638 +0,0 @@ -#include <iostream> -#include <memory> -#include <string> - -#include "VirtualFluids.h" - -using namespace std; - -void setInflowBC(double x1, double x2, double x3, double radius, int dir) -{ - -} - -void run(string configname) -{ - try { - - // Sleep(30000); - - vf::basics::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 U_LB = config.getValue<double>("U_LB"); - // double uF2 = config.getValue<double>("uF2"); - //double nuL = config.getValue<double>("nuL"); - //double nuG = config.getValue<double>("nuG"); - //double densityRatio = config.getValue<double>("densityRatio"); - //double sigma = config.getValue<double>("sigma"); - int interfaceWidth = config.getValue<int>("interfaceWidth"); - //double D = config.getValue<double>("D"); - double theta = config.getValue<double>("contactAngle"); - double D_LB = config.getValue<double>("D_LB"); - 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"); - - 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"); - - - - int caseN = config.getValue<int>("case"); - - SPtr<vf::parallel::Communicator> comm = vf::parallel::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); - - double rho_h, rho_l, r_rho, mu_h, mu_l, Uo, D, sigma; - - switch (caseN) { - case 1: - //density of heavy fluid (kg/m^3) - rho_h = 848; - //density of light fluid (kg/m^3) - rho_l = 34.5; - //density ratio - r_rho = rho_h / rho_l; - //dynamic viscosity of heavy fluid (Pa � s) - mu_h = 2.87e-3; - //dynamic viscosity of light fluid (Pa � s) - mu_l = 1.97e-5; - //velocity (m/s) - Uo = 100; - //diameter of jet (m) - D = 0.0001; - //surface tension (N/m) - sigma = 0.03; - break; - case 2: - // density of heavy fluid (kg/m^3) - rho_h = 848; - // density of light fluid (kg/m^3) - rho_l = 1.205; - // density ratio - r_rho = rho_h / rho_l; - // dynamic viscosity of heavy fluid (Pa � s) - mu_h = 2.87e-3; - // dynamic viscosity of light fluid (Pa � s) - mu_l = 1.84e-5; - // velocity (m/s) - Uo = 200; - // diameter of jet (m) - D = 0.0001; - // surface tension (N/m) - sigma = 0.03; - break; - case 3: - // density of heavy fluid (kg/m^3) - rho_h = 1000; - // density of light fluid (kg/m^3) - rho_l = 1.0; - // density ratio - r_rho = rho_h / rho_l; - // dynamic viscosity of heavy fluid (Pa � s) - mu_h = 2.87e-3; - // dynamic viscosity of light fluid (Pa � s) - mu_l = 1.84e-5; - // velocity (m/s) - Uo = 200; - // diameter of jet (m) - D = 0.0001; - // surface tension (N/m) - sigma = 0.03; - break; - } - - double Re = rho_h * Uo * D / mu_h; - double We = rho_h * Uo * Uo * D / sigma; - - double dx = D / D_LB; - double nu_h = U_LB * D_LB / Re; - double nu_l = nu_h; - - double rho_h_LB = 1; - //surface tension - double sigma_LB = rho_h_LB * U_LB * U_LB * D_LB / We; - - // LBMReal dLB = 0; // = length[1] / dx; - LBMReal rhoLB = 0.0; - LBMReal nuLB = nu_l; //(uLB*dLB) / Re; - - double beta = 12.0 * sigma_LB / interfaceWidth; - double kappa = 1.5 * interfaceWidth * sigma_LB; - - if (myid == 0) { - UBLOG(logINFO, "Parameters:"); - UBLOG(logINFO, "U_LB = " << U_LB); - UBLOG(logINFO, "rho = " << rhoLB); - UBLOG(logINFO, "nu_l = " << nu_l); - UBLOG(logINFO, "nu_h = " << nu_h); - UBLOG(logINFO, "Re = " << Re); - UBLOG(logINFO, "We = " << We); - UBLOG(logINFO, "dx = " << dx); - UBLOG(logINFO, "sigma = " << sigma); - UBLOG(logINFO, "density ratio = " << r_rho); - // UBLOG(logINFO, "number of levels = " << refineLevel + 1); - UBLOG(logINFO, "numOfThreads = " << numOfThreads); - UBLOG(logINFO, "path = " << pathname); - } - - SPtr<LBMUnitConverter> conv(new LBMUnitConverter()); - - // const int baseLevel = 0; - - SPtr<LBMKernel> kernel; - - // kernel = SPtr<LBMKernel>(new MultiphaseScratchCumulantLBMKernel()); - // kernel = SPtr<LBMKernel>(new MultiphaseCumulantLBMKernel()); - // kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsCumulantLBMKernel()); - // kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel()); - // kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsPressureFilterLBMKernel()); - kernel = SPtr<LBMKernel>(new MultiphaseSimpleVelocityBaseExternalPressureLBMKernel()); - //kernel = SPtr<LBMKernel>(new MultiphaseVelocityBaseSplitDistributionLBMKernel()); - //kernel = SPtr<LBMKernel>(new MultiphasePressureFilterLBMKernel()); - - kernel->setWithForcing(true); - kernel->setForcingX1(0.0); - kernel->setForcingX2(0.0); - kernel->setForcingX3(0.0); - - kernel->setPhiL(phiL); - kernel->setPhiH(phiH); - kernel->setPhaseFieldRelaxation(tauH); - kernel->setMobility(mob); - - // nuL, nuG, densityRatio, beta, kappa, theta, - - kernel->setCollisionFactorMultiphase(nu_h, nu_l); - kernel->setDensityRatio(r_rho); - kernel->setMultiphaseModelParameters(beta, kappa); - kernel->setContactAngle(theta); - kernel->setInterfaceWidth(interfaceWidth); - //dynamicPointerCast<MultiphasePressureFilterLBMKernel>(kernel)->setPhaseFieldBC(0.0); - - 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); - grid->setGhostLayerWidth(2); - - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor( - comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::RECURSIVE)); - - ////////////////////////////////////////////////////////////////////////// - // restart - SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart)); - // SPtr<MPIIORestartCoProcessor> rcp(new MPIIORestartCoProcessor(grid, rSch, pathname, comm)); - SPtr<MPIIOMigrationCoProcessor> rcp(new MPIIOMigrationCoProcessor(grid, rSch, metisVisitor, pathname, comm)); - // SPtr<MPIIOMigrationBECoProcessor> rcp(new MPIIOMigrationBECoProcessor(grid, rSch, pathname, comm)); - // rcp->setNu(nuLB); - // rcp->setNuLG(nuL, nuG); - // rcp->setDensityRatio(densityRatio); - - rcp->setLBMKernel(kernel); - rcp->setBCProcessor(bcProc); - ////////////////////////////////////////////////////////////////////////// - // BC Adapter - ////////////////////////////////////////////////////////////////////////////// - // bounding box - double g_minX1 = 0; - double g_minX2 = 0; - double g_minX3 = 0; - - double g_maxX1 = 8.0 * D;//8.0 * D; - double g_maxX2 = 5.0 * D; - double g_maxX3 = 5.0 * D; - - //double g_maxX1 = 1.0 * D; // 8.0 * D; - //double g_maxX2 = 2.0 * D; - //double g_maxX3 = 2.0 * D; - - - LBMReal x1c = 0; // (g_maxX1 - g_minX1-1)/2; // - LBMReal x2c = (g_maxX2 - g_minX2) / 2; - LBMReal x3c = (g_maxX3 - g_minX3) / 2; - - 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", 0.0); - fctF1.DefineConst("R", 8.0); - fctF1.DefineConst("x0", 0.0); - fctF1.DefineConst("z0", 0.0); - // SPtr<BCAdapter> velBCAdapterF1( - // new MultiphaseVelocityBCAdapter(false, true, false, fctF1, phiH, 0.0, BCFunction::INFCONST)); - - mu::Parser fctF2; - fctF2.SetExpr("vy1");//*(1-(sqrt((x2-x2c)*(x2-x2c)+(x3-x3c)*(x3-x3c))/R))"); - fctF2.DefineConst("vy1", U_LB); - fctF2.DefineConst("R", D*0.5); - fctF2.DefineConst("x1c", x1c); - fctF2.DefineConst("x2c", x2c); - fctF2.DefineConst("x3c", x3c); - - - double startTime = 1; - SPtr<BCAdapter> velBCAdapterF1( - new MultiphaseVelocityBCAdapter(true, false, false, fctF1, phiH, 0.0, startTime)); - SPtr<BCAdapter> velBCAdapterF2( - new MultiphaseVelocityBCAdapter(true, false, false, fctF2, phiH, startTime, endTime)); - - SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter()); - noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new MultiphaseNoSlipBCAlgorithm())); - - SPtr<BCAdapter> denBCAdapter(new DensityBCAdapter(rhoLB)); - denBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new MultiphaseNonReflectingOutflowBCAlgorithm())); - - 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); - - velBCAdapterF1->setBcAlgorithm(SPtr<BCAlgorithm>(new MultiphaseVelocityBCAlgorithm())); - ////////////////////////////////////////////////////////////////////////////////// - // BC visitor - MultiphaseBoundaryConditionsBlockVisitor bcVisitor; - bcVisitor.addBC(noSlipBCAdapter); - bcVisitor.addBC(denBCAdapter); // Ohne das BB? - bcVisitor.addBC(velBCAdapterF1); - - //SPtr<D3Q27Interactor> inflowF1Int; - //SPtr<D3Q27Interactor> cylInt; - - SPtr<D3Q27Interactor> inflowInt; - - if (newStart) { - - // if (newStart) { - - - - - - // geometry - 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->readMeshFromSTLFileBinary(pathGeo + "/" + geoFile, false); - //GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance()); - //if (myid == 0) - // UBLOG(logINFO, "Read geoFile:stop"); - // inflow - // GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1, g_minX2 - 0.5 * dx, g_minX3, g_maxX1, g_minX2 - 1.0 * - // dx, g_maxX3)); - //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1 * 0.5 - dx, g_minX2 - dx, g_minX3 * 0.5 - dx, - // g_maxX1 * 0.5 + dx, g_minX2, g_maxX3 * 0.5 + dx)); - //if (myid == 0) - // GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname + "/geo/geoInflowF1", - // WbWriterVtkXmlASCII::getInstance()); - - GbCylinder3DPtr geoInflow(new GbCylinder3D(g_minX1 - 2.0*dx, g_maxX2 / 2.0, g_maxX3 / 2.0, g_minX1, - g_maxX2 / 2.0, - g_maxX3 / 2.0, D / 2.0)); - if (myid == 0) - GbSystem3D::writeGeoObject(geoInflow.get(), pathname + "/geo/geoInflow", - WbWriterVtkXmlASCII::getInstance()); - - GbCylinder3DPtr geoSolid(new GbCylinder3D(g_minX1 - 2.0 * dx, g_maxX2 / 2.0, g_maxX3 / 2.0, g_minX1-dx, - g_maxX2 / 2.0, g_maxX3 / 2.0, 1.5*D / 2.0)); - if (myid == 0) - GbSystem3D::writeGeoObject(geoSolid.get(), pathname + "/geo/geoSolid", - WbWriterVtkXmlASCII::getInstance()); - - - // GbCylinder3DPtr cylinder2( - // new GbCylinder3D(0.0, g_minX2 - 2.0 * dx / 2.0, 0.0, 0.0, g_minX2 + 4.0 * dx, 0.0, 8.0+2.0*dx)); - // if (myid == 0) - // GbSystem3D::writeGeoObject(cylinder2.get(), pathname + "/geo/cylinder2", - // WbWriterVtkXmlASCII::getInstance()); - // outflow - // GbCuboid3DPtr geoOutflow(new GbCuboid3D(-1.0, -1, -1.0, 121.0, 1.0, 121.0)); // For JetBreakup (Original) - // GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1, g_maxX2 - 40 * dx, g_minX3, g_maxX1, g_maxX2, g_maxX3)); - GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2 - 2.0*dx, g_minX3 - 2.0*dx, g_maxX1 + 2.0*dx, g_maxX2 + 2.0*dx, g_maxX3)); - if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + "/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); - - // double blockLength = blocknx[0] * dx; - - if (myid == 0) { - 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); - - SPtr<WriteBlocksCoProcessor> ppblocks(new WriteBlocksCoProcessor( - grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - - //SPtr<Interactor3D> tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBCAdapter, - // Interactor3D::SOLID, Interactor3D::POINTS)); - - // inflowF1Int = - // SPtr<D3Q27Interactor>(new D3Q27Interactor(cylinder1, grid, noSlipBCAdapter, Interactor3D::SOLID)); - // inflowF1Int->addBCAdapter(velBCAdapterF2); - - SPtr<D3Q27Interactor> outflowInt(new D3Q27Interactor(geoOutflow, grid, denBCAdapter, Interactor3D::SOLID)); - - // Create boundary conditions geometry - GbCuboid3DPtr wallXmin( - new GbCuboid3D(g_minX1 - 2.0*dx, g_minX2 - 2.0*dx, g_minX3 - 2.0*dx, g_minX1, g_maxX2 + 2.0*dx, g_maxX3)); - GbSystem3D::writeGeoObject(wallXmin.get(), pathname + "/geo/wallXmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallXmax( - new GbCuboid3D(g_maxX1, g_minX2 - 2.0*dx, g_minX3 - 2.0*dx, g_maxX1 + 2.0*dx, g_maxX2 + 2.0*dx, g_maxX3)); - GbSystem3D::writeGeoObject(wallXmax.get(), pathname + "/geo/wallXmax", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallZmin( - new GbCuboid3D(g_minX1 - 2.0*dx, g_minX2 - 2.0*dx, g_minX3 - 2.0*dx, g_maxX1 + 2.0*dx, g_maxX2 + 2.0*dx, g_minX3)); - GbSystem3D::writeGeoObject(wallZmin.get(), pathname + "/geo/wallZmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallZmax( - new GbCuboid3D(g_minX1 - 2.0*dx, g_minX2 - 2.0*dx, g_maxX3, g_maxX1 + 2.0*dx, g_maxX2 + 2.0*dx, g_maxX3 + 2.0*dx)); - GbSystem3D::writeGeoObject(wallZmax.get(), pathname + "/geo/wallZmax", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallYmin( - new GbCuboid3D(g_minX1 - 2.0*dx, g_minX2 - 2.0*dx, g_minX3 - 2.0*dx, g_maxX1 + 2.0*dx, g_minX2, g_maxX3)); - GbSystem3D::writeGeoObject(wallYmin.get(), pathname + "/geo/wallYmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallYmax( - 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)); - GbSystem3D::writeGeoObject(wallYmax.get(), pathname + "/geo/wallYmax", WbWriterVtkXmlASCII::getInstance()); - - // Add boundary conditions to grid generator - SPtr<D3Q27Interactor> wallXminInt( - new D3Q27Interactor(wallXmin, grid, noSlipBCAdapter, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallXmaxInt( - new D3Q27Interactor(wallXmax, grid, noSlipBCAdapter, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallZminInt( - new D3Q27Interactor(wallZmin, grid, noSlipBCAdapter, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallZmaxInt( - new D3Q27Interactor(wallZmax, grid, noSlipBCAdapter, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallYminInt( - new D3Q27Interactor(wallYmin, grid, noSlipBCAdapter, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallYmaxInt( - new D3Q27Interactor(wallYmax, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - //cylInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(cylinder1, grid, velBCAdapterF1, Interactor3D::SOLID)); - //cylInt->addBCAdapter(velBCAdapterF2); - // SPtr<D3Q27Interactor> cyl2Int(new D3Q27Interactor(cylinder2, grid, noSlipBCAdapter, - // Interactor3D::SOLID)); - - inflowInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, velBCAdapterF1, Interactor3D::SOLID)); - inflowInt->addBCAdapter(velBCAdapterF2); - - SPtr<D3Q27Interactor> solidInt = - SPtr<D3Q27Interactor>(new D3Q27Interactor(geoSolid, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - InteractorsHelper intHelper(grid, metisVisitor, true); - //intHelper.addInteractor(cylInt); - //intHelper.addInteractor(tubes); - intHelper.addInteractor(outflowInt); - // intHelper.addInteractor(cyl2Int); - - intHelper.addInteractor(wallXminInt); - //intHelper.addInteractor(wallXmaxInt); - intHelper.addInteractor(wallZminInt); - intHelper.addInteractor(wallZmaxInt); - intHelper.addInteractor(wallYminInt); - intHelper.addInteractor(wallYmaxInt); - intHelper.addInteractor(inflowInt); - //intHelper.addInteractor(solidInt); - - 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"); - } - - MultiphaseSetKernelBlockVisitor kernelVisitor(kernel, nu_h, nu_l,0,0,0,0, availMem, needMem); - - grid->accept(kernelVisitor); - - //if (refineLevel > 0) { - // SetUndefinedNodesBlockVisitor undefNodesVisitor; - // grid->accept(undefNodesVisitor); - //} - - intHelper.setBC(); - - // initialization of distributions - //mu::Parser fct1; - //fct1.SetExpr("phiL"); - //fct1.DefineConst("phiL", phiL); - - 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", 0.5*D); - fct1.DefineConst("interfaceThickness", interfaceWidth*dx); - - MultiphaseVelocityFormInitDistributionsBlockVisitor initVisitor; - initVisitor.setPhi(fct1); - grid->accept(initVisitor); - /////////////////////////////////////////////////////////////////////////////////////////// - //{ - // std::vector<std::vector<SPtr<Block3D>>> blockVector; - // int gridRank = comm->getProcessID(); - // int minInitLevel = grid->getCoarsestInitializedLevel(); - // int maxInitLevel = grid->getFinestInitializedLevel(); - // blockVector.resize(maxInitLevel + 1); - // for (int level = minInitLevel; level <= maxInitLevel; level++) { - // grid->getBlocks(level, gridRank, true, blockVector[level]); - //} - // for (int level = minInitLevel; level <= maxInitLevel; level++) { - // for (SPtr<Block3D> block : blockVector[level]) { - // if (block) { - // int ix1 = block->getX1(); - // int ix2 = block->getX2(); - // int ix3 = block->getX3(); - // int level = block->getLevel(); - - // for (int dir = 0; dir < D3Q27System::ENDDIR; dir++) { - // SPtr<Block3D> neighBlock = grid->getNeighborBlock(dir, ix1, ix2, ix3, level); - - // if (!neighBlock) { - - // } - // } - // } - // } - //} - // SPtr<Block3D> block = grid->getBlock(0, 0, 0, 0); - // SPtr<LBMKernel> kernel = dynamicPointerCast<LBMKernel>(block->getKernel()); - // SPtr<BCArray3D> bcArray = kernel->getBCProcessor()->getBCArray(); - - // for (int ix3 = 0; ix3 <= 13; ix3++) { - // for (int ix2 = 0; ix2 <= 13; ix2++) { - // for (int ix1 = 0; ix1 <= 13; ix1++) { - // if (ix1 == 0 || ix2 == 0 || ix3 == 0 || ix1 == 13 || ix2 == 13 || ix3 == 13) - // bcArray->setUndefined(ix1, ix2, ix3); - // } - // } - // } - //} - //////////////////////////////////////////////////////////////////////////////////////////// - // 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 { - rcp->restart((int)restartStep); - grid->setTimeStep(restartStep); - - if (myid == 0) - UBLOG(logINFO, "Restart - end"); - } - - // TwoDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm); - // grid->accept(setConnsVisitor); - - // ThreeDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm); - - grid->accept(bcVisitor); - - ThreeDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm); - //TwoDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm); - grid->accept(setConnsVisitor); - - SPtr<UbScheduler> visSch(new UbScheduler(outTime)); - double t_ast, t; - t_ast = 7.19; - t = (int)(t_ast/(U_LB/(D_LB))); - visSch->addSchedule(t,t,t); //t=7.19 - SPtr<WriteMultiphaseQuantitiesCoProcessor> pp(new WriteMultiphaseQuantitiesCoProcessor( - grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - pp->process(0); - - SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100)); - SPtr<NUPSCounterCoProcessor> npr(new NUPSCounterCoProcessor(grid, nupsSch, numOfThreads, comm)); - - SPtr<UbScheduler> timeBCSch(new UbScheduler(1, startTime, startTime)); - auto timeDepBC = make_shared<TimeDependentBCCoProcessor>(TimeDependentBCCoProcessor(grid, timeBCSch)); - timeDepBC->addInteractor(inflowInt); - -#ifdef _OPENMP - omp_set_num_threads(numOfThreads); -#endif - - SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1)); - SPtr<Calculator> calculator(new BasicCalculator(grid, stepGhostLayer, endTime)); - calculator->addCoProcessor(npr); - calculator->addCoProcessor(pp); - calculator->addCoProcessor(timeDepBC); - calculator->addCoProcessor(rcp); - - 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/LiggghtsApp/CMakeLists.txt b/apps/cpu/LiggghtsApp/CMakeLists.txt deleted file mode 100644 index f7b099fc25f800781aff631d098d4dd4dfe48359..0000000000000000000000000000000000000000 --- a/apps/cpu/LiggghtsApp/CMakeLists.txt +++ /dev/null @@ -1,3 +0,0 @@ -PROJECT(LiggghtsApp) - -vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} LiggghtsCoupling FILES LiggghtsApp.cpp ) diff --git a/apps/cpu/LiggghtsApp/LiggghtsApp.cpp b/apps/cpu/LiggghtsApp/LiggghtsApp.cpp deleted file mode 100644 index 8b8a05f46baef7b22cf7e17cb86a0c797d776a45..0000000000000000000000000000000000000000 --- a/apps/cpu/LiggghtsApp/LiggghtsApp.cpp +++ /dev/null @@ -1,261 +0,0 @@ -#include <iostream> -#include <string> -#include <memory> - -#include "VirtualFluids.h" - -//#include "lammps.h" -//#include "input.h" -//#include "atom.h" -//#include "modify.h" -//#include "fix_lb_coupling_onetoone.h" - -#include "LiggghtsCoupling/LiggghtsCoupling.h" - -using namespace std; - - -int main(int argc, char *argv[]) -{ - //Sleep(30000); - - std::shared_ptr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - - // bounding box - double g_minX1 = 0; - double g_minX2 = 0; - double g_minX3 = 0; - - double g_maxX1 = 1; - double g_maxX2 = 1; - double g_maxX3 = 2; - - int blockNX[3] = { 16, 16, 16 }; - - double dx = 1./32.; - - - double d_part = 0.25; - double r_p = d_part / 2.0; - - // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, 1.480, 2060, r_p/dx); - // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, LBMUnitConverter::AIR_20C, r_p / dx); - // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, 0.1, 1000, r_p / dx, 0.01); - SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, 0.1, 1000, r_p / dx, 0.01); - //SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, LBMUnitConverter::OIL, r_p / dx); - std::cout << units->toString() << std::endl; - - //double Re = 300; - double nuLB = 1e-2; // 5e-5; - - SPtr<LBMKernel> kernel = make_shared<IBcumulantK17LBMKernel>(); - SPtr<BCSet> bcProc = make_shared<BCSet>(); - kernel->setBCSet(bcProc); - - SPtr<BC> noSlipBC(new NoSlipBC()); - noSlipBC->setBCStrategy(SPtr<BCStrategy>(new NoSlipInterpolated())); - ////////////////////////////////////////////////////////////////////////////////// - // BC visitor - BoundaryConditionsBlockVisitor bcVisitor; - - - - - SPtr<Grid3D> grid = make_shared<Grid3D>(comm); - grid->setPeriodicX1(true); - grid->setPeriodicX2(true); - grid->setPeriodicX3(false); - grid->setDeltaX(dx); - grid->setBlockNX(blockNX[0], blockNX[1], blockNX[2]); - - string outputPath = "d:/temp/LiggghtsCoupling"; - UbSystem::makeDirectory(outputPath); - UbSystem::makeDirectory(outputPath + "/liggghts"); - - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::dMMM, MetisPartitioner::RECURSIVE)); - - SPtr<GbObject3D> gridCube = make_shared <GbCuboid3D>(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3); - if (myid == 0) - GbSystem3D::writeGeoObject(gridCube.get(), outputPath + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - SPtr<SimulationObserver> ppblocks = - make_shared <WriteBlocksSimulationObserver>(grid, SPtr<UbScheduler>(new UbScheduler(1)), outputPath, - WbWriterVtkXmlBinary::getInstance(), comm); - ppblocks->update(0); - ppblocks.reset(); - - double dx2 = 2.0 * dx; - GbCuboid3DPtr wallZmin( - new GbCuboid3D(g_minX1 - dx2, g_minX2 - dx2, g_minX3 - dx2, g_maxX1 + dx2, g_maxX2 + dx2, g_minX3)); - GbSystem3D::writeGeoObject(wallZmin.get(), outputPath + "/geo/wallZmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallZmax( - new GbCuboid3D(g_minX1 - dx2, g_minX2 - dx2, g_maxX3, g_maxX1 + dx2, g_maxX2 + dx2, g_maxX3 + dx2)); - GbSystem3D::writeGeoObject(wallZmax.get(), outputPath + "/geo/wallZmax", WbWriterVtkXmlASCII::getInstance()); - - SPtr<D3Q27Interactor> wallZminInt(new D3Q27Interactor(wallZmin, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallZmaxInt(new D3Q27Interactor(wallZmax, grid, noSlipBC, Interactor3D::SOLID)); - - InteractorsHelper intHelper(grid, metisVisitor, true); - intHelper.addInteractor(wallZminInt); - intHelper.addInteractor(wallZmaxInt); - intHelper.selectBlocks(); - - SetKernelBlockVisitor kernelVisitor(kernel, nuLB, 1e9, 1e9); - grid->accept(kernelVisitor); - - intHelper.setBC(); - - InitDistributionsBlockVisitor initVisitor; - grid->accept(initVisitor); - - SPtr<UbScheduler> lScheduler = make_shared<UbScheduler>(1); - string inFile1 = "d:/Projects/VirtualFluids_Develop/apps/cpu/LiggghtsApp/in.lbdem"; - //string inFile1 = "d:/Tools/LIGGGHTS/examples/LIGGGHTS/Tutorials_public/chute_wear/in.chute_wear2"; - string inFile2 = "d:/Projects/VirtualFluids_Develop/apps/cpu/LiggghtsApp/in2.lbdem"; - MPI_Comm mpi_comm = *(MPI_Comm*)(comm->getNativeCommunicator()); - LiggghtsCouplingWrapper wrapper(argv, mpi_comm); - - - double v_frac = 0.1; - double dt_phys = units->getFactorTimeLbToW(); - int demSubsteps = 10; - double dt_dem = dt_phys / (double)demSubsteps; - int vtkSteps = 100; - string demOutDir = outputPath; // "d:/temp/lll2/"; - - //wrapper.execCommand("echo none"); - - wrapper.setVariable("r_part", d_part / 2); - wrapper.setVariable("v_frac", v_frac); - - wrapper.execFile((char*)inFile1.c_str()); - - - //// set timestep and output directory - wrapper.setVariable("t_step", dt_dem); - wrapper.setVariable("dmp_stp", vtkSteps * demSubsteps); - wrapper.setVariable("dmp_dir", demOutDir); - - wrapper.execFile((char *)inFile2.c_str()); - wrapper.runUpto(demSubsteps - 1); - - - SPtr<LiggghtsCouplingSimulationObserver> lcSimulationObserver = - make_shared<LiggghtsCouplingSimulationObserver>(grid, lScheduler, comm, wrapper, demSubsteps, units); - - // boundary conditions grid - { - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - SPtr<WriteBoundaryConditionsSimulationObserver> ppgeo(new WriteBoundaryConditionsSimulationObserver( - grid, geoSch, outputPath, WbWriterVtkXmlBinary::getInstance(), comm)); - ppgeo->update(0); - ppgeo.reset(); - } - - grid->accept(bcVisitor); - - OneDistributionSetConnectorsBlockVisitor setConnsVisitor(comm); - grid->accept(setConnsVisitor); - - - // write data for visualization of macroscopic quantities - SPtr<UbScheduler> visSch(new UbScheduler(vtkSteps)); - SPtr<WriteMacroscopicQuantitiesSimulationObserver> writeMQSimulationObserver( - new WriteMacroscopicQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), - SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm)); - - int endTime = 3000; //20; - SPtr<Simulation> simulation(new Simulation(grid, lScheduler, endTime)); - simulation->addSimulationObserver(lcSimulationObserver); - simulation->addSimulationObserver(writeMQSimulationObserver); - - if (myid == 0) UBLOG(logINFO, "Simulation-start"); - simulation->run(); - if (myid == 0) UBLOG(logINFO, "Simulation-end"); - - //MPI_Init(&argc, &argv); - //MPI_Comm mpi_comm = *(MPI_Comm*)(comm->getNativeCommunicator()); - //LiggghtsCouplingWrapper wrapper(argv, mpi_comm); - - //wrapper.execFile("in2.lbdem"); - //wrapper.runUpto(demSubsteps - 1); - - //LAMMPS_NS::LAMMPS *lmp; - // // custom argument vector for LAMMPS library - // const char *lmpargv[] {"liblammps", "-log", "none"}; - // int lmpargc = sizeof(lmpargv)/sizeof(const char *); - - // // explicitly initialize MPI - // MPI_Init(&argc, &argv); - - // // create LAMMPS instance - // lmp = new LAMMPS_NS::LAMMPS(lmpargc, (char **)lmpargv, MPI_COMM_WORLD); - // lmp->input->file("in.lbdem"); - // //lmp->input->one("run 1"); - // - // //# Try extracting a global value - // // print("") - // // print("Attempting to get the number of atoms in simulation") - // // numAtoms = lmp.extract_global("natoms", 0) - // // print("natoms =", numAtoms) - - // // # Try extracting atom's positions - // // print("") - // // print("Attempting to get the atom's positions") - // // pos = lmp.extract_atom("x",3) - // // for k in range(0,numAtoms): - // // print("Pos[%i] = [%f, %f, %f]" % (k, pos[k][0], pos[k][1], pos[k][2])) - - // LAMMPS_NS::FixLbCouplingOnetoone - // *couplingFix - // = dynamic_cast<LAMMPS_NS::FixLbCouplingOnetoone*> - // (lmp->modify->find_fix_style("couple/lb/onetoone",0)); - - // cout << "test1\n"; - // - // //double **t_liggghts = couplingFix->get_torque_ptr(); - // cout << "test2\n"; - - // lmp->input->one("run 9 upto"); - - // for (int step = 0; step < 10; step++) - // { - // - - // int numAtoms = lmp->atom->natoms; - - // //double** pos = (double**)lmp->atom->extract("x"); - // double** pos = lmp->atom->x; - // - // //double* forceX = lmp->atom->fx; - - // for (int i = 0; i < numAtoms; i++) - // { - // double **f_liggghts = couplingFix->get_force_ptr(); - // double** force = lmp->atom->f; - // cout << "Pos[" << i << "] = [" << pos[i][0] << ", " << pos[i][1] << ", " << pos[i][2] << "]\n"; - // cout << "Force1[" << i << "] = [" << f_liggghts[i][0] << ", " << f_liggghts[i][1] << ", " << f_liggghts[i][2] << "]\n"; - // f_liggghts[i][0] += 0; - // f_liggghts[i][1] += 0; - // f_liggghts[i][2] += 500; - // cout << "Force2[" << i << "] = [" << force[i][0] << ", " << force[i][1] << ", " << force[i][2] << "]\n"; - // } - - // couplingFix->comm_force_torque(); - - // lmp->input->one("run 10000"); - // - // } - - // // delete LAMMPS instance - // delete lmp; - - // // stop MPI environment - //MPI_Finalize(); - return 0; -} diff --git a/apps/cpu/LiggghtsApp/in.lbdem b/apps/cpu/LiggghtsApp/in.lbdem deleted file mode 100644 index 4c38d79268d38d284d536ea3d32b1038314e35ba..0000000000000000000000000000000000000000 --- a/apps/cpu/LiggghtsApp/in.lbdem +++ /dev/null @@ -1,76 +0,0 @@ -#verbose no - -units si -atom_style granular -atom_modify map array - - - -communicate single vel yes - -boundary f f f -newton off - -processors * * 1 -region box block 0. 1. 0. 1. 0. 2. units box -create_box 1 box - -variable skin equal 0.01 -neighbor ${skin} bin -neigh_modify delay 0 binsize 0.01 one 1000 - -fix grav all gravity 0.981 vector 0 0 -1 - - -fix m1 all property/global youngsModulus peratomtype 1e8 -fix m2 all property/global poissonsRatio peratomtype 0.4 -fix m3 all property/global coefficientRestitution peratomtypepair 1 0.95 -fix m4 all property/global coefficientFriction peratomtypepair 1 0.45 -fix m5 all property/global coefficientRollingFriction peratomtypepair 1 0.020 - -# lb coupling fix -fix lbcoupling all couple/lb/onetoone - - -pair_style gran model hertz tangential history rolling_friction cdt -pair_coeff * * - -fix 1 all nve/sphere - -fix xwalls1 all wall/gran model hertz tangential history primitive type 1 xplane 0. -fix xwalls2 all wall/gran model hertz tangential history primitive type 1 xplane 1. -fix ywalls1 all wall/gran model hertz tangential history primitive type 1 yplane 0. -fix ywalls2 all wall/gran model hertz tangential history primitive type 1 yplane 1. -fix zwalls1 all wall/gran model hertz tangential history primitive type 1 zplane 0. -fix zwalls2 all wall/gran model hertz tangential history primitive type 1 zplane 2. - -#create_atoms 1 single 0.5 0.5 9.75 -#create_atoms 1 single 0.38 0.05 0.05 - -#set group all diameter 0.25 density 2400 - -#atom_modify sort 0 0.0 - -#fix pts1 all particletemplate/sphere 1 atom_type 1 density constant 1000 radius constant 0.015 -#fix pts2 all particletemplate/sphere 1 atom_type 1 density constant 1000 radius constant 0.01 -#fix pts1 all particletemplate/sphere 1 atom_type 1 density constant 1100 radius constant ${r_part} -fix pts1 all particletemplate/sphere 15485863 atom_type 1 density constant 2500 radius constant 0.01 - -fix pdd1 all particledistribution/discrete 32452843 1 pts1 1.0 -#fix pdd2 all particledistribution/discrete 6778 2 pts2 0.2 pts3 0.8 - -region insreg block 0.1 0.9 0.1 0.9 1.3 1.9 units box - - -#fix ins all insert/pack seed 1001 distributiontemplate pdd1 insert_every once & -# overlapcheck yes particles_in_region 350 region insreg ntry_mc 10000 -#fix ins all insert/pack seed 1001 distributiontemplate pdd1 insert_every once & -# overlapcheck yes volumefraction_region ${v_frac} region insreg ntry_mc 10000 -fix ins all insert/pack seed 32452867 distributiontemplate pdd1 insert_every once & - overlapcheck yes volumefraction_region 0.1 region insreg ntry_mc 1001 -#fix ins all insert/pack seed 1001 distributiontemplate pdd1 insert_every once & -# overlapcheck yes particles_in_region 1 region insreg ntry_mc 10000 - -echo none - -run 1 diff --git a/apps/cpu/LiggghtsApp/in2.lbdem b/apps/cpu/LiggghtsApp/in2.lbdem deleted file mode 100644 index aee0cc8dbdb5cd6bd72969343300eff2c2802a3d..0000000000000000000000000000000000000000 --- a/apps/cpu/LiggghtsApp/in2.lbdem +++ /dev/null @@ -1,27 +0,0 @@ - -echo none - -timestep ${t_step} - -# thermo settings -fix ts all check/timestep/gran 10000 0.1 0.1 -compute 1 all erotate/sphere -thermo_style custom step atoms ke c_1 f_ts[1] f_ts[2] cpu -thermo 10000 -thermo_modify lost ignore norm no flush yes -compute_modify thermo_temp dynamic yes - -# particle dump -variable dmp_fname string ${dmp_dir}d_*.liggghts - -#dump dmp all custom ${dmp_stp} ${dmp_fname} & -# id type type x y z ix iy iz vx vy vz fx fy fz omegax omegay omegaz radius - -#dump dmp all custom ${dmp_stp} ${dmp_dir}d_*.liggghts & -# id type type x y z ix iy iz vx vy vz fx fy fz omegax omegay omegaz radius - - - -dump dmp all custom/vtk ${dmp_stp} ${dmp_dir}/liggghts/atom_*.vtk id type type x y z ix iy iz vx vy vz fx fy fz omegax omegay omegaz radius - -echo none \ No newline at end of file diff --git a/apps/cpu/Multiphase/CMakeLists.txt b/apps/cpu/Multiphase/CMakeLists.txt deleted file mode 100644 index 2ce781c801fd0cac3770783919682b85ec511ad5..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/CMakeLists.txt +++ /dev/null @@ -1,3 +0,0 @@ -PROJECT(Multiphase) - -vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} MultiphaseFlow FILES Multiphase.cpp ) diff --git a/apps/cpu/Multiphase/Multiphase (Droplet Test).cpp.backup b/apps/cpu/Multiphase/Multiphase (Droplet Test).cpp.backup deleted file mode 100644 index c0ca32e5ce1980af048c769e01aca95c1df9f0dd..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/Multiphase (Droplet Test).cpp.backup +++ /dev/null @@ -1,482 +0,0 @@ -#include <iostream> -#include <string> - -#include "VirtualFluids.h" - -using namespace std; - - -void run(string configname) -{ - try - { - vf::basics::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 = vf::parallel::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 IncompressibleOffsetInterpolator()); - //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - 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 IncompressibleOffsetInterpolator()); - InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - 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 deleted file mode 100644 index d43a61d6767b4193f443bcb1fede89cf3f37bc5f..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/Multiphase (Jet breakup on Phoenix).cpp.backup +++ /dev/null @@ -1,508 +0,0 @@ -#include <iostream> -#include <string> - -#include "VirtualFluids.h" - -using namespace std; - - -void run(string configname) -{ - try - { - vf::basics::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 = vf::parallel::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 IncompressibleOffsetInterpolator()); - //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - 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 IncompressibleOffsetInterpolator()); - InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - 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 deleted file mode 100644 index b2f435db04ce51f915c3994b8418ba97b49c4843..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/Multiphase.cfg +++ /dev/null @@ -1,61 +0,0 @@ -pathname = d:/temp/JetBreakup -#pathGeo = d:/Projects/VirtualFluids-Multiphase/source/Applications/Multiphase/backup -pathGeo = d:/Projects/VirtualFluidsCombined/apps/cpu/Multiphase/backup -#geoFile = JetBreakupR.ASCII.stl -#geoFile = inlet1.stl -geoFile = tubeTransformed.stl - -numOfThreads = 1 -availMem = 10e9 - -#Grid - -#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 -101.0 -60.5 60.5 #(Jet Breakup2) (Original without inlet length) -#blocknx = 22 20 22 - -#boundingBox = -40 40 -1.0 -21.0 -40 40 #(Jet Breakup2) (Original without inlet length) -#boundingBox = -40 40 1.0 11.0 -40 40 #(Jet Breakup2) (Original without inlet length) -#boundingBox = -40e-3 40e-3 1.0e-3 11.0e-3 -403-3 40e-3 #(Jet Breakup2) (Original without inlet length) -#blocknx = 20 20 20 - -#boundingBox = 6.0e-3 46.0e-3 -5e-3 5e-3 -5e-3 5e-3 -#blocknx = 20 20 20 -boundingBox = 0 9 0 9 0 9 -blocknx = 10 10 10 - -dx = 1 #1.66666666667e-4 -refineLevel = 0 - -#Simulation -uLB = 0.005 #inlet velocity -#uF2 = 0.0001 -Re = 10 -nuL =1e-3# 1.0e-5 #!1e-2 -nuG =1e-6# 1.16e-4 #!1e-2 -densityRatio = 1000 -sigma = 0 #1e-5 #4.66e-3 #surface tension 1e-4 ./. 1e-5 -interfaceWidth = 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 = 10000 \ No newline at end of file diff --git a/apps/cpu/Multiphase/Multiphase.cpp b/apps/cpu/Multiphase/Multiphase.cpp deleted file mode 100644 index 8b7d766f6954f1f3c3d010a52891dc7cb14ad16a..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/Multiphase.cpp +++ /dev/null @@ -1,506 +0,0 @@ -#include <iostream> -#include <string> -#include <memory> - -#include "VirtualFluids.h" -#include "MultiphaseFlow/MultiphaseFlow.h" - -using namespace std; - -void run(string configname) -{ - using namespace vf::lbm::dir; - - try { - - //Sleep(30000); - - vf::basics::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<real> boundingBox = config.getVector<real>("boundingBox"); - // vector<double> length = config.getVector<double>("length"); - real uLB = config.getValue<real>("uLB"); - // double uF2 = config.getValue<double>("uF2"); - real nuL = config.getValue<real>("nuL"); - real nuG = config.getValue<real>("nuG"); - real densityRatio = config.getValue<real>("densityRatio"); - real sigma = config.getValue<real>("sigma"); - int interfaceWidth = config.getValue<int>("interfaceWidth"); - //double radius = config.getValue<double>("radius"); - real theta = config.getValue<real>("contactAngle"); - real gr = config.getValue<real>("gravity"); - real phiL = config.getValue<real>("phi_L"); - real phiH = config.getValue<real>("phi_H"); - real tauH = config.getValue<real>("Phase-field Relaxation"); - real mob = config.getValue<real>("Mobility"); - - real endTime = config.getValue<real>("endTime"); - real outTime = config.getValue<real>("outTime"); - real availMem = config.getValue<real>("availMem"); - int refineLevel = config.getValue<int>("refineLevel"); - real Re = config.getValue<real>("Re"); - real dx = config.getValue<real>("dx"); - bool logToFile = config.getValue<bool>("logToFile"); - real restartStep = config.getValue<real>("restartStep"); - real cpStart = config.getValue<real>("cpStart"); - real cpStep = config.getValue<real>("cpStep"); - bool newStart = config.getValue<bool>("newStart"); - - real beta = 12 * sigma / interfaceWidth; - real kappa = 1.5 * interfaceWidth * sigma; - - SPtr<vf::parallel::Communicator> comm = vf::parallel::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; - real rhoLB = 0.0; - real nuLB = nuL; //(uLB*dLB) / Re; - - SPtr<LBMUnitConverter> conv(new LBMUnitConverter()); - - //const int baseLevel = 0; - - SPtr<LBMKernel> kernel; - - //kernel = SPtr<LBMKernel>(new MultiphaseScratchCumulantLBMKernel()); - //kernel = SPtr<LBMKernel>(new MultiphaseCumulantLBMKernel()); - //kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsCumulantLBMKernel()); - //kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel()); - // kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsPressureFilterLBMKernel()); - kernel = SPtr<LBMKernel>(new MultiphasePressureFilterLBMKernel()); - - 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); - - //nuL, nuG, densityRatio, beta, kappa, theta, - - kernel->setCollisionFactorMultiphase(nuL, nuG); - kernel->setDensityRatio(densityRatio); - kernel->setMultiphaseModelParameters(beta, kappa); - kernel->setContactAngle(theta); - kernel->setInterfaceWidth(interfaceWidth); - - SPtr<BCSet> bcProc(new BCSet()); - // BCSetPtr bcProc(new ThinWallBCSet()); - - kernel->setBCSet(bcProc); - - SPtr<Grid3D> grid(new Grid3D(comm)); - //grid->setPeriodicX1(true); - //grid->setPeriodicX2(true); - //grid->setPeriodicX3(true); - grid->setGhostLayerWidth(2); - - - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE)); - - ////////////////////////////////////////////////////////////////////////// - // restart - SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart)); - //SPtr<MPIIORestartSimulationObserver> rcp(new MPIIORestartSimulationObserver(grid, rSch, pathname, comm)); - SPtr<MPIIOMigrationSimulationObserver> rcp(new MPIIOMigrationSimulationObserver(grid, rSch, metisVisitor, pathname, comm)); - //SPtr<MPIIOMigrationBESimulationObserver> rcp(new MPIIOMigrationBESimulationObserver(grid, rSch, pathname, comm)); - //rcp->setNu(nuLB); - //rcp->setNuLG(nuL, nuG); - //rcp->setDensityRatio(densityRatio); - - rcp->setLBMKernel(kernel); - rcp->setBCSet(bcProc); - ////////////////////////////////////////////////////////////////////////// - // BC Adapter - ////////////////////////////////////////////////////////////////////////////// - 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", 0.0); - fctF1.DefineConst("R", 8.0); - fctF1.DefineConst("x0", 0.0); - fctF1.DefineConst("z0", 0.0); - //SPtr<BC> velBCF1( - // new MultiphaseVelocityBC(false, true, false, fctF1, phiH, 0.0, BCFunction::INFCONST)); - - mu::Parser fctF2; - fctF2.SetExpr("vy1"); - fctF2.DefineConst("vy1", uLB); - - real startTime = 30; - SPtr<BC> velBCF1(new MultiphaseVelocityBC(true, false, false, fctF1, phiH, 0.0, startTime)); - SPtr<BC> velBCF2(new MultiphaseVelocityBC(true, false, false, fctF2, phiH, startTime, endTime)); - - SPtr<BC> noSlipBC(new NoSlipBC()); - noSlipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNoSlipBCStrategy())); - - SPtr<BC> denBC(new PressureBC(rhoLB)); - denBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNonReflectingOutflowBCStrategy())); - - 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); - - velBCF1->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - ////////////////////////////////////////////////////////////////////////////////// - // BC visitor - MultiphaseBoundaryConditionsBlockVisitor bcVisitor; - - - SPtr<D3Q27Interactor> inflowF1Int; - SPtr<D3Q27Interactor> cylInt; - if (newStart) { - - // 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;*/ - - real g_minX1 = boundingBox[0]; - real g_minX2 = boundingBox[2]; - real g_minX3 = boundingBox[4]; - - real g_maxX1 = boundingBox[1]; - real g_maxX2 = boundingBox[3]; - real g_maxX3 = boundingBox[5]; - - // geometry - 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->readMeshFromSTLFileBinary(pathGeo + "/" + geoFile, false); - GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/Stlgeo", WbWriterVtkXmlBinary::getInstance()); - if (myid == 0) UBLOG(logINFO, "Read geoFile:stop"); - // inflow - //GbCuboid3DPtr geoInflowF1(new GbCuboid3D(g_minX1, g_minX2 - 0.5 * dx, g_minX3, g_maxX1, g_minX2 - 1.0 * dx, g_maxX3)); - GbCuboid3DPtr geoInflowF1( - new GbCuboid3D(g_minX1*0.5 - dx, g_minX2 - dx, g_minX3*0.5 - dx, g_maxX1*0.5 + dx, g_minX2, g_maxX3*0.5 + dx)); - if (myid == 0) GbSystem3D::writeGeoObject(geoInflowF1.get(), pathname + "/geo/geoInflowF1", WbWriterVtkXmlASCII::getInstance()); - - GbCylinder3DPtr cylinder1(new GbCylinder3D(g_minX1-dx, 0.0, 0.0, g_minX1+dx, 0.0, 0.0, 3e-3)); - if (myid == 0) - GbSystem3D::writeGeoObject(cylinder1.get(), pathname + "/geo/cylinder1", - WbWriterVtkXmlASCII::getInstance()); - - //GbCylinder3DPtr cylinder2( - // new GbCylinder3D(0.0, g_minX2 - 2.0 * dx / 2.0, 0.0, 0.0, g_minX2 + 4.0 * dx, 0.0, 8.0+2.0*dx)); - //if (myid == 0) - // GbSystem3D::writeGeoObject(cylinder2.get(), pathname + "/geo/cylinder2", - // WbWriterVtkXmlASCII::getInstance()); - // outflow - // GbCuboid3DPtr geoOutflow(new GbCuboid3D(-1.0, -1, -1.0, 121.0, 1.0, 121.0)); // For JetBreakup (Original) - //GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1, g_maxX2 - 40 * dx, g_minX3, g_maxX1, g_maxX2, g_maxX3)); - GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1, g_maxX2, g_minX3, g_maxX1, g_maxX2 + dx, g_maxX3)); - if (myid == 0) - GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + "/geo/geoOutflow", - WbWriterVtkXmlASCII::getInstance()); - - // 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); - - SPtr<WriteBlocksSimulationObserver> ppblocks(new WriteBlocksSimulationObserver( - grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - - SPtr<Interactor3D> tubes(new D3Q27TriFaceMeshInteractor(cylinder, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::POINTS)); - - //inflowF1Int = - // SPtr<D3Q27Interactor>(new D3Q27Interactor(cylinder1, grid, noSlipBC, Interactor3D::SOLID)); - //inflowF1Int->addBC(velBCF2); - - SPtr<D3Q27Interactor> outflowInt(new D3Q27Interactor(geoOutflow, grid, denBC, Interactor3D::SOLID)); - - // Create boundary conditions geometry - GbCuboid3DPtr wallXmin(new GbCuboid3D(g_minX1 - dx, g_minX2 - dx, g_minX3 - dx, g_minX1, g_maxX2 + dx, g_maxX3)); - GbSystem3D::writeGeoObject(wallXmin.get(), pathname + "/geo/wallXmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallXmax(new GbCuboid3D(g_maxX1, g_minX2 - dx, g_minX3 - dx, g_maxX1 + dx, g_maxX2 + dx, g_maxX3)); - GbSystem3D::writeGeoObject(wallXmax.get(), pathname + "/geo/wallXmax", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallZmin(new GbCuboid3D(g_minX1 - dx, g_minX2 - dx, g_minX3 - dx, g_maxX1 + dx, g_maxX2 + dx, g_minX3)); - GbSystem3D::writeGeoObject(wallZmin.get(), pathname + "/geo/wallZmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallZmax(new GbCuboid3D(g_minX1 - dx, g_minX2 - dx, g_maxX3, g_maxX1 + dx, g_maxX2 + dx, g_maxX3 + dx)); - GbSystem3D::writeGeoObject(wallZmax.get(), pathname + "/geo/wallZmax", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallYmin(new GbCuboid3D(g_minX1 - dx, g_minX2 - dx, g_minX3 - dx, g_maxX1 + dx, g_minX2, g_maxX3)); - GbSystem3D::writeGeoObject(wallYmin.get(), pathname + "/geo/wallYmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallYmax(new GbCuboid3D(g_minX1 - dx, g_maxX2, g_minX3 - dx, g_maxX1 + dx, g_maxX2 + dx, g_maxX3)); - GbSystem3D::writeGeoObject(wallYmax.get(), pathname + "/geo/wallYmax", WbWriterVtkXmlASCII::getInstance()); - - // Add boundary conditions to grid generator - SPtr<D3Q27Interactor> wallXminInt(new D3Q27Interactor(wallXmin, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallXmaxInt(new D3Q27Interactor(wallXmax, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallZminInt(new D3Q27Interactor(wallZmin, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallZmaxInt(new D3Q27Interactor(wallZmax, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallYminInt(new D3Q27Interactor(wallYmin, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallYmaxInt(new D3Q27Interactor(wallYmax, grid, noSlipBC, Interactor3D::SOLID)); - - - cylInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(cylinder1, grid, velBCF1, Interactor3D::SOLID)); - cylInt->addBC(velBCF2); - //SPtr<D3Q27Interactor> cyl2Int(new D3Q27Interactor(cylinder2, grid, noSlipBC, Interactor3D::SOLID)); - - - InteractorsHelper intHelper(grid, metisVisitor, true); - intHelper.addInteractor(cylInt); - intHelper.addInteractor(tubes); - //intHelper.addInteractor(outflowInt); - //intHelper.addInteractor(cyl2Int); - - - intHelper.addInteractor(wallXminInt); - intHelper.addInteractor(wallXmaxInt); - intHelper.addInteractor(wallZminInt); - intHelper.addInteractor(wallZmaxInt); - intHelper.addInteractor(wallYminInt); - intHelper.addInteractor(wallYmaxInt); - //intHelper.addInteractor(inflowF1Int); - - - intHelper.selectBlocks(); - - ppblocks->update(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); - real needMemAll = - real(numberOfNodesPerBlockWithGhostLayer * (27 * sizeof(real) + sizeof(int) + sizeof(float) * 4)); - real needMem = needMemAll / real(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"); - } - - MultiphaseSetKernelBlockVisitor kernelVisitor(kernel, nuL, nuG, availMem, needMem); - - grid->accept(kernelVisitor); - - if (refineLevel > 0) { - SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - intHelper.setBC(); - - // initialization of distributions - mu::Parser fct1; - fct1.SetExpr("phiL"); - fct1.DefineConst("phiL", phiL); - //MultiphaseInitDistributionsBlockVisitor initVisitor(interfaceThickness); - MultiphaseVelocityFormInitDistributionsBlockVisitor initVisitor; - initVisitor.setPhi(fct1); - grid->accept(initVisitor); -/////////////////////////////////////////////////////////////////////////////////////////// - //{ - // std::vector<std::vector<SPtr<Block3D>>> blockVector; - // int gridRank = comm->getProcessID(); - // int minInitLevel = grid->getCoarsestInitializedLevel(); - // int maxInitLevel = grid->getFinestInitializedLevel(); - // blockVector.resize(maxInitLevel + 1); - // for (int level = minInitLevel; level <= maxInitLevel; level++) { - // grid->getBlocks(level, gridRank, true, blockVector[level]); - //} - // for (int level = minInitLevel; level <= maxInitLevel; level++) { - // for (SPtr<Block3D> block : blockVector[level]) { - // if (block) { - // int ix1 = block->getX1(); - // int ix2 = block->getX2(); - // int ix3 = block->getX3(); - // int level = block->getLevel(); - - // for (int dir = 0; dir < D3Q27System::ENDDIR; dir++) { - // SPtr<Block3D> neighBlock = grid->getNeighborBlock(dir, ix1, ix2, ix3, level); - - // if (!neighBlock) { - - // } - // } - // } - // } - //} - // SPtr<Block3D> block = grid->getBlock(0, 0, 0, 0); - // SPtr<LBMKernel> kernel = dynamicPointerCast<LBMKernel>(block->getKernel()); - // SPtr<BCArray3D> bcArray = kernel->getBCSet()->getBCArray(); - - // for (int ix3 = 0; ix3 <= 13; ix3++) { - // for (int ix2 = 0; ix2 <= 13; ix2++) { - // for (int ix1 = 0; ix1 <= 13; ix1++) { - // if (ix1 == 0 || ix2 == 0 || ix3 == 0 || ix1 == 13 || ix2 == 13 || ix3 == 13) - // bcArray->setUndefined(ix1, ix2, ix3); - // } - // } - // } - //} - //////////////////////////////////////////////////////////////////////////////////////////// - // boundary conditions grid - { - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - SPtr<WriteBoundaryConditionsSimulationObserver> ppgeo(new WriteBoundaryConditionsSimulationObserver( - grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - ppgeo->update(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); - - if (myid == 0) - UBLOG(logINFO, "Restart - end"); - } - - // TwoDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm); - // grid->accept(setConnsVisitor); - - //ThreeDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm); - - grid->accept(bcVisitor); - - //ThreeDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm); - TwoDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm); - grid->accept(setConnsVisitor); - - SPtr<UbScheduler> visSch(new UbScheduler(outTime)); - SPtr<WriteMultiphaseQuantitiesSimulationObserver> pp(new WriteMultiphaseQuantitiesSimulationObserver( - //SPtr<WriteMacroscopicQuantitiesSimulationObserver> pp(new WriteMacroscopicQuantitiesSimulationObserver( - grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - pp->update(0); - - SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100)); - SPtr<NUPSCounterSimulationObserver> npr(new NUPSCounterSimulationObserver(grid, nupsSch, numOfThreads, comm)); - - SPtr<UbScheduler> timeBCSch(new UbScheduler(1, startTime, startTime)); - auto timeDepBC = make_shared<TimeDependentBCSimulationObserver>(TimeDependentBCSimulationObserver(grid, timeBCSch)); - timeDepBC->addInteractor(cylInt); - -#ifdef _OPENMP - omp_set_num_threads(numOfThreads); -#endif - - SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1)); - SPtr<Simulation> simulation(new Simulation(grid, stepGhostLayer, endTime)); - simulation->addSimulationObserver(npr); - simulation->addSimulationObserver(pp); - simulation->addSimulationObserver(timeDepBC); - simulation->addSimulationObserver(rcp); - - - - - if (myid == 0) - UBLOG(logINFO, "Simulation-start"); - simulation->run(); - 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/MultiphaseGeier.cfg b/apps/cpu/Multiphase/MultiphaseGeier.cfg deleted file mode 100644 index d701725832cfd7337d383e9c98a60243c0c9b54e..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/MultiphaseGeier.cfg +++ /dev/null @@ -1,68 +0,0 @@ -#pathname = E:/Multiphase/HesamCodeWithCumulantsDensRatio -#pathname = E:/Multiphase/HesamCodeWithCumulantsQuartic -#pathname = E:/Multiphase/HesamCode -pathname = E:/Multiphase/VelocityFormSig1e-3SVarDens -pathGeo = C:/Users/geier/Documents/VirtualFluids_dev_Kostya/apps/cpu/Multiphase/backup -geoFile=tubeTransformed.stl -#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) -#boundingBox = -60.5 60.5 -21.0 -1.0 -60.5 60.5 #(Jet Breakup2) (Original without inlet length) -#blocknx = 22 20 22 - - -#dx = 0.5 - -#boundingBox = 6.0e-3 46.0e-3 -5e-3 5e-3 -5e-3 5e-3 -#boundingBox = 6.0e-3 86.0e-3 -5e-3 5e-3 -5e-3 5e-3 -#blocknx = 480 60 60 #20 20 20 - -boundingBox = 6.0e-3 16.0e-3 -5e-3 5e-3 -5e-3 5e-3 -blocknx = 20 20 20 - -#boundingBox = 6.0e-3 16.0e-3 -5e-3 5e-3 -5e-3 5e-3 -#blocknx = 60 60 60 #20 20 20 - - -dx = 1.66666666667e-4 - -refineLevel = 0 - -#Simulation -uLB =0.005# 0.0000005 #inlet velocity -#uLB=0.001 -uF2 = 0.0001 -Re = 10 -nuL =1e-3#1e-2# 1.0e-5 #!1e-2 -nuG =1e-6#1e-2# 1.16e-4 #!1e-2 -densityRatio = 1000#1000#1000 #30 -sigma =1e-3# 1e-4 #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.1 #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 = 100 -endTime = 200000000 \ No newline at end of file diff --git a/apps/cpu/Multiphase/backup/3D flow-focusing.STL b/apps/cpu/Multiphase/backup/3D flow-focusing.STL deleted file mode 100644 index 88aa3e365ce64c70526dc909d3578ac35a72f815..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/3D flow-focusing.STL and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/Cubic_jet.stl b/apps/cpu/Multiphase/backup/Cubic_jet.stl deleted file mode 100644 index c72bd5e4cc997a156f43cc526b38d7fb49077aa1..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/Cubic_jet.stl and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/CumulantKernel-Before Cumulant modifications.cpp b/apps/cpu/Multiphase/backup/CumulantKernel-Before Cumulant modifications.cpp deleted file mode 100644 index a667643c51186f3494d4e80018c482494ed8af30..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/CumulantKernel-Before Cumulant modifications.cpp +++ /dev/null @@ -1,2006 +0,0 @@ -#include "MultiphaseCumulantLBMKernel.h" -#include "D3Q27System.h" -#include "Interpolator.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 deleted file mode 100644 index d1909c7ae985f4014060a4e9b19e1f0bc093fe92..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/Final.ast +++ /dev/null @@ -1,5042 +0,0 @@ -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 deleted file mode 100644 index a164dcafa1f68e70277d5d2c41d853c7416e4cff..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/Final.stl and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusing.FCStd b/apps/cpu/Multiphase/backup/FlowFocusing.FCStd deleted file mode 100644 index 80e088eaddb292386f6349b11f0cbefa75824501..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/FlowFocusing.FCStd and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusing.FCStd1 b/apps/cpu/Multiphase/backup/FlowFocusing.FCStd1 deleted file mode 100644 index 9d5186df8e258a78afc0f27af756cf28d259af14..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/FlowFocusing.FCStd1 and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusing.ast b/apps/cpu/Multiphase/backup/FlowFocusing.ast deleted file mode 100644 index 062fb6d037177063808c135f8bb8a3ef48f430db..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/FlowFocusing.ast +++ /dev/null @@ -1,3194 +0,0 @@ -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 deleted file mode 100644 index da02cc8b14f6358e7878ab6d19bd66f9fdf408ef..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/FlowFocusing.stl and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusingS.ast b/apps/cpu/Multiphase/backup/FlowFocusingS.ast deleted file mode 100644 index 147c1ff7a665b9bf91d4257b93c1af7c9bad65a2..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/FlowFocusingS.ast +++ /dev/null @@ -1,3082 +0,0 @@ -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 deleted file mode 100644 index b84a5e8ff64c351fb616a33ae55c5f4477705f4a..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/FlowFocusingS.stl and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusingS2.ast b/apps/cpu/Multiphase/backup/FlowFocusingS2.ast deleted file mode 100644 index 1b356112100b7d690d87a99b62b13c8dc58cc6be..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/FlowFocusingS2.ast +++ /dev/null @@ -1,422 +0,0 @@ -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 deleted file mode 100644 index f44acdfeb1595248f244f916f71c95cc1290a5b2..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/FlowFocusingS2.stl and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusingS2_Small.ast b/apps/cpu/Multiphase/backup/FlowFocusingS2_Small.ast deleted file mode 100644 index 0bbb5c2eae41623c5564009a4d59e434c3ff08d9..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/FlowFocusingS2_Small.ast +++ /dev/null @@ -1,366 +0,0 @@ -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 deleted file mode 100644 index 012423f0625912bb76dcae9c5040a1dcad1d2bda..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/FlowFocusingS2_Small.stl and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSL.ast b/apps/cpu/Multiphase/backup/FlowFocusingSL.ast deleted file mode 100644 index 0ee1706e4e8935e56b2b2e07f82cd308448016f8..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/FlowFocusingSL.ast +++ /dev/null @@ -1,3082 +0,0 @@ -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 deleted file mode 100644 index c7285063b119d316bc79153c093d3564d1245d41..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/FlowFocusingSL.stl and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSS.ast b/apps/cpu/Multiphase/backup/FlowFocusingSS.ast deleted file mode 100644 index 83ef2d561accb5a3f994547945604c3674df82dd..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/FlowFocusingSS.ast +++ /dev/null @@ -1,3096 +0,0 @@ -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 deleted file mode 100644 index fcf2ac4f64f6ac56f8aba0db2a8718f99f5958c2..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/FlowFocusingSS.stl and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq.FCStd b/apps/cpu/Multiphase/backup/FlowFocusingSq.FCStd deleted file mode 100644 index dbd1808d2a5dac239a7f1b2f22e3621b3059bd79..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/FlowFocusingSq.FCStd and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq.FCStd1 b/apps/cpu/Multiphase/backup/FlowFocusingSq.FCStd1 deleted file mode 100644 index 55f6c7b1690b72985f26a13836e7518c2704c71c..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/FlowFocusingSq.FCStd1 and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq.ast b/apps/cpu/Multiphase/backup/FlowFocusingSq.ast deleted file mode 100644 index 97ed8f7759e6b733e0ddb09c136075c9920c1e9e..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/FlowFocusingSq.ast +++ /dev/null @@ -1,310 +0,0 @@ -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 deleted file mode 100644 index b91794e7e1cd1f01ff3fa373910b5a31e3381a70..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/FlowFocusingSq.stl and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq1.FCStd b/apps/cpu/Multiphase/backup/FlowFocusingSq1.FCStd deleted file mode 100644 index 57b06dc9f17ca420e2bfdda80b16ee9ad21056e3..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/FlowFocusingSq1.FCStd and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq1.FCStd1 b/apps/cpu/Multiphase/backup/FlowFocusingSq1.FCStd1 deleted file mode 100644 index fa315bacf26389f34692d3eb1c2947d3cb8d06ba..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/FlowFocusingSq1.FCStd1 and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq1.ast b/apps/cpu/Multiphase/backup/FlowFocusingSq1.ast deleted file mode 100644 index 7acee410835ddb702a2ed2ca798e663db3812f8f..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/FlowFocusingSq1.ast +++ /dev/null @@ -1,310 +0,0 @@ -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 deleted file mode 100644 index 9f6355c80a4d30dbdcadba4615fa89895a660360..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/FlowFocusingSq1.stl and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq2.FCStd b/apps/cpu/Multiphase/backup/FlowFocusingSq2.FCStd deleted file mode 100644 index 64b20eb26d1d8445571b632f562e563b44467582..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/FlowFocusingSq2.FCStd and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq2.FCStd1 b/apps/cpu/Multiphase/backup/FlowFocusingSq2.FCStd1 deleted file mode 100644 index c64353de25ddbfcff53ad1ea2865621ef459f537..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/FlowFocusingSq2.FCStd1 and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/FlowFocusingSq2.ast b/apps/cpu/Multiphase/backup/FlowFocusingSq2.ast deleted file mode 100644 index 1aa258836f82ff338e79aebc4d275a6a134f6eb9..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/FlowFocusingSq2.ast +++ /dev/null @@ -1,310 +0,0 @@ -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 deleted file mode 100644 index 2c31bb9bd4cf4af9246fc008ba606a3a9a0ba223..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/FlowFocusingSq2.stl and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/JetBreakup.ASCII.stl b/apps/cpu/Multiphase/backup/JetBreakup.ASCII.stl deleted file mode 100644 index eff2679cd636ddd653825627f56256c425c5629d..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/JetBreakup.ASCII.stl +++ /dev/null @@ -1,1318 +0,0 @@ -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 deleted file mode 100644 index 00f4eb43bb96542b5dc11c9ec84bd8b5a348a6fc..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/JetBreakup.FCStd and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/JetBreakup.stl b/apps/cpu/Multiphase/backup/JetBreakup.stl deleted file mode 100644 index a82398ec6fc375e407ebe8ac42b811318e2fa788..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/JetBreakup.stl and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/JetBreakup2.ASCII.stl b/apps/cpu/Multiphase/backup/JetBreakup2.ASCII.stl deleted file mode 100644 index d42dbd278b8e81c2c30a813f685d394ad351423a..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/JetBreakup2.ASCII.stl +++ /dev/null @@ -1,1584 +0,0 @@ -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 deleted file mode 100644 index 8e6ed64fa6eeb4fb3c310c7513463635b0f6ee19..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/JetBreakup2.FCStd and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/JetBreakup2.FCStd1 b/apps/cpu/Multiphase/backup/JetBreakup2.FCStd1 deleted file mode 100644 index 6d0a48be9fed1a6a9398d9e8a620f5480d5fcd8d..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/JetBreakup2.FCStd1 and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/JetBreakup2.stl b/apps/cpu/Multiphase/backup/JetBreakup2.stl deleted file mode 100644 index 3c36f67113ef3741bbe0f8526dfe5efaf635f1ec..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/JetBreakup2.stl and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/JetBreakup3.FCStd b/apps/cpu/Multiphase/backup/JetBreakup3.FCStd deleted file mode 100644 index beaf8c0e46fe33f5d006d98e3a96214ba09f2bbb..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/JetBreakup3.FCStd and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/JetBreakup3.stl b/apps/cpu/Multiphase/backup/JetBreakup3.stl deleted file mode 100644 index a7f77cbf00ea06646ff3b8e6cfddec6be7eea3b4..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/JetBreakup3.stl and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/JetBreakupR.ASCII.stl b/apps/cpu/Multiphase/backup/JetBreakupR.ASCII.stl deleted file mode 100644 index b54ebccc96d8e38114cb34ce13a2d3daccd8cb45..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/JetBreakupR.ASCII.stl +++ /dev/null @@ -1,1584 +0,0 @@ -solid Visualization Toolkit generated SLA File - facet normal 0 1 0 - outer loop - vertex -61 610 61 - vertex -60 610 -60 - vertex -61 610 -61 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex -60 610 60 - vertex -60 610 -60 - vertex -61 610 61 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -61 610 61 - vertex 61 610 61 - vertex -60 610 60 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex 61 610 61 - vertex 60 610 60 - vertex -60 610 60 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 60 610 -60 - vertex 61 610 -61 - vertex -60 610 -60 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -60 610 -60 - vertex 61 610 -61 - vertex -61 610 -61 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex 61 610 61 - vertex 61 610 -61 - vertex 60 610 60 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 60 610 60 - vertex 61 610 -61 - vertex 60 610 -60 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 61 3 -61 - vertex -61 610 -61 - vertex 61 610 -61 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 61 3 -61 - vertex -61 3 -61 - vertex -61 610 -61 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 61 3 61 - vertex 61 610 -61 - vertex 61 610 61 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 61 3 61 - vertex 61 3 -61 - vertex 61 610 -61 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -61 3 61 - vertex 61 610 61 - vertex -61 610 61 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex -61 3 61 - vertex 61 3 61 - vertex 61 610 61 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -61 3 -61 - vertex -61 610 61 - vertex -61 610 -61 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -61 3 -61 - vertex -61 3 61 - vertex -61 610 61 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex -60 610 60 - vertex -60 3 60 - vertex -60 610 -60 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -60 3 60 - vertex -60 3 -60 - vertex -60 610 -60 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 60 610 60 - vertex 60 3 60 - vertex -60 610 60 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 60 3 60 - vertex -60 3 60 - vertex -60 610 60 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 60 610 -60 - vertex 60 3 60 - vertex 60 610 60 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex 60 3 -60 - vertex 60 3 60 - vertex 60 610 -60 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -60 610 -60 - vertex -60 3 -60 - vertex 60 610 -60 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex -60 3 -60 - vertex 60 3 -60 - vertex 60 610 -60 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 61 3 -61 - vertex -61 1 -61 - vertex -61 3 -61 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 61 1 -61 - vertex -61 1 -61 - vertex 61 3 -61 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 61 1 61 - vertex 61 3 -61 - vertex 61 3 61 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 61 1 61 - vertex 61 1 -61 - vertex 61 3 -61 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -61 1 61 - vertex 61 3 61 - vertex -61 3 61 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex -61 1 61 - vertex 61 1 61 - vertex 61 3 61 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -61 1 -61 - vertex -61 3 61 - vertex -61 3 -61 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -61 1 -61 - vertex -61 1 61 - vertex -61 3 61 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -60 3 60 - vertex -4.489497184753418 3 6.6215119361877441 - vertex -5.8079638481140137 3 5.5015950202941895 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex -5.8079638481140137 3 5.5015950202941895 - vertex -6.8548569679260254 3 4.1244311332702637 - vertex -60 3 60 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -60 3 60 - vertex -2.9611051082611084 3 7.4318141937255859 - vertex -4.489497184753418 3 6.6215119361877441 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex -6.8548569679260254 3 4.1244311332702637 - vertex -7.5812249183654785 3 2.5544118881225586 - vertex -60 3 60 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -60 3 60 - vertex -1.2942559719085693 3 7.8946118354797363 - vertex -2.9611051082611084 3 7.4318141937255859 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex -7.5812249183654785 3 2.5544118881225586 - vertex -7.9531040191650391 3 0.86495202779769897 - vertex -60 3 60 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -60 3 60 - vertex 0.43311101198196411 3 7.9882669448852539 - vertex -1.2942559719085693 3 7.8946118354797363 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex -7.9531040191650391 3 0.86495202779769897 - vertex -7.9531040191650391 3 -0.86495202779769897 - vertex -60 3 60 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -5.8079638481140137 3 -5.5015950202941895 - vertex -60 3 -60 - vertex -6.8548569679260254 3 -4.1244311332702637 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -6.8548569679260254 3 -4.1244311332702637 - vertex -60 3 -60 - vertex -7.5812249183654785 3 -2.5544118881225586 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -7.5812249183654785 3 -2.5544118881225586 - vertex -60 3 -60 - vertex -7.9531040191650391 3 -0.86495202779769897 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -7.9531040191650391 3 -0.86495202779769897 - vertex -60 3 -60 - vertex -60 3 60 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.43311101198196411 3 7.9882669448852539 - vertex 60 3 60 - vertex 2.1402270793914795 3 7.708399772644043 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 2.1402270793914795 3 7.708399772644043 - vertex 60 3 60 - vertex 3.7472670078277588 3 7.0680961608886719 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 3.7472670078277588 3 7.0680961608886719 - vertex 60 3 60 - vertex 5.1790900230407715 3 6.0972962379455566 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -60 3 60 - vertex 60 3 60 - vertex 0.43311101198196411 3 7.9882669448852539 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex 60 3 60 - vertex 6.368743896484375 3 4.8413939476013184 - vertex 5.1790900230407715 3 6.0972962379455566 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -5.8079638481140137 3 -5.5015950202941895 - vertex -4.489497184753418 3 -6.6215119361877441 - vertex -60 3 -60 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex 60 3 60 - vertex 7.2606029510498047 3 3.3591129779815674 - vertex 6.368743896484375 3 4.8413939476013184 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -4.489497184753418 3 -6.6215119361877441 - vertex -2.9611051082611084 3 -7.4318141937255859 - vertex -60 3 -60 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex 60 3 60 - vertex 7.8129639625549316 3 1.7197639942169189 - vertex 7.2606029510498047 3 3.3591129779815674 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -2.9611051082611084 3 -7.4318141937255859 - vertex -1.2942559719085693 3 -7.8946118354797363 - vertex -60 3 -60 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex 60 3 60 - vertex 8 3 -3.6739402930577075e-16 - vertex 7.8129639625549316 3 1.7197639942169189 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -1.2942559719085693 3 -7.8946118354797363 - vertex 0.43311101198196411 3 -7.9882669448852539 - vertex -60 3 -60 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 8 3 -3.6739402930577075e-16 - vertex 60 3 -60 - vertex 7.8129639625549316 3 -1.7197639942169189 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 7.8129639625549316 3 -1.7197639942169189 - vertex 60 3 -60 - vertex 7.2606029510498047 3 -3.3591129779815674 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 7.2606029510498047 3 -3.3591129779815674 - vertex 60 3 -60 - vertex 6.368743896484375 3 -4.8413939476013184 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 6.368743896484375 3 -4.8413939476013184 - vertex 60 3 -60 - vertex 5.1790900230407715 3 -6.0972962379455566 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 5.1790900230407715 3 -6.0972962379455566 - vertex 60 3 -60 - vertex 3.7472670078277588 3 -7.0680961608886719 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 3.7472670078277588 3 -7.0680961608886719 - vertex 60 3 -60 - vertex 2.1402270793914795 3 -7.708399772644043 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 2.1402270793914795 3 -7.708399772644043 - vertex 60 3 -60 - vertex 0.43311101198196411 3 -7.9882669448852539 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex 60 3 60 - vertex 60 3 -60 - vertex 8 3 -3.6739402930577075e-16 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.43311101198196411 3 -7.9882669448852539 - vertex 60 3 -60 - vertex -60 3 -60 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 61 1 -61 - vertex -61 -7.4703452449041523e-15 -61 - vertex -61 1 -61 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex 61 -7.4703452449041523e-15 -61 - vertex -61 -7.4703452449041523e-15 -61 - vertex 61 1 -61 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 61 1 61 - vertex 61 -7.4703452449041523e-15 -61 - vertex 61 1 -61 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 61 7.4703452449041523e-15 61 - vertex 61 -7.4703452449041523e-15 -61 - vertex 61 1 61 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex -61 1 61 - vertex 61 7.4703452449041523e-15 61 - vertex 61 1 61 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -61 7.4703452449041523e-15 61 - vertex 61 7.4703452449041523e-15 61 - vertex -61 1 61 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -61 1 -61 - vertex -61 7.4703452449041523e-15 61 - vertex -61 1 61 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -61 -7.4703452449041523e-15 -61 - vertex -61 7.4703452449041523e-15 61 - vertex -61 1 -61 - endloop - endfacet - facet normal 0.64738670042007573 0 -0.76216170208113132 - outer loop - vertex -4.489497184753418 1 6.6215119361877441 - vertex -5.8079638481140137 1 5.5015950202941895 - vertex -5.8079638481140137 3 5.5015950202941895 - endloop - endfacet - facet normal 0.64738670042007573 0 -0.76216170208113132 - outer loop - vertex -4.489497184753418 1 6.6215119361877441 - vertex -5.8079638481140137 3 5.5015950202941895 - vertex -4.489497184753418 3 6.6215119361877441 - endloop - endfacet - facet normal 0.46840846871264458 0 -0.88351202959454689 - outer loop - vertex -2.9611051082611084 1 7.4318141937255859 - vertex -4.489497184753418 1 6.6215119361877441 - vertex -4.489497184753418 3 6.6215119361877441 - endloop - endfacet - facet normal 0.46840846871264458 0 -0.88351202959454689 - outer loop - vertex -2.9611051082611084 1 7.4318141937255859 - vertex -4.489497184753418 3 6.6215119361877441 - vertex -2.9611051082611084 3 7.4318141937255859 - endloop - endfacet - facet normal 0.26752793984402756 0 -0.96355010321353307 - outer loop - vertex -1.2942559719085693 1 7.8946118354797363 - vertex -2.9611051082611084 1 7.4318141937255859 - vertex -2.9611051082611084 3 7.4318141937255859 - endloop - endfacet - facet normal -0.99413793032906728 0 0.10811926507814602 - outer loop - vertex 7.8129639625549316 1 -1.7197639942169189 - vertex 8 3 -3.6739402930577075e-16 - vertex 7.8129639625549316 3 -1.7197639942169189 - endloop - endfacet - facet normal 0.26752793984402756 0 -0.96355010321353307 - outer loop - vertex -1.2942559719085693 1 7.8946118354797363 - vertex -2.9611051082611084 3 7.4318141937255859 - vertex -1.2942559719085693 3 7.8946118354797363 - endloop - endfacet - facet normal -0.99413793032906739 1.3240790337230738e-17 0.10811926507814602 - outer loop - vertex 7.8129639625549316 1 -1.7197639942169189 - vertex 8 1 -1.2246468525851679e-16 - vertex 8 3 -3.6739402930577075e-16 - endloop - endfacet - facet normal 0.054138904478489597 0 -0.99853341407379503 - outer loop - vertex 0.43311101198196411 1 7.9882669448852539 - vertex -1.2942559719085693 1 7.8946118354797363 - vertex -1.2942559719085693 3 7.8946118354797363 - endloop - endfacet - facet normal -0.94765316652265008 0 0.31930154396681876 - outer loop - vertex 7.2606029510498047 1 -3.3591129779815674 - vertex 7.8129639625549316 3 -1.7197639942169189 - vertex 7.2606029510498047 3 -3.3591129779815674 - endloop - endfacet - facet normal 0.054138904478489597 0 -0.99853341407379503 - outer loop - vertex 0.43311101198196411 1 7.9882669448852539 - vertex -1.2942559719085693 3 7.8946118354797363 - vertex 0.43311101198196411 3 7.9882669448852539 - endloop - endfacet - facet normal -0.94765316652265008 0 0.31930154396681876 - outer loop - vertex 7.2606029510498047 1 -3.3591129779815674 - vertex 7.8129639625549316 1 -1.7197639942169189 - vertex 7.8129639625549316 3 -1.7197639942169189 - endloop - endfacet - facet normal -0.16178182691395071 0 -0.98682655035238309 - outer loop - vertex 2.1402270793914795 1 7.708399772644043 - vertex 0.43311101198196411 1 7.9882669448852539 - vertex 0.43311101198196411 3 7.9882669448852539 - endloop - endfacet - facet normal -0.16178182691395071 0 -0.98682655035238309 - outer loop - vertex 2.1402270793914795 1 7.708399772644043 - vertex 0.43311101198196411 3 7.9882669448852539 - vertex 2.1402270793914795 3 7.708399772644043 - endloop - endfacet - facet normal -0.85685712856506968 0 0.51555393629301649 - outer loop - vertex 6.368743896484375 1 -4.8413939476013184 - vertex 7.2606029510498047 3 -3.3591129779815674 - vertex 6.368743896484375 3 -4.8413939476013184 - endloop - endfacet - facet normal -0.85685712856506968 0 0.51555393629301649 - outer loop - vertex 6.368743896484375 1 -4.8413939476013184 - vertex 7.2606029510498047 1 -3.3591129779815674 - vertex 7.2606029510498047 3 -3.3591129779815674 - endloop - endfacet - facet normal -0.37013834558473929 0 -0.92897664401630264 - outer loop - vertex 3.7472670078277588 1 7.0680961608886719 - vertex 2.1402270793914795 3 7.708399772644043 - vertex 3.7472670078277588 3 7.0680961608886719 - endloop - endfacet - facet normal -0.7259954825307644 0 0.68769946876882393 - outer loop - vertex 5.1790900230407715 1 -6.0972962379455566 - vertex 6.368743896484375 3 -4.8413939476013184 - vertex 5.1790900230407715 3 -6.0972962379455566 - endloop - endfacet - facet normal -0.37013834558473929 0 -0.92897664401630264 - outer loop - vertex 3.7472670078277588 1 7.0680961608886719 - vertex 2.1402270793914795 1 7.708399772644043 - vertex 2.1402270793914795 3 7.708399772644043 - endloop - endfacet - facet normal -0.7259954825307644 0 0.68769946876882393 - outer loop - vertex 5.1790900230407715 1 -6.0972962379455566 - vertex 6.368743896484375 1 -4.8413939476013184 - vertex 6.368743896484375 3 -4.8413939476013184 - endloop - endfacet - facet normal -0.56118699818949347 0 -0.82768904370123542 - outer loop - vertex 5.1790900230407715 1 6.0972962379455566 - vertex 3.7472670078277588 3 7.0680961608886719 - vertex 5.1790900230407715 3 6.0972962379455566 - endloop - endfacet - facet normal -0.56118699818949347 0 0.82768904370123542 - outer loop - vertex 3.7472670078277588 1 -7.0680961608886719 - vertex 5.1790900230407715 3 -6.0972962379455566 - vertex 3.7472670078277588 3 -7.0680961608886719 - endloop - endfacet - facet normal -0.56118699818949347 0 -0.82768904370123542 - outer loop - vertex 5.1790900230407715 1 6.0972962379455566 - vertex 3.7472670078277588 1 7.0680961608886719 - vertex 3.7472670078277588 3 7.0680961608886719 - endloop - endfacet - facet normal -0.56118699818949347 0 0.82768904370123542 - outer loop - vertex 3.7472670078277588 1 -7.0680961608886719 - vertex 5.1790900230407715 1 -6.0972962379455566 - vertex 5.1790900230407715 3 -6.0972962379455566 - endloop - endfacet - facet normal -0.7259954825307644 0 -0.68769946876882393 - outer loop - vertex 6.368743896484375 1 4.8413939476013184 - vertex 5.1790900230407715 3 6.0972962379455566 - vertex 6.368743896484375 3 4.8413939476013184 - endloop - endfacet - facet normal -0.37013834558473929 0 0.92897664401630264 - outer loop - vertex 2.1402270793914795 1 -7.708399772644043 - vertex 3.7472670078277588 3 -7.0680961608886719 - vertex 2.1402270793914795 3 -7.708399772644043 - endloop - endfacet - facet normal -0.7259954825307644 0 -0.68769946876882393 - outer loop - vertex 6.368743896484375 1 4.8413939476013184 - vertex 5.1790900230407715 1 6.0972962379455566 - vertex 5.1790900230407715 3 6.0972962379455566 - endloop - endfacet - facet normal -0.37013834558473929 0 0.92897664401630264 - outer loop - vertex 2.1402270793914795 1 -7.708399772644043 - vertex 3.7472670078277588 1 -7.0680961608886719 - vertex 3.7472670078277588 3 -7.0680961608886719 - endloop - endfacet - facet normal -0.85685712856506968 0 -0.51555393629301649 - outer loop - vertex 7.2606029510498047 1 3.3591129779815674 - vertex 6.368743896484375 3 4.8413939476013184 - vertex 7.2606029510498047 3 3.3591129779815674 - endloop - endfacet - facet normal -0.16178182691395071 0 0.98682655035238309 - outer loop - vertex 0.43311101198196411 1 -7.9882669448852539 - vertex 2.1402270793914795 3 -7.708399772644043 - vertex 0.43311101198196411 3 -7.9882669448852539 - endloop - endfacet - facet normal -0.85685712856506968 0 -0.51555393629301649 - outer loop - vertex 7.2606029510498047 1 3.3591129779815674 - vertex 6.368743896484375 1 4.8413939476013184 - vertex 6.368743896484375 3 4.8413939476013184 - endloop - endfacet - facet normal -0.16178182691395071 0 0.98682655035238309 - outer loop - vertex 0.43311101198196411 1 -7.9882669448852539 - vertex 2.1402270793914795 1 -7.708399772644043 - vertex 2.1402270793914795 3 -7.708399772644043 - endloop - endfacet - facet normal -0.94765316652265008 0 -0.31930154396681876 - outer loop - vertex 7.8129639625549316 1 1.7197639942169189 - vertex 7.2606029510498047 3 3.3591129779815674 - vertex 7.8129639625549316 3 1.7197639942169189 - endloop - endfacet - facet normal -0.94765316652265008 0 -0.31930154396681876 - outer loop - vertex 7.8129639625549316 1 1.7197639942169189 - vertex 7.2606029510498047 1 3.3591129779815674 - vertex 7.2606029510498047 3 3.3591129779815674 - endloop - endfacet - facet normal 0.054138904478489597 0 0.99853341407379503 - outer loop - vertex -1.2942559719085693 1 -7.8946118354797363 - vertex 0.43311101198196411 3 -7.9882669448852539 - vertex -1.2942559719085693 3 -7.8946118354797363 - endloop - endfacet - facet normal 0.054138904478489597 -0 0.99853341407379503 - outer loop - vertex -1.2942559719085693 1 -7.8946118354797363 - vertex 0.43311101198196411 1 -7.9882669448852539 - vertex 0.43311101198196411 3 -7.9882669448852539 - endloop - endfacet - facet normal -0.99413793032906739 0 -0.10811926507814598 - outer loop - vertex 8 1 -1.2246468525851679e-16 - vertex 7.8129639625549316 3 1.7197639942169189 - vertex 8 3 -3.6739402930577075e-16 - endloop - endfacet - facet normal -0.99413793032906739 0 -0.108119265078146 - outer loop - vertex 8 1 -1.2246468525851679e-16 - vertex 7.8129639625549316 1 1.7197639942169189 - vertex 7.8129639625549316 3 1.7197639942169189 - endloop - endfacet - facet normal 0.26752793984402756 0 0.96355010321353307 - outer loop - vertex -2.9611051082611084 1 -7.4318141937255859 - vertex -1.2942559719085693 3 -7.8946118354797363 - vertex -2.9611051082611084 3 -7.4318141937255859 - endloop - endfacet - facet normal 0.26752793984402756 -0 0.96355010321353307 - outer loop - vertex -2.9611051082611084 1 -7.4318141937255859 - vertex -1.2942559719085693 1 -7.8946118354797363 - vertex -1.2942559719085693 3 -7.8946118354797363 - endloop - endfacet - facet normal 0.46840846871264458 -0 0.88351202959454689 - outer loop - vertex -4.489497184753418 1 -6.6215119361877441 - vertex -2.9611051082611084 1 -7.4318141937255859 - vertex -2.9611051082611084 3 -7.4318141937255859 - endloop - endfacet - facet normal 0.46840846871264458 0 0.88351202959454689 - outer loop - vertex -4.489497184753418 1 -6.6215119361877441 - vertex -2.9611051082611084 3 -7.4318141937255859 - vertex -4.489497184753418 3 -6.6215119361877441 - endloop - endfacet - facet normal 0.64738670042007573 -0 0.76216170208113132 - outer loop - vertex -5.8079638481140137 1 -5.5015950202941895 - vertex -4.489497184753418 1 -6.6215119361877441 - vertex -4.489497184753418 3 -6.6215119361877441 - endloop - endfacet - facet normal 0.64738670042007573 0 0.76216170208113132 - outer loop - vertex -5.8079638481140137 1 -5.5015950202941895 - vertex -4.489497184753418 3 -6.6215119361877441 - vertex -5.8079638481140137 3 -5.5015950202941895 - endloop - endfacet - facet normal 0.79609296820963171 -0 0.60517434344755416 - outer loop - vertex -6.8548569679260254 1 -4.1244311332702637 - vertex -5.8079638481140137 1 -5.5015950202941895 - vertex -5.8079638481140137 3 -5.5015950202941895 - endloop - endfacet - facet normal 0.79609296820963171 0 0.60517434344755416 - outer loop - vertex -6.8548569679260254 1 -4.1244311332702637 - vertex -5.8079638481140137 3 -5.5015950202941895 - vertex -6.8548569679260254 3 -4.1244311332702637 - endloop - endfacet - facet normal 0.90757548589128689 -0 0.4198889584273377 - outer loop - vertex -7.5812249183654785 1 -2.5544118881225586 - vertex -6.8548569679260254 1 -4.1244311332702637 - vertex -6.8548569679260254 3 -4.1244311332702637 - endloop - endfacet - facet normal 0.90757548589128689 0 0.4198889584273377 - outer loop - vertex -7.5812249183654785 1 -2.5544118881225586 - vertex -6.8548569679260254 3 -4.1244311332702637 - vertex -7.5812249183654785 3 -2.5544118881225586 - endloop - endfacet - facet normal 0.97662045080518167 -0 0.21497091679825825 - outer loop - vertex -7.9531040191650391 1 -0.86495202779769897 - vertex -7.5812249183654785 1 -2.5544118881225586 - vertex -7.5812249183654785 3 -2.5544118881225586 - endloop - endfacet - facet normal 0.97662045080518167 0 0.21497091679825825 - outer loop - vertex -7.9531040191650391 1 -0.86495202779769897 - vertex -7.5812249183654785 3 -2.5544118881225586 - vertex -7.9531040191650391 3 -0.86495202779769897 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex -7.9531040191650391 1 0.86495202779769897 - vertex -7.9531040191650391 1 -0.86495202779769897 - vertex -7.9531040191650391 3 -0.86495202779769897 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex -7.9531040191650391 1 0.86495202779769897 - vertex -7.9531040191650391 3 -0.86495202779769897 - vertex -7.9531040191650391 3 0.86495202779769897 - endloop - endfacet - facet normal 0.97662045080518167 0 -0.21497091679825825 - outer loop - vertex -7.5812249183654785 1 2.5544118881225586 - vertex -7.9531040191650391 1 0.86495202779769897 - vertex -7.9531040191650391 3 0.86495202779769897 - endloop - endfacet - facet normal 0.97662045080518167 0 -0.21497091679825825 - outer loop - vertex -7.5812249183654785 1 2.5544118881225586 - vertex -7.9531040191650391 3 0.86495202779769897 - vertex -7.5812249183654785 3 2.5544118881225586 - endloop - endfacet - facet normal 0.90757548589128689 0 -0.4198889584273377 - outer loop - vertex -6.8548569679260254 1 4.1244311332702637 - vertex -7.5812249183654785 1 2.5544118881225586 - vertex -7.5812249183654785 3 2.5544118881225586 - endloop - endfacet - facet normal 0.90757548589128689 0 -0.4198889584273377 - outer loop - vertex -6.8548569679260254 1 4.1244311332702637 - vertex -7.5812249183654785 3 2.5544118881225586 - vertex -6.8548569679260254 3 4.1244311332702637 - endloop - endfacet - facet normal 0.79609296820963171 0 -0.60517434344755416 - outer loop - vertex -5.8079638481140137 1 5.5015950202941895 - vertex -6.8548569679260254 1 4.1244311332702637 - vertex -6.8548569679260254 3 4.1244311332702637 - endloop - endfacet - facet normal 0.79609296820963171 0 -0.60517434344755416 - outer loop - vertex -5.8079638481140137 1 5.5015950202941895 - vertex -6.8548569679260254 3 4.1244311332702637 - vertex -5.8079638481140137 3 5.5015950202941895 - endloop - endfacet - facet normal 0 -1 1.22464870546974e-16 - outer loop - vertex 61 7.4703452449041523e-15 61 - vertex -61 7.4703452449041523e-15 61 - vertex -60 7.3478803743571783e-15 60 - endloop - endfacet - facet normal 0 -1 1.22464870546974e-16 - outer loop - vertex 60 7.3478803743571783e-15 60 - vertex 61 7.4703452449041523e-15 61 - vertex -60 7.3478803743571783e-15 60 - endloop - endfacet - facet normal -1.9440100428787221e-22 -1 1.224646761459697e-16 - outer loop - vertex -61 -7.4703452449041523e-15 -61 - vertex -60 7.3478803743571783e-15 60 - vertex -61 7.4703452449041523e-15 61 - endloop - endfacet - facet normal 1.9764102102600342e-22 -1 1.2246467290595297e-16 - outer loop - vertex -60 -7.3478803743571783e-15 -60 - vertex -60 7.3478803743571783e-15 60 - vertex -61 -7.4703452449041523e-15 -61 - endloop - endfacet - facet normal 0 -1 1.22464870546974e-16 - outer loop - vertex 60 -7.3478803743571783e-15 -60 - vertex -60 -7.3478803743571783e-15 -60 - vertex -61 -7.4703452449041523e-15 -61 - endloop - endfacet - facet normal 0 -1 1.22464870546974e-16 - outer loop - vertex 61 -7.4703452449041523e-15 -61 - vertex 60 -7.3478803743571783e-15 -60 - vertex -61 -7.4703452449041523e-15 -61 - endloop - endfacet - facet normal 1.9440100428787221e-22 -1 1.224646761459697e-16 - outer loop - vertex 61 -7.4703452449041523e-15 -61 - vertex 61 7.4703452449041523e-15 61 - vertex 60 7.3478803743571783e-15 60 - endloop - endfacet - facet normal -1.9764102102600342e-22 -1 1.2246467290595297e-16 - outer loop - vertex 61 -7.4703452449041523e-15 -61 - vertex 60 7.3478803743571783e-15 60 - vertex 60 -7.3478803743571783e-15 -60 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -4.489497184753418 1 6.6215119361877441 - vertex -6.8548569679260254 1 4.1244311332702637 - vertex -5.8079638481140137 1 5.5015950202941895 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -2.9611051082611084 1 7.4318141937255859 - vertex -1.2942559719085693 1 7.8946118354797363 - vertex -4.489497184753418 1 6.6215119361877441 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -1.2942559719085693 1 7.8946118354797363 - vertex 0.43311101198196411 1 7.9882669448852539 - vertex -4.489497184753418 1 6.6215119361877441 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -7.5812249183654785 1 2.5544118881225586 - vertex -7.9531040191650391 1 -0.86495202779769897 - vertex -7.9531040191650391 1 0.86495202779769897 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 2.1402270793914795 1 7.708399772644043 - vertex 3.7472670078277588 1 7.0680961608886719 - vertex 0.43311101198196411 1 7.9882669448852539 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -7.9531040191650391 1 -0.86495202779769897 - vertex -6.8548569679260254 1 -4.1244311332702637 - vertex -7.5812249183654785 1 -2.5544118881225586 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -7.5812249183654785 1 2.5544118881225586 - vertex -6.8548569679260254 1 -4.1244311332702637 - vertex -7.9531040191650391 1 -0.86495202779769897 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 3.7472670078277588 1 7.0680961608886719 - vertex 5.1790900230407715 1 6.0972962379455566 - vertex 0.43311101198196411 1 7.9882669448852539 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -6.8548569679260254 1 4.1244311332702637 - vertex -4.489497184753418 1 -6.6215119361877441 - vertex -7.5812249183654785 1 2.5544118881225586 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -6.8548569679260254 1 -4.1244311332702637 - vertex -4.489497184753418 1 -6.6215119361877441 - vertex -5.8079638481140137 1 -5.5015950202941895 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex -4.489497184753418 1 6.6215119361877441 - vertex -4.489497184753418 1 -6.6215119361877441 - vertex -6.8548569679260254 1 4.1244311332702637 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -7.5812249183654785 1 2.5544118881225586 - vertex -4.489497184753418 1 -6.6215119361877441 - vertex -6.8548569679260254 1 -4.1244311332702637 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 6.368743896484375 1 4.8413939476013184 - vertex 7.2606029510498047 1 3.3591129779815674 - vertex 5.1790900230407715 1 6.0972962379455566 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 5.1790900230407715 1 6.0972962379455566 - vertex 7.2606029510498047 1 3.3591129779815674 - vertex 0.43311101198196411 1 7.9882669448852539 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -4.489497184753418 1 -6.6215119361877441 - vertex -1.2942559719085693 1 -7.8946118354797363 - vertex -2.9611051082611084 1 -7.4318141937255859 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex 0.43311101198196411 1 7.9882669448852539 - vertex -1.2942559719085693 1 -7.8946118354797363 - vertex -4.489497184753418 1 6.6215119361877441 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -4.489497184753418 1 6.6215119361877441 - vertex -1.2942559719085693 1 -7.8946118354797363 - vertex -4.489497184753418 1 -6.6215119361877441 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 8 1 -1.2246468525851679e-16 - vertex 7.8129639625549316 1 -1.7197639942169189 - vertex 7.8129639625549316 1 1.7197639942169189 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex 7.8129639625549316 1 1.7197639942169189 - vertex 7.8129639625549316 1 -1.7197639942169189 - vertex 7.2606029510498047 1 3.3591129779815674 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -1.2942559719085693 1 -7.8946118354797363 - vertex 2.1402270793914795 1 -7.708399772644043 - vertex 0.43311101198196411 1 -7.9882669448852539 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -1.2942559719085693 1 -7.8946118354797363 - vertex 3.7472670078277588 1 -7.0680961608886719 - vertex 2.1402270793914795 1 -7.708399772644043 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 7.2606029510498047 1 -3.3591129779815674 - vertex 6.368743896484375 1 -4.8413939476013184 - vertex 7.8129639625549316 1 -1.7197639942169189 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex 7.2606029510498047 1 3.3591129779815674 - vertex 6.368743896484375 1 -4.8413939476013184 - vertex 0.43311101198196411 1 7.9882669448852539 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 7.8129639625549316 1 -1.7197639942169189 - vertex 6.368743896484375 1 -4.8413939476013184 - vertex 7.2606029510498047 1 3.3591129779815674 - endloop - endfacet - facet normal 0 1 -0 - outer loop - vertex 6.368743896484375 1 -4.8413939476013184 - vertex 5.1790900230407715 1 -6.0972962379455566 - vertex 0.43311101198196411 1 7.9882669448852539 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex 0.43311101198196411 1 7.9882669448852539 - vertex 5.1790900230407715 1 -6.0972962379455566 - vertex -1.2942559719085693 1 -7.8946118354797363 - endloop - endfacet - facet normal 0 1 0 - outer loop - vertex -1.2942559719085693 1 -7.8946118354797363 - vertex 5.1790900230407715 1 -6.0972962379455566 - vertex 3.7472670078277588 1 -7.0680961608886719 - endloop - endfacet - facet normal -2.7145736657710727e-24 -1 1.2246466944387791e-16 - outer loop - vertex -4.489497184753418 8.1090132752106967e-16 6.6215119361877441 - vertex -60 7.3478803743571783e-15 60 - vertex -5.8079638481140137 6.7375107619063344e-16 5.5015950202941895 - endloop - endfacet - facet normal 9.8604014504559914e-24 -1 1.2246468194816157e-16 - outer loop - vertex -6.8548569679260254 5.0509712845296802e-16 4.1244311332702637 - vertex -5.8079638481140137 6.7375107619063344e-16 5.5015950202941895 - vertex -60 7.3478803743571783e-15 60 - endloop - endfacet - facet normal 2.3750917541729913e-23 -1 1.2246469696643964e-16 - outer loop - vertex -2.9611051082611084 9.1013478424237758e-16 7.4318141937255859 - vertex -60 7.3478803743571783e-15 60 - vertex -4.489497184753418 8.1090132752106967e-16 6.6215119361877441 - endloop - endfacet - facet normal 3.140053166932519e-24 -1 1.2246467555621105e-16 - outer loop - vertex -7.5812249183654785 3.1282522869811294e-16 2.5544118881225586 - vertex -6.8548569679260254 5.0509712845296802e-16 4.1244311332702637 - vertex -60 7.3478803743571783e-15 60 - endloop - endfacet - facet normal -4.6556805959120687e-24 -1 1.2246466614397647e-16 - outer loop - vertex -1.2942559719085693 9.668111351717021e-16 7.8946118354797363 - vertex -60 7.3478803743571783e-15 60 - vertex -2.9611051082611084 9.1013478424237758e-16 7.4318141937255859 - endloop - endfacet - facet normal 2.1338697076538101e-24 -1 1.2246467463807433e-16 - outer loop - vertex -7.9531040191650391 1.0592607579580095e-16 0.86495202779769897 - vertex -7.5812249183654785 3.1282522869811294e-16 2.5544118881225586 - vertex -60 7.3478803743571783e-15 60 - endloop - endfacet - facet normal 1.0466145348730118e-23 -1 1.2246468318133267e-16 - outer loop - vertex 0.43311101198196411 9.7828059655223577e-16 7.9882669448852539 - vertex -60 7.3478803743571783e-15 60 - vertex -1.2942559719085693 9.668111351717021e-16 7.8946118354797363 - endloop - endfacet - facet normal 1.1505000566059115e-23 -1 1.2246468288594578e-16 - outer loop - vertex -7.9531040191650391 -1.0592607579580095e-16 -0.86495202779769897 - vertex -7.9531040191650391 1.0592607579580095e-16 0.86495202779769897 - vertex -60 7.3478803743571783e-15 60 - endloop - endfacet - facet normal -9.8604014504559914e-24 -1 1.2246468194816157e-16 - outer loop - vertex -60 -7.3478803743571783e-15 -60 - vertex -5.8079638481140137 -6.7375107619063344e-16 -5.5015950202941895 - vertex -6.8548569679260254 -5.0509712845296802e-16 -4.1244311332702637 - endloop - endfacet - facet normal -3.140053166932519e-24 -1 1.2246467555621105e-16 - outer loop - vertex -60 -7.3478803743571783e-15 -60 - vertex -6.8548569679260254 -5.0509712845296802e-16 -4.1244311332702637 - vertex -7.5812249183654785 -3.1282522869811294e-16 -2.5544118881225586 - endloop - endfacet - facet normal -2.1338697076538101e-24 -1 1.2246467463807433e-16 - outer loop - vertex -60 -7.3478803743571783e-15 -60 - vertex -7.5812249183654785 -3.1282522869811294e-16 -2.5544118881225586 - vertex -7.9531040191650391 -1.0592607579580095e-16 -0.86495202779769897 - endloop - endfacet - facet normal -1.6585455949044178e-25 -1 1.2246467290595297e-16 - outer loop - vertex -60 -7.3478803743571783e-15 -60 - vertex -7.9531040191650391 -1.0592607579580095e-16 -0.86495202779769897 - vertex -60 7.3478803743571783e-15 60 - endloop - endfacet - facet normal -3.7720394482795526e-23 -1 1.2246471422019109e-16 - outer loop - vertex 60 7.3478803743571783e-15 60 - vertex 0.43311101198196411 9.7828059655223577e-16 7.9882669448852539 - vertex 2.1402270793914795 9.4400667889101139e-16 7.708399772644043 - endloop - endfacet - facet normal 8.8771827388911874e-24 -1 1.2246466266075848e-16 - outer loop - vertex 60 7.3478803743571783e-15 60 - vertex 2.1402270793914795 9.4400667889101139e-16 7.708399772644043 - vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719 - endloop - endfacet - facet normal -1.3032959457950054e-24 -1 1.2246467347993763e-16 - outer loop - vertex 60 7.3478803743571783e-15 60 - vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719 - vertex 5.1790900230407715 7.4670342989924536e-16 6.0972962379455566 - endloop - endfacet - facet normal 0 -1 1.2246467102058172e-16 - outer loop - vertex 60 7.3478803743571783e-15 60 - vertex -60 7.3478803743571783e-15 60 - vertex 0.43311101198196411 9.7828059655223577e-16 7.9882669448852539 - endloop - endfacet - facet normal 8.1790643130613495e-25 -1 1.2246467132260199e-16 - outer loop - vertex 6.368743896484375 5.9289976967196074e-16 4.8413939476013184 - vertex 60 7.3478803743571783e-15 60 - vertex 5.1790900230407715 7.4670342989924536e-16 6.0972962379455566 - endloop - endfacet - facet normal 2.7145738562238688e-24 -1 1.2246466944387788e-16 - outer loop - vertex -4.489497184753418 -8.1090132752106967e-16 -6.6215119361877441 - vertex -5.8079638481140137 -6.7375107619063344e-16 -5.5015950202941895 - vertex -60 -7.3478803743571783e-15 -60 - endloop - endfacet - facet normal -9.4851118116718549e-24 -1 1.2246468134032765e-16 - outer loop - vertex 7.2606029510498047 4.1137269461126327e-16 3.3591129779815674 - vertex 60 7.3478803743571783e-15 60 - vertex 6.368743896484375 5.9289976967196074e-16 4.8413939476013184 - endloop - endfacet - facet normal -2.3750917541729936e-23 -1 1.2246469696643964e-16 - outer loop - vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859 - vertex -4.489497184753418 -8.1090132752106967e-16 -6.6215119361877441 - vertex -60 -7.3478803743571783e-15 -60 - endloop - endfacet - facet normal -4.7315581860572422e-24 -1 1.2246467691420446e-16 - outer loop - vertex 7.8129639625549316 2.106103483513679e-16 1.7197639942169189 - vertex 60 7.3478803743571783e-15 60 - vertex 7.2606029510498047 4.1137269461126327e-16 3.3591129779815674 - endloop - endfacet - facet normal 4.6556805959120643e-24 -1 1.2246466614397657e-16 - outer loop - vertex -1.2942559719085693 -9.668111351717021e-16 -7.8946118354797363 - vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859 - vertex -60 -7.3478803743571783e-15 -60 - endloop - endfacet - facet normal -7.942874688939922e-24 -1 1.2246467978977771e-16 - outer loop - vertex 8 0 0 - vertex 60 7.3478803743571783e-15 60 - vertex 7.8129639625549316 2.106103483513679e-16 1.7197639942169189 - endloop - endfacet - facet normal -1.0466145348730109e-23 -1 1.224646831813325e-16 - outer loop - vertex 0.43311101198196411 -9.7828059655223577e-16 -7.9882669448852539 - vertex -1.2942559719085693 -9.668111351717021e-16 -7.8946118354797363 - vertex -60 -7.3478803743571783e-15 -60 - endloop - endfacet - facet normal 7.942874688939922e-24 -1 1.2246467978977771e-16 - outer loop - vertex 60 -7.3478803743571783e-15 -60 - vertex 8 0 0 - vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189 - endloop - endfacet - facet normal 4.7315582396553985e-24 -1 1.2246467691420446e-16 - outer loop - vertex 60 -7.3478803743571783e-15 -60 - vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189 - vertex 7.2606029510498047 -4.1137269461126327e-16 -3.3591129779815674 - endloop - endfacet - facet normal 9.4851117135931716e-24 -1 1.2246468134032765e-16 - outer loop - vertex 60 -7.3478803743571783e-15 -60 - vertex 7.2606029510498047 -4.1137269461126327e-16 -3.3591129779815674 - vertex 6.368743896484375 -5.9289976967196074e-16 -4.8413939476013184 - endloop - endfacet - facet normal -8.1790624146971067e-25 -1 1.224646713226018e-16 - outer loop - vertex 60 -7.3478803743571783e-15 -60 - vertex 6.368743896484375 -5.9289976967196074e-16 -4.8413939476013184 - vertex 5.1790900230407715 -7.4670342989924536e-16 -6.0972962379455566 - endloop - endfacet - facet normal 1.3032959457950054e-24 -1 1.2246467347993763e-16 - outer loop - vertex 60 -7.3478803743571783e-15 -60 - vertex 5.1790900230407715 -7.4670342989924536e-16 -6.0972962379455566 - vertex 3.7472670078277588 -8.655921273429117e-16 -7.0680961608886719 - endloop - endfacet - facet normal -8.8771827388911874e-24 -1 1.2246466266075848e-16 - outer loop - vertex 60 -7.3478803743571783e-15 -60 - vertex 3.7472670078277588 -8.655921273429117e-16 -7.0680961608886719 - vertex 2.1402270793914795 -9.4400667889101139e-16 -7.708399772644043 - endloop - endfacet - facet normal 3.7720394482795526e-23 -1 1.2246471422019109e-16 - outer loop - vertex 60 -7.3478803743571783e-15 -60 - vertex 2.1402270793914795 -9.4400667889101139e-16 -7.708399772644043 - vertex 0.43311101198196411 -9.7828059655223577e-16 -7.9882669448852539 - endloop - endfacet - facet normal 0 -1 1.2246467102058172e-16 - outer loop - vertex 60 -7.3478803743571783e-15 -60 - vertex 0.43311101198196411 -9.7828059655223577e-16 -7.9882669448852539 - vertex -60 -7.3478803743571783e-15 -60 - endloop - endfacet - facet normal 0 -1 1.2246467290595297e-16 - outer loop - vertex 60 -7.3478803743571783e-15 -60 - vertex 60 7.3478803743571783e-15 60 - vertex 8 0 0 - endloop - endfacet - facet normal -5.5610874107037022e-23 -1 1.2246473171814796e-16 - outer loop - vertex -6.8548569679260254 5.0509712845296802e-16 4.1244311332702637 - vertex -4.489497184753418 8.1090132752106967e-16 6.6215119361877441 - vertex -5.8079638481140137 6.7375107619063344e-16 5.5015950202941895 - endloop - endfacet - facet normal 3.5336500887342006e-23 -1 1.2246468288594578e-16 - outer loop - vertex -7.5812249183654785 -3.1282522869811294e-16 -2.5544118881225586 - vertex -7.9531040191650391 1.0592607579580095e-16 0.86495202779769897 - vertex -7.9531040191650391 -1.0592607579580095e-16 -0.86495202779769897 - endloop - endfacet - facet normal -6.92615645630674e-24 -1 1.224646743215047e-16 - outer loop - vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719 - vertex -1.2942559719085693 9.668111351717021e-16 7.8946118354797363 - vertex -2.9611051082611084 9.1013478424237758e-16 7.4318141937255859 - endloop - endfacet - facet normal 6.5046913229555174e-24 -1 1.2246475624605834e-16 - outer loop - vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719 - vertex 0.43311101198196411 9.7828059655223577e-16 7.9882669448852539 - vertex -1.2942559719085693 9.668111351717021e-16 7.8946118354797363 - endloop - endfacet - facet normal -8.4660190461211364e-23 -1 1.2246442789979388e-16 - outer loop - vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719 - vertex 2.1402270793914795 9.4400667889101139e-16 7.708399772644043 - vertex 0.43311101198196411 9.7828059655223577e-16 7.9882669448852539 - endloop - endfacet - facet normal 5.747249094393101e-24 -1 1.2246467966791322e-16 - outer loop - vertex -6.8548569679260254 -5.0509712845296802e-16 -4.1244311332702637 - vertex -7.9531040191650391 1.0592607579580095e-16 0.86495202779769897 - vertex -7.5812249183654785 -3.1282522869811294e-16 -2.5544118881225586 - endloop - endfacet - facet normal -1.0202516191171447e-23 -1 1.2246467735352452e-16 - outer loop - vertex -5.8079638481140137 -6.7375107619063344e-16 -5.5015950202941895 - vertex -7.5812249183654785 3.1282522869811294e-16 2.5544118881225586 - vertex -7.9531040191650391 1.0592607579580095e-16 0.86495202779769897 - endloop - endfacet - facet normal -3.7938552191334051e-24 -1 1.2246467876417735e-16 - outer loop - vertex -5.8079638481140137 -6.7375107619063344e-16 -5.5015950202941895 - vertex -6.8548569679260254 5.0509712845296802e-16 4.1244311332702637 - vertex -7.5812249183654785 3.1282522869811294e-16 2.5544118881225586 - endloop - endfacet - facet normal -2.0443883565058697e-23 -1 1.2246467390280494e-16 - outer loop - vertex -5.8079638481140137 -6.7375107619063344e-16 -5.5015950202941895 - vertex -7.9531040191650391 1.0592607579580095e-16 0.86495202779769897 - vertex -6.8548569679260254 -5.0509712845296802e-16 -4.1244311332702637 - endloop - endfacet - facet normal -9.2000602155814685e-24 -1 1.2246466183307963e-16 - outer loop - vertex 6.368743896484375 5.9289976967196074e-16 4.8413939476013184 - vertex 5.1790900230407715 7.4670342989924536e-16 6.0972962379455566 - vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719 - endloop - endfacet - facet normal -1.0652601301104021e-22 -1 1.2246454083605884e-16 - outer loop - vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859 - vertex -5.8079638481140137 -6.7375107619063344e-16 -5.5015950202941895 - vertex -4.489497184753418 -8.1090132752106967e-16 -6.6215119361877441 - endloop - endfacet - facet normal 3.0093036565001882e-23 -1 1.2246468500393508e-16 - outer loop - vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859 - vertex -2.9611051082611084 9.1013478424237758e-16 7.4318141937255859 - vertex -4.489497184753418 8.1090132752106967e-16 6.6215119361877441 - endloop - endfacet - facet normal -2.4039170381415668e-24 -1 1.2246468560094203e-16 - outer loop - vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859 - vertex 7.2606029510498047 4.1137269461126327e-16 3.3591129779815674 - vertex 6.368743896484375 5.9289976967196074e-16 4.8413939476013184 - endloop - endfacet - facet normal -2.547683748911312e-24 -1 1.2246468145404106e-16 - outer loop - vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859 - vertex -4.489497184753418 8.1090132752106967e-16 6.6215119361877441 - vertex -6.8548569679260254 5.0509712845296802e-16 4.1244311332702637 - endloop - endfacet - facet normal -6.3469708514441707e-24 -1 1.2246468500393508e-16 - outer loop - vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859 - vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719 - vertex -2.9611051082611084 9.1013478424237758e-16 7.4318141937255859 - endloop - endfacet - facet normal 5.7339184803149965e-24 -1 1.2246467941472114e-16 - outer loop - vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859 - vertex 6.368743896484375 5.9289976967196074e-16 4.8413939476013184 - vertex 3.7472670078277588 8.655921273429117e-16 7.0680961608886719 - endloop - endfacet - facet normal -1.3741936668902775e-23 -1 1.2246467768225861e-16 - outer loop - vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859 - vertex -6.8548569679260254 5.0509712845296802e-16 4.1244311332702637 - vertex -5.8079638481140137 -6.7375107619063344e-16 -5.5015950202941895 - endloop - endfacet - facet normal 6.7308336531038825e-24 -1 1.2246467361801442e-16 - outer loop - vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189 - vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859 - vertex -1.2942559719085693 -9.668111351717021e-16 -7.8946118354797363 - endloop - endfacet - facet normal 6.3666292080684972e-24 -1 1.2246468065361937e-16 - outer loop - vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189 - vertex 7.8129639625549316 2.106103483513679e-16 1.7197639942169189 - vertex 7.2606029510498047 4.1137269461126327e-16 3.3591129779815674 - endloop - endfacet - facet normal 0 -1 1.2246468065361937e-16 - outer loop - vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189 - vertex 8 0 0 - vertex 7.8129639625549316 2.106103483513679e-16 1.7197639942169189 - endloop - endfacet - facet normal 3.1842828908146993e-24 -1 1.2246468030751846e-16 - outer loop - vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189 - vertex 7.2606029510498047 4.1137269461126327e-16 3.3591129779815674 - vertex -2.9611051082611084 -9.1013478424237758e-16 -7.4318141937255859 - endloop - endfacet - facet normal 2.774103235630015e-24 -1 1.2246492738336706e-16 - outer loop - vertex 2.1402270793914795 -9.4400667889101139e-16 -7.708399772644043 - vertex -1.2942559719085693 -9.668111351717021e-16 -7.8946118354797363 - vertex 0.43311101198196411 -9.7828059655223577e-16 -7.9882669448852539 - endloop - endfacet - facet normal 1.7384802803360558e-23 -1 1.2246465790458427e-16 - outer loop - vertex 2.1402270793914795 -9.4400667889101139e-16 -7.708399772644043 - vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189 - vertex -1.2942559719085693 -9.668111351717021e-16 -7.8946118354797363 - endloop - endfacet - facet normal 3.2253718924354727e-23 -1 1.2246466764090838e-16 - outer loop - vertex 6.368743896484375 -5.9289976967196074e-16 -4.8413939476013184 - vertex 7.2606029510498047 -4.1137269461126327e-16 -3.3591129779815674 - vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189 - endloop - endfacet - facet normal -3.383977019878155e-23 -1 1.2246472531209143e-16 - outer loop - vertex 5.1790900230407715 -7.4670342989924536e-16 -6.0972962379455566 - vertex 2.1402270793914795 -9.4400667889101139e-16 -7.708399772644043 - vertex 3.7472670078277588 -8.655921273429117e-16 -7.0680961608886719 - endloop - endfacet - facet normal -1.3726847622115549e-23 -1 1.2246468737510366e-16 - outer loop - vertex 5.1790900230407715 -7.4670342989924536e-16 -6.0972962379455566 - vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189 - vertex 2.1402270793914795 -9.4400667889101139e-16 -7.708399772644043 - endloop - endfacet - facet normal -2.4794069352434339e-23 -1 1.2246469403403049e-16 - outer loop - vertex 5.1790900230407715 -7.4670342989924536e-16 -6.0972962379455566 - vertex 6.368743896484375 -5.9289976967196074e-16 -4.8413939476013184 - vertex 7.8129639625549316 -2.106103483513679e-16 -1.7197639942169189 - endloop - endfacet -endsolid diff --git a/apps/cpu/Multiphase/backup/JetBreakupR.Binary.stl b/apps/cpu/Multiphase/backup/JetBreakupR.Binary.stl deleted file mode 100644 index 164487a33a2bf6c3b0d783229fa13bbae5522820..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/JetBreakupR.Binary.stl and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/Multiphase (Droplet Test).cpp b/apps/cpu/Multiphase/backup/Multiphase (Droplet Test).cpp deleted file mode 100644 index 868b4abfa15b990cfdb418066efda3a7e3c8f91c..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/Multiphase (Droplet Test).cpp +++ /dev/null @@ -1,482 +0,0 @@ -#include <iostream> -#include <string> - -#include "VirtualFluids.h" - -using namespace std; - - -void run(string configname) -{ - try - { - vf::basics::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 = vf::parallel::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 IncompressibleOffsetInterpolator()); - //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - 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 IncompressibleOffsetInterpolator()); - InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - 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 deleted file mode 100644 index 4b51783592d1ce6f89498313424d342b0766b289..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/Multiphase (Final before automation).cpp +++ /dev/null @@ -1,586 +0,0 @@ -#include <iostream> -#include <string> - -#include "VirtualFluids.h" - -using namespace std; - - -void run(string configname) -{ - try - { - vf::basics::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 = vf::parallel::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 IncompressibleOffsetInterpolator()); - //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - 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 IncompressibleOffsetInterpolator()); - InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - 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 deleted file mode 100644 index c79270b365d36b1b2a5c89f14ab9408592a1ecc4..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/Multiphase (Flow Focusing).cpp +++ /dev/null @@ -1,560 +0,0 @@ -#include <iostream> -#include <string> - -#include "VirtualFluids.h" - -using namespace std; - - -void run(string configname) -{ - try - { - vf::basics::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 = vf::parallel::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 IncompressibleOffsetInterpolator()); - //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - 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 IncompressibleOffsetInterpolator()); - InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - 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 deleted file mode 100644 index d43a61d6767b4193f443bcb1fede89cf3f37bc5f..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/Multiphase (Jet breakup on Phoenix).cpp +++ /dev/null @@ -1,508 +0,0 @@ -#include <iostream> -#include <string> - -#include "VirtualFluids.h" - -using namespace std; - - -void run(string configname) -{ - try - { - vf::basics::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 = vf::parallel::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 IncompressibleOffsetInterpolator()); - //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - 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 IncompressibleOffsetInterpolator()); - InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - 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 deleted file mode 100644 index c213e6366119e8cbb8ca0db20e387b07a642c758..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/Multiphase (T-Junction).cpp +++ /dev/null @@ -1,488 +0,0 @@ -#include <iostream> -#include <string> - -#include "VirtualFluids.h" - -using namespace std; - - -void run(string configname) -{ - try - { - vf::basics::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 = vf::parallel::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 IncompressibleOffsetInterpolator()); - //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - 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 IncompressibleOffsetInterpolator()); - InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - 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 deleted file mode 100644 index 4f5417397da1fc043e466f1901ccd727b8831ca4..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/Multiphase (Thermal).cpp +++ /dev/null @@ -1,529 +0,0 @@ -#include <iostream> -#include <string> - -#include "VirtualFluids.h" - -using namespace std; - - -void run(string configname) -{ - try - { - vf::basics::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 = vf::parallel::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 IncompressibleOffsetInterpolator()); - //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - 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 IncompressibleOffsetInterpolator()); - InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - 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 deleted file mode 100644 index 84de9055d3024be2409b12afed7540b38b057bc1..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/Multiphase (Tube).cpp +++ /dev/null @@ -1,404 +0,0 @@ -#include <iostream> -#include <string> - -#include "VirtualFluids.h" - -using namespace std; - - -void run(string configname) -{ - try - { - vf::basics::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 = vf::parallel::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 IncompressibleOffsetInterpolator()); - //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - 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 IncompressibleOffsetInterpolator()); - InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - 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 deleted file mode 100644 index f0d6104808996b53dbd9ab63d9f761ba1ec70df4..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/Multiphase - Cfg_file (The last).txt +++ /dev/null @@ -1,72 +0,0 @@ -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 deleted file mode 100644 index 3f19b6657a380c706a534577eab5cecdbe4fe637..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/Multiphase.cfg +++ /dev/null @@ -1,115 +0,0 @@ -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 deleted file mode 100644 index 8a7708c05f1af35028518aa0ca061fc81f3f3de6..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/Multiphase.cpp +++ /dev/null @@ -1,755 +0,0 @@ -#include <iostream> -#include <string> - -#include "VirtualFluids.h" - -using namespace std; - - -void run(string configname) -{ - try - { - vf::basics::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 = vf::parallel::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 IncompressibleOffsetInterpolator()); - //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - 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 IncompressibleOffsetInterpolator()); - InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - 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 deleted file mode 100644 index a0bfe97ba310a8858225b5c344f425121ddd2585..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (New VBased).cpp +++ /dev/null @@ -1,1258 +0,0 @@ -#include "MultiphaseCumulantLBMKernel.h" -#include "D3Q27System.h" -#include "Interpolator.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 deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (Original Final).cpp b/apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (Original Final).cpp deleted file mode 100644 index c0dcd4d0cf26a41da3ff36195d7d6efeabfe016d..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/MultiphaseCumulantLBMKernel (Original Final).cpp +++ /dev/null @@ -1,2700 +0,0 @@ -#include "MultiphaseCumulantLBMKernel.h" -#include "D3Q27System.h" -#include "Interpolator.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 deleted file mode 100644 index caa02fe7ad8048a5f658f6a74ea69a044307b90f..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/Multiphase_Jet.cfg +++ /dev/null @@ -1,75 +0,0 @@ -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 deleted file mode 100644 index 7546324577b48ee195aaa8a3172721be4e4d562b..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/T-Junction.FCStd and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/T-Junction.FCStd1 b/apps/cpu/Multiphase/backup/T-Junction.FCStd1 deleted file mode 100644 index f42334cd9105ab78edc27ba44171436be705389a..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/T-Junction.FCStd1 and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/T-Junction.ast b/apps/cpu/Multiphase/backup/T-Junction.ast deleted file mode 100644 index 9abee7d99250850d8b52ec708994ac822a0fe665..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/T-Junction.ast +++ /dev/null @@ -1,2088 +0,0 @@ -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 deleted file mode 100644 index 87c59e91572cedafd98f2b21053d09011e80a623..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/T-Junction.stl and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/Thermal - Cfg_file.txt b/apps/cpu/Multiphase/backup/Thermal - Cfg_file.txt deleted file mode 100644 index 34aa746a2c05e1f6dbfa38631f84b5dd99c2b12c..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/Thermal - Cfg_file.txt +++ /dev/null @@ -1,72 +0,0 @@ -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 deleted file mode 100644 index a496c4b14043a3d397f70a479205f7d23139c991..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/Tube_jet.FCStd and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/Tube_jet.stl b/apps/cpu/Multiphase/backup/Tube_jet.stl deleted file mode 100644 index 8b9fa2cb33db4762af84b2e7da4d46a01d3c0184..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/Tube_jet.stl and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/Tube_jet1.FCStd b/apps/cpu/Multiphase/backup/Tube_jet1.FCStd deleted file mode 100644 index a009fabad2296f3a56ef31b8122ccb60341a76a6..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/Tube_jet1.FCStd and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/Tube_jet1.stl b/apps/cpu/Multiphase/backup/Tube_jet1.stl deleted file mode 100644 index 416bdd4d9e81be88dfc2164c97a67577812ebdd3..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/Tube_jet1.stl and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/Tube_jet_s.stl b/apps/cpu/Multiphase/backup/Tube_jet_s.stl deleted file mode 100644 index 8cdc56a34427f1dbea876038a43b0fea78de2d09..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/Tube_jet_s.stl and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/aaaa.stl b/apps/cpu/Multiphase/backup/aaaa.stl deleted file mode 100644 index 012423f0625912bb76dcae9c5040a1dcad1d2bda..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/aaaa.stl and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/dd.ast b/apps/cpu/Multiphase/backup/dd.ast deleted file mode 100644 index b95f8748a8bc6e4fdb3f94f61521a27fb392d073..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/dd.ast +++ /dev/null @@ -1,198 +0,0 @@ -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 deleted file mode 100644 index c72bd5e4cc997a156f43cc526b38d7fb49077aa1..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/dd.stl and /dev/null differ diff --git a/apps/cpu/Multiphase/backup/inlet1.stl b/apps/cpu/Multiphase/backup/inlet1.stl deleted file mode 100644 index e3339340584bb199967b3f7fc4b2571c5cc64a75..0000000000000000000000000000000000000000 --- a/apps/cpu/Multiphase/backup/inlet1.stl +++ /dev/null @@ -1,1710 +0,0 @@ -solid Visualization Toolkit generated SLA File - facet normal 0 -0.85844862044487247 -0.51289956722178598 - outer loop - vertex 8 -5.4001836776733398 -2.6005914211273193 - vertex -7.0000004768371582 -4.8490467071533203 -3.5230386257171631 - vertex 8 -4.8490467071533203 -3.5230386257171631 - endloop - endfacet - facet normal 0 -0.85844862044487247 -0.51289956722178598 - outer loop - vertex -7.0000004768371582 -5.4001836776733398 -2.6005914211273193 - vertex -7.0000004768371582 -4.8490467071533203 -3.5230386257171631 - vertex 8 -5.4001836776733398 -2.6005914211273193 - endloop - endfacet - facet normal 0 -0.75307168647452871 -0.65793847359035706 - outer loop - vertex 8 -4.8490467071533203 -3.5230386257171631 - vertex -7.0000004768371582 -4.8490467071533203 -3.5230386257171631 - vertex 8 -4.1420578956604004 -4.3322529792785645 - endloop - endfacet - facet normal -3.483186817680354e-17 0.99597429384365632 0.089639310587654369 - outer loop - vertex 8 5.9937515258789062 2.5014704053256086e-15 - vertex -7.0000004768371582 5.9937515258789062 -3.3272004739564633e-15 - vertex 8 5.8974294662475586 1.070225715637207 - endloop - endfacet - facet normal 0 -0.75307168647452871 -0.65793847359035706 - outer loop - vertex -7.0000004768371582 -4.8490467071533203 -3.5230386257171631 - vertex -7.0000004768371582 -4.1420578956604004 -4.3322529792785645 - vertex 8 -4.1420578956604004 -4.3322529792785645 - endloop - endfacet - facet normal 0 -0.62348983541065761 -0.78183145571126211 - outer loop - vertex 8 -4.1420578956604004 -4.3322529792785645 - vertex -7.0000004768371582 -4.1420578956604004 -4.3322529792785645 - vertex 8 -3.3019397258758545 -5.0022249221801758 - endloop - endfacet - facet normal -0 0.96396290563681286 0.26603668272671144 - outer loop - vertex 8 5.8974294662475586 1.070225715637207 - vertex -7.0000004768371582 5.8974294662475586 1.070225715637207 - vertex 8 5.6115593910217285 2.106053352355957 - endloop - endfacet - facet normal -0 0.99597429384365654 0.089639310587653898 - outer loop - vertex -7.0000004768371582 5.9937515258789062 -3.3272004739564633e-15 - vertex -7.0000004768371582 5.8974294662475586 1.070225715637207 - vertex 8 5.8974294662475586 1.070225715637207 - endloop - endfacet - facet normal 0 -0.47386859124399539 -0.88059557018669543 - outer loop - vertex 8 -3.3019397258758545 -5.0022249221801758 - vertex -7.0000004768371582 -3.3019397258758545 -5.0022249221801758 - vertex 8 -2.3556942939758301 -5.5114212036132812 - endloop - endfacet - facet normal 0 -0.62348983541065761 -0.78183145571126211 - outer loop - vertex -7.0000004768371582 -4.1420578956604004 -4.3322529792785645 - vertex -7.0000004768371582 -3.3019397258758545 -5.0022249221801758 - vertex 8 -3.3019397258758545 -5.0022249221801758 - endloop - endfacet - facet normal -0 0.90096871492997632 0.43388405676796565 - outer loop - vertex 8 5.6115593910217285 2.106053352355957 - vertex -7.0000004768371582 5.6115593910217285 2.106053352355957 - vertex 8 5.1453285217285156 3.0741908550262451 - endloop - endfacet - facet normal -0 0.96396290563681286 0.26603668272671144 - outer loop - vertex -7.0000004768371582 5.8974294662475586 1.070225715637207 - vertex -7.0000004768371582 5.6115593910217285 2.106053352355957 - vertex 8 5.6115593910217285 2.106053352355957 - endloop - endfacet - facet normal 0 -0.47386859124399539 -0.88059557018669543 - outer loop - vertex -7.0000004768371582 -3.3019397258758545 -5.0022249221801758 - vertex -7.0000004768371582 -2.3556942939758301 -5.5114212036132812 - vertex 8 -2.3556942939758301 -5.5114212036132812 - endloop - endfacet - facet normal -0 0.90096871492997632 0.43388405676796565 - outer loop - vertex -7.0000004768371582 5.6115593910217285 2.106053352355957 - vertex -7.0000004768371582 5.1453285217285156 3.0741908550262451 - vertex 8 5.1453285217285156 3.0741908550262451 - endloop - endfacet - facet normal 0 -0.30901698225917551 -0.95105652023180642 - outer loop - vertex 8 -2.3556942939758301 -5.5114212036132812 - vertex -7.0000004768371582 -1.3337352275848389 -5.8434758186340332 - vertex 8 -1.3337352275848389 -5.8434758186340332 - endloop - endfacet - facet normal 0 -0.13423310024304191 -0.99094978419652602 - outer loop - vertex 8 -1.3337352275848389 -5.8434758186340332 - vertex -7.0000004768371582 -1.3337352275848389 -5.8434758186340332 - vertex 8 -0.26890864968299866 -5.9877161979675293 - endloop - endfacet - facet normal 0 -0.30901698225917551 -0.95105652023180642 - outer loop - vertex -7.0000004768371582 -2.3556942939758301 -5.5114212036132812 - vertex -7.0000004768371582 -1.3337352275848389 -5.8434758186340332 - vertex 8 -2.3556942939758301 -5.5114212036132812 - endloop - endfacet - facet normal -0 0.80901707821253466 0.58778513689991641 - outer loop - vertex 8 5.1453285217285156 3.0741908550262451 - vertex -7.0000004768371582 4.5137233734130859 3.9435210227966309 - vertex 8 4.5137233734130859 3.9435210227966309 - endloop - endfacet - facet normal 0 0.80901707821253466 0.58778513689991641 - outer loop - vertex -7.0000004768371582 5.1453285217285156 3.0741908550262451 - vertex -7.0000004768371582 4.5137233734130859 3.9435210227966309 - vertex 8 5.1453285217285156 3.0741908550262451 - endloop - endfacet - facet normal 0 0.044864920280647716 -0.99899306250254383 - outer loop - vertex 8 -0.26890864968299866 -5.9877161979675293 - vertex -7.0000004768371582 -0.26890864968299866 -5.9877161979675293 - vertex 8 0.80456084012985229 -5.9395065307617188 - endloop - endfacet - facet normal 0 -0.13423310024304191 -0.99094978419652602 - outer loop - vertex -7.0000004768371582 -1.3337352275848389 -5.8434758186340332 - vertex -7.0000004768371582 -0.26890864968299866 -5.9877161979675293 - vertex 8 -0.26890864968299866 -5.9877161979675293 - endloop - endfacet - facet normal -0 0.69106276312575432 0.72279475469942178 - outer loop - vertex 8 4.5137233734130859 3.9435210227966309 - vertex -7.0000004768371582 3.7370429039001465 4.6861038208007812 - vertex 8 3.7370429039001465 4.6861038208007812 - endloop - endfacet - facet normal 0 0.69106276312575432 0.72279475469942178 - outer loop - vertex -7.0000004768371582 4.5137233734130859 3.9435210227966309 - vertex -7.0000004768371582 3.7370429039001465 4.6861038208007812 - vertex 8 4.5137233734130859 3.9435210227966309 - endloop - endfacet - facet normal 0 0.22252075334182159 -0.97492795340588534 - outer loop - vertex 8 0.80456084012985229 -5.9395065307617188 - vertex -7.0000004768371582 0.80456084012985229 -5.9395065307617188 - vertex 8 1.8521710634231567 -5.7003965377807617 - endloop - endfacet - facet normal 0 0.044864920280647716 -0.99899306250254383 - outer loop - vertex -7.0000004768371582 -0.26890864968299866 -5.9877161979675293 - vertex -7.0000004768371582 0.80456084012985229 -5.9395065307617188 - vertex 8 0.80456084012985229 -5.9395065307617188 - endloop - endfacet - facet normal -0 0.55089693770547221 0.83457328259819885 - outer loop - vertex 8 3.7370429039001465 4.6861038208007812 - vertex -7.0000004768371582 2.8402509689331055 5.2780709266662598 - vertex 8 2.8402509689331055 5.2780709266662598 - endloop - endfacet - facet normal 0 0.39302502509892845 -0.91952777535319008 - outer loop - vertex 8 1.8521710634231567 -5.7003965377807617 - vertex -7.0000004768371582 1.8521710634231567 -5.7003965377807617 - vertex 8 2.8402509689331055 -5.2780709266662598 - endloop - endfacet - facet normal 0 0.55089693770547221 0.83457328259819885 - outer loop - vertex -7.0000004768371582 3.7370429039001465 4.6861038208007812 - vertex -7.0000004768371582 2.8402509689331055 5.2780709266662598 - vertex 8 3.7370429039001465 4.6861038208007812 - endloop - endfacet - facet normal 0 0.22252075334182159 -0.97492795340588534 - outer loop - vertex -7.0000004768371582 0.80456084012985229 -5.9395065307617188 - vertex -7.0000004768371582 1.8521710634231567 -5.7003965377807617 - vertex 8 1.8521710634231567 -5.7003965377807617 - endloop - endfacet - facet normal 0 0.39302502509892845 0.91952777535319008 - outer loop - vertex -7.0000004768371582 2.8402509689331055 5.2780709266662598 - vertex -7.0000004768371582 1.8521710634231567 5.7003965377807617 - vertex 8 2.8402509689331055 5.2780709266662598 - endloop - endfacet - facet normal -0 0.39302502509892845 0.91952777535319008 - outer loop - vertex 8 2.8402509689331055 5.2780709266662598 - vertex -7.0000004768371582 1.8521710634231567 5.7003965377807617 - vertex 8 1.8521710634231567 5.7003965377807617 - endloop - endfacet - facet normal 0 0.55089693770547221 -0.83457328259819885 - outer loop - vertex 8 2.8402509689331055 -5.2780709266662598 - vertex -7.0000004768371582 2.8402509689331055 -5.2780709266662598 - vertex 8 3.7370429039001465 -4.6861038208007812 - endloop - endfacet - facet normal -0 0.22252075334182159 0.97492795340588534 - outer loop - vertex 8 1.8521710634231567 5.7003965377807617 - vertex -7.0000004768371582 1.8521710634231567 5.7003965377807617 - vertex 8 0.80456084012985229 5.9395065307617188 - endloop - endfacet - facet normal 0 0.39302502509892845 -0.91952777535319008 - outer loop - vertex -7.0000004768371582 1.8521710634231567 -5.7003965377807617 - vertex -7.0000004768371582 2.8402509689331055 -5.2780709266662598 - vertex 8 2.8402509689331055 -5.2780709266662598 - endloop - endfacet - facet normal -0 0.22252075334182159 0.97492795340588534 - outer loop - vertex -7.0000004768371582 1.8521710634231567 5.7003965377807617 - vertex -7.0000004768371582 0.80456084012985229 5.9395065307617188 - vertex 8 0.80456084012985229 5.9395065307617188 - endloop - endfacet - facet normal 0 0.69106276312575432 -0.72279475469942178 - outer loop - vertex 8 3.7370429039001465 -4.6861038208007812 - vertex -7.0000004768371582 3.7370429039001465 -4.6861038208007812 - vertex 8 4.5137233734130859 -3.9435210227966309 - endloop - endfacet - facet normal 0 0.55089693770547221 -0.83457328259819885 - outer loop - vertex -7.0000004768371582 2.8402509689331055 -5.2780709266662598 - vertex -7.0000004768371582 3.7370429039001465 -4.6861038208007812 - vertex 8 3.7370429039001465 -4.6861038208007812 - endloop - endfacet - facet normal 0 0.044864920280647716 0.99899306250254383 - outer loop - vertex -7.0000004768371582 0.80456084012985229 5.9395065307617188 - vertex -7.0000004768371582 -0.26890864968299866 5.9877161979675293 - vertex 8 0.80456084012985229 5.9395065307617188 - endloop - endfacet - facet normal -0 0.044864920280647716 0.99899306250254383 - outer loop - vertex 8 0.80456084012985229 5.9395065307617188 - vertex -7.0000004768371582 -0.26890864968299866 5.9877161979675293 - vertex 8 -0.26890864968299866 5.9877161979675293 - endloop - endfacet - facet normal 0 0.80901707821253466 -0.58778513689991641 - outer loop - vertex 8 4.5137233734130859 -3.9435210227966309 - vertex -7.0000004768371582 4.5137233734130859 -3.9435210227966309 - vertex 8 5.1453285217285156 -3.0741908550262451 - endloop - endfacet - facet normal 0 -0.13423310024304191 0.99094978419652602 - outer loop - vertex 8 -0.26890864968299866 5.9877161979675293 - vertex -7.0000004768371582 -0.26890864968299866 5.9877161979675293 - vertex 8 -1.3337352275848389 5.8434758186340332 - endloop - endfacet - facet normal 0 0.69106276312575432 -0.72279475469942178 - outer loop - vertex -7.0000004768371582 3.7370429039001465 -4.6861038208007812 - vertex -7.0000004768371582 4.5137233734130859 -3.9435210227966309 - vertex 8 4.5137233734130859 -3.9435210227966309 - endloop - endfacet - facet normal 0 -0.13423310024304191 0.99094978419652602 - outer loop - vertex -7.0000004768371582 -0.26890864968299866 5.9877161979675293 - vertex -7.0000004768371582 -1.3337352275848389 5.8434758186340332 - vertex 8 -1.3337352275848389 5.8434758186340332 - endloop - endfacet - facet normal 0 0.80901707821253466 -0.58778513689991641 - outer loop - vertex -7.0000004768371582 4.5137233734130859 -3.9435210227966309 - vertex -7.0000004768371582 5.1453285217285156 -3.0741908550262451 - vertex 8 5.1453285217285156 -3.0741908550262451 - endloop - endfacet - facet normal 0 0.90096871492997632 -0.43388405676796565 - outer loop - vertex -7.0000004768371582 5.1453285217285156 -3.0741908550262451 - vertex -7.0000004768371582 5.6115593910217285 -2.106053352355957 - vertex 8 5.1453285217285156 -3.0741908550262451 - endloop - endfacet - facet normal 0 -0.30901698225917551 0.95105652023180642 - outer loop - vertex -7.0000004768371582 -1.3337352275848389 5.8434758186340332 - vertex -7.0000004768371582 -2.3556942939758301 5.5114212036132812 - vertex 8 -1.3337352275848389 5.8434758186340332 - endloop - endfacet - facet normal 0 0.90096871492997632 -0.43388405676796565 - outer loop - vertex 8 5.1453285217285156 -3.0741908550262451 - vertex -7.0000004768371582 5.6115593910217285 -2.106053352355957 - vertex 8 5.6115593910217285 -2.106053352355957 - endloop - endfacet - facet normal 0 -0.30901698225917551 0.95105652023180642 - outer loop - vertex 8 -1.3337352275848389 5.8434758186340332 - vertex -7.0000004768371582 -2.3556942939758301 5.5114212036132812 - vertex 8 -2.3556942939758301 5.5114212036132812 - endloop - endfacet - facet normal 0 0.96396290563681286 -0.26603668272671144 - outer loop - vertex 8 5.6115593910217285 -2.106053352355957 - vertex -7.0000004768371582 5.6115593910217285 -2.106053352355957 - vertex 8 5.8974294662475586 -1.070225715637207 - endloop - endfacet - facet normal 0 -0.47386859124399539 0.88059557018669543 - outer loop - vertex 8 -2.3556942939758301 5.5114212036132812 - vertex -7.0000004768371582 -2.3556942939758301 5.5114212036132812 - vertex 8 -3.3019397258758545 5.0022249221801758 - endloop - endfacet - facet normal 0 0.96396290563681286 -0.26603668272671144 - outer loop - vertex -7.0000004768371582 5.6115593910217285 -2.106053352355957 - vertex -7.0000004768371582 5.8974294662475586 -1.070225715637207 - vertex 8 5.8974294662475586 -1.070225715637207 - endloop - endfacet - facet normal 0 -0.47386859124399539 0.88059557018669543 - outer loop - vertex -7.0000004768371582 -2.3556942939758301 5.5114212036132812 - vertex -7.0000004768371582 -3.3019397258758545 5.0022249221801758 - vertex 8 -3.3019397258758545 5.0022249221801758 - endloop - endfacet - facet normal 0 0.99597429384365654 -0.089639310587653981 - outer loop - vertex 8 5.8974294662475586 -1.070225715637207 - vertex -7.0000004768371582 5.8974294662475586 -1.070225715637207 - vertex 8 5.9937515258789062 2.5014704053256086e-15 - endloop - endfacet - facet normal 3.4831868176803565e-17 0.99597429384365632 -0.089639310587654439 - outer loop - vertex -7.0000004768371582 5.8974294662475586 -1.070225715637207 - vertex -7.0000004768371582 5.9937515258789062 -3.3272004739564633e-15 - vertex 8 5.9937515258789062 2.5014704053256086e-15 - endloop - endfacet - facet normal 0 -0.62348983541065761 0.78183145571126211 - outer loop - vertex -7.0000004768371582 -3.3019397258758545 5.0022249221801758 - vertex -7.0000004768371582 -4.1420578956604004 4.3322529792785645 - vertex 8 -3.3019397258758545 5.0022249221801758 - endloop - endfacet - facet normal 0 -0.62348983541065761 0.78183145571126211 - outer loop - vertex 8 -3.3019397258758545 5.0022249221801758 - vertex -7.0000004768371582 -4.1420578956604004 4.3322529792785645 - vertex 8 -4.1420578956604004 4.3322529792785645 - endloop - endfacet - facet normal 0 -0.75307168647452871 0.65793847359035706 - outer loop - vertex 8 -4.1420578956604004 4.3322529792785645 - vertex -7.0000004768371582 -4.1420578956604004 4.3322529792785645 - vertex 8 -4.8490467071533203 3.5230386257171631 - endloop - endfacet - facet normal 0 -0.75307168647452871 0.65793847359035706 - outer loop - vertex -7.0000004768371582 -4.1420578956604004 4.3322529792785645 - vertex -7.0000004768371582 -4.8490467071533203 3.5230386257171631 - vertex 8 -4.8490467071533203 3.5230386257171631 - endloop - endfacet - facet normal 0 -0.85844862044487247 0.51289956722178598 - outer loop - vertex 8 -4.8490467071533203 3.5230386257171631 - vertex -7.0000004768371582 -4.8490467071533203 3.5230386257171631 - vertex 8 -5.4001836776733398 2.6005914211273193 - endloop - endfacet - facet normal 0 -0.85844862044487247 0.51289956722178598 - outer loop - vertex -7.0000004768371582 -4.8490467071533203 3.5230386257171631 - vertex -7.0000004768371582 -5.4001836776733398 2.6005914211273193 - vertex 8 -5.4001836776733398 2.6005914211273193 - endloop - endfacet - facet normal 0 -0.93623494328775736 0.35137463051132423 - outer loop - vertex 8 -5.4001836776733398 2.6005914211273193 - vertex -7.0000004768371582 -5.4001836776733398 2.6005914211273193 - vertex 8 -5.7777538299560547 1.5945587158203125 - endloop - endfacet - facet normal 0 -0.93623494328775736 0.35137463051132423 - outer loop - vertex -7.0000004768371582 -5.4001836776733398 2.6005914211273193 - vertex -7.0000004768371582 -5.7777538299560547 1.5945587158203125 - vertex 8 -5.7777538299560547 1.5945587158203125 - endloop - endfacet - facet normal 0 -0.98392955450267261 0.17855708268274328 - outer loop - vertex -7.0000004768371582 -5.7777538299560547 1.5945587158203125 - vertex -7.0000004768371582 -5.9696226119995117 0.53727573156356812 - vertex 8 -5.7777538299560547 1.5945587158203125 - endloop - endfacet - facet normal 0 -0.98392955450267261 0.17855708268274328 - outer loop - vertex 8 -5.7777538299560547 1.5945587158203125 - vertex -7.0000004768371582 -5.9696226119995117 0.53727573156356812 - vertex 8 -5.9696226119995117 0.53727573156356812 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex 8 -5.9696226119995117 0.53727573156356812 - vertex -7.0000004768371582 -5.9696226119995117 0.53727573156356812 - vertex 8 -5.9696226119995117 -0.53727573156356812 - endloop - endfacet - facet normal 0 -1 0 - outer loop - vertex -7.0000004768371582 -5.9696226119995117 0.53727573156356812 - vertex -7.0000004768371582 -5.9696226119995117 -0.53727573156356812 - vertex 8 -5.9696226119995117 -0.53727573156356812 - endloop - endfacet - facet normal 0 -0.98392955450267261 -0.17855708268274328 - outer loop - vertex 8 -5.9696226119995117 -0.53727573156356812 - vertex -7.0000004768371582 -5.9696226119995117 -0.53727573156356812 - vertex 8 -5.7777538299560547 -1.5945587158203125 - endloop - endfacet - facet normal 0 -0.98392955450267261 -0.17855708268274328 - outer loop - vertex -7.0000004768371582 -5.9696226119995117 -0.53727573156356812 - vertex -7.0000004768371582 -5.7777538299560547 -1.5945587158203125 - vertex 8 -5.7777538299560547 -1.5945587158203125 - endloop - endfacet - facet normal 0 -0.93623494328775736 -0.35137463051132423 - outer loop - vertex 8 -5.7777538299560547 -1.5945587158203125 - vertex -7.0000004768371582 -5.7777538299560547 -1.5945587158203125 - vertex 8 -5.4001836776733398 -2.6005914211273193 - endloop - endfacet - facet normal 0 -0.93623494328775736 -0.35137463051132423 - outer loop - vertex -7.0000004768371582 -5.7777538299560547 -1.5945587158203125 - vertex -7.0000004768371582 -5.4001836776733398 -2.6005914211273193 - vertex 8 -5.4001836776733398 -2.6005914211273193 - endloop - endfacet - facet normal -0 0.23931571466750717 0.97094180500850835 - outer loop - vertex -7.0000004768371582 -0.30369770526885986 -2.5011756420135498 - vertex -7.0000004768371582 -0.89344334602355957 -2.3558163642883301 - vertex 8 -0.89344334602355957 -2.3558163642883301 - endloop - endfacet - facet normal 0 0.23931571466750717 0.97094180500850835 - outer loop - vertex -7.0000004768371582 -0.30369770526885986 -2.5011756420135498 - vertex 8 -0.89344334602355957 -2.3558163642883301 - vertex 8 -0.30369770526885986 -2.5011756420135498 - endloop - endfacet - facet normal 0 0 1 - outer loop - vertex -7.0000004768371582 0.30369770526885986 -2.5011756420135498 - vertex -7.0000004768371582 -0.30369770526885986 -2.5011756420135498 - vertex 8 -0.30369770526885986 -2.5011756420135498 - endloop - endfacet - facet normal 0 -0 1 - outer loop - vertex -7.0000004768371582 0.30369770526885986 -2.5011756420135498 - vertex 8 -0.30369770526885986 -2.5011756420135498 - vertex 8 0.30369770526885986 -2.5011756420135498 - endloop - endfacet - facet normal 4.6838001325319123e-17 -0.99270884511338364 -0.12053691896532001 - outer loop - vertex -7.0000004768371582 2.4463324546813965 0.60296684503555298 - vertex -7.0000004768371582 2.5195460319519043 -1.398628955198418e-15 - vertex 8 2.5195460319519043 4.4300420299627722e-15 - endloop - endfacet - facet normal 0 -0.23931571466750717 0.97094180500850835 - outer loop - vertex -7.0000004768371582 0.89344334602355957 -2.3558163642883301 - vertex -7.0000004768371582 0.30369770526885986 -2.5011756420135498 - vertex 8 0.30369770526885986 -2.5011756420135498 - endloop - endfacet - facet normal 0 -0.99270884511338353 -0.12053691896532118 - outer loop - vertex -7.0000004768371582 2.4463324546813965 0.60296684503555298 - vertex 8 2.5195460319519043 4.4300420299627722e-15 - vertex 8 2.4463324546813965 0.60296684503555298 - endloop - endfacet - facet normal 0 -0.23931571466750717 0.97094180500850835 - outer loop - vertex -7.0000004768371582 0.89344334602355957 -2.3558163642883301 - vertex 8 0.30369770526885986 -2.5011756420135498 - vertex 8 0.89344334602355957 -2.3558163642883301 - endloop - endfacet - facet normal 0 -0.93501633902348258 -0.35460463301982359 - outer loop - vertex -7.0000004768371582 2.2309472560882568 1.1708914041519165 - vertex 8 2.4463324546813965 0.60296684503555298 - vertex 8 2.2309472560882568 1.1708914041519165 - endloop - endfacet - facet normal 0 -0.46472313027195961 0.88545604757674512 - outer loop - vertex -7.0000004768371582 1.4312652349472046 -2.0735456943511963 - vertex -7.0000004768371582 0.89344334602355957 -2.3558163642883301 - vertex 8 0.89344334602355957 -2.3558163642883301 - endloop - endfacet - facet normal 0 -0.93501633902348258 -0.35460463301982359 - outer loop - vertex -7.0000004768371582 2.2309472560882568 1.1708914041519165 - vertex -7.0000004768371582 2.4463324546813965 0.60296684503555298 - vertex 8 2.4463324546813965 0.60296684503555298 - endloop - endfacet - facet normal 0 -0.46472313027195961 0.88545604757674512 - outer loop - vertex -7.0000004768371582 1.4312652349472046 -2.0735456943511963 - vertex 8 0.89344334602355957 -2.3558163642883301 - vertex 8 1.4312652349472046 -2.0735456943511963 - endloop - endfacet - facet normal 0 -0.66312261734283129 0.74851078440353358 - outer loop - vertex -7.0000004768371582 1.8859072923660278 -1.6707680225372314 - vertex 8 1.4312652349472046 -2.0735456943511963 - vertex 8 1.8859072923660278 -1.6707680225372314 - endloop - endfacet - facet normal 0 -0.82298382978185469 -0.56806479904812901 - outer loop - vertex -7.0000004768371582 1.8859072923660278 1.6707680225372314 - vertex 8 2.2309472560882568 1.1708914041519165 - vertex 8 1.8859072923660278 1.6707680225372314 - endloop - endfacet - facet normal 0 -0.66312261734283129 0.74851078440353358 - outer loop - vertex -7.0000004768371582 1.8859072923660278 -1.6707680225372314 - vertex -7.0000004768371582 1.4312652349472046 -2.0735456943511963 - vertex 8 1.4312652349472046 -2.0735456943511963 - endloop - endfacet - facet normal 0 -0.82298382978185469 -0.56806479904812901 - outer loop - vertex -7.0000004768371582 1.8859072923660278 1.6707680225372314 - vertex -7.0000004768371582 2.2309472560882568 1.1708914041519165 - vertex 8 2.2309472560882568 1.1708914041519165 - endloop - endfacet - facet normal 0 -0.82298382978185469 0.56806479904812901 - outer loop - vertex -7.0000004768371582 2.2309472560882568 -1.1708914041519165 - vertex -7.0000004768371582 1.8859072923660278 -1.6707680225372314 - vertex 8 1.8859072923660278 -1.6707680225372314 - endloop - endfacet - facet normal 0 -0.82298382978185469 0.56806479904812901 - outer loop - vertex -7.0000004768371582 2.2309472560882568 -1.1708914041519165 - vertex 8 1.8859072923660278 -1.6707680225372314 - vertex 8 2.2309472560882568 -1.1708914041519165 - endloop - endfacet - facet normal 0 -0.66312261734283129 -0.74851078440353358 - outer loop - vertex -7.0000004768371582 1.4312652349472046 2.0735456943511963 - vertex 8 1.8859072923660278 1.6707680225372314 - vertex 8 1.4312652349472046 2.0735456943511963 - endloop - endfacet - facet normal 0 -0.66312261734283129 -0.74851078440353358 - outer loop - vertex -7.0000004768371582 1.4312652349472046 2.0735456943511963 - vertex -7.0000004768371582 1.8859072923660278 1.6707680225372314 - vertex 8 1.8859072923660278 1.6707680225372314 - endloop - endfacet - facet normal 0 -0.93501633902348258 0.35460463301982359 - outer loop - vertex -7.0000004768371582 2.4463324546813965 -0.60296684503555298 - vertex 8 2.2309472560882568 -1.1708914041519165 - vertex 8 2.4463324546813965 -0.60296684503555298 - endloop - endfacet - facet normal 0 -0.93501633902348258 0.35460463301982359 - outer loop - vertex -7.0000004768371582 2.4463324546813965 -0.60296684503555298 - vertex -7.0000004768371582 2.2309472560882568 -1.1708914041519165 - vertex 8 2.2309472560882568 -1.1708914041519165 - endloop - endfacet - facet normal 0 -0.46472313027195961 -0.88545604757674512 - outer loop - vertex -7.0000004768371582 0.89344334602355957 2.3558163642883301 - vertex 8 1.4312652349472046 2.0735456943511963 - vertex 8 0.89344334602355957 2.3558163642883301 - endloop - endfacet - facet normal 0 -0.46472313027195961 -0.88545604757674512 - outer loop - vertex -7.0000004768371582 0.89344334602355957 2.3558163642883301 - vertex -7.0000004768371582 1.4312652349472046 2.0735456943511963 - vertex 8 1.4312652349472046 2.0735456943511963 - endloop - endfacet - facet normal -4.721925413423835e-17 -0.99270884511338364 0.1205369189653194 - outer loop - vertex -7.0000004768371582 2.5195460319519043 -1.398628955198418e-15 - vertex 8 2.4463324546813965 -0.60296684503555298 - vertex 8 2.5195460319519043 4.4300420299627722e-15 - endloop - endfacet - facet normal 0 -0.99270884511338364 0.12053691896532057 - outer loop - vertex -7.0000004768371582 2.5195460319519043 -1.398628955198418e-15 - vertex -7.0000004768371582 2.4463324546813965 -0.60296684503555298 - vertex 8 2.4463324546813965 -0.60296684503555298 - endloop - endfacet - facet normal 0 -0.23931571466750717 -0.97094180500850835 - outer loop - vertex -7.0000004768371582 0.30369770526885986 2.5011756420135498 - vertex 8 0.89344334602355957 2.3558163642883301 - vertex 8 0.30369770526885986 2.5011756420135498 - endloop - endfacet - facet normal 0 -0.23931571466750717 -0.97094180500850835 - outer loop - vertex -7.0000004768371582 0.30369770526885986 2.5011756420135498 - vertex -7.0000004768371582 0.89344334602355957 2.3558163642883301 - vertex 8 0.89344334602355957 2.3558163642883301 - endloop - endfacet - facet normal 0 -0 -1 - outer loop - vertex -7.0000004768371582 -0.30369770526885986 2.5011756420135498 - vertex 8 0.30369770526885986 2.5011756420135498 - vertex 8 -0.30369770526885986 2.5011756420135498 - endloop - endfacet - facet normal 0 0 -1 - outer loop - vertex -7.0000004768371582 -0.30369770526885986 2.5011756420135498 - vertex -7.0000004768371582 0.30369770526885986 2.5011756420135498 - vertex 8 0.30369770526885986 2.5011756420135498 - endloop - endfacet - facet normal 0 0.23931571466750717 -0.97094180500850835 - outer loop - vertex -7.0000004768371582 -0.89344334602355957 2.3558163642883301 - vertex 8 -0.30369770526885986 2.5011756420135498 - vertex 8 -0.89344334602355957 2.3558163642883301 - endloop - endfacet - facet normal 0 0.23931571466750717 -0.97094180500850835 - outer loop - vertex -7.0000004768371582 -0.89344334602355957 2.3558163642883301 - vertex -7.0000004768371582 -0.30369770526885986 2.5011756420135498 - vertex 8 -0.30369770526885986 2.5011756420135498 - endloop - endfacet - facet normal 0 0.46472313027195961 -0.88545604757674512 - outer loop - vertex -7.0000004768371582 -1.4312652349472046 2.0735456943511963 - vertex 8 -0.89344334602355957 2.3558163642883301 - vertex 8 -1.4312652349472046 2.0735456943511963 - endloop - endfacet - facet normal 0 0.46472313027195961 -0.88545604757674512 - outer loop - vertex -7.0000004768371582 -1.4312652349472046 2.0735456943511963 - vertex -7.0000004768371582 -0.89344334602355957 2.3558163642883301 - vertex 8 -0.89344334602355957 2.3558163642883301 - endloop - endfacet - facet normal 0 0.66312261734283129 -0.74851078440353358 - outer loop - vertex -7.0000004768371582 -1.8859072923660278 1.6707680225372314 - vertex 8 -1.4312652349472046 2.0735456943511963 - vertex 8 -1.8859072923660278 1.6707680225372314 - endloop - endfacet - facet normal 0 0.66312261734283129 -0.74851078440353358 - outer loop - vertex -7.0000004768371582 -1.8859072923660278 1.6707680225372314 - vertex -7.0000004768371582 -1.4312652349472046 2.0735456943511963 - vertex 8 -1.4312652349472046 2.0735456943511963 - endloop - endfacet - facet normal 0 0.82298382978185469 -0.56806479904812901 - outer loop - vertex -7.0000004768371582 -2.2309472560882568 1.1708914041519165 - vertex -7.0000004768371582 -1.8859072923660278 1.6707680225372314 - vertex 8 -1.8859072923660278 1.6707680225372314 - endloop - endfacet - facet normal 0 0.82298382978185469 -0.56806479904812901 - outer loop - vertex -7.0000004768371582 -2.2309472560882568 1.1708914041519165 - vertex 8 -1.8859072923660278 1.6707680225372314 - vertex 8 -2.2309472560882568 1.1708914041519165 - endloop - endfacet - facet normal 0 0.93501633902348258 -0.35460463301982359 - outer loop - vertex -7.0000004768371582 -2.4463324546813965 0.60296684503555298 - vertex -7.0000004768371582 -2.2309472560882568 1.1708914041519165 - vertex 8 -2.2309472560882568 1.1708914041519165 - endloop - endfacet - facet normal 0 0.93501633902348258 -0.35460463301982359 - outer loop - vertex -7.0000004768371582 -2.4463324546813965 0.60296684503555298 - vertex 8 -2.2309472560882568 1.1708914041519165 - vertex 8 -2.4463324546813965 0.60296684503555298 - endloop - endfacet - facet normal 0 0.99270884511338353 -0.12053691896532118 - outer loop - vertex -7.0000004768371582 -2.5195460319519043 4.5044424394342746e-15 - vertex -7.0000004768371582 -2.4463324546813965 0.60296684503555298 - vertex 8 -2.4463324546813965 0.60296684503555298 - endloop - endfacet - facet normal -2.208642532085365e-17 0.99270884511338364 -0.12053691896532064 - outer loop - vertex -7.0000004768371582 -2.5195460319519043 4.5044424394342746e-15 - vertex 8 -2.4463324546813965 0.60296684503555298 - vertex 8 -2.5195460319519043 1.7763568394002505e-15 - endloop - endfacet - facet normal 2.192233482989147e-17 0.99270884511338364 0.1205369189653194 - outer loop - vertex -7.0000004768371582 -2.4463324546813965 -0.60296684503555298 - vertex -7.0000004768371582 -2.5195460319519043 4.5044424394342746e-15 - vertex 8 -2.5195460319519043 1.7763568394002505e-15 - endloop - endfacet - facet normal 0 0.99270884511338364 0.12053691896531993 - outer loop - vertex -7.0000004768371582 -2.4463324546813965 -0.60296684503555298 - vertex 8 -2.5195460319519043 1.7763568394002505e-15 - vertex 8 -2.4463324546813965 -0.60296684503555298 - endloop - endfacet - facet normal -0 0.93501633902348258 0.35460463301982359 - outer loop - vertex -7.0000004768371582 -2.2309472560882568 -1.1708914041519165 - vertex -7.0000004768371582 -2.4463324546813965 -0.60296684503555298 - vertex 8 -2.4463324546813965 -0.60296684503555298 - endloop - endfacet - facet normal 0 0.93501633902348258 0.35460463301982359 - outer loop - vertex -7.0000004768371582 -2.2309472560882568 -1.1708914041519165 - vertex 8 -2.4463324546813965 -0.60296684503555298 - vertex 8 -2.2309472560882568 -1.1708914041519165 - endloop - endfacet - facet normal -0 0.82298382978185469 0.56806479904812901 - outer loop - vertex -7.0000004768371582 -1.8859072923660278 -1.6707680225372314 - vertex -7.0000004768371582 -2.2309472560882568 -1.1708914041519165 - vertex 8 -2.2309472560882568 -1.1708914041519165 - endloop - endfacet - facet normal 0 0.82298382978185469 0.56806479904812901 - outer loop - vertex -7.0000004768371582 -1.8859072923660278 -1.6707680225372314 - vertex 8 -2.2309472560882568 -1.1708914041519165 - vertex 8 -1.8859072923660278 -1.6707680225372314 - endloop - endfacet - facet normal -0 0.66312261734283129 0.74851078440353358 - outer loop - vertex -7.0000004768371582 -1.4312652349472046 -2.0735456943511963 - vertex -7.0000004768371582 -1.8859072923660278 -1.6707680225372314 - vertex 8 -1.8859072923660278 -1.6707680225372314 - endloop - endfacet - facet normal 0 0.66312261734283129 0.74851078440353358 - outer loop - vertex -7.0000004768371582 -1.4312652349472046 -2.0735456943511963 - vertex 8 -1.8859072923660278 -1.6707680225372314 - vertex 8 -1.4312652349472046 -2.0735456943511963 - endloop - endfacet - facet normal -0 0.46472313027195961 0.88545604757674512 - outer loop - vertex -7.0000004768371582 -0.89344334602355957 -2.3558163642883301 - vertex -7.0000004768371582 -1.4312652349472046 -2.0735456943511963 - vertex 8 -1.4312652349472046 -2.0735456943511963 - endloop - endfacet - facet normal 0 0.46472313027195961 0.88545604757674512 - outer loop - vertex -7.0000004768371582 -0.89344334602355957 -2.3558163642883301 - vertex 8 -1.4312652349472046 -2.0735456943511963 - vertex 8 -0.89344334602355957 -2.3558163642883301 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 -1.4312652349472046 2.0735456943511963 - vertex -7.0000004768371582 -4.1420578956604004 4.3322529792785645 - vertex -7.0000004768371582 -3.3019397258758545 5.0022249221801758 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 -3.3019397258758545 -5.0022249221801758 - vertex -7.0000004768371582 -4.1420578956604004 -4.3322529792785645 - vertex -7.0000004768371582 -1.4312652349472046 -2.0735456943511963 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -7.0000004768371582 -4.1420578956604004 -4.3322529792785645 - vertex -7.0000004768371582 -1.8859072923660278 -1.6707680225372314 - vertex -7.0000004768371582 -1.4312652349472046 -2.0735456943511963 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -7.0000004768371582 1.8859072923660278 1.6707680225372314 - vertex -7.0000004768371582 3.7370429039001465 4.6861038208007812 - vertex -7.0000004768371582 4.5137233734130859 3.9435210227966309 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 1.4312652349472046 2.0735456943511963 - vertex -7.0000004768371582 3.7370429039001465 4.6861038208007812 - vertex -7.0000004768371582 1.8859072923660278 1.6707680225372314 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 -4.1420578956604004 -4.3322529792785645 - vertex -7.0000004768371582 -4.8490467071533203 -3.5230386257171631 - vertex -7.0000004768371582 -1.8859072923660278 -1.6707680225372314 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 -1.8859072923660278 -1.6707680225372314 - vertex -7.0000004768371582 -4.8490467071533203 -3.5230386257171631 - vertex -7.0000004768371582 -2.2309472560882568 -1.1708914041519165 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -7.0000004768371582 1.4312652349472046 2.0735456943511963 - vertex -7.0000004768371582 2.8402509689331055 5.2780709266662598 - vertex -7.0000004768371582 3.7370429039001465 4.6861038208007812 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 0.89344334602355957 2.3558163642883301 - vertex -7.0000004768371582 2.8402509689331055 5.2780709266662598 - vertex -7.0000004768371582 1.4312652349472046 2.0735456943511963 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 -4.8490467071533203 -3.5230386257171631 - vertex -7.0000004768371582 -5.4001836776733398 -2.6005914211273193 - vertex -7.0000004768371582 -2.2309472560882568 -1.1708914041519165 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 -2.2309472560882568 -1.1708914041519165 - vertex -7.0000004768371582 -5.4001836776733398 -2.6005914211273193 - vertex -7.0000004768371582 -2.4463324546813965 -0.60296684503555298 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 3.7370429039001465 -4.6861038208007812 - vertex -7.0000004768371582 1.8859072923660278 -1.6707680225372314 - vertex -7.0000004768371582 4.5137233734130859 -3.9435210227966309 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 4.5137233734130859 -3.9435210227966309 - vertex -7.0000004768371582 1.8859072923660278 -1.6707680225372314 - vertex -7.0000004768371582 5.1453285217285156 -3.0741908550262451 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 2.8402509689331055 -5.2780709266662598 - vertex -7.0000004768371582 1.4312652349472046 -2.0735456943511963 - vertex -7.0000004768371582 3.7370429039001465 -4.6861038208007812 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 3.7370429039001465 -4.6861038208007812 - vertex -7.0000004768371582 1.4312652349472046 -2.0735456943511963 - vertex -7.0000004768371582 1.8859072923660278 -1.6707680225372314 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 5.1453285217285156 -3.0741908550262451 - vertex -7.0000004768371582 2.2309472560882568 -1.1708914041519165 - vertex -7.0000004768371582 5.6115593910217285 -2.106053352355957 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -7.0000004768371582 1.8859072923660278 -1.6707680225372314 - vertex -7.0000004768371582 2.2309472560882568 -1.1708914041519165 - vertex -7.0000004768371582 5.1453285217285156 -3.0741908550262451 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 1.8521710634231567 -5.7003965377807617 - vertex -7.0000004768371582 0.89344334602355957 -2.3558163642883301 - vertex -7.0000004768371582 2.8402509689331055 -5.2780709266662598 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 2.8402509689331055 -5.2780709266662598 - vertex -7.0000004768371582 0.89344334602355957 -2.3558163642883301 - vertex -7.0000004768371582 1.4312652349472046 -2.0735456943511963 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -7.0000004768371582 0.89344334602355957 2.3558163642883301 - vertex -7.0000004768371582 1.8521710634231567 5.7003965377807617 - vertex -7.0000004768371582 2.8402509689331055 5.2780709266662598 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 0.30369770526885986 2.5011756420135498 - vertex -7.0000004768371582 1.8521710634231567 5.7003965377807617 - vertex -7.0000004768371582 0.89344334602355957 2.3558163642883301 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 5.6115593910217285 -2.106053352355957 - vertex -7.0000004768371582 2.4463324546813965 -0.60296684503555298 - vertex -7.0000004768371582 5.8974294662475586 -1.070225715637207 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -7.0000004768371582 2.2309472560882568 -1.1708914041519165 - vertex -7.0000004768371582 2.4463324546813965 -0.60296684503555298 - vertex -7.0000004768371582 5.6115593910217285 -2.106053352355957 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 -5.4001836776733398 -2.6005914211273193 - vertex -7.0000004768371582 -5.7777538299560547 -1.5945587158203125 - vertex -7.0000004768371582 -2.4463324546813965 -0.60296684503555298 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -7.0000004768371582 -0.26890864968299866 -5.9877161979675293 - vertex -7.0000004768371582 0.30369770526885986 -2.5011756420135498 - vertex -7.0000004768371582 0.80456084012985229 -5.9395065307617188 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 0.80456084012985229 -5.9395065307617188 - vertex -7.0000004768371582 0.30369770526885986 -2.5011756420135498 - vertex -7.0000004768371582 1.8521710634231567 -5.7003965377807617 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -7.0000004768371582 0.30369770526885986 2.5011756420135498 - vertex -7.0000004768371582 0.80456084012985229 5.9395065307617188 - vertex -7.0000004768371582 1.8521710634231567 5.7003965377807617 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 1.8521710634231567 -5.7003965377807617 - vertex -7.0000004768371582 0.30369770526885986 -2.5011756420135498 - vertex -7.0000004768371582 0.89344334602355957 -2.3558163642883301 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 5.9937515258789062 -4.6580806635390486e-15 - vertex -7.0000004768371582 2.5195460319519043 -1.9580805584536089e-15 - vertex -7.0000004768371582 5.8974294662475586 1.070225715637207 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 5.8974294662475586 -1.070225715637207 - vertex -7.0000004768371582 2.5195460319519043 -1.9580805584536089e-15 - vertex -7.0000004768371582 5.9937515258789062 -4.6580806635390486e-15 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 -2.4463324546813965 -0.60296684503555298 - vertex -7.0000004768371582 -5.9696226119995117 -0.53727573156356812 - vertex -7.0000004768371582 -2.5195460319519043 5.0638941485685839e-15 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 -5.7777538299560547 -1.5945587158203125 - vertex -7.0000004768371582 -5.9696226119995117 -0.53727573156356812 - vertex -7.0000004768371582 -2.4463324546813965 -0.60296684503555298 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -7.0000004768371582 2.4463324546813965 -0.60296684503555298 - vertex -7.0000004768371582 2.5195460319519043 -1.9580805584536089e-15 - vertex -7.0000004768371582 5.8974294662475586 -1.070225715637207 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -7.0000004768371582 -0.30369770526885986 2.5011756420135498 - vertex -7.0000004768371582 -0.26890864968299866 5.9877161979675293 - vertex -7.0000004768371582 0.30369770526885986 2.5011756420135498 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -7.0000004768371582 -1.3337352275848389 -5.8434758186340332 - vertex -7.0000004768371582 -0.30369770526885986 -2.5011756420135498 - vertex -7.0000004768371582 -0.26890864968299866 -5.9877161979675293 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 0.30369770526885986 2.5011756420135498 - vertex -7.0000004768371582 -0.26890864968299866 5.9877161979675293 - vertex -7.0000004768371582 0.80456084012985229 5.9395065307617188 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 -0.26890864968299866 -5.9877161979675293 - vertex -7.0000004768371582 -0.30369770526885986 -2.5011756420135498 - vertex -7.0000004768371582 0.30369770526885986 -2.5011756420135498 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 -2.5195460319519043 5.0638941485685839e-15 - vertex -7.0000004768371582 -5.9696226119995117 0.53727573156356812 - vertex -7.0000004768371582 -2.4463324546813965 0.60296684503555298 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 5.8974294662475586 1.070225715637207 - vertex -7.0000004768371582 2.4463324546813965 0.60296684503555298 - vertex -7.0000004768371582 5.6115593910217285 2.106053352355957 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 -5.9696226119995117 -0.53727573156356812 - vertex -7.0000004768371582 -5.9696226119995117 0.53727573156356812 - vertex -7.0000004768371582 -2.5195460319519043 5.0638941485685839e-15 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 -0.89344334602355957 2.3558163642883301 - vertex -7.0000004768371582 -1.3337352275848389 5.8434758186340332 - vertex -7.0000004768371582 -0.30369770526885986 2.5011756420135498 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 2.5195460319519043 -1.9580805584536089e-15 - vertex -7.0000004768371582 2.4463324546813965 0.60296684503555298 - vertex -7.0000004768371582 5.8974294662475586 1.070225715637207 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 -0.30369770526885986 2.5011756420135498 - vertex -7.0000004768371582 -1.3337352275848389 5.8434758186340332 - vertex -7.0000004768371582 -0.26890864968299866 5.9877161979675293 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -7.0000004768371582 -5.9696226119995117 0.53727573156356812 - vertex -7.0000004768371582 -5.7777538299560547 1.5945587158203125 - vertex -7.0000004768371582 -2.4463324546813965 0.60296684503555298 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 -2.3556942939758301 -5.5114212036132812 - vertex -7.0000004768371582 -0.89344334602355957 -2.3558163642883301 - vertex -7.0000004768371582 -1.3337352275848389 -5.8434758186340332 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 -1.4312652349472046 2.0735456943511963 - vertex -7.0000004768371582 -2.3556942939758301 5.5114212036132812 - vertex -7.0000004768371582 -0.89344334602355957 2.3558163642883301 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -7.0000004768371582 -1.3337352275848389 -5.8434758186340332 - vertex -7.0000004768371582 -0.89344334602355957 -2.3558163642883301 - vertex -7.0000004768371582 -0.30369770526885986 -2.5011756420135498 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 5.6115593910217285 2.106053352355957 - vertex -7.0000004768371582 2.2309472560882568 1.1708914041519165 - vertex -7.0000004768371582 5.1453285217285156 3.0741908550262451 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 2.4463324546813965 0.60296684503555298 - vertex -7.0000004768371582 2.2309472560882568 1.1708914041519165 - vertex -7.0000004768371582 5.6115593910217285 2.106053352355957 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 -0.89344334602355957 2.3558163642883301 - vertex -7.0000004768371582 -2.3556942939758301 5.5114212036132812 - vertex -7.0000004768371582 -1.3337352275848389 5.8434758186340332 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 -2.4463324546813965 0.60296684503555298 - vertex -7.0000004768371582 -5.4001836776733398 2.6005914211273193 - vertex -7.0000004768371582 -2.2309472560882568 1.1708914041519165 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -7.0000004768371582 -5.7777538299560547 1.5945587158203125 - vertex -7.0000004768371582 -5.4001836776733398 2.6005914211273193 - vertex -7.0000004768371582 -2.4463324546813965 0.60296684503555298 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -7.0000004768371582 -2.3556942939758301 -5.5114212036132812 - vertex -7.0000004768371582 -1.4312652349472046 -2.0735456943511963 - vertex -7.0000004768371582 -0.89344334602355957 -2.3558163642883301 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 -3.3019397258758545 -5.0022249221801758 - vertex -7.0000004768371582 -1.4312652349472046 -2.0735456943511963 - vertex -7.0000004768371582 -2.3556942939758301 -5.5114212036132812 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 -1.4312652349472046 2.0735456943511963 - vertex -7.0000004768371582 -3.3019397258758545 5.0022249221801758 - vertex -7.0000004768371582 -2.3556942939758301 5.5114212036132812 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -7.0000004768371582 -5.4001836776733398 2.6005914211273193 - vertex -7.0000004768371582 -4.8490467071533203 3.5230386257171631 - vertex -7.0000004768371582 -2.2309472560882568 1.1708914041519165 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 -2.2309472560882568 1.1708914041519165 - vertex -7.0000004768371582 -4.8490467071533203 3.5230386257171631 - vertex -7.0000004768371582 -1.8859072923660278 1.6707680225372314 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 5.1453285217285156 3.0741908550262451 - vertex -7.0000004768371582 1.8859072923660278 1.6707680225372314 - vertex -7.0000004768371582 4.5137233734130859 3.9435210227966309 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 -1.8859072923660278 1.6707680225372314 - vertex -7.0000004768371582 -4.1420578956604004 4.3322529792785645 - vertex -7.0000004768371582 -1.4312652349472046 2.0735456943511963 - endloop - endfacet - facet normal -1 0 -0 - outer loop - vertex -7.0000004768371582 -4.8490467071533203 3.5230386257171631 - vertex -7.0000004768371582 -4.1420578956604004 4.3322529792785645 - vertex -7.0000004768371582 -1.8859072923660278 1.6707680225372314 - endloop - endfacet - facet normal -1 0 0 - outer loop - vertex -7.0000004768371582 2.2309472560882568 1.1708914041519165 - vertex -7.0000004768371582 1.8859072923660278 1.6707680225372314 - vertex -7.0000004768371582 5.1453285217285156 3.0741908550262451 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 8 -4.1420578956604004 -4.3322529792785645 - vertex 8 -3.3019397258758545 -5.0022249221801758 - vertex 8 -1.4312652349472046 -2.0735456943511963 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 8 -1.8859072923660278 -1.6707680225372314 - vertex 8 -4.1420578956604004 -4.3322529792785645 - vertex 8 -1.4312652349472046 -2.0735456943511963 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 8 3.7370429039001465 4.6861038208007812 - vertex 8 1.8859072923660278 1.6707680225372314 - vertex 8 4.5137233734130859 3.9435210227966309 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 8 3.7370429039001465 4.6861038208007812 - vertex 8 1.4312652349472046 2.0735456943511963 - vertex 8 1.8859072923660278 1.6707680225372314 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 8 -4.8490467071533203 -3.5230386257171631 - vertex 8 -4.1420578956604004 -4.3322529792785645 - vertex 8 -1.8859072923660278 -1.6707680225372314 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 8 -4.8490467071533203 -3.5230386257171631 - vertex 8 -1.8859072923660278 -1.6707680225372314 - vertex 8 -2.2309472560882568 -1.1708914041519165 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 8 2.8402509689331055 5.2780709266662598 - vertex 8 1.4312652349472046 2.0735456943511963 - vertex 8 3.7370429039001465 4.6861038208007812 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 8 2.8402509689331055 5.2780709266662598 - vertex 8 0.89344334602355957 2.3558163642883301 - vertex 8 1.4312652349472046 2.0735456943511963 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 8 -5.4001836776733398 -2.6005914211273193 - vertex 8 -4.8490467071533203 -3.5230386257171631 - vertex 8 -2.2309472560882568 -1.1708914041519165 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 8 -5.4001836776733398 -2.6005914211273193 - vertex 8 -2.2309472560882568 -1.1708914041519165 - vertex 8 -2.4463324546813965 -0.60296684503555298 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 8 1.8859072923660278 -1.6707680225372314 - vertex 8 3.7370429039001465 -4.6861038208007812 - vertex 8 4.5137233734130859 -3.9435210227966309 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 8 1.8859072923660278 -1.6707680225372314 - vertex 8 4.5137233734130859 -3.9435210227966309 - vertex 8 5.1453285217285156 -3.0741908550262451 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 8 1.4312652349472046 -2.0735456943511963 - vertex 8 2.8402509689331055 -5.2780709266662598 - vertex 8 3.7370429039001465 -4.6861038208007812 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 8 1.4312652349472046 -2.0735456943511963 - vertex 8 3.7370429039001465 -4.6861038208007812 - vertex 8 1.8859072923660278 -1.6707680225372314 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 8 2.2309472560882568 -1.1708914041519165 - vertex 8 5.1453285217285156 -3.0741908550262451 - vertex 8 5.6115593910217285 -2.106053352355957 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 8 2.2309472560882568 -1.1708914041519165 - vertex 8 1.8859072923660278 -1.6707680225372314 - vertex 8 5.1453285217285156 -3.0741908550262451 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 8 0.89344334602355957 -2.3558163642883301 - vertex 8 1.8521710634231567 -5.7003965377807617 - vertex 8 2.8402509689331055 -5.2780709266662598 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 8 1.8521710634231567 5.7003965377807617 - vertex 8 0.30369770526885986 2.5011756420135498 - vertex 8 0.89344334602355957 2.3558163642883301 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 8 0.89344334602355957 -2.3558163642883301 - vertex 8 2.8402509689331055 -5.2780709266662598 - vertex 8 1.4312652349472046 -2.0735456943511963 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 8 1.8521710634231567 5.7003965377807617 - vertex 8 0.89344334602355957 2.3558163642883301 - vertex 8 2.8402509689331055 5.2780709266662598 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 8 2.4463324546813965 -0.60296684503555298 - vertex 8 5.6115593910217285 -2.106053352355957 - vertex 8 5.8974294662475586 -1.070225715637207 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 8 -5.7777538299560547 -1.5945587158203125 - vertex 8 -5.4001836776733398 -2.6005914211273193 - vertex 8 -2.4463324546813965 -0.60296684503555298 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 8 2.4463324546813965 -0.60296684503555298 - vertex 8 2.2309472560882568 -1.1708914041519165 - vertex 8 5.6115593910217285 -2.106053352355957 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 8 0.80456084012985229 5.9395065307617188 - vertex 8 0.30369770526885986 2.5011756420135498 - vertex 8 1.8521710634231567 5.7003965377807617 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 8 0.30369770526885986 -2.5011756420135498 - vertex 8 -0.26890864968299866 -5.9877161979675293 - vertex 8 0.80456084012985229 -5.9395065307617188 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 8 0.30369770526885986 -2.5011756420135498 - vertex 8 0.80456084012985229 -5.9395065307617188 - vertex 8 1.8521710634231567 -5.7003965377807617 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 8 0.30369770526885986 -2.5011756420135498 - vertex 8 1.8521710634231567 -5.7003965377807617 - vertex 8 0.89344334602355957 -2.3558163642883301 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 8 -5.9696226119995117 -0.53727573156356812 - vertex 8 -2.4463324546813965 -0.60296684503555298 - vertex 8 -2.5195460319519043 -8.8817841970012523e-15 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 8 2.5195460319519043 -5.3290705182007514e-15 - vertex 8 5.9937515258789062 -8.8817841970012523e-15 - vertex 8 5.8974294662475586 1.070225715637207 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 8 -5.9696226119995117 -0.53727573156356812 - vertex 8 -5.7777538299560547 -1.5945587158203125 - vertex 8 -2.4463324546813965 -0.60296684503555298 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 8 -0.26890864968299866 5.9877161979675293 - vertex 8 -0.30369770526885986 2.5011756420135498 - vertex 8 0.30369770526885986 2.5011756420135498 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 8 2.5195460319519043 -5.3290705182007514e-15 - vertex 8 5.8974294662475586 -1.070225715637207 - vertex 8 5.9937515258789062 -8.8817841970012523e-15 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 8 2.5195460319519043 -5.3290705182007514e-15 - vertex 8 2.4463324546813965 -0.60296684503555298 - vertex 8 5.8974294662475586 -1.070225715637207 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 8 -0.30369770526885986 -2.5011756420135498 - vertex 8 -1.3337352275848389 -5.8434758186340332 - vertex 8 -0.26890864968299866 -5.9877161979675293 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 8 -0.30369770526885986 -2.5011756420135498 - vertex 8 -0.26890864968299866 -5.9877161979675293 - vertex 8 0.30369770526885986 -2.5011756420135498 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 8 -0.26890864968299866 5.9877161979675293 - vertex 8 0.30369770526885986 2.5011756420135498 - vertex 8 0.80456084012985229 5.9395065307617188 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 8 -5.9696226119995117 0.53727573156356812 - vertex 8 -2.5195460319519043 -8.8817841970012523e-15 - vertex 8 -2.4463324546813965 0.60296684503555298 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 8 -5.9696226119995117 0.53727573156356812 - vertex 8 -5.9696226119995117 -0.53727573156356812 - vertex 8 -2.5195460319519043 -8.8817841970012523e-15 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 8 2.4463324546813965 0.60296684503555298 - vertex 8 5.8974294662475586 1.070225715637207 - vertex 8 5.6115593910217285 2.106053352355957 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 8 -1.3337352275848389 5.8434758186340332 - vertex 8 -0.89344334602355957 2.3558163642883301 - vertex 8 -0.30369770526885986 2.5011756420135498 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 8 -1.3337352275848389 5.8434758186340332 - vertex 8 -0.30369770526885986 2.5011756420135498 - vertex 8 -0.26890864968299866 5.9877161979675293 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 8 2.4463324546813965 0.60296684503555298 - vertex 8 2.5195460319519043 -5.3290705182007514e-15 - vertex 8 5.8974294662475586 1.070225715637207 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 8 -5.7777538299560547 1.5945587158203125 - vertex 8 -5.9696226119995117 0.53727573156356812 - vertex 8 -2.4463324546813965 0.60296684503555298 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 8 -0.89344334602355957 -2.3558163642883301 - vertex 8 -1.3337352275848389 -5.8434758186340332 - vertex 8 -0.30369770526885986 -2.5011756420135498 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 8 -2.3556942939758301 5.5114212036132812 - vertex 8 -1.4312652349472046 2.0735456943511963 - vertex 8 -0.89344334602355957 2.3558163642883301 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 8 -0.89344334602355957 -2.3558163642883301 - vertex 8 -2.3556942939758301 -5.5114212036132812 - vertex 8 -1.3337352275848389 -5.8434758186340332 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 8 -2.3556942939758301 5.5114212036132812 - vertex 8 -0.89344334602355957 2.3558163642883301 - vertex 8 -1.3337352275848389 5.8434758186340332 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 8 2.2309472560882568 1.1708914041519165 - vertex 8 5.6115593910217285 2.106053352355957 - vertex 8 5.1453285217285156 3.0741908550262451 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 8 -5.4001836776733398 2.6005914211273193 - vertex 8 -2.4463324546813965 0.60296684503555298 - vertex 8 -2.2309472560882568 1.1708914041519165 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 8 -5.4001836776733398 2.6005914211273193 - vertex 8 -5.7777538299560547 1.5945587158203125 - vertex 8 -2.4463324546813965 0.60296684503555298 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 8 2.2309472560882568 1.1708914041519165 - vertex 8 2.4463324546813965 0.60296684503555298 - vertex 8 5.6115593910217285 2.106053352355957 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 8 -1.4312652349472046 -2.0735456943511963 - vertex 8 -2.3556942939758301 -5.5114212036132812 - vertex 8 -0.89344334602355957 -2.3558163642883301 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 8 -3.3019397258758545 5.0022249221801758 - vertex 8 -1.4312652349472046 2.0735456943511963 - vertex 8 -2.3556942939758301 5.5114212036132812 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 8 -1.4312652349472046 -2.0735456943511963 - vertex 8 -3.3019397258758545 -5.0022249221801758 - vertex 8 -2.3556942939758301 -5.5114212036132812 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 8 -4.8490467071533203 3.5230386257171631 - vertex 8 -2.2309472560882568 1.1708914041519165 - vertex 8 -1.8859072923660278 1.6707680225372314 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 8 -4.8490467071533203 3.5230386257171631 - vertex 8 -5.4001836776733398 2.6005914211273193 - vertex 8 -2.2309472560882568 1.1708914041519165 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 8 -4.1420578956604004 4.3322529792785645 - vertex 8 -1.8859072923660278 1.6707680225372314 - vertex 8 -1.4312652349472046 2.0735456943511963 - endloop - endfacet - facet normal 1 -0 0 - outer loop - vertex 8 -4.1420578956604004 4.3322529792785645 - vertex 8 -4.8490467071533203 3.5230386257171631 - vertex 8 -1.8859072923660278 1.6707680225372314 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 8 -4.1420578956604004 4.3322529792785645 - vertex 8 -1.4312652349472046 2.0735456943511963 - vertex 8 -3.3019397258758545 5.0022249221801758 - endloop - endfacet - facet normal 1 0 0 - outer loop - vertex 8 1.8859072923660278 1.6707680225372314 - vertex 8 5.1453285217285156 3.0741908550262451 - vertex 8 4.5137233734130859 3.9435210227966309 - endloop - endfacet - facet normal 1 0 -0 - outer loop - vertex 8 1.8859072923660278 1.6707680225372314 - vertex 8 2.2309472560882568 1.1708914041519165 - vertex 8 5.1453285217285156 3.0741908550262451 - endloop - endfacet -endsolid diff --git a/apps/cpu/Multiphase/backup/tubeTransformed.stl b/apps/cpu/Multiphase/backup/tubeTransformed.stl deleted file mode 100644 index f918dac8b84944d8e46c93df2e0cadec0738b647..0000000000000000000000000000000000000000 Binary files a/apps/cpu/Multiphase/backup/tubeTransformed.stl and /dev/null differ diff --git a/apps/cpu/MultiphaseDropletTest/CMakeLists.txt b/apps/cpu/MultiphaseDropletTest/CMakeLists.txt deleted file mode 100644 index e4f881190873e27a688b624803bc25ccc8fb4b9b..0000000000000000000000000000000000000000 --- a/apps/cpu/MultiphaseDropletTest/CMakeLists.txt +++ /dev/null @@ -1,3 +0,0 @@ -PROJECT(MultiphaseDropletTest) - -vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES droplet.cpp ) diff --git a/apps/cpu/MultiphaseDropletTest/DropletTest.cfg b/apps/cpu/MultiphaseDropletTest/DropletTest.cfg deleted file mode 100644 index 016e34072c1ff69e284cc1743ad684cb1a382e82..0000000000000000000000000000000000000000 --- a/apps/cpu/MultiphaseDropletTest/DropletTest.cfg +++ /dev/null @@ -1,44 +0,0 @@ -#pathname = d:/temp/MultiphaseDropletTest -pathname = E:/Multiphase/DropletTest_Test - -numOfThreads = 4 -availMem = 10e9 - -#Grid - -boundingBox = 0 256 512 768 0 3 -blocknx = 16 16 3 - -dx = 1 -refineLevel = 0 - -#Simulation -uLB = 0 #0.001#0.005#0.005 -Re = 10 -nuL = 1e-2 #1e-5# 1.0e-5 #!1e-2 -nuG = 0.015811388300841892 #5e-2 #1e-4 # 1e-8 # 1.16e-4 #!1e-2 -densityRatio = 10 -sigma = 1.0850694444444444e-06 #1e-10 #1e-6 # 1e-5 #4.66e-3 #surface tension 1e-4 ./. 1e-5 -interfaceThickness = 4.096 -radius = 25.6 -contactAngle = 110.0 -#gravity = 0.0 -gravity = -1.0348028606838648e-08 #-5.04e-6 -phi_L = 0.0 -phi_H = 1.0 -Phase-field Relaxation = 0.6 -Mobility = 0.056 # 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 = 1000 -cpStep = 1000 - -outTime = 100 -endTime = 10000 - -rStep = 159990 #160000 \ No newline at end of file diff --git a/apps/cpu/MultiphaseDropletTest/droplet.cpp b/apps/cpu/MultiphaseDropletTest/droplet.cpp deleted file mode 100644 index 091fce76b8636a54d5385ac749c2dfd973cec1a4..0000000000000000000000000000000000000000 --- a/apps/cpu/MultiphaseDropletTest/droplet.cpp +++ /dev/null @@ -1,473 +0,0 @@ -#include <iostream> -#include <string> -#include <memory> - -#if defined(__unix__) -#include <stdio.h> -#include <stdlib.h> -#endif - -#include "VirtualFluids.h" -#include "MultiphaseFlow/MultiphaseFlow.h" -#include "NonNewtonianFluids/NonNewtonianFluids.h" - -using namespace std; - -void run(string configname) -{ - using namespace vf::lbm::dir; - - try { - vf::basics::ConfigurationFile config; - config.load(configname); - - string pathname = config.getValue<string>("pathname"); - int numOfThreads = config.getValue<int>("numOfThreads"); - vector<int> blocknx = config.getVector<int>("blocknx"); - vector<real> boundingBox = config.getVector<real>("boundingBox"); - real uLB = config.getValue<real>("uLB"); - real nuL = config.getValue<real>("nuL"); - real nuG = config.getValue<real>("nuG"); - real densityRatio = config.getValue<real>("densityRatio"); - real sigma = config.getValue<real>("sigma"); - real interfaceThickness = config.getValue<real>("interfaceThickness"); - real radius = config.getValue<real>("radius"); - real theta = config.getValue<real>("contactAngle"); - //double gr = config.getValue<double>("gravity"); - real phiL = config.getValue<real>("phi_L"); - real phiH = config.getValue<real>("phi_H"); - real tauH = config.getValue<real>("Phase-field Relaxation"); - real mob = config.getValue<real>("Mobility"); - - real endTime = config.getValue<real>("endTime"); - real outTime = config.getValue<real>("outTime"); - real availMem = config.getValue<real>("availMem"); - int refineLevel = config.getValue<int>("refineLevel"); - real Re = config.getValue<real>("Re"); - real dx = config.getValue<real>("dx"); - bool logToFile = config.getValue<bool>("logToFile"); - real restartStep = config.getValue<real>("restartStep"); - real cpStart = config.getValue<real>("cpStart"); - real cpStep = config.getValue<real>("cpStep"); - bool newStart = config.getValue<bool>("newStart"); - //double rStep = config.getValue<double>("rStep"); - - SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - if (myid == 0) - UBLOG(logINFO, "Droplet Test: 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()); - } - } - - std::string fileName = "./LastTimeStep" + std::to_string((int)boundingBox[1]) + ".txt"; - -//#if defined(__unix__) -// double lastTimeStep = 0; -// //if (!newStart) -// { -// std::ifstream ifstr(fileName); -// ifstr >> lastTimeStep; -// restartStep = lastTimeStep; -// if(endTime >= lastTimeStep) -// endTime = lastTimeStep + rStep; -// else -// return; -// } -//#endif - - //Sleep(30000); - - // LBMReal dLB = 0; // = length[1] / dx; - real rhoLB = 0.0; - real nuLB = nuL; //(uLB*dLB) / Re; - - //diameter of circular droplet - real D = 2.0*radius; - - //density retio - real r_rho = densityRatio; - - //density of heavy fluid - real rho_h = 1.0; - //density of light fluid - real rho_l = rho_h / r_rho; - - //kinimatic viscosity - real nu_h = nuL; - //LBMReal nu_l = nuG; - //#dynamic viscosity - real mu_h = rho_h * nu_h; - - //gravity - real g_y = Re* Re* mu_h* mu_h / (rho_h * (rho_h - rho_l) * D * D * D); - //Eotvos number - real Eo = 10; // 0.100; - //surface tension - sigma =0*0.001; - //0 * rho_h *g_y *D *D / Eo; - - //g_y = 0; - - real beta = 12.0 * sigma / interfaceThickness; - real kappa = 1.5 * interfaceThickness * sigma; - - if (myid == 0) { - //UBLOG(logINFO, "uLb = " << uLB); - //UBLOG(logINFO, "rho = " << rhoLB); - UBLOG(logINFO, "D = " << D); - UBLOG(logINFO, "nuL = " << nuL); - UBLOG(logINFO, "nuG = " << nuG); - UBLOG(logINFO, "Re = " << Re); - UBLOG(logINFO, "Eo = " << Eo); - UBLOG(logINFO, "g_y = " << g_y); - UBLOG(logINFO, "sigma = " << sigma); - UBLOG(logINFO, "dx = " << dx); - UBLOG(logINFO, "Preprocess - start"); - } - - SPtr<LBMUnitConverter> conv(new LBMUnitConverter()); - - //const int baseLevel = 0; - - - SPtr<Rheology> thix = Rheology::getInstance(); - thix->setYieldStress(0*1e-1); //(1.0e-2); - - SPtr<LBMKernel> kernel; - - //kernel = SPtr<LBMKernel>(new MultiphaseScratchCumulantLBMKernel()); - // kernel = SPtr<LBMKernel>(new MultiphaseCumulantLBMKernel()); - //kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsPressureFilterLBMKernel()); - //kernel = SPtr<LBMKernel>(new MultiphasePressureFilterLBMKernel()); - kernel = make_shared< MultiphaseScaleDistributionLBMKernel>(); - //kernel = SPtr<LBMKernel>(new MultiphaseSharpInterfaceLBMKernel()); - // kernel = make_shared<MultiphaseSharpInterfaceLBMKernel>(); - - mu::Parser fgr; - fgr.SetExpr("-(rho-rho_l)*g_y"); - fgr.DefineConst("rho_l", rho_l); - fgr.DefineConst("g_y", g_y); - - kernel->setWithForcing(true); - kernel->setForcingX1(0.0); - kernel->setForcingX2(fgr); - kernel->setForcingX3(0.0); - - kernel->setPhiL(phiL); - kernel->setPhiH(phiH); - kernel->setPhaseFieldRelaxation(tauH); - kernel->setMobility(mob); - kernel->setInterfaceWidth(interfaceThickness); - - - kernel->setCollisionFactorMultiphase(nuL, nuG); - kernel->setDensityRatio(densityRatio); - kernel->setMultiphaseModelParameters(beta, kappa); - kernel->setContactAngle(theta); - kernel->setSigma(sigma); - - SPtr<BCSet> bcProc(new BCSet()); - // BCSetPtr bcProc(new ThinWallBCSet()); - - kernel->setBCSet(bcProc); - - SPtr<BC> noSlipBC(new NoSlipBC()); - noSlipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNoSlipBCStrategy())); - - SPtr<BC> outflowBC(new PressureBC(rhoLB)); - outflowBC->setBCStrategy(SPtr<BCStrategy>(new MultiphasePressureBCStrategy())); - - ////////////////////////////////////////////////////////////////////////////////// - // BC visitor - MultiphaseBoundaryConditionsBlockVisitor bcVisitor; - - SPtr<Grid3D> grid(new Grid3D(comm)); - grid->setDeltaX(dx); - grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - grid->setPeriodicX1(false);//true); - grid->setPeriodicX2(false); - grid->setPeriodicX3(true); - grid->setGhostLayerWidth(2); - - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE)); - - ////////////////////////////////////////////////////////////////////////// - // restart - SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart)); - //SPtr<MPIIORestartSimulationObserver> rcp(new MPIIORestartSimulationObserver(grid, rSch, pathname, comm)); - SPtr<MPIIOMigrationSimulationObserver> rcp(new MPIIOMigrationSimulationObserver(grid, rSch, metisVisitor, pathname, comm)); - //SPtr<MPIIOMigrationBESimulationObserver> rcp(new MPIIOMigrationBESimulationObserver(grid, rSch, pathname, comm)); - // rcp->setNu(nuLB); - // rcp->setNuLG(nuL, nuG); - // rcp->setDensityRatio(densityRatio); - - rcp->setLBMKernel(kernel); - rcp->setBCSet(bcProc); - ////////////////////////////////////////////////////////////////////////// - - if (newStart) { - - // bounding box - real g_minX1 = boundingBox[0]; - real g_minX2 = boundingBox[2]; - real g_minX3 = boundingBox[4]; - - real g_maxX1 = boundingBox[1]; - real g_maxX2 = boundingBox[3]; - real g_maxX3 = boundingBox[5]; - - // geometry - 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()); - - - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - real dx2 = 2.0 * dx; - GbCuboid3DPtr wallYmin(new GbCuboid3D(g_minX1 - dx2, g_minX2 - dx2, g_minX3 - dx2, g_maxX1 + dx2, g_minX2, g_maxX3 + dx2)); - GbSystem3D::writeGeoObject(wallYmin.get(), pathname + "/geo/wallYmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallYmax(new GbCuboid3D(g_minX1 - dx2, g_maxX2, g_minX3 - dx2, g_maxX1 + dx2, g_maxX2 + dx2, g_maxX3 + dx2)); - GbSystem3D::writeGeoObject(wallYmax.get(), pathname + "/geo/wallYmax", WbWriterVtkXmlASCII::getInstance()); - - SPtr<D3Q27Interactor> wallYminInt(new D3Q27Interactor(wallYmin, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallYmaxInt(new D3Q27Interactor(wallYmax, grid, noSlipBC, Interactor3D::SOLID)); - - //walls in x direction - - GbCuboid3DPtr wallXmin(new GbCuboid3D(g_minX1 - dx2, g_minX2 - dx2, g_minX3 - dx2, g_minX1, g_maxX2+dx2, g_maxX3 + dx2)); - GbSystem3D::writeGeoObject(wallXmin.get(), pathname + "/geo/wallXmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallXmax(new GbCuboid3D(g_maxX1 , g_minX2-dx2, g_minX3 - dx2, g_maxX1 + dx2, g_maxX2 + dx2, g_maxX3 + dx2)); - GbSystem3D::writeGeoObject(wallXmax.get(), pathname + "/geo/wallXmax", WbWriterVtkXmlASCII::getInstance()); - - SPtr<D3Q27Interactor> wallXminInt(new D3Q27Interactor(wallXmin, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallXmaxInt(new D3Q27Interactor(wallXmax, grid, noSlipBC, Interactor3D::SOLID)); - - SPtr<WriteBlocksSimulationObserver> ppblocks(new WriteBlocksSimulationObserver( - grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - - InteractorsHelper intHelper(grid, metisVisitor, true); - intHelper.addInteractor(wallYminInt); - intHelper.addInteractor(wallYmaxInt); - intHelper.addInteractor(wallXminInt); - intHelper.addInteractor(wallXmaxInt); - intHelper.selectBlocks(); - - ppblocks->update(0); - ppblocks.reset(); - - unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks(); - int ghostLayer = 5; - 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); - real needMemAll = - real(numberOfNodesPerBlockWithGhostLayer * (27 * sizeof(real) + sizeof(int) + sizeof(float) * 4)); - real needMem = needMemAll / real(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"); - } - - MultiphaseSetKernelBlockVisitor kernelVisitor(kernel, nuL, nuG, availMem, needMem); - - grid->accept(kernelVisitor); - - if (refineLevel > 0) { - SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - - intHelper.setBC(); - - // initialization of distributions - real x1c = 2.5 * D; // (g_maxX1 - g_minX1-1)/2; // - real x2c = 12.5 * D; //(g_maxX2 - g_minX2-1)/2; - real x3c = 1.5; // 2.5 * D; - //1.5; // 2.5 * D; //(g_maxX3 - g_minX3-1)/2; - //LBMReal x3c = 2.5 * D; - mu::Parser fct1; - //fct1.SetExpr("0.5-0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+0*(x3-x3c)^2)-radius)/interfaceThickness)"); - //fct1.SetExpr("(x1-x1c<-100 && x3>3 ? 1: 0)"); - fct1.SetExpr("(x1-x1c<-100 ? 1: 0)"); - // fct1.SetExpr("(((x1-x1c)*(x1-x1c+1)<180 ? 1: 0)*(x2>530? 1:0)*(sin(x2*0.3)>-0.1?1:0)-0.5*0)"); - // *(x2 > 530 ? 1 : 0) "); - fct1.DefineConst("x1c", x1c); - fct1.DefineConst("x2c", x2c); - fct1.DefineConst("x3c", x3c); - fct1.DefineConst("radius", radius/2); - fct1.DefineConst("interfaceThickness", interfaceThickness); - - mu::Parser fct2; - fct2.SetExpr("0.5*uLB-uLB*0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+0*(x3-x3c)^2)-radius)/interfaceThickness)"); - //fct2.SetExpr("uLB"); - fct2.DefineConst("uLB", uLB); - fct2.DefineConst("x1c", x1c); - fct2.DefineConst("x2c", x2c); - fct2.DefineConst("x3c", x3c); - fct2.DefineConst("radius", radius); - fct2.DefineConst("interfaceThickness", interfaceThickness); - - //MultiphaseInitDistributionsBlockVisitor initVisitor(densityRatio); - MultiphaseVelocityFormInitDistributionsBlockVisitor initVisitor; - initVisitor.setPhi(fct1); - initVisitor.setVx2(fct2); - grid->accept(initVisitor); - - // boundary conditions grid - { - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - SPtr<WriteBoundaryConditionsSimulationObserver> ppgeo(new WriteBoundaryConditionsSimulationObserver( - grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - ppgeo->update(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); - - if (myid == 0) - UBLOG(logINFO, "Restart - end"); - } - - grid->accept(bcVisitor); - - //TwoDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm); - //grid->accept(setConnsVisitor); - - //ThreeDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm); - //grid->accept(setConnsVisitor); - - TwoDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm); - grid->accept(setConnsVisitor); - - SPtr<UbScheduler> visSch(new UbScheduler(outTime)); - real t_ast, t; - t_ast = 2; - t = (int)(t_ast/std::sqrt(g_y/D)); - visSch->addSchedule(t,t,t); //t=2 - t_ast = 3; - t = (int)(t_ast/std::sqrt(g_y/D)); - visSch->addSchedule(t,t,t); //t=3 - t_ast = 4; - t = (int)(t_ast/std::sqrt(g_y/D)); - visSch->addSchedule(t,t,t); //t=4 - t_ast = 5; - t = (int)(t_ast/std::sqrt(g_y/D)); - visSch->addSchedule(t,t,t); //t=5 - t_ast = 6; - t = (int)(t_ast/std::sqrt(g_y/D)); - visSch->addSchedule(t,t,t); //t=6 - t_ast = 7; - t = (int)(t_ast/std::sqrt(g_y/D)); - visSch->addSchedule(t,t,t); //t=7 - t_ast = 9; - t = (int)(t_ast/std::sqrt(g_y/D)); - visSch->addSchedule(t,t,t); //t=9 - - SPtr<WriteSharpInterfaceQuantitiesSimulationObserver> pp(new WriteSharpInterfaceQuantitiesSimulationObserver( - grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - //if(grid->getTimeStep() == 0) - pp->update(restartStep); - - SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100)); - SPtr<NUPSCounterSimulationObserver> npr(new NUPSCounterSimulationObserver(grid, nupsSch, numOfThreads, comm)); - - omp_set_num_threads(numOfThreads); - - SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1)); - SPtr<Simulation> simulation(new Simulation(grid, stepGhostLayer, endTime)); - simulation->addSimulationObserver(npr); - simulation->addSimulationObserver(pp); - simulation->addSimulationObserver(rcp); - - - if (myid == 0) - UBLOG(logINFO, "Simulation-start"); - simulation->run(); - if (myid == 0) - UBLOG(logINFO, "Simulation-end"); - -//#if defined(__unix__) -// //if (!newStart) -// //{ -// if (myid == 0) -// { -// std::ofstream ostr(fileName); -// ostr << endTime; -// cout << "start sbatch\n"; -// //system("./start.sh"); -// //system("echo test!"); -// std::string str = "sbatch startJob" + std::to_string((int)boundingBox[1]) + ".sh"; -// //system("sbatch startJob512.sh"); -// system(str.c_str()); -// } -// //MPI_Barrier((MPI_Comm)comm->getNativeCommunicator()); -// //} -//#endif - - } 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/MultiphaseSymmetryTest/CMakeLists.txt b/apps/cpu/MultiphaseSymmetryTest/CMakeLists.txt deleted file mode 100644 index e81cdc10dc6c388bd590d221866d8c26a13d4a55..0000000000000000000000000000000000000000 --- a/apps/cpu/MultiphaseSymmetryTest/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(MultiphaseSymmetryTest) - -vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES droplet.cpp ) \ No newline at end of file diff --git a/apps/cpu/MultiphaseSymmetryTest/SymmetryTest.cfg b/apps/cpu/MultiphaseSymmetryTest/SymmetryTest.cfg deleted file mode 100644 index 18d0a4251c54754dabba2d41a4b93dec167d679f..0000000000000000000000000000000000000000 --- a/apps/cpu/MultiphaseSymmetryTest/SymmetryTest.cfg +++ /dev/null @@ -1,61 +0,0 @@ -pathname = d:/temp/SymmetryTest - -numOfThreads =18#6#8#8#8 -availMem = 10e9 - -#Grid - -#boundingBox = 0 256 512 768 0 3 #3 -#boundingBox = 0 32 512 768 0 3 #3 -#boundingBox = 0 256 0 768 0 3 -#boundingBox = 0 256 256 768 0 3 -#blocknx = 16 16 3 - -boundingBox = 0 63 16 63 0 63 - -#blocknx = 256 256 3 -blocknx = 8 8 8#3 - -dx = 1 -refineLevel = 0 - -#SimulationBenchmark -uLB = -0.1 #0.02#0.001#0.01#0.0000001#-0.01#0.01#0.005#0.005 -Re = 10#00#100 -nuL = 1e-2 #1e-2#1e-5 #1e-5# 1.0e-5 #!1e-2 -nuG = 1e-6#1.0e-3# 0.0000015811388300841892 #5e-2 #1e-4 # 1e-8 # 1.16e-4 #!1e-2 -densityRatio = 1000#200#00 -sigma = 1e-3 #1e-12 #1.0850694444444444e-06 #1e-10 #1e-6 # 1e-5 #4.66e-3 #surface tension 1e-4 ./. 1e-5 -interfaceThickness = 3#2#2.5#5#4.096 -radius = 8#16 #25.6#51.2 #16 - -#Simulation -#uLB = 0 #0.001#0.005#0.005 -#Re = 15#00000 #3000 -#nuL =1.0e-2#0.000001# 0.0001#1e-4 #1e-5# 1.0e-5 #!1e-2 -#nuG =1.0e-9#1.0e-8# 1.0e-8#0.000001 #0.015811388300841892 #5e-2 #1e-4 # 1e-8 # 1.16e-4 #!1e-2 -#densityRatio = 2000 -#sigma = 1.0e-1#1.0e-4#1.0e-1#1.0850694444444444e-08 #1e-10 #1e-6 # 1e-5 #4.66e-3 #surface tension 1e-4 ./. 1e-5 -#interfaceThickness = 7#3.9#5 #4.096 -#radius = 25.6 -contactAngle = 110.0 -gravity = -0.0001 -#gravity = -1.0348028606838648e-08 #-5.04e-6 -phi_L = 0.0 -phi_H = 1.0 -Phase-field Relaxation = 0.6 -Mobility = 0.02#0.2#0.056 # 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 = 10 - -cpStart = 100000 -cpStep = 100000 - -outTime = 100#200#1201 -endTime = 200000#400000 - -rStep = 159990 #160000 \ No newline at end of file diff --git a/apps/cpu/MultiphaseSymmetryTest/droplet.cpp b/apps/cpu/MultiphaseSymmetryTest/droplet.cpp deleted file mode 100644 index af0e0bac219cf25b7b480952cb6c2917748c625b..0000000000000000000000000000000000000000 --- a/apps/cpu/MultiphaseSymmetryTest/droplet.cpp +++ /dev/null @@ -1,468 +0,0 @@ -#include <iostream> -#include <string> -#include <memory> - -#if defined(__unix__) -#include <stdio.h> -#include <stdlib.h> -#endif - -#include "VirtualFluids.h" -#include "MultiphaseFlow/MultiphaseFlow.h" -#include "NonNewtonianFluids/NonNewtonianFluids.h" - -using namespace std; - -void run(string configname) -{ - using namespace vf::lbm::dir; - - try { - vf::basics::ConfigurationFile config; - config.load(configname); - - string pathname = config.getValue<string>("pathname"); - int numOfThreads = config.getValue<int>("numOfThreads"); - vector<int> blocknx = config.getVector<int>("blocknx"); - vector<real> boundingBox = config.getVector<real>("boundingBox"); - real uLB = config.getValue<real>("uLB"); - real nuL = config.getValue<real>("nuL"); - real nuG = config.getValue<real>("nuG"); - real densityRatio = config.getValue<real>("densityRatio"); - real sigma = config.getValue<real>("sigma"); - real interfaceThickness = config.getValue<real>("interfaceThickness"); - real radius = config.getValue<real>("radius"); - real theta = config.getValue<real>("contactAngle"); - //double gr = config.getValue<double>("gravity"); - real phiL = config.getValue<real>("phi_L"); - real phiH = config.getValue<real>("phi_H"); - real tauH = config.getValue<real>("Phase-field Relaxation"); - real mob = config.getValue<real>("Mobility"); - - real endTime = config.getValue<real>("endTime"); - real outTime = config.getValue<real>("outTime"); - real availMem = config.getValue<real>("availMem"); - int refineLevel = config.getValue<int>("refineLevel"); - real Re = config.getValue<real>("Re"); - real dx = config.getValue<real>("dx"); - bool logToFile = config.getValue<bool>("logToFile"); - real restartStep = config.getValue<real>("restartStep"); - real cpStart = config.getValue<real>("cpStart"); - real cpStep = config.getValue<real>("cpStep"); - bool newStart = config.getValue<bool>("newStart"); - //double rStep = config.getValue<double>("rStep"); - - SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - if (myid == 0) - UBLOG(logINFO, "Droplet Test: 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()); - } - } - - std::string fileName = "./LastTimeStep" + std::to_string((int)boundingBox[1]) + ".txt"; - -//#if defined(__unix__) -// double lastTimeStep = 0; -// //if (!newStart) -// { -// std::ifstream ifstr(fileName); -// ifstr >> lastTimeStep; -// restartStep = lastTimeStep; -// if(endTime >= lastTimeStep) -// endTime = lastTimeStep + rStep; -// else -// return; -// } -//#endif - - //Sleep(30000); - - // LBMReal dLB = 0; // = length[1] / dx; - real rhoLB = 0.0; - real nuLB = nuL; //(uLB*dLB) / Re; - - //diameter of circular droplet - real D = 2.0*radius; - - //density retio - real r_rho = densityRatio; - - //density of heavy fluid - real rho_h = 1.0; - //density of light fluid - real rho_l = rho_h / r_rho; - - //kinimatic viscosity - real nu_h = nuL; - //LBMReal nu_l = nuG; - //#dynamic viscosity - real mu_h = rho_h * nu_h; - - //gravity - real g_y = Re* Re* mu_h* mu_h / (rho_h * (rho_h - rho_l) * D * D * D); - //Eotvos number - real Eo = 100; - //surface tension - sigma = rho_h* g_y* D* D / Eo; - - //g_y = 0; - - real beta = 12.0 * sigma / interfaceThickness; - real kappa = 1.5 * interfaceThickness * sigma; - - if (myid == 0) { - //UBLOG(logINFO, "uLb = " << uLB); - //UBLOG(logINFO, "rho = " << rhoLB); - UBLOG(logINFO, "D = " << D); - UBLOG(logINFO, "nuL = " << nuL); - UBLOG(logINFO, "nuG = " << nuG); - UBLOG(logINFO, "Re = " << Re); - UBLOG(logINFO, "Eo = " << Eo); - UBLOG(logINFO, "g_y = " << g_y); - UBLOG(logINFO, "sigma = " << sigma); - UBLOG(logINFO, "dx = " << dx); - UBLOG(logINFO, "Preprocess - start"); - } - - SPtr<LBMUnitConverter> conv(new LBMUnitConverter()); - - //const int baseLevel = 0; - - - SPtr<Rheology> thix = Rheology::getInstance(); - thix->setYieldStress(0); - - SPtr<LBMKernel> kernel; - - //kernel = SPtr<LBMKernel>(new MultiphaseScratchCumulantLBMKernel()); - // kernel = SPtr<LBMKernel>(new MultiphaseCumulantLBMKernel()); - //kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsPressureFilterLBMKernel()); - //kernel = SPtr<LBMKernel>(new MultiphasePressureFilterLBMKernel()); - kernel = make_shared< MultiphaseScaleDistributionLBMKernel>(); - //kernel = SPtr<LBMKernel>(new MultiphaseSharpInterfaceLBMKernel()); - //kernel = make_shared<MultiphaseSharpInterfaceLBMKernel>(); - - mu::Parser fgr; - fgr.SetExpr("-(rho-rho_l)*g_y"); - fgr.DefineConst("rho_l", rho_l); - fgr.DefineConst("g_y", g_y); - - //kernel->setWithForcing(true); - //kernel->setForcingX1(fgr); - //kernel->setForcingX2(fgr); - //kernel->setForcingX3(fgr); - - kernel->setPhiL(phiL); - kernel->setPhiH(phiH); - kernel->setPhaseFieldRelaxation(tauH); - kernel->setMobility(mob); - kernel->setInterfaceWidth(interfaceThickness); - - - kernel->setCollisionFactorMultiphase(nuL, nuG); - kernel->setDensityRatio(densityRatio); - kernel->setMultiphaseModelParameters(beta, kappa); - kernel->setContactAngle(theta); - - real sigma_LB = 0*1e-3; - - kernel->setSigma(sigma_LB); - - SPtr<BCSet> bcProc(new BCSet()); - // BCSetPtr bcProc(new ThinWallBCSet()); - - kernel->setBCSet(bcProc); - - SPtr<BC> noSlipBC(new NoSlipBC()); - - SPtr<BCStrategy> noSlipStrategy = std::make_shared<MultiphaseNoSlipBCStrategy>(); - noSlipBC->setBCStrategy(noSlipStrategy); - - SPtr<BC> outflowBC(new PressureBC(rhoLB)); - outflowBC->setBCStrategy(SPtr<BCStrategy>(new MultiphasePressureBCStrategy())); - //outflowBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNonReflectingOutflowBCStrategy())); - //outflowBC->setBCStrategy(SPtr<BCStrategy>(new ThixotropyNonReflectingOutflowBCStrategy())); - - - ////////////////////////////////////////////////////////////////////////////////// - // BC visitor - MultiphaseBoundaryConditionsBlockVisitor bcVisitor; - //NonNewtonianBoundaryConditionsBlockVisitor bcVisitor; - //bcVisitor.addBC(noSlipBC); - //bcVisitor.addBC(outflowBC); - - SPtr<Grid3D> grid(new Grid3D(comm)); - grid->setDeltaX(dx); - grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - grid->setPeriodicX1(true); - grid->setPeriodicX2(true); - grid->setPeriodicX3(true); - grid->setGhostLayerWidth(2); - - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE)); - - ////////////////////////////////////////////////////////////////////////// - // restart - SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart)); - //SPtr<MPIIORestartSimulationObserver> rcp(new MPIIORestartSimulationObserver(grid, rSch, pathname, comm)); - SPtr<MPIIOMigrationSimulationObserver> rcp(new MPIIOMigrationSimulationObserver(grid, rSch, metisVisitor, pathname, comm)); - //SPtr<MPIIOMigrationBESimulationObserver> rcp(new MPIIOMigrationBESimulationObserver(grid, rSch, pathname, comm)); - // rcp->setNu(nuLB); - // rcp->setNuLG(nuL, nuG); - // rcp->setDensityRatio(densityRatio); - - rcp->setLBMKernel(kernel); - rcp->setBCSet(bcProc); - ////////////////////////////////////////////////////////////////////////// - - if (newStart) { - - // bounding box - real g_minX1 = boundingBox[0]; - real g_minX2 = boundingBox[2]; - real g_minX3 = boundingBox[4]; - - real g_maxX1 = boundingBox[1]; - real g_maxX2 = boundingBox[3]; - real g_maxX3 = boundingBox[5]; - - // geometry - 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()); - - - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - real dx2 = 2.0 * dx; - GbCuboid3DPtr wallYmin(new GbCuboid3D(g_minX1 - dx2, g_minX2 - dx2, g_minX3 - dx2, g_maxX1 + dx2, g_minX2, g_maxX3 + dx2)); - GbSystem3D::writeGeoObject(wallYmin.get(), pathname + "/geo/wallYmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallYmax(new GbCuboid3D(g_minX1 - dx2, g_maxX2, g_minX3 - dx2, g_maxX1 + dx2, g_maxX2 + dx2, g_maxX3 + dx2)); - GbSystem3D::writeGeoObject(wallYmax.get(), pathname + "/geo/wallYmax", WbWriterVtkXmlASCII::getInstance()); - - SPtr<D3Q27Interactor> wallYminInt(new D3Q27Interactor(wallYmin, grid, outflowBC, Interactor3D::SOLID)); - //outflowBC - SPtr<D3Q27Interactor> wallYmaxInt(new D3Q27Interactor(wallYmax, grid, noSlipBC, Interactor3D::SOLID)); - - SPtr<WriteBlocksSimulationObserver> ppblocks(new WriteBlocksSimulationObserver( - grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - - InteractorsHelper intHelper(grid, metisVisitor, true); - intHelper.addInteractor(wallYminInt); - //intHelper.addInteractor(wallYmaxInt); - intHelper.selectBlocks(); - - ppblocks->update(0); - ppblocks.reset(); - - unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks(); - int ghostLayer = 5; - 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); - real needMemAll = - real(numberOfNodesPerBlockWithGhostLayer * (27 * sizeof(real) + sizeof(int) + sizeof(float) * 4)); - real needMem = needMemAll / real(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"); - } - - MultiphaseSetKernelBlockVisitor kernelVisitor(kernel, nuL, nuG, availMem, needMem); - - grid->accept(kernelVisitor); - - if (refineLevel > 0) { - SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - - intHelper.setBC(); - - // initialization of distributions - real x1c = (g_maxX1 + g_minX1) / 2; // - real x2c = (g_maxX2 + g_minX2) / 2; - real x3c = (g_maxX3 + g_minX3) / 2; - //1.5; // 2.5 * D; //(g_maxX3 - g_minX3-1)/2; - //LBMReal x3c = 2.5 * D; - 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*1.e10)"); - //fct2.SetExpr("uLB"); - fct2.DefineConst("uLB", uLB); - fct2.DefineConst("x1c", x1c); - fct2.DefineConst("x2c", x2c); - fct2.DefineConst("x3c", x3c); - fct2.DefineConst("radius", radius); - fct2.DefineConst("interfaceThickness", interfaceThickness); - - //MultiphaseInitDistributionsBlockVisitor initVisitor(densityRatio); - MultiphaseVelocityFormInitDistributionsBlockVisitor initVisitor; - initVisitor.setPhi(fct1); - initVisitor.setVx2(fct2); - grid->accept(initVisitor); - - // boundary conditions grid - { - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - SPtr<WriteBoundaryConditionsSimulationObserver> ppgeo(new WriteBoundaryConditionsSimulationObserver( - grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - ppgeo->update(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); - - if (myid == 0) - UBLOG(logINFO, "Restart - end"); - } - - grid->accept(bcVisitor); - - //TwoDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm); - //grid->accept(setConnsVisitor); - - //ThreeDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm); - //grid->accept(setConnsVisitor); - - TwoDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm); - grid->accept(setConnsVisitor); - - SPtr<UbScheduler> visSch(new UbScheduler(outTime)); - real t_ast, t; - t_ast = 2; - t = (int)(t_ast/std::sqrt(g_y/D)); - visSch->addSchedule(t,t,t); //t=2 - t_ast = 3; - t = (int)(t_ast/std::sqrt(g_y/D)); - visSch->addSchedule(t,t,t); //t=3 - t_ast = 4; - t = (int)(t_ast/std::sqrt(g_y/D)); - visSch->addSchedule(t,t,t); //t=4 - t_ast = 5; - t = (int)(t_ast/std::sqrt(g_y/D)); - visSch->addSchedule(t,t,t); //t=5 - t_ast = 6; - t = (int)(t_ast/std::sqrt(g_y/D)); - visSch->addSchedule(t,t,t); //t=6 - t_ast = 7; - t = (int)(t_ast/std::sqrt(g_y/D)); - visSch->addSchedule(t,t,t); //t=7 - t_ast = 9; - t = (int)(t_ast/std::sqrt(g_y/D)); - visSch->addSchedule(t,t,t); //t=9 - - SPtr<WriteSharpInterfaceQuantitiesSimulationObserver> pp(new WriteSharpInterfaceQuantitiesSimulationObserver( - grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - if(grid->getTimeStep() == 0) - pp->update(0); - - SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100)); - SPtr<NUPSCounterSimulationObserver> npr(new NUPSCounterSimulationObserver(grid, nupsSch, numOfThreads, comm)); - - omp_set_num_threads(numOfThreads); - - SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1)); - SPtr<Simulation> simulation(new Simulation(grid, stepGhostLayer, endTime)); - simulation->addSimulationObserver(npr); - simulation->addSimulationObserver(pp); - simulation->addSimulationObserver(rcp); - - - if (myid == 0) - UBLOG(logINFO, "Simulation-start"); - simulation->run(); - if (myid == 0) - UBLOG(logINFO, "Simulation-end"); - -//#if defined(__unix__) -// //if (!newStart) -// //{ -// if (myid == 0) -// { -// std::ofstream ostr(fileName); -// ostr << endTime; -// cout << "start sbatch\n"; -// //system("./start.sh"); -// //system("echo test!"); -// std::string str = "sbatch startJob" + std::to_string((int)boundingBox[1]) + ".sh"; -// //system("sbatch startJob512.sh"); -// system(str.c_str()); -// } -// //MPI_Barrier((MPI_Comm)comm->getNativeCommunicator()); -// //} -//#endif - - } 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/Nozzle/CMakeLists.txt b/apps/cpu/Nozzle/CMakeLists.txt deleted file mode 100644 index f72fcd0af885fc6577872fc92ce6d3b263ac2ab3..0000000000000000000000000000000000000000 --- a/apps/cpu/Nozzle/CMakeLists.txt +++ /dev/null @@ -1,3 +0,0 @@ -PROJECT(Nozzle) - -vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} LiggghtsCoupling MultiphaseFlow NonNewtonianFluids FILES nozzleSinglePhase.cpp ) diff --git a/apps/cpu/Nozzle/in.nozzle b/apps/cpu/Nozzle/in.nozzle deleted file mode 100644 index 7b633f5538c72f164a7ddd25eedd0a20dc751467..0000000000000000000000000000000000000000 --- a/apps/cpu/Nozzle/in.nozzle +++ /dev/null @@ -1,127 +0,0 @@ -# shotcrete nozzle simulation - -atom_style granular -atom_modify map array -boundary f f f -newton off - -communicate single vel yes - -units si - -#region domain block -1.35 -1.25 0.34 0.44 -0.25 0.25 units box -region domain block -1.35 -1.25 0.34 0.44 -0.4 0.25 units box -create_box 1 domain - -neighbor 0.002 bin -neigh_modify delay 0 - - -#Material properties required for new pair styles - -fix m1 all property/global youngsModulus peratomtype 5.e6 -fix m2 all property/global poissonsRatio peratomtype 0.45 -fix m3 all property/global coefficientRestitution peratomtypepair 1 0.3 -fix m4 all property/global coefficientFriction peratomtypepair 1 0.5 -fix m5 all property/global k_finnie peratomtypepair 1 1.0 - -# lb coupling fix -fix lbcoupling all couple/lb/onetoone - -#New pair style -pair_style gran model hertz tangential history #Hertzian without cohesion -pair_coeff * * - -timestep ${t_step} - -fix gravi all gravity 9.81 vector 0.0 0.0 -1.0 - -#the chute -#variable meshes_dir string d:/Projects/TRR277/Project/WP4/Liggghts/ -variable meshes_dir string d:/Projects/TRR277/Project/WP4/Liggghts/A04/ - -fix cad1 all mesh/surface file ${meshes_dir}Duese_Acc_Einlass.stl type 1 scale 0.001 -fix cad2 all mesh/surface file ${meshes_dir}Duese_Acc_Verteiler.stl type 1 scale 0.001 -fix cad3 all mesh/surface file ${meshes_dir}Duese_Air_Einlass.stl type 1 scale 0.001 -fix cad4 all mesh/surface file ${meshes_dir}Duese_Air_Verteiler.stl type 1 scale 0.001 -fix cad5 all mesh/surface file ${meshes_dir}Duese_Volcan_Duese.stl type 1 scale 0.001 -fix cad6 all mesh/surface file ${meshes_dir}Duese_Zwischenstueck.stl type 1 element_exclusion_list read list.file scale 0.001 curvature_tolerant yes - -fix inface all mesh/surface file ${meshes_dir}InsertDisk2.stl type 1 scale 0.001 -fix wallTop all mesh/surface file ${meshes_dir}InsertDisk3.stl type 1 scale 0.001 - -#fix granwalls all wall/gran model hertz tangential history mesh n_meshes 7 meshes cad1 cad2 cad3 cad4 cad5 cad6 wallTop -fix granwalls all wall/gran model hertz tangential history mesh n_meshes 8 meshes cad1 cad2 cad3 cad4 cad5 cad6 wallTop inface - -#distributions for insertion - -fix pts1 all particletemplate/sphere 15485863 atom_type 1 density constant 2500 radius constant 0.001 -fix pts2 all particletemplate/sphere 15485867 atom_type 1 density constant 2500 radius constant 0.002 -fix pdd1 all particledistribution/discrete 32452843 2 pts1 0.3 pts2 0.7 - -#region and insertion -group nve_group region domain -#region bc cylinder z 0.0 0.0 0.015 0.201 0.23 units box -#region bc cylinder z 0.0 0.0 10 213 220 units box - -region bc cylinder z -1.3013105 0.388582 0.01275005 0.18055 0.20105 units box - -#particle insertion -# fix ins nve_group insert/stream seed 32452867 distributiontemplate pdd1 & - # nparticles 6000 massrate 0.1 insert_every 1000 overlapcheck yes all_in no vel constant 0.0 0.0 -1.0 & - # insertion_face inface - - -# fix ins nve_group insert/stream seed 32452867 distributiontemplate pdd1 & - # nparticles 6000 massrate 0.1 insert_every 1000 overlapcheck yes all_in no vel constant 0.0 0.0 -1.0 & - # insertion_face inface - - # fix ins nve_group insert/stream seed 32452867 distributiontemplate pdd1 & - # nparticles 6000 massrate 0.1 insert_every ones overlapcheck yes all_in no vel constant 0.0 0.0 -1.0 & - # insertion_face inface - -#working setup -# fix ins nve_group insert/pack seed 32452867 distributiontemplate pdd1 insert_every 1000 & - # overlapcheck yes vel constant 0.0 0.0 -1.0 volumefraction_region 0.1 region bc ntry_mc 1001 -fix ins nve_group insert/pack seed 32452867 distributiontemplate pdd1 insert_every 10 & - overlapcheck yes vel constant 0.0 0.0 -1.0 volumefraction_region 0.1 region bc ntry_mc 1001 - -# fix ins all insert/stream seed 32452867 distributiontemplate pdd1 & - # nparticles INF massrate 0.1 overlapcheck yes all_in yes vel constant 0.0 0.0 -1.0 & - # insertion_face inface extrude_length 0.25 - - - -#apply nve integration to all particles that are inserted as single particles -fix integr nve_group nve/sphere - -#output settings, include total thermal energy -compute 1 all erotate/sphere -thermo_style custom step atoms ke c_1 vol -thermo 1000 -thermo_modify lost ignore norm no - -variable dmp_time_cad equal 100000000 - -dump dumpcad1 all mesh/stl ${dmp_time_cad} ${dmp_dir}/cad1_*.stl cad1 -dump dumpcad2 all mesh/stl ${dmp_time_cad} ${dmp_dir}/cad2_*.stl cad2 -dump dumpcad3 all mesh/stl ${dmp_time_cad} ${dmp_dir}/cad3_*.stl cad3 -dump dumpcad4 all mesh/stl ${dmp_time_cad} ${dmp_dir}/cad4_*.stl cad4 -dump dumpcad5 all mesh/stl ${dmp_time_cad} ${dmp_dir}/cad5_*.stl cad5 -dump dumpcad6 all mesh/stl ${dmp_time_cad} ${dmp_dir}/cad6_*.stl cad6 -dump dumpinface all mesh/stl ${dmp_time_cad} ${dmp_dir}/inface_*.stl inface -dump dumpwallTop all mesh/stl ${dmp_time_cad} ${dmp_dir}/wallTop_*.stl wallTop - -#insert the first particles so that dump is not empty -run 1 -dump dmp all custom/vtk ${dmp_stp} ${dmp_dir}/particles_*.vtk id type type x y z ix iy iz vx vy vz fx fy fz omegax omegay omegaz radius - - -#run 1 -#run 1 - -#insert particles -#run 100000 upto -#unfix ins - - diff --git a/apps/cpu/Nozzle/nozzle.cpp.1 b/apps/cpu/Nozzle/nozzle.cpp.1 deleted file mode 100644 index ff3374e6ec0e2b53dd2d888b8998619d34f3eae8..0000000000000000000000000000000000000000 --- a/apps/cpu/Nozzle/nozzle.cpp.1 +++ /dev/null @@ -1,784 +0,0 @@ -#include <iostream> -#include <memory> -#include <string> - -#include "VirtualFluids.h" - -#include "LiggghtsCoupling/LiggghtsCoupling.h" - -#include "MultiphaseFlow/MultiphaseFlow.h" - -#include "NonNewtonianFluids/NonNewtonianFluids.h" - -using namespace std; - -int main(int argc, char *argv[]) -{ - //Sleep(30000); - - try { - - std::shared_ptr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - // bounding box - // double g_minX1 = -1341.81e-3; - // double g_minX2 = 348.087e-3; - // double g_minX3 = -210e-3; - - // double g_maxX1 = -1260.81e-3; - // double g_maxX2 = 429.087e-3; - // double g_maxX3 = 214.5e-3; - - // double g_minX1 = -1341.81e-3 + 10e-3; - // double g_minX2 = 0.360872; - // double g_minX3 = -210e-3; - - // double g_maxX1 = -1260.81e-3 - 10e-3; - // double g_maxX2 = 0.416302; - // double g_maxX3 = 210e-3; - - // int blockNX[3] = { 10, 10, 10 }; - - double g_minX1 = -1.31431; - double g_minX2 = 0.375582; - double g_minX3 = -0.21; //-210e-3 - 0.2 - 6e-3; //- 1e-3; - - double g_maxX1 = -1.28831; - double g_maxX2 = 0.401582; - double g_maxX3 = 0.175;//0.21; - - int blockNX[3] = { 26, 26, 35 }; - - double dx = 1e-3; - - double uLB_ref = 0.001; - // double rhoLB = 0.0; - - // concrete - double d_part = 1e-3; - double V = 0.4; // flow rate [m^3/h] - double D = 0.026; // shotcrete inlet diameter [m] - double R = D / 2.0; // radius [m] - double A = UbMath::PI * R * R; - double u = V / 3600 / A; - double muConcrete = 2.1133054011798826; // [Pa s] - double rhoAir = 1.2041; // [kg/m^3] - double tau0 = 715.218181094648; // Pa - double rhoConcrete = 2400; // [kg/m^3] - double nu = muConcrete / rhoConcrete; - - // double Re_D = d_part * u / nu; - // if (myid == 0) UBLOG(logINFO, "Re_D = " << Re_D); - // - SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 2400, d_part / dx, uLB_ref); - if (myid == 0) std::cout << units->toString() << std::endl; - - double interfaceThickness = 3; // 4.096; - double sigma = 0.3; //0.03; - double Re = rhoConcrete * u * d_part / muConcrete; - double We = rhoConcrete * u * u * d_part / sigma; - - double u_LB_con = u * units->getFactorVelocityWToLb(); - double nu_h_LB = nu * units->getFactorViscosityWToLb(); // uLB_ref * d_part * units->getFactorLentghWToLb() / Re; - double nu_l_LB = 0; // = nu_h_LB; - - double rho_h_LB = 1; - - // surface tension - double sigma_LB = rho_h_LB *u_LB_con *u_LB_con *d_part * units->getFactorLentghWToLb() / We; - - // LBMReal dLB = 0; // = length[1] / dx; - LBMReal rhoLB = 0.0; - // LBMReal nuLB = nu_l; //(uLB_ref*dLB) / Re; - - double beta = 12.0 * sigma_LB / interfaceThickness; - double kappa = 1.5 * interfaceThickness * sigma_LB; - - double phiL = 0.0; - double phiH = 1.0; - double tauH = 0.6; // Phase - field Relaxation - double mob = 0.02; // Mobility - // double nuL = 1e-2; - // double nuG = 0.015811388300841892; - double densityRatio = rhoConcrete / rhoAir; - // double sigma_old = 1.0850694444444444e-06; - // - // double beta_old = 12.0 * sigma / interfaceThickness; - // double kappa_old = 1.5 * interfaceThickness * sigma; - - double theta = 110; // contact angle - - // https://civilsir.com/density-of-cement-sand-and-aggregate-in-kg-m3-list-of-material-density/ - - // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, 1.480, 2060, r_p/dx); - // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, LBMUnitConverter::AIR_20C, r_p / dx); - // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 1000, d_part / dx, std::abs(uLB_ref)); - // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 1000, d_part / dx, std::abs(uLB_ref)); - // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 2400, d_part / dx, uRef); - - double Bm = (tau0 * d_part) / (muConcrete * u); - double tau0_LB = Bm * nu_h_LB * u_LB_con / (d_part * units->getFactorLentghWToLb()); - - SPtr<Rheology> thix = Rheology::getInstance(); - thix->setYieldStress(tau0_LB); - - if (myid == 0) VF_LOG_INFO("Yield stress = {} Pa", tau0); - if (myid == 0) VF_LOG_INFO("Yield stress LB = {} ", tau0_LB); - - //SPtr<BC> noSlipBC(new NoSlipBC()); - //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new NoSlipBCStrategy())); - SPtr<BC> noSlipBC(new NoSlipBC()); - noSlipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNoSlipBCStrategy())); - - // concrete inflow boundary condition - mu::Parser fct; - fct.SetExpr("U"); - fct.DefineConst("U", -u_LB_con); - if (myid == 0) VF_LOG_INFO("Concrete inflow velocity = {} m/s", u); - if (myid == 0) VF_LOG_INFO("Concrete inflow velocity = {} dx/dt", u_LB_con); - if (myid == 0) VF_LOG_INFO("Concrete Re = {}", Re); - - // // Štigler, J. (2014). Analytical velocity profile in tube for laminar and turbulent flow. Engineering - // // Mechanics, 21(6), 371-379. - // double cx1 = -1.31431 + R; - // double cx2 = 0.375582 + R; - // //double cx3 = 0.20105 + R; - // double L = g_maxX1 - g_minX1; - // double p_concrete = 1e5; // Pa = 1 Bar - // double p1 = p_concrete * units->getFactorPressureWToLb(); - // double p2 = 0.0; - // double drhoLB = 1.0 + rhoLB; - // double muLB = drhoLB * nuLB; - // double N = R * R / 2 * muLB * uLB_ref * (p1 - p2) / L - 3; - - // // mu::Parser fct; - // fct.SetExpr("U*(1-(((((x2-y0)^2+(x1-x0)^2)^0.5)/R)^NplusOne))"); - // fct.DefineConst("x0", cx1); - // fct.DefineConst("y0", cx2); - // //fct.DefineConst("z0", cx3); - // fct.DefineConst("R", R); - // fct.DefineConst("U", uLB_ref * ((N + 3) / (N + 1))); - // fct.DefineConst("NplusOne", N + 1.0); - - //SPtr<BC> inflowConcreteBC(new VelocityBC(false, false, true, fct, 0, BCFunction::INFCONST)); - //inflowConcreteBC->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy())); - SPtr<BC> inflowConcreteBC(new MultiphaseVelocityBC(false, false, true, fct, phiH, 0, BCFunction::INFCONST)); - inflowConcreteBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - // air inflow boundary condition - // Štigler, J. (2014). Analytical velocity profile in tube for laminar and turbulent flow. Engineering - // Mechanics, 21(6), 371-379. - // SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, LBMUnitConverter::AIR_20C, d_part / dx); - // SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, 1., 1.2041, d_part / dx, uLB_ref); - // double V = 40; // flow rate [m^3/h] - // double D = 0.0166; // air inlet diameter [m] - // double R = D / 2.0; // radius [m] - // double A = UbMath::PI * R * R; - // double u = V / 3600 / A; - // double uLB_ref = u * unitsAir->getFactorVelocityWToLb(); - //// double cx1 = -1.2788 + R; - // double cx2 = 0.3803 + R; - // double cx3 = 0.1517 + R; - // double L = g_maxX1 - g_minX1; - // double p_air = 7e5; // Pa = 7 Bar - // double p1 = p_air; - // double p2 = 0.0; - // double mu = 17.2e-6; // Pa s, air 20° C - // double N = R * R / 2 * mu * u * (p1 - p2) / L - 3; - // if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} m/s", u); - // if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} dx/dt", uLB_ref); - // - - // double nu = mu / rhoConcrete; - // double Re = d_part * u / nu; - // if (myid == 0) VF_LOG_INFO("Re_air = {}", Re); - - // double nuLB = d_part * unitsAir->getFactorLentghWToLb() * uLB_ref / Re; - // if (myid == 0) VF_LOG_INFO("nuLB_air = {}", nuLB); - // nu_l_LB = nuLB; - - SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, 1., 1.2041, d_part / dx, uLB_ref); - //SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, LBMUnitConverter::AIR_20C, d_part / dx); - double V_air = 40./6./10.; // flow rate [m^3/h] - double D_air = 0.00553; // air inlet diameter [m] - double R_air = D_air / 2.0; // radius [m] - double A_air = UbMath::PI * (R_air * R_air); - double u_air = V_air / 3600 / A_air; - double uLB_air = u_air * unitsAir->getFactorVelocityWToLb(); - // double cx1 = -1.2788 + R; - double cx2 = 0.385822 + R_air; - double cx3 = 0.135562 + R_air; - double L_air = 0.00747; - double p_air = 7e5; // Pa = 7 Bar - double p1 = p_air; - double p2 = 1e5; - double mu_air = 17.2e-6; // Pa s, air 20° C - double rho_air = 1.2041; // [kg/m^3] - double Re_inlet = D_air * u_air * rho_air / mu_air; - double lambda = 0.3164 / pow(Re_inlet, 0.25); - double deltaP = (lambda / (2. * R_air)) * (rho_air * pow(u_air, 2) / 2.); // Darcy friction factor (Rohrreibungszahl) - double N = pow(R_air, 2) / (2. * mu_air * u_air) * deltaP - 3.; - // double N = R_air * R_air / 2 * mu_air * u_air * (p1 - p2) / L_air - 3; - if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} m/s", u_air); - if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} dx/dt", uLB_air); - - double nu_air = mu_air / rho_air; - double Re_air = d_part * u_air / nu_air; - if (myid == 0) VF_LOG_INFO("Air Re = {}", Re_air); - - double nuLB_air = nu_air * unitsAir->getFactorViscosityWToLb(); // d_part * unitsAir->getFactorLentghWToLb() * uLB_air / Re_air; - if (myid == 0) VF_LOG_INFO("nuLB_air = {}", nuLB_air); - nu_l_LB = nuLB_air; - - if (myid == 0) VF_LOG_INFO("nu_h = {}", nu_h_LB); - if (myid == 0) VF_LOG_INFO("nu_l = {}", nu_l_LB); - if (myid == 0) VF_LOG_INFO("sigma_LB = {}", sigma_LB); - - double p_air_LB = p_air * unitsAir->getFactorPressureWToLb(); - if (myid == 0) VF_LOG_INFO("p_air_LB = {}", p_air_LB); - - // mu::Parser fctVx1; - ////fctVx1.SetExpr("U"); - ////fctVx1.DefineConst("U", uLB_air); - // mu::Parser fctVx2; - // fctVx2.SetExpr("U"); - // fctVx2.DefineConst("U", 0); - // mu::Parser fctVx3; - ////fctVx3.SetExpr("U"); - ////fctVx3.DefineConst("U", -uLB_air); - - double cx1 = 0; - double alpha = 0; - double gamma = 0; - double U = uLB_air;// * ((N + 3.) / (N + 1.)); - - mu::Parser fctVx1; - //fctVx1.SetExpr("U*cos(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)^NplusOne))"); - //fctVx1.SetExpr("U*cos(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)))"); - // fctVx1.SetExpr("(((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5/R)^NplusOne"); - fctVx1.SetExpr("U*cos(alpha*_pi/180)"); - fctVx1.DefineConst("x0", cx1); - fctVx1.DefineConst("y0", cx2); - fctVx1.DefineConst("z0", cx3); - fctVx1.DefineConst("R", R_air); - fctVx1.DefineConst("U", U); //* ((N + 3.) / (N + 1.))); - fctVx1.DefineConst("NplusOne", N + 1.0); - fctVx1.DefineConst("alpha", alpha); - fctVx1.DefineConst("gamma", gamma); - - mu::Parser fctVx2; - //fctVx2.SetExpr("U*sin(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)^NplusOne))"); - //fctVx2.SetExpr("U*sin(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)))"); - fctVx2.SetExpr("U*sin(alpha*_pi/180)"); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("y0", cx2); - fctVx2.DefineConst("z0", cx3); - fctVx2.DefineConst("R", R_air); - fctVx2.DefineConst("U", U); //* ((N + 3.) / (N + 1.))); - fctVx2.DefineConst("NplusOne", N + 1.0); - fctVx2.DefineConst("alpha", alpha); - - mu::Parser fctVx3; - //fctVx3.SetExpr("U*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)^NplusOne))"); - //fctVx3.SetExpr("U*cos(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)))"); - fctVx3.SetExpr("U"); - fctVx3.DefineConst("x0", cx1); - fctVx3.DefineConst("y0", cx2); - fctVx3.DefineConst("z0", cx3); - fctVx3.DefineConst("R", R_air); - fctVx3.DefineConst("U", -U); //* ((N + 3.) / (N + 1.))); - fctVx3.DefineConst("NplusOne", N + 1.0); - fctVx3.DefineConst("alpha", alpha); - fctVx3.DefineConst("gamma", gamma); - - // SPtr<BC> inflowAirBC1(new VelocityBC(true, false, false, fct, 0, BCFunction::INFCONST)); - // inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new VelocityBCStrategy())); - // t = U * sin(alpha * _pi / 180) * (1 - (((((x1 - x0) ^ 2 + (x2 - y0) ^ 2 + (x3 - z0) ^ 2) ^ 0.5) / R) ^ NplusOne)); - cx1 = -1.31416; - cx2 = 0.388684; - cx3 = 0.138177; - alpha = 0; - gamma = 225; - fctVx1.DefineConst("x0", cx1); - fctVx1.DefineConst("y0", cx2); - fctVx1.DefineConst("z0", cx3); - fctVx1.DefineConst("alpha", alpha); - fctVx1.DefineConst("gamma", gamma); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("y0", cx2); - fctVx2.DefineConst("z0", cx3); - fctVx2.DefineConst("alpha", alpha); - fctVx2.DefineConst("gamma", gamma); - fctVx3.DefineConst("x0", cx1); - fctVx3.DefineConst("y0", cx2); - fctVx3.DefineConst("z0", cx3); - fctVx3.DefineConst("alpha", alpha); - fctVx3.DefineConst("gamma", gamma); - - SPtr<BC> inflowAirBC1(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST)); - inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - fctVx1.DefineVar("x1", &cx1); - fctVx1.DefineVar("x2", &cx2); - fctVx1.DefineVar("x3", &cx3); - fctVx2.DefineVar("x1", &cx1); - fctVx2.DefineVar("x2", &cx2); - fctVx2.DefineVar("x3", &cx3); - fctVx3.DefineVar("x1", &cx1); - fctVx3.DefineVar("x2", &cx2); - fctVx3.DefineVar("x3", &cx3); - - VF_LOG_INFO("fctVx1 = {}", fctVx1.Eval()); - VF_LOG_INFO("fctVx2 = {}", fctVx2.Eval()); - VF_LOG_INFO("fctVx3 = {}", fctVx3.Eval()); - VF_LOG_INFO("N = {}", N); - VF_LOG_INFO("NplusOne = {}", N + 1.0); - //return 0; - - cx1 = -1.31303; - cx2 = 0.377234; - cx3 = 0.138174; - alpha = 60; - fctVx1.DefineConst("x0", cx1); - fctVx1.DefineConst("y0", cx2); - fctVx1.DefineConst("z0", cx3); - fctVx1.DefineConst("alpha", alpha); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("y0", cx2); - fctVx2.DefineConst("z0", cx3); - fctVx2.DefineConst("alpha", alpha); - fctVx3.DefineConst("x0", cx1); - fctVx3.DefineConst("y0", cx2); - fctVx3.DefineConst("z0", cx3); - SPtr<BC> inflowAirBC2(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST)); - inflowAirBC2->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - cx1 = -1.2948374155694822; - cx2 = 0.37733728717266285; - cx3 = 0.13840460401111598; - alpha = 120; - fctVx1.DefineConst("x0", cx1); - fctVx1.DefineConst("y0", cx2); - fctVx1.DefineConst("z0", cx3); - fctVx1.DefineConst("alpha", alpha); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("y0", cx2); - fctVx2.DefineConst("z0", cx3); - fctVx2.DefineConst("alpha", alpha); - fctVx3.DefineConst("x0", cx1); - fctVx3.DefineConst("y0", cx2); - fctVx3.DefineConst("z0", cx3); - SPtr<BC> inflowAirBC3(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST)); - inflowAirBC3->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - cx1 = -1.28847; - cx2 = 0.3885; - cx3 = 0.1385; - alpha = 180; - fctVx1.DefineConst("x0", cx1); - fctVx1.DefineConst("y0", cx2); - fctVx1.DefineConst("z0", cx3); - fctVx1.DefineConst("alpha", alpha); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("y0", cx2); - fctVx2.DefineConst("z0", cx3); - fctVx2.DefineConst("alpha", alpha); - fctVx3.DefineConst("x0", cx1); - fctVx3.DefineConst("y0", cx2); - fctVx3.DefineConst("z0", cx3); - SPtr<BC> inflowAirBC4(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST)); - inflowAirBC4->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - cx1 = -1.294771417778694; - cx2 = 0.399787947463142; - cx3 = 0.1383429692754194; - alpha = 240; - fctVx1.DefineConst("x0", cx1); - fctVx1.DefineConst("y0", cx2); - fctVx1.DefineConst("z0", cx3); - fctVx1.DefineConst("alpha", alpha); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("y0", cx2); - fctVx2.DefineConst("z0", cx3); - fctVx2.DefineConst("alpha", alpha); - fctVx3.DefineConst("x0", cx1); - fctVx3.DefineConst("y0", cx2); - fctVx3.DefineConst("z0", cx3); - SPtr<BC> inflowAirBC5(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST)); - inflowAirBC5->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - cx1 = -1.3077338898450492; - cx2 = 0.3998516560596088; - cx3 = 0.13843501416896437; - alpha = 300; - fctVx1.DefineConst("x0", cx1); - fctVx1.DefineConst("y0", cx2); - fctVx1.DefineConst("z0", cx3); - fctVx1.DefineConst("alpha", alpha); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("y0", cx2); - fctVx2.DefineConst("z0", cx3); - fctVx2.DefineConst("alpha", alpha); - fctVx3.DefineConst("x0", cx1); - fctVx3.DefineConst("y0", cx2); - fctVx3.DefineConst("z0", cx3); - SPtr<BC> inflowAirBC6(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST)); - inflowAirBC6->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - // Pressure BC for air inlet - // SPtr<BC> inflowAirBC1(new DensityBC(p_air_LB)); - // inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new MultiphasePressureBCStrategy())); - - SPtr<BC> outflowBC(new DensityBC(rhoLB)); - //outflowBC->setBCStrategy(SPtr<BCStrategy>(new NonEqDensityBCStrategy())); - outflowBC->setBCStrategy(SPtr<BCStrategy>(new MultiphasePressureBCStrategy())); - - // SPtr<BC> outflowBC(new DensityBC(rhoLB)); - //outflowBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNonReflectingOutflowBCStrategy())); - ////////////////////////////////////////////////////////////////////////////////// - // BC visitor - // BoundaryConditionsBlockVisitor bcVisitor;♣ - MultiphaseBoundaryConditionsBlockVisitor bcVisitor; - bcVisitor.addBC(noSlipBC); - bcVisitor.addBC(inflowConcreteBC); - bcVisitor.addBC(inflowAirBC1); - bcVisitor.addBC(outflowBC); - - // SPtr<LBMKernel> kernel = make_shared<IBcumulantK17LBMKernel>(); - // SPtr<LBMKernel> kernel = make_shared<CumulantK17LBMKernel>(); - // SPtr<LBMKernel> kernel = make_shared<MultiphaseTwoPhaseFieldsPressureFilterLBMKernel>(); - // SPtr<LBMKernel> kernel = make_shared<MultiphaseSimpleVelocityBaseExternalPressureLBMKernel>(); - //SPtr<LBMKernel> kernel = make_shared<MultiphaseSharpInterfaceLBMKernel>(); - //SPtr<LBMKernel> kernel = make_shared<IBcumulantK17LBMKernel>(); - SPtr<LBMKernel> kernel = make_shared<IBsharpInterfaceLBMKernel>(); - - kernel->setWithForcing(false); - kernel->setForcingX1(0.0); - kernel->setForcingX2(0.0); - kernel->setForcingX3(0.0); - - kernel->setPhiL(phiL); - kernel->setPhiH(phiH); - kernel->setPhaseFieldRelaxation(tauH); - kernel->setMobility(mob); - kernel->setInterfaceWidth(interfaceThickness); - - kernel->setCollisionFactorMultiphase(nu_h_LB, nu_l_LB); - kernel->setDensityRatio(densityRatio); - kernel->setMultiphaseModelParameters(beta, kappa); - kernel->setContactAngle(theta); - kernel->setSigma(sigma_LB); - - SPtr<BCSet> bcProc = make_shared<BCSet>(); - kernel->setBCSet(bcProc); - - SPtr<Grid3D> grid = make_shared<Grid3D>(comm); - grid->setPeriodicX1(false); - grid->setPeriodicX2(false); - grid->setPeriodicX3(false); - grid->setDeltaX(dx); - grid->setBlockNX(blockNX[0], blockNX[1], blockNX[2]); - grid->setGhostLayerWidth(2); - - string geoPath = "d:/Projects/TRR277/Project/WP4/NozzleGeo"; - - string outputPath = "d:/temp/NozzleFlowTest_SharpInterface_With_Part_fraction_0.23"; - UbSystem::makeDirectory(outputPath); - UbSystem::makeDirectory(outputPath + "/liggghts"); - - // if (myid == 0) { - // stringstream logFilename; - // logFilename << outputPath + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; - // UbLog::output_policy::setStream(logFilename.str()); - // } - - ///////////////////////////////////////////////////////////////////// - //LIGGGHTS things - ///////////////////////////////////////////////////////////////////// - string inFile1 = "d:/Projects/TRR277/Project/WP4/Config/in.nozzle"; - // string inFile2 = "d:/Projects/VirtualFluids_LIGGGHTS_coupling/apps/cpu/LiggghtsApp/in2.lbdem"; - MPI_Comm mpi_comm = *(MPI_Comm *)(comm->getNativeCommunicator()); - LiggghtsCouplingWrapper wrapper(argv, mpi_comm); - - double v_frac = 0.1; - double dt_phys = units->getFactorTimeLbToW(); - int demSubsteps = 10; - double dt_dem = dt_phys / (double)demSubsteps; - int vtkSteps = 1000; - string demOutDir = outputPath + "/liggghts"; - - // wrapper.execCommand("echo none"); - - // wrapper.execFile((char*)inFile1.c_str()); - - //// set timestep and output directory - wrapper.setVariable("t_step", dt_dem); - wrapper.setVariable("dmp_stp", vtkSteps * demSubsteps); - wrapper.setVariable("dmp_dir", demOutDir); - - wrapper.execFile((char *)inFile1.c_str()); - //wrapper.runUpto(demSubsteps - 1); - // wrapper.runUpto(1000); - - //LatticeDecomposition lDec((g_maxX1 - g_minX1) / dx, (g_maxX2 - g_minX2) / dx, (g_maxX3 - g_minX3) / dx, wrapper.lmp, grid); - - SPtr<UbScheduler> lScheduler = make_shared<UbScheduler>(1); - SPtr<LiggghtsCouplingSimulationObserver> lcSimulationObserver = make_shared<LiggghtsCouplingSimulationObserver>(grid, lScheduler, comm, wrapper, demSubsteps, unitsAir); - //SPtr<Grid3DVisitor> partVisitor = make_shared<LiggghtsPartitioningGridVisitor>(std::ceil((g_maxX1 - g_minX1) / dx), std::ceil((g_maxX2 - g_minX2) / dx), std::ceil((g_maxX3 - g_minX3) / dx), wrapper.lmp); - SPtr<Grid3DVisitor> partVisitor = make_shared<LiggghtsPartitioningGridVisitor>(26,26,420, wrapper.lmp); - - ///////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////// - - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::dMMM, MetisPartitioner::RECURSIVE)); - - SPtr<GbObject3D> gridCube = make_shared<GbCuboid3D>(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3); - if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), outputPath + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - // geo - ////////////////////////////////////////////////////////// - int accuracy = Interactor3D::EDGES; - /////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshNozzleAirDistributor = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirDistributor:start"); - meshNozzleAirDistributor->readMeshFromSTLFileASCII(geoPath + "/01_Nozzle_Air_Distributor.stl", false); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirDistributor:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAirDistributor.get(), outputPath + "/geo/meshNozzleAirDistributor", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrNozzleAirDistributor = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAirDistributor, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshNozzleAirInlet = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirInlet:start"); - meshNozzleAirInlet->readMeshFromSTLFileASCII(geoPath + "/02_Nozzle_Air_Inlet.stl", false); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirInlet:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAirInlet.get(), outputPath + "/geo/meshNozzleAirInlet", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrNozzleAirInlet = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAirInlet, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshNozzleSpacer = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleSpacer:start"); - meshNozzleSpacer->readMeshFromSTLFileASCII(geoPath + "/03_Nozzle_Spacer.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleSpacer:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleSpacer.get(), outputPath + "/geo/meshNozzleSpacer", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrNozzleSpacer = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleSpacer, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshNozzleAccDistributor = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccDistributor:start"); - meshNozzleAccDistributor->readMeshFromSTLFileASCII(geoPath + "/04_Nozzle_Acc_Distributor.stl", false); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccDistributor:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAccDistributor.get(), outputPath + "/geo/meshNozzleAccDistributor", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrNozzleAccDistributor = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAccDistributor, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshNozzleAccInlet = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccInlet:start"); - meshNozzleAccInlet->readMeshFromSTLFileASCII(geoPath + "/05_Nozzle_Acc_Inlet.stl", false); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccInlet:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAccInlet.get(), outputPath + "/geo/meshNozzleAccInlet", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrNozzleAccInlet = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAccInlet, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshNozzleVolcanNozzle1 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle1:start"); - meshNozzleVolcanNozzle1->readMeshFromSTLFileBinary(geoPath + "/06_1_Nozzle_Volcan_Nozzle.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle1:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleVolcanNozzle1.get(), outputPath + "/geo/meshNozzleVolcanNozzle1", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrNozzleVolcanNozzle1 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleVolcanNozzle1, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::EDGES); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshNozzleVolcanNozzle2 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle2:start"); - meshNozzleVolcanNozzle2->readMeshFromSTLFileBinary(geoPath + "/06_2_Nozzle_Volcan_Nozzle.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle2:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleVolcanNozzle2.get(), outputPath + "/geo/meshNozzleVolcanNozzle2", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrNozzleVolcanNozzle2 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleVolcanNozzle2, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::POINTS); - /////////////////////////////////////////////////////////// - // box - SPtr<D3Q27Interactor> intrBox = SPtr<D3Q27Interactor>(new D3Q27Interactor(gridCube, grid, noSlipBC, Interactor3D::INVERSESOLID)); - /////////////////////////////////////////////////////////// - // inflow - //GbCylinder3DPtr geoInflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, 0.20105, -1.30181 + 0.0005, 0.390872 - 0.00229, 0.23, 0.013)); - GbCylinder3DPtr geoInflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, 0.175, -1.30181 + 0.0005, 0.390872 - 0.00229, 0.21, 0.013)); - if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), outputPath + "/geo/geoInflow", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27Interactor> intrInflow = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, inflowConcreteBC, Interactor3D::SOLID)); - /////////////////////////////////////////////////////////// - // outflow - //GbCylinder3DPtr geoOutflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, -0.22, -1.30181 + 0.0005, 0.390872 - 0.00229, -0.21, 0.013)); - //GbCylinder3DPtr geoOutflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, -0.426, -1.30181 + 0.0005, 0.390872 - 0.00229, -0.415, 0.013)); - GbCylinder3DPtr geoOutflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, g_minX3, -1.30181 + 0.0005, 0.390872 - 0.00229, g_minX3+2.*dx, 0.013)); - if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), outputPath + "/geo/geoOutflow", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27Interactor> intrOutflow = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, outflowBC, Interactor3D::SOLID)); - /////////////////////////////////////////////////////////// - // SPtr<GbTriFaceMesh3D> geoAirInlet = std::make_shared<GbTriFaceMesh3D>(); - // if (myid == 0) UBLOG(logINFO, "Read Air_Inlet:start"); - // geoAirInlet->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet.stl", true); - // if (myid == 0) UBLOG(logINFO, "Read Air_Inlet:end"); - // if (myid == 0) GbSystem3D::writeGeoObject(geoAirInlet.get(), outputPath + "/geo/geoAirInlet", WbWriterVtkXmlBinary::getInstance()); - // SPtr<Interactor3D> intrAirInlet = std::make_shared<D3Q27TriFaceMeshInteractor>(geoAirInlet, grid, inflowAirBC1, Interactor3D::SOLID, Interactor3D::EDGES); - ///////////////////////////////////////////////////////////// - // Fluid area - GbCylinder3DPtr geoFluidArea(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, g_minX3, -1.30181 + 0.0005, 0.390872 - 0.00229, g_maxX3, 0.013)); - if (myid == 0) GbSystem3D::writeGeoObject(geoFluidArea.get(), outputPath + "/geo/geoFluidArea", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27Interactor> intrFluidArea = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoFluidArea, grid, noSlipBC, Interactor3D::INVERSESOLID)); - /////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////// - GbCylinder3DPtr geoAirInflow(new GbCylinder3D(-1.31431 - 0.0005, 0.388587, 0.1383275, -1.31431, 0.388587, 0.1383275, 0.002765)); - if (myid == 0) GbSystem3D::writeGeoObject(geoAirInflow.get(), outputPath + "/geo/geoAirInlet", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrAirInflow = std::make_shared<D3Q27Interactor>(geoAirInflow, grid, inflowAirBC1, Interactor3D::SOLID, Interactor3D::EDGES); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshAirInlet1 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet1:start"); - meshAirInlet1->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_1.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet1:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet1.get(), outputPath + "/geo/meshAirInlet1", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intAirInlet1 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet1, grid, inflowAirBC1, Interactor3D::SOLID, Interactor3D::POINTS); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshAirInlet2 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet2:start"); - meshAirInlet2->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_2.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet2:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet2.get(), outputPath + "/geo/meshAirInlet2", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intAirInlet2 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet2, grid, inflowAirBC2, Interactor3D::SOLID, Interactor3D::POINTS); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshAirInlet3 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet3:start"); - meshAirInlet3->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_3.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet3:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet3.get(), outputPath + "/geo/meshAirInlet3", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intAirInlet3 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet3, grid, inflowAirBC3, Interactor3D::SOLID, Interactor3D::POINTS); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshAirInlet4 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet4:start"); - meshAirInlet4->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_4.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet4:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet4.get(), outputPath + "/geo/meshAirInlet4", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intAirInlet4 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet4, grid, inflowAirBC4, Interactor3D::SOLID, Interactor3D::POINTS); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshAirInlet5 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet5:start"); - meshAirInlet5->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_5.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet5:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet5.get(), outputPath + "/geo/meshAirInlet5", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intAirInlet5 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet5, grid, inflowAirBC5, Interactor3D::SOLID, Interactor3D::POINTS); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshAirInlet6 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet6:start"); - meshAirInlet6->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_6.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet6:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet6.get(), outputPath + "/geo/meshAirInlet6", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intAirInlet6 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet6, grid, inflowAirBC6, Interactor3D::SOLID, Interactor3D::POINTS); - /////////////////////////////////////////////////////////// - - InteractorsHelper intHelper(grid, partVisitor, false); - - intHelper.addInteractor(intrFluidArea); - intHelper.addInteractor(intrNozzleVolcanNozzle2); - // intHelper.addInteractor(intrBox); - intHelper.addInteractor(intrInflow); - // intHelper.addInteractor(intrAirInflow); - intHelper.addInteractor(intAirInlet1); - intHelper.addInteractor(intAirInlet2); - intHelper.addInteractor(intAirInlet3); - intHelper.addInteractor(intAirInlet4); - intHelper.addInteractor(intAirInlet5); - intHelper.addInteractor(intAirInlet6); - intHelper.addInteractor(intrOutflow); - - // intHelper.addInteractor(intrNozzleAirDistributor); - // intHelper.addInteractor(intrNozzleAirInlet); - // intHelper.addInteractor(intrNozzleSpacer); - // intHelper.addInteractor(intrNozzleAccDistributor); - // intHelper.addInteractor(intrNozzleAccInlet); - // intHelper.addInteractor(intrNozzleVolcanNozzle1); - - intHelper.selectBlocks(); - - SPtr<SimulationObserver> ppblocks = make_shared<WriteBlocksSimulationObserver>(grid, SPtr<UbScheduler>(new UbScheduler(1)), outputPath, WbWriterVtkXmlBinary::getInstance(), comm); - ppblocks->update(0); - ppblocks.reset(); - - // if (myid == 0) UBLOG(logINFO, Utilities::toString(grid, comm->getNumberOfProcesses())); - - //SetKernelBlockVisitor kernelVisitor(kernel, nu_l_LB, comm->getNumberOfProcesses()); - MultiphaseSetKernelBlockVisitor kernelVisitor(kernel, nu_h_LB, nu_l_LB, 1e9, 1); - grid->accept(kernelVisitor); - - - intHelper.setBC(); - - // InitDistributionsBlockVisitor initVisitor; - // grid->accept(initVisitor); - - double x1c = -1.31431 + R; - double x2c = 0.375582 + R; - double Ri = 5; - double x3c = 0.136 + Ri; - - //R = 0.2 - 0.145; // 0.078-0.04; // 0.2; - - mu::Parser fct1; - // fct1.SetExpr(" 0.5 - 0.5 * tanh(2 * (sqrt((x1 - x1c) ^ 2 + (x2 - x2c) ^ 2 + (x3 - x3c) ^ 2) - radius) / interfaceThickness)"); - fct1.SetExpr(" 0.5 - 0.5 * tanh(2 * (sqrt((x1 - 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", Ri); - fct1.DefineConst("interfaceThickness", interfaceThickness * dx); - - MultiphaseVelocityFormInitDistributionsBlockVisitor initVisitor; - initVisitor.setPhi(fct1); - grid->accept(initVisitor); - - //InitDistributionsBlockVisitor initVisitor; - //grid->accept(initVisitor); - - // boundary conditions grid - { - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - SPtr<WriteBoundaryConditionsSimulationObserver> ppgeo(new WriteBoundaryConditionsSimulationObserver(grid, geoSch, outputPath, WbWriterVtkXmlBinary::getInstance(), comm)); - ppgeo->update(0); - ppgeo.reset(); - } - - grid->accept(bcVisitor); - - //OneDistributionSetConnectorsBlockVisitor setConnsVisitor(comm); - TwoDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm); - // ThreeDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm); - grid->accept(setConnsVisitor); - - int numOfThreads = 1; - omp_set_num_threads(numOfThreads); - - SPtr<UbScheduler> nupsSch = std::make_shared<UbScheduler>(10, 10, 100); - SPtr<NUPSCounterSimulationObserver> nupsSimulationObserver = make_shared<NUPSCounterSimulationObserver>(grid, nupsSch, numOfThreads, comm); - - //// write data for visualization of macroscopic quantities - SPtr<UbScheduler> visSch(new UbScheduler(vtkSteps)); - // SPtr<UbScheduler> visSch(new UbScheduler(1, 8700, 8800)); - // visSch->addSchedule(1, 8700, 8800); - SPtr<WriteSharpInterfaceQuantitiesSimulationObserver> writeMQSimulationObserver(new WriteSharpInterfaceQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm)); - //writeMQSimulationObserver->update(0); - - //SPtr<WriteMacroscopicQuantitiesSimulationObserver> writeMQSimulationObserver(new WriteMacroscopicQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm)); - //writeMQSimulationObserver->update(0); - - int endTime = 10000000; - SPtr<Simulation> simulation(new Simulation(grid, lScheduler, endTime)); - simulation->addSimulationObserver(nupsSimulationObserver); - simulation->addSimulationObserver(lcSimulationObserver); - simulation->addSimulationObserver(writeMQSimulationObserver); - - if (myid == 0) UBLOG(logINFO, "Simulation-start"); - simulation->run(); - 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; - } - return 0; -} diff --git a/apps/cpu/Nozzle/nozzleSinglePhase.cpp b/apps/cpu/Nozzle/nozzleSinglePhase.cpp deleted file mode 100644 index 178af4f81067f372a56e64cecff1a651b400dd26..0000000000000000000000000000000000000000 --- a/apps/cpu/Nozzle/nozzleSinglePhase.cpp +++ /dev/null @@ -1,796 +0,0 @@ -#include <iostream> -#include <memory> -#include <string> - -#include "VirtualFluids.h" - -#include "LiggghtsCoupling/LiggghtsCoupling.h" - -#include "MultiphaseFlow/MultiphaseFlow.h" - -#include "NonNewtonianFluids/NonNewtonianFluids.h" - -using namespace std; - -int main(int argc, char *argv[]) -{ - //Sleep(30000); - - try { - - std::shared_ptr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - // bounding box - // double g_minX1 = -1341.81e-3; - // double g_minX2 = 348.087e-3; - // double g_minX3 = -210e-3; - - // double g_maxX1 = -1260.81e-3; - // double g_maxX2 = 429.087e-3; - // double g_maxX3 = 214.5e-3; - - // double g_minX1 = -1341.81e-3 + 10e-3; - // double g_minX2 = 0.360872; - // double g_minX3 = -210e-3; - - // double g_maxX1 = -1260.81e-3 - 10e-3; - // double g_maxX2 = 0.416302; - // double g_maxX3 = 210e-3; - - // int blockNX[3] = { 10, 10, 10 }; - - double g_minX1 = -1.31431; - double g_minX2 = 0.375582; - double g_minX3 = -0.21 + 0.035 * 8.0; //-0.21; //-210e-3 - 0.2 - 6e-3; //- 1e-3; - - double g_maxX1 = -1.28831; - double g_maxX2 = 0.401582; - double g_maxX3 = 0.175;//0.21; - - //int blockNX[3] = { 26, 26, 35 }; - int blockNX[3] = { 26, 26, 35/5 }; - - double dx = 1e-3; - - double uLB_ref = 0.0001; - // double rhoLB = 0.0; - - // concrete - double d_part = 1e-3; - double V = 0.4*10.; // flow rate [m^3/h] - double D = 0.026; // shotcrete inlet diameter [m] - double R = D / 2.0; // radius [m] - double A = UbMath::PI * R * R; - double u = V / 3600 / A; - double muConcrete = 2.1133054011798826; // [Pa s] - double rhoAir = 1.2041; // [kg/m^3] - double tau0 = 715.218181094648; // Pa - double rhoConcrete = 2400; // [kg/m^3] - double nu = muConcrete / rhoConcrete; - - // double Re_D = d_part * u / nu; - // if (myid == 0) UBLOG(logINFO, "Re_D = " << Re_D); - // - SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 2400, d_part / dx, uLB_ref); - if (myid == 0) std::cout << units->toString() << std::endl; - - double interfaceThickness = 3; // 4.096; - double sigma = 0.3; //0.03; - double Re = rhoConcrete * u * d_part / muConcrete; - double We = rhoConcrete * u * u * d_part / sigma; - - double u_LB_con = u * units->getFactorVelocityWToLb(); - double nu_h_LB = nu * units->getFactorViscosityWToLb(); // uLB_ref * d_part * units->getFactorLentghWToLb() / Re; - double nu_l_LB = 0; // = nu_h_LB; - - double rho_h_LB = 1; - - // surface tension - double sigma_LB = rho_h_LB *u_LB_con *u_LB_con *d_part * units->getFactorLentghWToLb() / We; - - // LBMReal dLB = 0; // = length[1] / dx; - LBMReal rhoLB = 0.0; - // LBMReal nuLB = nu_l; //(uLB_ref*dLB) / Re; - - double beta = 12.0 * sigma_LB / interfaceThickness; - double kappa = 1.5 * interfaceThickness * sigma_LB; - - double phiL = 0.0; - double phiH = 1.0; - double tauH = 0.6; // Phase - field Relaxation - double mob = 0.02; // Mobility - // double nuL = 1e-2; - // double nuG = 0.015811388300841892; - double densityRatio = rhoConcrete / rhoAir; - // double sigma_old = 1.0850694444444444e-06; - // - // double beta_old = 12.0 * sigma / interfaceThickness; - // double kappa_old = 1.5 * interfaceThickness * sigma; - - double theta = 110; // contact angle - - // https://civilsir.com/density-of-cement-sand-and-aggregate-in-kg-m3-list-of-material-density/ - - // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, 1.480, 2060, r_p/dx); - // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, LBMUnitConverter::AIR_20C, r_p / dx); - // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 1000, d_part / dx, std::abs(uLB_ref)); - // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 1000, d_part / dx, std::abs(uLB_ref)); - // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 2400, d_part / dx, uRef); - - double Bm = (tau0 * d_part) / (muConcrete * u); - double tau0_LB = Bm * nu_h_LB * u_LB_con / (d_part * units->getFactorLentghWToLb()); - - SPtr<Rheology> thix = Rheology::getInstance(); - thix->setYieldStress(tau0_LB); - - if (myid == 0) VF_LOG_INFO("Yield stress = {} Pa", tau0); - if (myid == 0) VF_LOG_INFO("Yield stress LB = {} ", tau0_LB); - - SPtr<BC> noSlipBC(new NoSlipBC()); - noSlipBC->setBCStrategy(SPtr<BCStrategy>(new NoSlipInterpolated())); - //SPtr<BC> noSlipBC(new NoSlipBC()); - //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNoSlipBCStrategy())); - - // concrete inflow boundary condition - mu::Parser fct; - fct.SetExpr("U"); - fct.DefineConst("U", -u_LB_con); - if (myid == 0) VF_LOG_INFO("Concrete inflow velocity = {} m/s", u); - if (myid == 0) VF_LOG_INFO("Concrete inflow velocity = {} dx/dt", u_LB_con); - if (myid == 0) VF_LOG_INFO("Concrete Re = {}", Re); - - // // Štigler, J. (2014). Analytical velocity profile in tube for laminar and turbulent flow. Engineering - // // Mechanics, 21(6), 371-379. - // double cx1 = -1.31431 + R; - // double cx2 = 0.375582 + R; - // //double cx3 = 0.20105 + R; - // double L = g_maxX1 - g_minX1; - // double p_concrete = 1e5; // Pa = 1 Bar - // double p1 = p_concrete * units->getFactorPressureWToLb(); - // double p2 = 0.0; - // double drhoLB = 1.0 + rhoLB; - // double muLB = drhoLB * nuLB; - // double N = R * R / 2 * muLB * uLB_ref * (p1 - p2) / L - 3; - - // // mu::Parser fct; - // fct.SetExpr("U*(1-(((((x2-y0)^2+(x1-x0)^2)^0.5)/R)^NplusOne))"); - // fct.DefineConst("x0", cx1); - // fct.DefineConst("y0", cx2); - // //fct.DefineConst("z0", cx3); - // fct.DefineConst("R", R); - // fct.DefineConst("U", uLB_ref * ((N + 3) / (N + 1))); - // fct.DefineConst("NplusOne", N + 1.0); - - SPtr<BC> inflowConcreteBC(new VelocityBC(false, false, true, fct, 0, BCFunction::INFCONST)); - inflowConcreteBC->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated())); - //SPtr<BC> inflowConcreteBC(new MultiphaseVelocityBC(false, false, true, fct, phiH, 0, BCFunction::INFCONST)); - //inflowConcreteBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - // air inflow boundary condition - // Štigler, J. (2014). Analytical velocity profile in tube for laminar and turbulent flow. Engineering - // Mechanics, 21(6), 371-379. - // SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, LBMUnitConverter::AIR_20C, d_part / dx); - // SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, 1., 1.2041, d_part / dx, uLB_ref); - // double V = 40; // flow rate [m^3/h] - // double D = 0.0166; // air inlet diameter [m] - // double R = D / 2.0; // radius [m] - // double A = UbMath::PI * R * R; - // double u = V / 3600 / A; - // double uLB_ref = u * unitsAir->getFactorVelocityWToLb(); - //// double cx1 = -1.2788 + R; - // double cx2 = 0.3803 + R; - // double cx3 = 0.1517 + R; - // double L = g_maxX1 - g_minX1; - // double p_air = 7e5; // Pa = 7 Bar - // double p1 = p_air; - // double p2 = 0.0; - // double mu = 17.2e-6; // Pa s, air 20° C - // double N = R * R / 2 * mu * u * (p1 - p2) / L - 3; - // if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} m/s", u); - // if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} dx/dt", uLB_ref); - // - - // double nu = mu / rhoConcrete; - // double Re = d_part * u / nu; - // if (myid == 0) VF_LOG_INFO("Re_air = {}", Re); - - // double nuLB = d_part * unitsAir->getFactorLentghWToLb() * uLB_ref / Re; - // if (myid == 0) VF_LOG_INFO("nuLB_air = {}", nuLB); - // nu_l_LB = nuLB; - - SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, 1., 1.2041, d_part / dx, uLB_ref); - //SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, LBMUnitConverter::AIR_20C, d_part / dx); - double V_air = 40./6.; // flow rate [m^3/h] //10. - double D_air = 0.00553; // air inlet diameter [m] - double R_air = D_air / 2.0; // radius [m] - double A_air = UbMath::PI * (R_air * R_air); - double u_air = V_air / 3600 / A_air; - double uLB_air = u_air * unitsAir->getFactorVelocityWToLb(); - // double cx1 = -1.2788 + R; - double cx2 = 0.385822 + R_air; - double cx3 = 0.135562 + R_air; - double L_air = 0.00747; - double p_air = 7e5; // Pa = 7 Bar - double p1 = p_air; - double p2 = 1e5; - double mu_air = 17.2e-6; // Pa s, air 20° C - double rho_air = 1.2041; // [kg/m^3] - double Re_inlet = D_air * u_air * rho_air / mu_air; - double lambda = 0.3164 / pow(Re_inlet, 0.25); - double deltaP = (lambda / (2. * R_air)) * (rho_air * pow(u_air, 2) / 2.); // Darcy friction factor (Rohrreibungszahl) - double N = pow(R_air, 2) / (2. * mu_air * u_air) * deltaP - 3.; - // double N = R_air * R_air / 2 * mu_air * u_air * (p1 - p2) / L_air - 3; - if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} m/s", u_air); - if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} dx/dt", uLB_air); - - double nu_air = mu_air / rho_air; - double Re_air = d_part * u_air / nu_air; - if (myid == 0) VF_LOG_INFO("Air Re = {}", Re_air); - - double nuLB_air = nu_air * unitsAir->getFactorViscosityWToLb(); // d_part * unitsAir->getFactorLentghWToLb() * uLB_air / Re_air; - if (myid == 0) VF_LOG_INFO("nuLB_air = {}", nuLB_air); - nu_l_LB = nuLB_air; - - if (myid == 0) VF_LOG_INFO("nu_h = {}", nu_h_LB); - if (myid == 0) VF_LOG_INFO("nu_l = {}", nu_l_LB); - if (myid == 0) VF_LOG_INFO("sigma_LB = {}", sigma_LB); - - double p_air_LB = p_air * unitsAir->getFactorPressureWToLb(); - if (myid == 0) VF_LOG_INFO("p_air_LB = {}", p_air_LB); - - // mu::Parser fctVx1; - ////fctVx1.SetExpr("U"); - ////fctVx1.DefineConst("U", uLB_air); - // mu::Parser fctVx2; - // fctVx2.SetExpr("U"); - // fctVx2.DefineConst("U", 0); - // mu::Parser fctVx3; - ////fctVx3.SetExpr("U"); - ////fctVx3.DefineConst("U", -uLB_air); - - double cx1 = 0; - double alpha = 0; - double gamma = 0; - double U = uLB_air;// * ((N + 3.) / (N + 1.)); - - mu::Parser fctVx1; - //fctVx1.SetExpr("U*cos(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)^NplusOne))"); - //fctVx1.SetExpr("U*cos(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)))"); - // fctVx1.SetExpr("(((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5/R)^NplusOne"); - fctVx1.SetExpr("U*cos(alpha*_pi/180)"); - fctVx1.DefineConst("x0", cx1); - fctVx1.DefineConst("y0", cx2); - fctVx1.DefineConst("z0", cx3); - fctVx1.DefineConst("R", R_air); - fctVx1.DefineConst("U", U); //* ((N + 3.) / (N + 1.))); - fctVx1.DefineConst("NplusOne", N + 1.0); - fctVx1.DefineConst("alpha", alpha); - fctVx1.DefineConst("gamma", gamma); - - mu::Parser fctVx2; - //fctVx2.SetExpr("U*sin(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)^NplusOne))"); - //fctVx2.SetExpr("U*sin(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)))"); - fctVx2.SetExpr("U*sin(alpha*_pi/180)"); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("y0", cx2); - fctVx2.DefineConst("z0", cx3); - fctVx2.DefineConst("R", R_air); - fctVx2.DefineConst("U", U); //* ((N + 3.) / (N + 1.))); - fctVx2.DefineConst("NplusOne", N + 1.0); - fctVx2.DefineConst("alpha", alpha); - - mu::Parser fctVx3; - //fctVx3.SetExpr("U*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)^NplusOne))"); - //fctVx3.SetExpr("U*cos(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)))"); - fctVx3.SetExpr("U"); - fctVx3.DefineConst("x0", cx1); - fctVx3.DefineConst("y0", cx2); - fctVx3.DefineConst("z0", cx3); - fctVx3.DefineConst("R", R_air); - fctVx3.DefineConst("U", -U); //* ((N + 3.) / (N + 1.))); - fctVx3.DefineConst("NplusOne", N + 1.0); - fctVx3.DefineConst("alpha", alpha); - fctVx3.DefineConst("gamma", gamma); - - // SPtr<BC> inflowAirBC1(new VelocityBC(true, false, false, fct, 0, BCFunction::INFCONST)); - // inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated())); - // t = U * sin(alpha * _pi / 180) * (1 - (((((x1 - x0) ^ 2 + (x2 - y0) ^ 2 + (x3 - z0) ^ 2) ^ 0.5) / R) ^ NplusOne)); - cx1 = -1.31416; - cx2 = 0.388684; - cx3 = 0.138177; - alpha = 0; - gamma = 225; - fctVx1.DefineConst("x0", cx1); - fctVx1.DefineConst("y0", cx2); - fctVx1.DefineConst("z0", cx3); - fctVx1.DefineConst("alpha", alpha); - fctVx1.DefineConst("gamma", gamma); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("y0", cx2); - fctVx2.DefineConst("z0", cx3); - fctVx2.DefineConst("alpha", alpha); - fctVx2.DefineConst("gamma", gamma); - fctVx3.DefineConst("x0", cx1); - fctVx3.DefineConst("y0", cx2); - fctVx3.DefineConst("z0", cx3); - fctVx3.DefineConst("alpha", alpha); - fctVx3.DefineConst("gamma", gamma); - - SPtr<BC> inflowAirBC1(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST)); - inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated())); - //SPtr<BC> inflowAirBC1(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST)); - //inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - fctVx1.DefineVar("x1", &cx1); - fctVx1.DefineVar("x2", &cx2); - fctVx1.DefineVar("x3", &cx3); - fctVx2.DefineVar("x1", &cx1); - fctVx2.DefineVar("x2", &cx2); - fctVx2.DefineVar("x3", &cx3); - fctVx3.DefineVar("x1", &cx1); - fctVx3.DefineVar("x2", &cx2); - fctVx3.DefineVar("x3", &cx3); - - if (myid == 0) { - - VF_LOG_INFO("fctVx1 = {}", fctVx1.Eval()); - VF_LOG_INFO("fctVx2 = {}", fctVx2.Eval()); - VF_LOG_INFO("fctVx3 = {}", fctVx3.Eval()); - VF_LOG_INFO("N = {}", N); - VF_LOG_INFO("NplusOne = {}", N + 1.0); - // return 0; - } - cx1 = -1.31303; - cx2 = 0.377234; - cx3 = 0.138174; - alpha = 60; - fctVx1.DefineConst("x0", cx1); - fctVx1.DefineConst("y0", cx2); - fctVx1.DefineConst("z0", cx3); - fctVx1.DefineConst("alpha", alpha); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("y0", cx2); - fctVx2.DefineConst("z0", cx3); - fctVx2.DefineConst("alpha", alpha); - fctVx3.DefineConst("x0", cx1); - fctVx3.DefineConst("y0", cx2); - fctVx3.DefineConst("z0", cx3); - SPtr<BC> inflowAirBC2(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST)); - inflowAirBC2->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated())); - //SPtr<BC> inflowAirBC2(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST)); - //inflowAirBC2->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - cx1 = -1.2948374155694822; - cx2 = 0.37733728717266285; - cx3 = 0.13840460401111598; - alpha = 120; - fctVx1.DefineConst("x0", cx1); - fctVx1.DefineConst("y0", cx2); - fctVx1.DefineConst("z0", cx3); - fctVx1.DefineConst("alpha", alpha); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("y0", cx2); - fctVx2.DefineConst("z0", cx3); - fctVx2.DefineConst("alpha", alpha); - fctVx3.DefineConst("x0", cx1); - fctVx3.DefineConst("y0", cx2); - fctVx3.DefineConst("z0", cx3); - SPtr<BC> inflowAirBC3(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST)); - inflowAirBC3->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated())); - //SPtr<BC> inflowAirBC3(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST)); - //inflowAirBC3->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - cx1 = -1.28847; - cx2 = 0.3885; - cx3 = 0.1385; - alpha = 180; - fctVx1.DefineConst("x0", cx1); - fctVx1.DefineConst("y0", cx2); - fctVx1.DefineConst("z0", cx3); - fctVx1.DefineConst("alpha", alpha); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("y0", cx2); - fctVx2.DefineConst("z0", cx3); - fctVx2.DefineConst("alpha", alpha); - fctVx3.DefineConst("x0", cx1); - fctVx3.DefineConst("y0", cx2); - fctVx3.DefineConst("z0", cx3); - SPtr<BC> inflowAirBC4(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST)); - inflowAirBC4->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated())); - //SPtr<BC> inflowAirBC4(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST)); - //inflowAirBC4->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - cx1 = -1.294771417778694; - cx2 = 0.399787947463142; - cx3 = 0.1383429692754194; - alpha = 240; - fctVx1.DefineConst("x0", cx1); - fctVx1.DefineConst("y0", cx2); - fctVx1.DefineConst("z0", cx3); - fctVx1.DefineConst("alpha", alpha); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("y0", cx2); - fctVx2.DefineConst("z0", cx3); - fctVx2.DefineConst("alpha", alpha); - fctVx3.DefineConst("x0", cx1); - fctVx3.DefineConst("y0", cx2); - fctVx3.DefineConst("z0", cx3); - SPtr<BC> inflowAirBC5(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST)); - inflowAirBC5->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated())); - //SPtr<BC> inflowAirBC5(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST)); - //inflowAirBC5->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - cx1 = -1.3077338898450492; - cx2 = 0.3998516560596088; - cx3 = 0.13843501416896437; - alpha = 300; - fctVx1.DefineConst("x0", cx1); - fctVx1.DefineConst("y0", cx2); - fctVx1.DefineConst("z0", cx3); - fctVx1.DefineConst("alpha", alpha); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("y0", cx2); - fctVx2.DefineConst("z0", cx3); - fctVx2.DefineConst("alpha", alpha); - fctVx3.DefineConst("x0", cx1); - fctVx3.DefineConst("y0", cx2); - fctVx3.DefineConst("z0", cx3); - SPtr<BC> inflowAirBC6(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST)); - inflowAirBC6->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated())); - //SPtr<BC> inflowAirBC6(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST)); - //inflowAirBC6->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - // Pressure BC for air inlet - // SPtr<BC> inflowAirBC1(new PressureBC(p_air_LB)); - // inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new MultiphasePressureBCStrategy())); - - SPtr<BC> outflowBC(new PressureBC(rhoLB)); - outflowBC->setBCStrategy(SPtr<BCStrategy>(new PressureNonEquilibrium())); - //outflowBC->setBCStrategy(SPtr<BCStrategy>(new MultiphasePressureBCStrategy())); - - // SPtr<BC> outflowBC(new PressureBC(rhoLB)); - //outflowBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNonReflectingOutflowBCStrategy())); - ////////////////////////////////////////////////////////////////////////////////// - // BC visitor - BoundaryConditionsBlockVisitor bcVisitor; - //MultiphaseBoundaryConditionsBlockVisitor bcVisitor; - - - // SPtr<LBMKernel> kernel = make_shared<IBcumulantK17LBMKernel>(); - //SPtr<LBMKernel> kernel = make_shared<CumulantK17LBMKernel>(); - // SPtr<LBMKernel> kernel = make_shared<MultiphaseTwoPhaseFieldsPressureFilterLBMKernel>(); - // SPtr<LBMKernel> kernel = make_shared<MultiphaseSimpleVelocityBaseExternalPressureLBMKernel>(); - //SPtr<LBMKernel> kernel = make_shared<MultiphaseSharpInterfaceLBMKernel>(); - SPtr<LBMKernel> kernel = make_shared<IBcumulantK17LBMKernel>(); - //SPtr<LBMKernel> kernel = make_shared<IBsharpInterfaceLBMKernel>(); - - kernel->setWithForcing(false); - kernel->setForcingX1(0.0); - kernel->setForcingX2(0.0); - kernel->setForcingX3(0.0); - - kernel->setPhiL(phiL); - kernel->setPhiH(phiH); - kernel->setPhaseFieldRelaxation(tauH); - kernel->setMobility(mob); - kernel->setInterfaceWidth(interfaceThickness); - - kernel->setCollisionFactorMultiphase(nu_h_LB, nu_l_LB); - kernel->setDensityRatio(densityRatio); - kernel->setMultiphaseModelParameters(beta, kappa); - kernel->setContactAngle(theta); - kernel->setSigma(sigma_LB); - - SPtr<BCSet> bcProc = make_shared<BCSet>(); - kernel->setBCSet(bcProc); - - SPtr<Grid3D> grid = make_shared<Grid3D>(comm); - grid->setPeriodicX1(false); - grid->setPeriodicX2(false); - grid->setPeriodicX3(false); - grid->setDeltaX(dx); - grid->setBlockNX(blockNX[0], blockNX[1], blockNX[2]); - grid->setGhostLayerWidth(1); - - string geoPath = "d:/Projects/TRR277/Project/WP4/NozzleGeo"; - - string outputPath = "d:/temp/NozzleFlowTest_SinglePhase_SmallTest_Blocks"; - UbSystem::makeDirectory(outputPath); - UbSystem::makeDirectory(outputPath + "/liggghts"); - - // if (myid == 0) { - // stringstream logFilename; - // logFilename << outputPath + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; - // UbLog::output_policy::setStream(logFilename.str()); - // } - - ///////////////////////////////////////////////////////////////////// - //LIGGGHTS things - ///////////////////////////////////////////////////////////////////// - string inFile1 = "d:/Projects/TRR277/Project/WP4/Config/in.nozzle"; - // string inFile2 = "d:/Projects/VirtualFluids_LIGGGHTS_coupling/apps/cpu/LiggghtsApp/in2.lbdem"; - MPI_Comm mpi_comm = *(MPI_Comm *)(comm->getNativeCommunicator()); - LiggghtsCouplingWrapper wrapper(argv, mpi_comm); - - double v_frac = 0.1; - double dt_phys = units->getFactorTimeLbToW(); - int demSubsteps = 10; - double dt_dem = dt_phys / (double)demSubsteps; - int vtkSteps = 1000; - string demOutDir = outputPath + "/liggghts"; - - // wrapper.execCommand("echo none"); - - // wrapper.execFile((char*)inFile1.c_str()); - - //// set timestep and output directory - wrapper.setVariable("t_step", dt_dem); - wrapper.setVariable("dmp_stp", vtkSteps * demSubsteps); - wrapper.setVariable("dmp_dir", demOutDir); - - wrapper.execFile((char *)inFile1.c_str()); - //wrapper.runUpto(demSubsteps - 1); - // wrapper.runUpto(1000); - - //LatticeDecomposition lDec((g_maxX1 - g_minX1) / dx, (g_maxX2 - g_minX2) / dx, (g_maxX3 - g_minX3) / dx, wrapper.lmp, grid); - - SPtr<UbScheduler> lScheduler = make_shared<UbScheduler>(1); - SPtr<LiggghtsCouplingSimulationObserver> lcSimulationObserver = make_shared<LiggghtsCouplingSimulationObserver>(grid, lScheduler, comm, wrapper, demSubsteps, unitsAir); - //SPtr<Grid3DVisitor> partVisitor = make_shared<LiggghtsPartitioningGridVisitor>(std::ceil((g_maxX1 - g_minX1) / dx), std::ceil((g_maxX2 - g_minX2) / dx), std::ceil((g_maxX3 - g_minX3) / dx), wrapper.lmp); - SPtr<Grid3DVisitor> partVisitor = make_shared<LiggghtsPartitioningGridVisitor>(26,26,420, wrapper.lmp); - - ///////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////// - - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::dMMM, MetisPartitioner::RECURSIVE)); - - SPtr<GbObject3D> gridCube = make_shared<GbCuboid3D>(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3); - if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), outputPath + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - // geo - ////////////////////////////////////////////////////////// - int accuracy = Interactor3D::EDGES; - /////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshNozzleAirDistributor = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirDistributor:start"); - meshNozzleAirDistributor->readMeshFromSTLFileASCII(geoPath + "/01_Nozzle_Air_Distributor.stl", false); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirDistributor:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAirDistributor.get(), outputPath + "/geo/meshNozzleAirDistributor", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrNozzleAirDistributor = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAirDistributor, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshNozzleAirInlet = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirInlet:start"); - meshNozzleAirInlet->readMeshFromSTLFileASCII(geoPath + "/02_Nozzle_Air_Inlet.stl", false); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirInlet:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAirInlet.get(), outputPath + "/geo/meshNozzleAirInlet", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrNozzleAirInlet = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAirInlet, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshNozzleSpacer = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleSpacer:start"); - meshNozzleSpacer->readMeshFromSTLFileASCII(geoPath + "/03_Nozzle_Spacer.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleSpacer:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleSpacer.get(), outputPath + "/geo/meshNozzleSpacer", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrNozzleSpacer = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleSpacer, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshNozzleAccDistributor = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccDistributor:start"); - meshNozzleAccDistributor->readMeshFromSTLFileASCII(geoPath + "/04_Nozzle_Acc_Distributor.stl", false); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccDistributor:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAccDistributor.get(), outputPath + "/geo/meshNozzleAccDistributor", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrNozzleAccDistributor = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAccDistributor, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshNozzleAccInlet = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccInlet:start"); - meshNozzleAccInlet->readMeshFromSTLFileASCII(geoPath + "/05_Nozzle_Acc_Inlet.stl", false); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccInlet:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAccInlet.get(), outputPath + "/geo/meshNozzleAccInlet", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrNozzleAccInlet = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAccInlet, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshNozzleVolcanNozzle1 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle1:start"); - meshNozzleVolcanNozzle1->readMeshFromSTLFileBinary(geoPath + "/06_1_Nozzle_Volcan_Nozzle.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle1:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleVolcanNozzle1.get(), outputPath + "/geo/meshNozzleVolcanNozzle1", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrNozzleVolcanNozzle1 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleVolcanNozzle1, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::EDGES); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshNozzleVolcanNozzle2 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle2:start"); - meshNozzleVolcanNozzle2->readMeshFromSTLFileBinary(geoPath + "/06_2_Nozzle_Volcan_Nozzle.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle2:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleVolcanNozzle2.get(), outputPath + "/geo/meshNozzleVolcanNozzle2", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrNozzleVolcanNozzle2 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleVolcanNozzle2, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::POINTS); - /////////////////////////////////////////////////////////// - // box - SPtr<D3Q27Interactor> intrBox = SPtr<D3Q27Interactor>(new D3Q27Interactor(gridCube, grid, noSlipBC, Interactor3D::INVERSESOLID)); - /////////////////////////////////////////////////////////// - // inflow - //GbCylinder3DPtr geoInflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, 0.20105, -1.30181 + 0.0005, 0.390872 - 0.00229, 0.23, 0.013)); - GbCylinder3DPtr geoInflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, g_maxX3 - 2.0 * dx, -1.30181 + 0.0005, 0.390872 - 0.00229, g_maxX3, 0.013)); - if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), outputPath + "/geo/geoInflow", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27Interactor> intrInflow = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, inflowConcreteBC, Interactor3D::SOLID)); - /////////////////////////////////////////////////////////// - // outflow - //GbCylinder3DPtr geoOutflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, -0.22, -1.30181 + 0.0005, 0.390872 - 0.00229, -0.21, 0.013)); - //GbCylinder3DPtr geoOutflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, -0.426, -1.30181 + 0.0005, 0.390872 - 0.00229, -0.415, 0.013)); - GbCylinder3DPtr geoOutflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, g_minX3, -1.30181 + 0.0005, 0.390872 - 0.00229, g_minX3+2.*dx, 0.013)); - if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), outputPath + "/geo/geoOutflow", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27Interactor> intrOutflow = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, outflowBC, Interactor3D::SOLID)); - /////////////////////////////////////////////////////////// - // SPtr<GbTriFaceMesh3D> geoAirInlet = std::make_shared<GbTriFaceMesh3D>(); - // if (myid == 0) UBLOG(logINFO, "Read Air_Inlet:start"); - // geoAirInlet->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet.stl", true); - // if (myid == 0) UBLOG(logINFO, "Read Air_Inlet:end"); - // if (myid == 0) GbSystem3D::writeGeoObject(geoAirInlet.get(), outputPath + "/geo/geoAirInlet", WbWriterVtkXmlBinary::getInstance()); - // SPtr<Interactor3D> intrAirInlet = std::make_shared<D3Q27TriFaceMeshInteractor>(geoAirInlet, grid, inflowAirBC1, Interactor3D::SOLID, Interactor3D::EDGES); - ///////////////////////////////////////////////////////////// - // Fluid area - GbCylinder3DPtr geoFluidArea(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, g_minX3, -1.30181 + 0.0005, 0.390872 - 0.00229, g_maxX3, 0.013)); - if (myid == 0) GbSystem3D::writeGeoObject(geoFluidArea.get(), outputPath + "/geo/geoFluidArea", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27Interactor> intrFluidArea = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoFluidArea, grid, noSlipBC, Interactor3D::INVERSESOLID)); - /////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////// - GbCylinder3DPtr geoAirInflow(new GbCylinder3D(-1.31431 - 0.0005, 0.388587, 0.1383275, -1.31431, 0.388587, 0.1383275, 0.002765)); - if (myid == 0) GbSystem3D::writeGeoObject(geoAirInflow.get(), outputPath + "/geo/geoAirInlet", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrAirInflow = std::make_shared<D3Q27Interactor>(geoAirInflow, grid, inflowAirBC1, Interactor3D::SOLID, Interactor3D::EDGES); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshAirInlet1 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet1:start"); - meshAirInlet1->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_1.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet1:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet1.get(), outputPath + "/geo/meshAirInlet1", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intAirInlet1 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet1, grid, inflowAirBC1, Interactor3D::SOLID, Interactor3D::POINTS); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshAirInlet2 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet2:start"); - meshAirInlet2->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_2.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet2:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet2.get(), outputPath + "/geo/meshAirInlet2", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intAirInlet2 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet2, grid, inflowAirBC2, Interactor3D::SOLID, Interactor3D::POINTS); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshAirInlet3 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet3:start"); - meshAirInlet3->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_3.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet3:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet3.get(), outputPath + "/geo/meshAirInlet3", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intAirInlet3 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet3, grid, inflowAirBC3, Interactor3D::SOLID, Interactor3D::POINTS); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshAirInlet4 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet4:start"); - meshAirInlet4->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_4.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet4:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet4.get(), outputPath + "/geo/meshAirInlet4", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intAirInlet4 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet4, grid, inflowAirBC4, Interactor3D::SOLID, Interactor3D::POINTS); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshAirInlet5 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet5:start"); - meshAirInlet5->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_5.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet5:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet5.get(), outputPath + "/geo/meshAirInlet5", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intAirInlet5 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet5, grid, inflowAirBC5, Interactor3D::SOLID, Interactor3D::POINTS); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshAirInlet6 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet6:start"); - meshAirInlet6->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_6.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet6:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet6.get(), outputPath + "/geo/meshAirInlet6", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intAirInlet6 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet6, grid, inflowAirBC6, Interactor3D::SOLID, Interactor3D::POINTS); - /////////////////////////////////////////////////////////// - - InteractorsHelper intHelper(grid, partVisitor, false); - - intHelper.addInteractor(intrFluidArea); - //intHelper.addInteractor(intrNozzleVolcanNozzle2); - // intHelper.addInteractor(intrBox); - //intHelper.addInteractor(intrInflow); - // intHelper.addInteractor(intrAirInflow); - intHelper.addInteractor(intAirInlet1); - intHelper.addInteractor(intAirInlet2); - intHelper.addInteractor(intAirInlet3); - intHelper.addInteractor(intAirInlet4); - intHelper.addInteractor(intAirInlet5); - intHelper.addInteractor(intAirInlet6); - intHelper.addInteractor(intrOutflow); - - // intHelper.addInteractor(intrNozzleAirDistributor); - // intHelper.addInteractor(intrNozzleAirInlet); - // intHelper.addInteractor(intrNozzleSpacer); - // intHelper.addInteractor(intrNozzleAccDistributor); - // intHelper.addInteractor(intrNozzleAccInlet); - // intHelper.addInteractor(intrNozzleVolcanNozzle1); - - intHelper.selectBlocks(); - - SPtr<SimulationObserver> ppblocks = make_shared<WriteBlocksSimulationObserver>(grid, SPtr<UbScheduler>(new UbScheduler(1)), outputPath, WbWriterVtkXmlBinary::getInstance(), comm); - ppblocks->update(0); - ppblocks.reset(); - - // if (myid == 0) UBLOG(logINFO, Utilities::toString(grid, comm->getNumberOfProcesses())); - - SetKernelBlockVisitor kernelVisitor(kernel, nu_l_LB, comm->getNumberOfProcesses()); - //MultiphaseSetKernelBlockVisitor kernelVisitor(kernel, nu_h_LB, nu_l_LB, 1e9, 1); - grid->accept(kernelVisitor); - - - intHelper.setBC(); - - // InitDistributionsBlockVisitor initVisitor; - // grid->accept(initVisitor); - - double x1c = -1.31431 + R; - double x2c = 0.375582 + R; - double Ri = 5; - double x3c = 0.136 + Ri; - - //R = 0.2 - 0.145; // 0.078-0.04; // 0.2; - - mu::Parser fct1; - // fct1.SetExpr(" 0.5 - 0.5 * tanh(2 * (sqrt((x1 - x1c) ^ 2 + (x2 - x2c) ^ 2 + (x3 - x3c) ^ 2) - radius) / interfaceThickness)"); - fct1.SetExpr(" 0.5 - 0.5 * tanh(2 * (sqrt((x1 - 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", Ri); - fct1.DefineConst("interfaceThickness", interfaceThickness * dx); - - //MultiphaseVelocityFormInitDistributionsBlockVisitor initVisitor; - //initVisitor.setPhi(fct1); - //grid->accept(initVisitor); - - InitDistributionsBlockVisitor initVisitor; - grid->accept(initVisitor); - - // boundary conditions grid - { - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - SPtr<WriteBoundaryConditionsSimulationObserver> ppgeo(new WriteBoundaryConditionsSimulationObserver(grid, geoSch, outputPath, WbWriterVtkXmlBinary::getInstance(), comm)); - ppgeo->update(0); - ppgeo.reset(); - } - - grid->accept(bcVisitor); - - OneDistributionSetConnectorsBlockVisitor setConnsVisitor(comm); - //TwoDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm); - // ThreeDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm); - grid->accept(setConnsVisitor); - - int numOfThreads = 1; - omp_set_num_threads(numOfThreads); - - SPtr<UbScheduler> nupsSch = std::make_shared<UbScheduler>(10, 10, 100); - SPtr<NUPSCounterSimulationObserver> nupsSimulationObserver = make_shared<NUPSCounterSimulationObserver>(grid, nupsSch, numOfThreads, comm); - - //// write data for visualization of macroscopic quantities - SPtr<UbScheduler> visSch(new UbScheduler(vtkSteps)); - // SPtr<UbScheduler> visSch(new UbScheduler(1, 8700, 8800)); - // visSch->addSchedule(1, 8700, 8800); - //SPtr<WriteSharpInterfaceQuantitiesSimulationObserver> writeMQSimulationObserver(new WriteSharpInterfaceQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm)); - //writeMQSimulationObserver->update(0); - - SPtr<WriteMacroscopicQuantitiesSimulationObserver> writeMQSimulationObserver(new WriteMacroscopicQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm)); - //writeMQSimulationObserver->update(0); - - int endTime = 10000000; - SPtr<Simulation> simulation(new Simulation(grid, lScheduler, endTime)); - simulation->addSimulationObserver(nupsSimulationObserver); - simulation->addSimulationObserver(lcSimulationObserver); - simulation->addSimulationObserver(writeMQSimulationObserver); - - if (myid == 0) UBLOG(logINFO, "Simulation-start"); - simulation->run(); - 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; - } - return 0; -} diff --git a/apps/cpu/NozzleMultiphase/CMakeLists.txt b/apps/cpu/NozzleMultiphase/CMakeLists.txt deleted file mode 100644 index e5ecf02f2be1a3c12a904e42ae55ddb54c991f92..0000000000000000000000000000000000000000 --- a/apps/cpu/NozzleMultiphase/CMakeLists.txt +++ /dev/null @@ -1,3 +0,0 @@ -PROJECT(NozzleMultiphase) - -vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} LiggghtsCoupling MultiphaseFlow NonNewtonianFluids FILES nozzleMultiPhase.cpp ) diff --git a/apps/cpu/NozzleMultiphase/nozzleMultiPhase.cpp b/apps/cpu/NozzleMultiphase/nozzleMultiPhase.cpp deleted file mode 100644 index 500391b87729ebbd2b263187190257374e864756..0000000000000000000000000000000000000000 --- a/apps/cpu/NozzleMultiphase/nozzleMultiPhase.cpp +++ /dev/null @@ -1,798 +0,0 @@ -#include <iostream> -#include <memory> -#include <string> - -#include "VirtualFluids.h" - -#include "LiggghtsCoupling/LiggghtsCoupling.h" - -#include "MultiphaseFlow/MultiphaseFlow.h" - -#include "NonNewtonianFluids/NonNewtonianFluids.h" - -using namespace std; - -int main(int argc, char *argv[]) -{ - //Sleep(30000); - - try { - - std::shared_ptr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - // bounding box - // double g_minX1 = -1341.81e-3; - // double g_minX2 = 348.087e-3; - // double g_minX3 = -210e-3; - - // double g_maxX1 = -1260.81e-3; - // double g_maxX2 = 429.087e-3; - // double g_maxX3 = 214.5e-3; - - // double g_minX1 = -1341.81e-3 + 10e-3; - // double g_minX2 = 0.360872; - // double g_minX3 = -210e-3; - - // double g_maxX1 = -1260.81e-3 - 10e-3; - // double g_maxX2 = 0.416302; - // double g_maxX3 = 210e-3; - - // int blockNX[3] = { 10, 10, 10 }; - - int gridNZ = 3; - - double g_minX1 = -1.31431; - double g_minX2 = 0.375582; - double g_minX3 = -0.21 + 0.035 * 8.0; //-0.21; //-210e-3 - 0.2 - 6e-3; //- 1e-3; - - double g_maxX1 = -1.28831; - double g_maxX2 = 0.401582; - double g_maxX3 = 0.175;//0.21; - - //int blockNX[3] = { 26, 26, 35 }; - int blockNX[3] = { 26, 26, 35 * gridNZ }; - - double dx = 1e-3; - - double uLB_ref = 0.0001; - // double rhoLB = 0.0; - - // concrete - double d_part = 1e-3; - double V = 0.4*10.; // flow rate [m^3/h] - double D = 0.026; // shotcrete inlet diameter [m] - double R = D / 2.0; // radius [m] - double A = UbMath::PI * R * R; - double u = V / 3600 / A; - double muConcrete = 2.1133054011798826; // [Pa s] - double rhoAir = 1.2041; // [kg/m^3] - double tau0 = 715.218181094648; // Pa - double rhoConcrete = 2400; // [kg/m^3] - double nu = muConcrete / rhoConcrete; - - // double Re_D = d_part * u / nu; - // if (myid == 0) UBLOG(logINFO, "Re_D = " << Re_D); - // - SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 2400, d_part / dx, uLB_ref); - if (myid == 0) std::cout << units->toString() << std::endl; - - double interfaceThickness = 3; // 4.096; - double sigma = 0.3; //0.03; - double Re = rhoConcrete * u * d_part / muConcrete; - double We = rhoConcrete * u * u * d_part / sigma; - - double u_LB_con = u * units->getFactorVelocityWToLb(); - double nu_h_LB = nu * units->getFactorViscosityWToLb(); // uLB_ref * d_part * units->getFactorLentghWToLb() / Re; - double nu_l_LB = 0; // = nu_h_LB; - - double rho_h_LB = 1; - - // surface tension - double sigma_LB = rho_h_LB *u_LB_con *u_LB_con *d_part * units->getFactorLentghWToLb() / We; - - // LBMReal dLB = 0; // = length[1] / dx; - LBMReal rhoLB = 0.0; - // LBMReal nuLB = nu_l; //(uLB_ref*dLB) / Re; - - double beta = 12.0 * sigma_LB / interfaceThickness; - double kappa = 1.5 * interfaceThickness * sigma_LB; - - double phiL = 0.0; - double phiH = 1.0; - double tauH = 0.6; // Phase - field Relaxation - double mob = 0.02; // Mobility - // double nuL = 1e-2; - // double nuG = 0.015811388300841892; - double densityRatio = rhoConcrete / rhoAir; - // double sigma_old = 1.0850694444444444e-06; - // - // double beta_old = 12.0 * sigma / interfaceThickness; - // double kappa_old = 1.5 * interfaceThickness * sigma; - - double theta = 110; // contact angle - - // https://civilsir.com/density-of-cement-sand-and-aggregate-in-kg-m3-list-of-material-density/ - - // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, 1.480, 2060, r_p/dx); - // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, LBMUnitConverter::AIR_20C, r_p / dx); - // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 1000, d_part / dx, std::abs(uLB_ref)); - // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 1000, d_part / dx, std::abs(uLB_ref)); - // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 2400, d_part / dx, uRef); - - double Bm = (tau0 * d_part) / (muConcrete * u); - double tau0_LB = Bm * nu_h_LB * u_LB_con / (d_part * units->getFactorLentghWToLb()); - - SPtr<Rheology> thix = Rheology::getInstance(); - thix->setYieldStress(tau0_LB); - - if (myid == 0) VF_LOG_INFO("Yield stress = {} Pa", tau0); - if (myid == 0) VF_LOG_INFO("Yield stress LB = {} ", tau0_LB); - - //SPtr<BC> noSlipBC(new NoSlipBC()); - //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new NoSlipInterpolated())); - SPtr<BC> noSlipBC(new NoSlipBC()); - noSlipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNoSlipBCStrategy())); - - // concrete inflow boundary condition - mu::Parser fct; - fct.SetExpr("U"); - fct.DefineConst("U", -u_LB_con); - if (myid == 0) VF_LOG_INFO("Concrete inflow velocity = {} m/s", u); - if (myid == 0) VF_LOG_INFO("Concrete inflow velocity = {} dx/dt", u_LB_con); - if (myid == 0) VF_LOG_INFO("Concrete Re = {}", Re); - - // // Štigler, J. (2014). Analytical velocity profile in tube for laminar and turbulent flow. Engineering - // // Mechanics, 21(6), 371-379. - // double cx1 = -1.31431 + R; - // double cx2 = 0.375582 + R; - // //double cx3 = 0.20105 + R; - // double L = g_maxX1 - g_minX1; - // double p_concrete = 1e5; // Pa = 1 Bar - // double p1 = p_concrete * units->getFactorPressureWToLb(); - // double p2 = 0.0; - // double drhoLB = 1.0 + rhoLB; - // double muLB = drhoLB * nuLB; - // double N = R * R / 2 * muLB * uLB_ref * (p1 - p2) / L - 3; - - // // mu::Parser fct; - // fct.SetExpr("U*(1-(((((x2-y0)^2+(x1-x0)^2)^0.5)/R)^NplusOne))"); - // fct.DefineConst("x0", cx1); - // fct.DefineConst("y0", cx2); - // //fct.DefineConst("z0", cx3); - // fct.DefineConst("R", R); - // fct.DefineConst("U", uLB_ref * ((N + 3) / (N + 1))); - // fct.DefineConst("NplusOne", N + 1.0); - - //SPtr<BC> inflowConcreteBC(new VelocityBC(false, false, true, fct, 0, BCFunction::INFCONST)); - //inflowConcreteBC->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated())); - SPtr<BC> inflowConcreteBC(new MultiphaseVelocityBC(false, false, true, fct, phiH, 0, BCFunction::INFCONST)); - inflowConcreteBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - // air inflow boundary condition - // Štigler, J. (2014). Analytical velocity profile in tube for laminar and turbulent flow. Engineering - // Mechanics, 21(6), 371-379. - // SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, LBMUnitConverter::AIR_20C, d_part / dx); - // SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, 1., 1.2041, d_part / dx, uLB_ref); - // double V = 40; // flow rate [m^3/h] - // double D = 0.0166; // air inlet diameter [m] - // double R = D / 2.0; // radius [m] - // double A = UbMath::PI * R * R; - // double u = V / 3600 / A; - // double uLB_ref = u * unitsAir->getFactorVelocityWToLb(); - //// double cx1 = -1.2788 + R; - // double cx2 = 0.3803 + R; - // double cx3 = 0.1517 + R; - // double L = g_maxX1 - g_minX1; - // double p_air = 7e5; // Pa = 7 Bar - // double p1 = p_air; - // double p2 = 0.0; - // double mu = 17.2e-6; // Pa s, air 20° C - // double N = R * R / 2 * mu * u * (p1 - p2) / L - 3; - // if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} m/s", u); - // if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} dx/dt", uLB_ref); - // - - // double nu = mu / rhoConcrete; - // double Re = d_part * u / nu; - // if (myid == 0) VF_LOG_INFO("Re_air = {}", Re); - - // double nuLB = d_part * unitsAir->getFactorLentghWToLb() * uLB_ref / Re; - // if (myid == 0) VF_LOG_INFO("nuLB_air = {}", nuLB); - // nu_l_LB = nuLB; - - SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, 1., 1.2041, d_part / dx, uLB_ref); - //SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, LBMUnitConverter::AIR_20C, d_part / dx); - double V_air = 40./6.; // flow rate [m^3/h] //10. - double D_air = 0.00553; // air inlet diameter [m] - double R_air = D_air / 2.0; // radius [m] - double A_air = UbMath::PI * (R_air * R_air); - double u_air = V_air / 3600 / A_air; - double uLB_air = u_air * unitsAir->getFactorVelocityWToLb(); - // double cx1 = -1.2788 + R; - double cx2 = 0.385822 + R_air; - double cx3 = 0.135562 + R_air; - double L_air = 0.00747; - double p_air = 7e5; // Pa = 7 Bar - double p1 = p_air; - double p2 = 1e5; - double mu_air = 17.2e-6; // Pa s, air 20° C - double rho_air = 1.2041; // [kg/m^3] - double Re_inlet = D_air * u_air * rho_air / mu_air; - double lambda = 0.3164 / pow(Re_inlet, 0.25); - double deltaP = (lambda / (2. * R_air)) * (rho_air * pow(u_air, 2) / 2.); // Darcy friction factor (Rohrreibungszahl) - double N = pow(R_air, 2) / (2. * mu_air * u_air) * deltaP - 3.; - // double N = R_air * R_air / 2 * mu_air * u_air * (p1 - p2) / L_air - 3; - if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} m/s", u_air); - if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} dx/dt", uLB_air); - - double nu_air = mu_air / rho_air; - double Re_air = d_part * u_air / nu_air; - if (myid == 0) VF_LOG_INFO("Air Re = {}", Re_air); - - double nuLB_air = nu_air * unitsAir->getFactorViscosityWToLb(); // d_part * unitsAir->getFactorLentghWToLb() * uLB_air / Re_air; - if (myid == 0) VF_LOG_INFO("nuLB_air = {}", nuLB_air); - nu_l_LB = nuLB_air; - - if (myid == 0) VF_LOG_INFO("nu_h = {}", nu_h_LB); - if (myid == 0) VF_LOG_INFO("nu_l = {}", nu_l_LB); - if (myid == 0) VF_LOG_INFO("sigma_LB = {}", sigma_LB); - - double p_air_LB = p_air * unitsAir->getFactorPressureWToLb(); - if (myid == 0) VF_LOG_INFO("p_air_LB = {}", p_air_LB); - - // mu::Parser fctVx1; - ////fctVx1.SetExpr("U"); - ////fctVx1.DefineConst("U", uLB_air); - // mu::Parser fctVx2; - // fctVx2.SetExpr("U"); - // fctVx2.DefineConst("U", 0); - // mu::Parser fctVx3; - ////fctVx3.SetExpr("U"); - ////fctVx3.DefineConst("U", -uLB_air); - - double cx1 = 0; - double alpha = 0; - double gamma = 0; - double U = uLB_air;// * ((N + 3.) / (N + 1.)); - - mu::Parser fctVx1; - //fctVx1.SetExpr("U*cos(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)^NplusOne))"); - //fctVx1.SetExpr("U*cos(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)))"); - // fctVx1.SetExpr("(((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5/R)^NplusOne"); - fctVx1.SetExpr("U*cos(alpha*_pi/180)"); - fctVx1.DefineConst("x0", cx1); - fctVx1.DefineConst("y0", cx2); - fctVx1.DefineConst("z0", cx3); - fctVx1.DefineConst("R", R_air); - fctVx1.DefineConst("U", U); //* ((N + 3.) / (N + 1.))); - fctVx1.DefineConst("NplusOne", N + 1.0); - fctVx1.DefineConst("alpha", alpha); - fctVx1.DefineConst("gamma", gamma); - - mu::Parser fctVx2; - //fctVx2.SetExpr("U*sin(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)^NplusOne))"); - //fctVx2.SetExpr("U*sin(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)))"); - fctVx2.SetExpr("U*sin(alpha*_pi/180)"); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("y0", cx2); - fctVx2.DefineConst("z0", cx3); - fctVx2.DefineConst("R", R_air); - fctVx2.DefineConst("U", U); //* ((N + 3.) / (N + 1.))); - fctVx2.DefineConst("NplusOne", N + 1.0); - fctVx2.DefineConst("alpha", alpha); - - mu::Parser fctVx3; - //fctVx3.SetExpr("U*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)^NplusOne))"); - //fctVx3.SetExpr("U*cos(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)))"); - fctVx3.SetExpr("U"); - fctVx3.DefineConst("x0", cx1); - fctVx3.DefineConst("y0", cx2); - fctVx3.DefineConst("z0", cx3); - fctVx3.DefineConst("R", R_air); - fctVx3.DefineConst("U", -U); //* ((N + 3.) / (N + 1.))); - fctVx3.DefineConst("NplusOne", N + 1.0); - fctVx3.DefineConst("alpha", alpha); - fctVx3.DefineConst("gamma", gamma); - - // SPtr<BC> inflowAirBC1(new VelocityBC(true, false, false, fct, 0, BCFunction::INFCONST)); - // inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated())); - // t = U * sin(alpha * _pi / 180) * (1 - (((((x1 - x0) ^ 2 + (x2 - y0) ^ 2 + (x3 - z0) ^ 2) ^ 0.5) / R) ^ NplusOne)); - cx1 = -1.31416; - cx2 = 0.388684; - cx3 = 0.138177; - alpha = 0; - gamma = 225; - fctVx1.DefineConst("x0", cx1); - fctVx1.DefineConst("y0", cx2); - fctVx1.DefineConst("z0", cx3); - fctVx1.DefineConst("alpha", alpha); - fctVx1.DefineConst("gamma", gamma); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("y0", cx2); - fctVx2.DefineConst("z0", cx3); - fctVx2.DefineConst("alpha", alpha); - fctVx2.DefineConst("gamma", gamma); - fctVx3.DefineConst("x0", cx1); - fctVx3.DefineConst("y0", cx2); - fctVx3.DefineConst("z0", cx3); - fctVx3.DefineConst("alpha", alpha); - fctVx3.DefineConst("gamma", gamma); - - //SPtr<BC> inflowAirBC1(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST)); - //inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated())); - SPtr<BC> inflowAirBC1(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST)); - inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - fctVx1.DefineVar("x1", &cx1); - fctVx1.DefineVar("x2", &cx2); - fctVx1.DefineVar("x3", &cx3); - fctVx2.DefineVar("x1", &cx1); - fctVx2.DefineVar("x2", &cx2); - fctVx2.DefineVar("x3", &cx3); - fctVx3.DefineVar("x1", &cx1); - fctVx3.DefineVar("x2", &cx2); - fctVx3.DefineVar("x3", &cx3); - - if (myid == 0) { - - VF_LOG_INFO("fctVx1 = {}", fctVx1.Eval()); - VF_LOG_INFO("fctVx2 = {}", fctVx2.Eval()); - VF_LOG_INFO("fctVx3 = {}", fctVx3.Eval()); - VF_LOG_INFO("N = {}", N); - VF_LOG_INFO("NplusOne = {}", N + 1.0); - // return 0; - } - cx1 = -1.31303; - cx2 = 0.377234; - cx3 = 0.138174; - alpha = 60; - fctVx1.DefineConst("x0", cx1); - fctVx1.DefineConst("y0", cx2); - fctVx1.DefineConst("z0", cx3); - fctVx1.DefineConst("alpha", alpha); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("y0", cx2); - fctVx2.DefineConst("z0", cx3); - fctVx2.DefineConst("alpha", alpha); - fctVx3.DefineConst("x0", cx1); - fctVx3.DefineConst("y0", cx2); - fctVx3.DefineConst("z0", cx3); - //SPtr<BC> inflowAirBC2(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST)); - //inflowAirBC2->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated())); - SPtr<BC> inflowAirBC2(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST)); - inflowAirBC2->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - cx1 = -1.2948374155694822; - cx2 = 0.37733728717266285; - cx3 = 0.13840460401111598; - alpha = 120; - fctVx1.DefineConst("x0", cx1); - fctVx1.DefineConst("y0", cx2); - fctVx1.DefineConst("z0", cx3); - fctVx1.DefineConst("alpha", alpha); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("y0", cx2); - fctVx2.DefineConst("z0", cx3); - fctVx2.DefineConst("alpha", alpha); - fctVx3.DefineConst("x0", cx1); - fctVx3.DefineConst("y0", cx2); - fctVx3.DefineConst("z0", cx3); - //SPtr<BC> inflowAirBC3(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST)); - //inflowAirBC3->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated())); - SPtr<BC> inflowAirBC3(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST)); - inflowAirBC3->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - cx1 = -1.28847; - cx2 = 0.3885; - cx3 = 0.1385; - alpha = 180; - fctVx1.DefineConst("x0", cx1); - fctVx1.DefineConst("y0", cx2); - fctVx1.DefineConst("z0", cx3); - fctVx1.DefineConst("alpha", alpha); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("y0", cx2); - fctVx2.DefineConst("z0", cx3); - fctVx2.DefineConst("alpha", alpha); - fctVx3.DefineConst("x0", cx1); - fctVx3.DefineConst("y0", cx2); - fctVx3.DefineConst("z0", cx3); - //SPtr<BC> inflowAirBC4(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST)); - //inflowAirBC4->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated())); - SPtr<BC> inflowAirBC4(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST)); - inflowAirBC4->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - cx1 = -1.294771417778694; - cx2 = 0.399787947463142; - cx3 = 0.1383429692754194; - alpha = 240; - fctVx1.DefineConst("x0", cx1); - fctVx1.DefineConst("y0", cx2); - fctVx1.DefineConst("z0", cx3); - fctVx1.DefineConst("alpha", alpha); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("y0", cx2); - fctVx2.DefineConst("z0", cx3); - fctVx2.DefineConst("alpha", alpha); - fctVx3.DefineConst("x0", cx1); - fctVx3.DefineConst("y0", cx2); - fctVx3.DefineConst("z0", cx3); - //SPtr<BC> inflowAirBC5(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST)); - //inflowAirBC5->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated())); - SPtr<BC> inflowAirBC5(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST)); - inflowAirBC5->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - cx1 = -1.3077338898450492; - cx2 = 0.3998516560596088; - cx3 = 0.13843501416896437; - alpha = 300; - fctVx1.DefineConst("x0", cx1); - fctVx1.DefineConst("y0", cx2); - fctVx1.DefineConst("z0", cx3); - fctVx1.DefineConst("alpha", alpha); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("y0", cx2); - fctVx2.DefineConst("z0", cx3); - fctVx2.DefineConst("alpha", alpha); - fctVx3.DefineConst("x0", cx1); - fctVx3.DefineConst("y0", cx2); - fctVx3.DefineConst("z0", cx3); - //SPtr<BC> inflowAirBC6(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST)); - //inflowAirBC6->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated())); - SPtr<BC> inflowAirBC6(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST)); - inflowAirBC6->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - // Pressure BC for air inlet - // SPtr<BC> inflowAirBC1(new PressureBC(p_air_LB)); - // inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new MultiphasePressureBCStrategy())); - - SPtr<BC> outflowBC(new PressureBC(rhoLB)); - //outflowBC->setBCStrategy(SPtr<BCStrategy>(new PressureNonEquilibrium())); - outflowBC->setBCStrategy(SPtr<BCStrategy>(new MultiphasePressureBCStrategy())); - - // SPtr<BC> outflowBC(new PressureBC(rhoLB)); - //outflowBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNonReflectingOutflowBCStrategy())); - ////////////////////////////////////////////////////////////////////////////////// - // BC visitor - //BoundaryConditionsBlockVisitor bcVisitor; - MultiphaseBoundaryConditionsBlockVisitor bcVisitor; - - // SPtr<LBMKernel> kernel = make_shared<IBcumulantK17LBMKernel>(); - //SPtr<LBMKernel> kernel = make_shared<CumulantK17LBMKernel>(); - // SPtr<LBMKernel> kernel = make_shared<MultiphaseTwoPhaseFieldsPressureFilterLBMKernel>(); - // SPtr<LBMKernel> kernel = make_shared<MultiphaseSimpleVelocityBaseExternalPressureLBMKernel>(); - //SPtr<LBMKernel> kernel = make_shared<MultiphaseSharpInterfaceLBMKernel>(); - SPtr<LBMKernel> kernel = make_shared<MultiphaseScaleDistributionLBMKernel>(); - //SPtr<LBMKernel> kernel = make_shared<IBcumulantK17LBMKernel>(); - //SPtr<LBMKernel> kernel = make_shared<IBsharpInterfaceLBMKernel>(); - - kernel->setWithForcing(false); - kernel->setForcingX1(0.0); - kernel->setForcingX2(0.0); - kernel->setForcingX3(0.0); - - kernel->setPhiL(phiL); - kernel->setPhiH(phiH); - kernel->setPhaseFieldRelaxation(tauH); - kernel->setMobility(mob); - kernel->setInterfaceWidth(interfaceThickness); - - kernel->setCollisionFactorMultiphase(nu_h_LB, nu_l_LB); - kernel->setDensityRatio(densityRatio); - kernel->setMultiphaseModelParameters(beta, kappa); - kernel->setContactAngle(theta); - kernel->setSigma(sigma_LB); - - SPtr<BCSet> bcProc = make_shared<BCSet>(); - kernel->setBCSet(bcProc); - - SPtr<Grid3D> grid = make_shared<Grid3D>(comm); - grid->setPeriodicX1(false); - grid->setPeriodicX2(false); - grid->setPeriodicX3(false); - grid->setDeltaX(dx); - grid->setBlockNX(blockNX[0], blockNX[1], blockNX[2]); - grid->setGhostLayerWidth(2); - - string geoPath = "d:/Projects/TRR277/Project/WP4/NozzleGeo"; - - string outputPath = "d:/temp/NozzleFlowTest_MultiPhase_SmallTest_OneBlock"; - UbSystem::makeDirectory(outputPath); - UbSystem::makeDirectory(outputPath + "/liggghts"); - - // if (myid == 0) { - // stringstream logFilename; - // logFilename << outputPath + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; - // UbLog::output_policy::setStream(logFilename.str()); - // } - - ///////////////////////////////////////////////////////////////////// - //LIGGGHTS things - ///////////////////////////////////////////////////////////////////// - string inFile1 = "d:/Projects/TRR277/Project/WP4/Config/in.nozzle"; - // string inFile2 = "d:/Projects/VirtualFluids_LIGGGHTS_coupling/apps/cpu/LiggghtsApp/in2.lbdem"; - MPI_Comm mpi_comm = *(MPI_Comm *)(comm->getNativeCommunicator()); - LiggghtsCouplingWrapper wrapper(argv, mpi_comm); - - double v_frac = 0.1; - double dt_phys = units->getFactorTimeLbToW(); - int demSubsteps = 10; - double dt_dem = dt_phys / (double)demSubsteps; - int vtkSteps = 1000; - string demOutDir = outputPath + "/liggghts"; - - // wrapper.execCommand("echo none"); - - // wrapper.execFile((char*)inFile1.c_str()); - - //// set timestep and output directory - wrapper.setVariable("t_step", dt_dem); - wrapper.setVariable("dmp_stp", vtkSteps * demSubsteps); - wrapper.setVariable("dmp_dir", demOutDir); - - //!!!!//wrapper.execFile((char *)inFile1.c_str()); - //wrapper.runUpto(demSubsteps - 1); - // wrapper.runUpto(1000); - - //LatticeDecomposition lDec((g_maxX1 - g_minX1) / dx, (g_maxX2 - g_minX2) / dx, (g_maxX3 - g_minX3) / dx, wrapper.lmp, grid); - - SPtr<UbScheduler> lScheduler = make_shared<UbScheduler>(1); - SPtr<LiggghtsCouplingSimulationObserver> lcSimulationObserver = make_shared<LiggghtsCouplingSimulationObserver>(grid, lScheduler, comm, wrapper, demSubsteps, unitsAir); - //SPtr<Grid3DVisitor> partVisitor = make_shared<LiggghtsPartitioningGridVisitor>(std::ceil((g_maxX1 - g_minX1) / dx), std::ceil((g_maxX2 - g_minX2) / dx), std::ceil((g_maxX3 - g_minX3) / dx), wrapper.lmp); - //SPtr<Grid3DVisitor> partVisitor = make_shared<LiggghtsPartitioningGridVisitor>(blockNX[0], blockNX[1], blockNX[2] * gridNZ, wrapper.lmp); - - ///////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////////////// - - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::dMMM, MetisPartitioner::RECURSIVE)); - - SPtr<GbObject3D> gridCube = make_shared<GbCuboid3D>(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3); - if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), outputPath + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - // geo - ////////////////////////////////////////////////////////// - int accuracy = Interactor3D::EDGES; - /////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshNozzleAirDistributor = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirDistributor:start"); - meshNozzleAirDistributor->readMeshFromSTLFileASCII(geoPath + "/01_Nozzle_Air_Distributor.stl", false); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirDistributor:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAirDistributor.get(), outputPath + "/geo/meshNozzleAirDistributor", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrNozzleAirDistributor = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAirDistributor, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshNozzleAirInlet = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirInlet:start"); - meshNozzleAirInlet->readMeshFromSTLFileASCII(geoPath + "/02_Nozzle_Air_Inlet.stl", false); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirInlet:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAirInlet.get(), outputPath + "/geo/meshNozzleAirInlet", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrNozzleAirInlet = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAirInlet, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshNozzleSpacer = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleSpacer:start"); - meshNozzleSpacer->readMeshFromSTLFileASCII(geoPath + "/03_Nozzle_Spacer.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleSpacer:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleSpacer.get(), outputPath + "/geo/meshNozzleSpacer", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrNozzleSpacer = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleSpacer, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshNozzleAccDistributor = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccDistributor:start"); - meshNozzleAccDistributor->readMeshFromSTLFileASCII(geoPath + "/04_Nozzle_Acc_Distributor.stl", false); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccDistributor:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAccDistributor.get(), outputPath + "/geo/meshNozzleAccDistributor", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrNozzleAccDistributor = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAccDistributor, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshNozzleAccInlet = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccInlet:start"); - meshNozzleAccInlet->readMeshFromSTLFileASCII(geoPath + "/05_Nozzle_Acc_Inlet.stl", false); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccInlet:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAccInlet.get(), outputPath + "/geo/meshNozzleAccInlet", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrNozzleAccInlet = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAccInlet, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshNozzleVolcanNozzle1 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle1:start"); - meshNozzleVolcanNozzle1->readMeshFromSTLFileBinary(geoPath + "/06_1_Nozzle_Volcan_Nozzle.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle1:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleVolcanNozzle1.get(), outputPath + "/geo/meshNozzleVolcanNozzle1", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrNozzleVolcanNozzle1 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleVolcanNozzle1, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::EDGES); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshNozzleVolcanNozzle2 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle2:start"); - meshNozzleVolcanNozzle2->readMeshFromSTLFileBinary(geoPath + "/06_2_Nozzle_Volcan_Nozzle.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle2:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleVolcanNozzle2.get(), outputPath + "/geo/meshNozzleVolcanNozzle2", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrNozzleVolcanNozzle2 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleVolcanNozzle2, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::POINTS); - /////////////////////////////////////////////////////////// - // box - SPtr<D3Q27Interactor> intrBox = SPtr<D3Q27Interactor>(new D3Q27Interactor(gridCube, grid, noSlipBC, Interactor3D::INVERSESOLID)); - /////////////////////////////////////////////////////////// - // inflow - //GbCylinder3DPtr geoInflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, 0.20105, -1.30181 + 0.0005, 0.390872 - 0.00229, 0.23, 0.013)); - GbCylinder3DPtr geoInflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, g_maxX3 - 2.0 * dx, -1.30181 + 0.0005, 0.390872 - 0.00229, g_maxX3, 0.013)); - if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), outputPath + "/geo/geoInflow", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27Interactor> intrInflow = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, inflowConcreteBC, Interactor3D::SOLID)); - /////////////////////////////////////////////////////////// - // outflow - //GbCylinder3DPtr geoOutflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, -0.22, -1.30181 + 0.0005, 0.390872 - 0.00229, -0.21, 0.013)); - //GbCylinder3DPtr geoOutflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, -0.426, -1.30181 + 0.0005, 0.390872 - 0.00229, -0.415, 0.013)); - GbCylinder3DPtr geoOutflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, g_minX3, -1.30181 + 0.0005, 0.390872 - 0.00229, g_minX3+2.*dx, 0.013)); - if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), outputPath + "/geo/geoOutflow", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27Interactor> intrOutflow = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, outflowBC, Interactor3D::SOLID)); - /////////////////////////////////////////////////////////// - // SPtr<GbTriFaceMesh3D> geoAirInlet = std::make_shared<GbTriFaceMesh3D>(); - // if (myid == 0) UBLOG(logINFO, "Read Air_Inlet:start"); - // geoAirInlet->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet.stl", true); - // if (myid == 0) UBLOG(logINFO, "Read Air_Inlet:end"); - // if (myid == 0) GbSystem3D::writeGeoObject(geoAirInlet.get(), outputPath + "/geo/geoAirInlet", WbWriterVtkXmlBinary::getInstance()); - // SPtr<Interactor3D> intrAirInlet = std::make_shared<D3Q27TriFaceMeshInteractor>(geoAirInlet, grid, inflowAirBC1, Interactor3D::SOLID, Interactor3D::EDGES); - ///////////////////////////////////////////////////////////// - // Fluid area - GbCylinder3DPtr geoFluidArea(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, g_minX3, -1.30181 + 0.0005, 0.390872 - 0.00229, g_maxX3, 0.013)); - if (myid == 0) GbSystem3D::writeGeoObject(geoFluidArea.get(), outputPath + "/geo/geoFluidArea", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27Interactor> intrFluidArea = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoFluidArea, grid, noSlipBC, Interactor3D::INVERSESOLID)); - /////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////// - GbCylinder3DPtr geoAirInflow(new GbCylinder3D(-1.31431 - 0.0005, 0.388587, 0.1383275, -1.31431, 0.388587, 0.1383275, 0.002765)); - if (myid == 0) GbSystem3D::writeGeoObject(geoAirInflow.get(), outputPath + "/geo/geoAirInlet", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrAirInflow = std::make_shared<D3Q27Interactor>(geoAirInflow, grid, inflowAirBC1, Interactor3D::SOLID, Interactor3D::EDGES); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshAirInlet1 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet1:start"); - meshAirInlet1->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_1.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet1:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet1.get(), outputPath + "/geo/meshAirInlet1", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intAirInlet1 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet1, grid, inflowAirBC1, Interactor3D::SOLID, Interactor3D::POINTS); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshAirInlet2 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet2:start"); - meshAirInlet2->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_2.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet2:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet2.get(), outputPath + "/geo/meshAirInlet2", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intAirInlet2 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet2, grid, inflowAirBC2, Interactor3D::SOLID, Interactor3D::POINTS); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshAirInlet3 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet3:start"); - meshAirInlet3->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_3.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet3:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet3.get(), outputPath + "/geo/meshAirInlet3", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intAirInlet3 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet3, grid, inflowAirBC3, Interactor3D::SOLID, Interactor3D::POINTS); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshAirInlet4 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet4:start"); - meshAirInlet4->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_4.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet4:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet4.get(), outputPath + "/geo/meshAirInlet4", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intAirInlet4 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet4, grid, inflowAirBC4, Interactor3D::SOLID, Interactor3D::POINTS); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshAirInlet5 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet5:start"); - meshAirInlet5->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_5.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet5:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet5.get(), outputPath + "/geo/meshAirInlet5", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intAirInlet5 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet5, grid, inflowAirBC5, Interactor3D::SOLID, Interactor3D::POINTS); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshAirInlet6 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet6:start"); - meshAirInlet6->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet_6.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet6:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet6.get(), outputPath + "/geo/meshAirInlet6", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intAirInlet6 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet6, grid, inflowAirBC6, Interactor3D::SOLID, Interactor3D::POINTS); - /////////////////////////////////////////////////////////// - - InteractorsHelper intHelper(grid, metisVisitor, false); - - intHelper.addInteractor(intrFluidArea); - //intHelper.addInteractor(intrNozzleVolcanNozzle2); - // intHelper.addInteractor(intrBox); - intHelper.addInteractor(intrInflow); - // intHelper.addInteractor(intrAirInflow); - intHelper.addInteractor(intAirInlet1); - intHelper.addInteractor(intAirInlet2); - intHelper.addInteractor(intAirInlet3); - intHelper.addInteractor(intAirInlet4); - intHelper.addInteractor(intAirInlet5); - intHelper.addInteractor(intAirInlet6); - intHelper.addInteractor(intrOutflow); - - // intHelper.addInteractor(intrNozzleAirDistributor); - // intHelper.addInteractor(intrNozzleAirInlet); - // intHelper.addInteractor(intrNozzleSpacer); - // intHelper.addInteractor(intrNozzleAccDistributor); - // intHelper.addInteractor(intrNozzleAccInlet); - // intHelper.addInteractor(intrNozzleVolcanNozzle1); - - intHelper.selectBlocks(); - - SPtr<SimulationObserver> ppblocks = make_shared<WriteBlocksSimulationObserver>(grid, SPtr<UbScheduler>(new UbScheduler(1)), outputPath, WbWriterVtkXmlBinary::getInstance(), comm); - ppblocks->update(0); - ppblocks.reset(); - - // if (myid == 0) UBLOG(logINFO, Utilities::toString(grid, comm->getNumberOfProcesses())); - - //SetKernelBlockVisitor kernelVisitor(kernel, nu_l_LB, comm->getNumberOfProcesses()); - MultiphaseSetKernelBlockVisitor kernelVisitor(kernel, nu_h_LB, nu_l_LB, 1e9, 1); - grid->accept(kernelVisitor); - - - intHelper.setBC(); - - // InitDistributionsBlockVisitor initVisitor; - // grid->accept(initVisitor); - - double x1c = -1.31431 + R; - double x2c = 0.375582 + R; - double Ri = 5; - double x3c = 0.136 + Ri; - - //R = 0.2 - 0.145; // 0.078-0.04; // 0.2; - - mu::Parser fct1; - // fct1.SetExpr(" 0.5 - 0.5 * tanh(2 * (sqrt((x1 - x1c) ^ 2 + (x2 - x2c) ^ 2 + (x3 - x3c) ^ 2) - radius) / interfaceThickness)"); - fct1.SetExpr(" 0.5 - 0.5 * tanh(2 * (sqrt((x1 - 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", Ri); - fct1.DefineConst("interfaceThickness", interfaceThickness * dx); - - MultiphaseVelocityFormInitDistributionsBlockVisitor initVisitor; - initVisitor.setPhi(fct1); - //grid->accept(initVisitor); - - //InitDistributionsBlockVisitor initVisitor; - grid->accept(initVisitor); - - // boundary conditions grid - { - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - SPtr<WriteBoundaryConditionsSimulationObserver> ppgeo(new WriteBoundaryConditionsSimulationObserver(grid, geoSch, outputPath, WbWriterVtkXmlBinary::getInstance(), comm)); - ppgeo->update(0); - ppgeo.reset(); - } - - grid->accept(bcVisitor); - - //OneDistributionSetConnectorsBlockVisitor setConnsVisitor(comm); - TwoDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm); - // ThreeDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm); - grid->accept(setConnsVisitor); - - int numOfThreads = 1; - omp_set_num_threads(numOfThreads); - - SPtr<UbScheduler> nupsSch = std::make_shared<UbScheduler>(10, 10, 100); - SPtr<NUPSCounterSimulationObserver> nupsSimulationObserver = make_shared<NUPSCounterSimulationObserver>(grid, nupsSch, numOfThreads, comm); - - //// write data for visualization of macroscopic quantities - SPtr<UbScheduler> visSch(new UbScheduler(vtkSteps)); - // SPtr<UbScheduler> visSch(new UbScheduler(1, 8700, 8800)); - // visSch->addSchedule(1, 8700, 8800); - SPtr<WriteSharpInterfaceQuantitiesSimulationObserver> writeMQSimulationObserver(new WriteSharpInterfaceQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm)); - writeMQSimulationObserver->update(0); - - //SPtr<WriteMacroscopicQuantitiesSimulationObserver> writeMQSimulationObserver(new WriteMacroscopicQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm)); - //writeMQSimulationObserver->update(0); - - int endTime = 10000000; - SPtr<Simulation> simulation(new Simulation(grid, lScheduler, endTime)); - simulation->addSimulationObserver(nupsSimulationObserver); - //!!!//simulation->addSimulationObserver(lcSimulationObserver); - simulation->addSimulationObserver(writeMQSimulationObserver); - - if (myid == 0) UBLOG(logINFO, "Simulation-start"); - simulation->run(); - 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; - } - return 0; -} diff --git a/apps/cpu/OrganPipe/CMakeLists.txt b/apps/cpu/OrganPipe/CMakeLists.txt deleted file mode 100644 index 03f52af3309aa6cb207bbb9fb51d264f4ff77926..0000000000000000000000000000000000000000 --- a/apps/cpu/OrganPipe/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(OrganPipe) - -INCLUDE(${APPS_ROOT}/IncludsList.cmake) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(opipe BINARY) diff --git a/apps/cpu/OrganPipe/OrganPipe.cpp b/apps/cpu/OrganPipe/OrganPipe.cpp deleted file mode 100644 index 98b8c25050ba459c795ea22b3005686755e69077..0000000000000000000000000000000000000000 --- a/apps/cpu/OrganPipe/OrganPipe.cpp +++ /dev/null @@ -1,527 +0,0 @@ -#include <iostream> -#include <string> -#include "VirtualFluids.h" - - -using namespace std; -void run(string configname) -{ - try - { - SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - if (myid == 0) UBLOG(logINFO, "Testcase organ pipe"); - - SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter()); - - vf::basics::ConfigurationFile config; - config.load(configname); - - bool newStart = config.getValue<bool>("newStart"); - double restartStep = config.getValue<double>("restartStep"); - double cpStart = config.getValue<double>("cpStart"); - double cpStep = config.getValue<double>("cpStep"); - int endTime = config.getValue<int>("endTime"); - double outTimeStep = config.getValue<double>("outTimeStep"); - double outTimeStart = config.getValue<double>("outTimeStart"); - double availMem = config.getValue<double>("availMem"); - bool logToFile = config.getValue<bool>("logToFile"); - vector<double> nupsStep = config.getVector<double>("nupsStep"); - string pathOut = config.getValue<string>("pathOut"); - string pathGeo = config.getValue<string>("pathGeo"); - - string opipeGeoFile = "/OrganPipeTransformed.stl"; - string inletTubeGeoFile = "/tubeTransformed.stl"; - - double QN = config.getValue<double>("QN"); - - double deltaXfine = 0.0000625; - const int baseLevel = 0; - int refineLevel = 9; - double deltaXcoarse = deltaXfine*(double)(1 << refineLevel); - - LBMReal rho_LB = 0.0; - double rhoReal = 1.2041; //(kg/m3) - double L = 0.195; //m - double hLB = L / deltaXcoarse; - double csReal = 343.3; - double nuReal = 1.51e-5; //m^2/s - - double Q = QN * 1e-3 / 60; //m^3/s - double D = 0.005; // m - double R = D / 2; // m - double A = UbMath::PI * pow(R,2); - double uReal = Q / A; - double muReal = nuReal * rhoReal; - double Re_inlet = D * uReal * rhoReal / muReal; - double lbd = 0.3164 / pow(Re_inlet,0.25); - double deltaP = (lbd / (2 * R)) * (rhoReal * pow(uReal,2) / 2); - double N = pow(R,2) / (2 * muReal * uReal) * deltaP - 3; - - LBMUnitConverter unitConverter(L, csReal, rhoReal, hLB); - if (myid == 0) UBLOG(logINFO, unitConverter.toString()); - - if (logToFile) - { -#if defined(__unix__) - if (myid == 0) - { - const char* str = pathOut.c_str(); - mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); - } -#endif - - if (myid == 0) - { - stringstream logFilename; - logFilename << pathOut + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - } - - double nu_LB = nuReal * unitConverter.getFactorViscosityWToLb(); - double u_LB = uReal * unitConverter.getFactorVelocityWToLb(); - - double offSetOrganPipe = 0.0083; //1.37; - - vector<int> blocknx ={ 16, 16, 16 }; - - if (myid == 0) UBLOG(logINFO, "Read organ pipe geometry:start"); - SPtr<GbTriFaceMesh3D> organPipeGeo = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo + opipeGeoFile, "opipeGeo", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); - organPipeGeo->translate(offSetOrganPipe, 0.0, 0.0); - if (myid == 0) UBLOG(logINFO, "Read organ pipe geometry:end"); - if (myid == 0) GbSystem3D::writeGeoObject(organPipeGeo.get(), pathOut + "/geo/organPipeGeo", WbWriterVtkXmlBinary::getInstance()); - - SPtr<Grid3D> grid(new Grid3D(comm)); - - //bounding box - vector<double> dim = {4.096, 4.096, 4.096}; - - double g_minX1 = 0; - double g_minX2 = -dim[1]*0.5; - double g_minX3 = -dim[2]*0.5; - - double g_maxX1 = dim[0]; - double g_maxX2 = dim[1]*0.5; - double g_maxX3 = dim[2]*0.5; - - - double d_minX2 = -dim[1]*0.5; - double d_minX3 = -dim[2]*0.5; - - double d_maxX1 = dim[0]; - double d_maxX2 = dim[1]*0.5; - double d_maxX3 = dim[2]*0.5; - - if (myid == 0) - { - UBLOG(logINFO, "Parameters:"); - UBLOG(logINFO, "QN = " << QN << " [Nl/min]"); - UBLOG(logINFO, "u_Real = " << uReal << " [m/s]"); - UBLOG(logINFO, "rho_Real = " << rhoReal << " [kg/m^3]"); - UBLOG(logINFO, "nu_Real = " << nuReal << " [m^2/s]"); - UBLOG(logINFO, "u_LB = " << u_LB << " [dx/dt]"); - UBLOG(logINFO, "rho_LB = " << rho_LB+1<< " [mass/dx^3]"); - UBLOG(logINFO, "nu_LB = " << nu_LB << " [dx^2/dt]"); - UBLOG(logINFO, "N = " << N); - UBLOG(logINFO, "dx coarse = " << deltaXcoarse); - UBLOG(logINFO, "dx fine = " << deltaXfine); - UBLOG(logINFO, "number of refinement levels = " << refineLevel); - UBLOG(logINFO, "number of processes = " << comm->getNumberOfProcesses()); - UBLOG(logINFO, "path = " << pathOut); - UBLOG(logINFO, "Preprocess - start"); - } - - //BC adapters - SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter()); - noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm())); - - SPtr<BCAdapter> slipBCAdapter(new SlipBCAdapter()); - slipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new SlipBCAlgorithm())); - - double diameter_inlet = 0.005; - double cx1 = g_minX1; - double cx2 = 0.0; - double cx3 = 0.0; - - //Å tigler, J. (2014). Analytical velocity profile in tube for laminar and turbulent flow. Engineering Mechanics, 21(6), 371-379. - mu::Parser fct; - //fct.SetExpr("U"); - fct.SetExpr("U*(1-(((((x2-y0)^2+(x3-z0)^2)^0.5)/R)^NplusOne))"); - fct.DefineConst("x0", cx1); - fct.DefineConst("y0", cx2); - fct.DefineConst("z0", cx3); - fct.DefineConst("R", diameter_inlet/2.0); - fct.DefineConst("U", u_LB*((N+3)/(N+1))); - fct.DefineConst("NplusOne", N+1.0); - - SPtr<BCAdapter> velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); - velBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityWithDensityBCAlgorithm())); - - SPtr<BCAdapter> outflowBCAdapter(new DensityBCAdapter(rho_LB)); - outflowBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NonReflectingOutflowBCAlgorithm())); - - BoundaryConditionsBlockVisitor bcVisitor; - bcVisitor.addBC(noSlipBCAdapter); - bcVisitor.addBC(slipBCAdapter); - bcVisitor.addBC(velBCAdapter); - bcVisitor.addBC(outflowBCAdapter); - - SPtr<BCProcessor> bcProc; - bcProc = SPtr<BCProcessor>(new BCProcessor()); - - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulantLBMKernel()); - SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel()); - double bulckViscosity = 3700.0*nu_LB; - if (myid == 0) UBLOG(logINFO, "bulckViscosity = "<< bulckViscosity); - dynamicPointerCast<CompressibleCumulant4thOrderViscosityLBMKernel>(kernel)->setBulkViscosity(bulckViscosity); - kernel->setBCProcessor(bcProc); - ////////////////////////////////////////////////////////////////////////// - //restart - SPtr<UbScheduler> mSch(new UbScheduler(cpStep, cpStart)); - SPtr<MPIIOMigrationCoProcessor> migCoProcessor(new MPIIOMigrationCoProcessor(grid, mSch, pathOut + "/mig", comm)); - migCoProcessor->setLBMKernel(kernel); - migCoProcessor->setBCProcessor(bcProc); - ////////////////////////////////////////////////////////////////////////// - - if (newStart) - { - grid->setPeriodicX1(false); - grid->setPeriodicX2(false); - grid->setPeriodicX3(false); - grid->setDeltaX(deltaXcoarse); - grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - - //generate block grid - SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); - if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathOut + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); - GenBlocksGridVisitor genBlocks(gridCube); - - grid->accept(genBlocks); - - //geometry - if (myid == 0) UBLOG(logINFO, "Read inlet pipe geometry:start"); - SPtr<GbTriFaceMesh3D> inletTubeGeo = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile2(pathGeo + inletTubeGeoFile, "inPipeGeo", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); - inletTubeGeo->translate(offSetOrganPipe, 0.0, 0.0); - if (myid == 0) UBLOG(logINFO, "Read inlet pipe geometry:end"); - if (myid == 0) GbSystem3D::writeGeoObject(inletTubeGeo.get(), pathOut + "/geo/inletTubeGeo", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> organPipeInter = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(organPipeGeo, grid, noSlipBCAdapter, Interactor3D::SOLID, Interactor3D::EDGES)); - SPtr<Interactor3D> inletTubeInter = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(inletTubeGeo, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - double op_offset = organPipeGeo->getX1Minimum() - inletTubeGeo->getX1Minimum(); - double startX1it = inletTubeGeo->getX1Minimum(); - ////////////////////////////////////////////////////////////////////////// - //refinement - //refinement - //SPtr<GbObject3D> refineBoxL1(new GbCuboid3D(startX1it-0.8, -1.0, -1.0, startX1it + 1.75 + op_offset, 1.0, 1.0)); - //if (myid == 0) GbSystem3D::writeGeoObject(refineBoxL1.get(), pathOut + "/geo/refineBoxL1", WbWriterVtkXmlBinary::getInstance()); - SPtr<GbObject3D> refineBoxL2(new GbCuboid3D(startX1it-0.38, -0.55, -0.55, startX1it+1.25+op_offset, 0.55, 0.55)); - if (myid == 0) GbSystem3D::writeGeoObject(refineBoxL2.get(), pathOut + "/geo/refineBoxL2", WbWriterVtkXmlBinary::getInstance()); - SPtr<GbObject3D> refineBoxL3(new GbCuboid3D(startX1it-0.25, -0.28, -0.28, startX1it+0.8+op_offset-0.064, 0.28, 0.28)); - if (myid == 0) GbSystem3D::writeGeoObject(refineBoxL3.get(), pathOut + "/geo/refineBoxL3", WbWriterVtkXmlBinary::getInstance()); - SPtr<GbObject3D> refineBoxL4(new GbCuboid3D(startX1it-0.13, -0.15, -0.15, startX1it + 0.52 + op_offset-0.032, 0.15, 0.15)); - if (myid == 0) GbSystem3D::writeGeoObject(refineBoxL4.get(), pathOut + "/geo/refineBoxL4", WbWriterVtkXmlBinary::getInstance()); - SPtr<GbObject3D> refineBoxL5(new GbCuboid3D(startX1it-0.0633, -0.08, -0.08, startX1it + 0.3267 + op_offset, 0.08, 0.08)); - if (myid == 0) GbSystem3D::writeGeoObject(refineBoxL5.get(), pathOut + "/geo/refineBoxL5", WbWriterVtkXmlBinary::getInstance()); - SPtr<GbObject3D> refineBoxL6(new GbCuboid3D(startX1it, -0.042, -0.042, startX1it + 0.2634 + op_offset+0.016, 0.042, 0.042)); - if (myid == 0) GbSystem3D::writeGeoObject(refineBoxL6.get(), pathOut + "/geo/refineBoxL6", WbWriterVtkXmlBinary::getInstance()); - //SPtr<GbObject3D> refineBoxL62(new GbCuboid3D(startX1it + 0.1016 + op_offset, -0.0165, 0.0165, startX1it + 0.2634 + op_offset, 0.0165, 0.0365)); - //if (myid == 0) GbSystem3D::writeGeoObject(refineBoxL62.get(), pathOut + "/geo/refineBoxL62", WbWriterVtkXmlBinary::getInstance()); - SPtr<GbObject3D> refineBoxL7(new GbCuboid3D(startX1it, -0.03, -0.03, startX1it + 0.1516 + op_offset, 0.03, 0.03)); - if (myid == 0) GbSystem3D::writeGeoObject(refineBoxL7.get(), pathOut + "/geo/refineBoxL7", WbWriterVtkXmlBinary::getInstance()); - SPtr<GbObject3D> refineBoxL81(new GbCuboid3D(startX1it, -0.005, -0.005, startX1it + 0.02 + op_offset, 0.005, 0.005)); - if (myid == 0) GbSystem3D::writeGeoObject(refineBoxL81.get(), pathOut + "/geo/refineBoxL81", WbWriterVtkXmlBinary::getInstance()); - SPtr<GbObject3D> refineBoxL82(new GbCuboid3D(startX1it + 0.02, -0.0165, -0.0165, startX1it + 0.06 + op_offset, 0.0165, 0.0165)); - if (myid == 0) GbSystem3D::writeGeoObject(refineBoxL82.get(), pathOut + "/geo/refineBoxL82", WbWriterVtkXmlBinary::getInstance()); - - SPtr<GbObject3D> refineBoxL83(new GbCuboid3D(startX1it+0.06, -0.0165, -0.0165, startX1it + 0.1016 + op_offset, 0.0165, 0.024)); - if (myid == 0) GbSystem3D::writeGeoObject(refineBoxL83.get(), pathOut + "/geo/refineBoxL83", WbWriterVtkXmlBinary::getInstance()); - SPtr<GbObject3D> refineBoxL9(new GbCuboid3D(startX1it+0.06, -0.0165, 0.01, startX1it + 0.09 + op_offset, 0.0165, 0.013)); - if (myid == 0) GbSystem3D::writeGeoObject(refineBoxL9.get(), pathOut + "/geo/refineBoxL9", WbWriterVtkXmlBinary::getInstance()); - if (refineLevel > 0) - { - if (myid == 0) UBLOG(logINFO, "Refinement - start"); - RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel, comm); - //refineHelper.addGbObject(refineBoxL1, refineLevel - 8); - refineHelper.addGbObject(refineBoxL2, refineLevel - 7); - refineHelper.addGbObject(refineBoxL3, refineLevel - 6); - refineHelper.addGbObject(refineBoxL4, refineLevel - 5); - refineHelper.addGbObject(refineBoxL5, refineLevel - 4); - refineHelper.addGbObject(refineBoxL6, refineLevel - 3); - //refineHelper.addGbObject(refineBoxL62, refineLevel-3); - refineHelper.addGbObject(refineBoxL7, refineLevel - 2); - refineHelper.addGbObject(refineBoxL81, refineLevel - 1); - refineHelper.addGbObject(refineBoxL82, refineLevel - 1); - refineHelper.addGbObject(refineBoxL83, refineLevel - 1); - refineHelper.addGbObject(refineBoxL9, refineLevel); - refineHelper.refine(); - if (myid == 0) UBLOG(logINFO, "Refinement - end"); - } - ////////////////////////////////////////////////////////////////////////// - - //walls - double blockLength = blocknx[0]*deltaXcoarse; - GbCuboid3DPtr addWallXmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_minX1, g_maxX2+blockLength, g_maxX3+blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallXmin.get(), pathOut + "/geo/addWallXmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr addWallYmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_minX2, g_maxX3+blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathOut + "/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr addWallYmax(new GbCuboid3D(g_minX1-blockLength, g_maxX2, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathOut + "/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathOut + "/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathOut + "/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance()); - - //wall interactors - SPtr<D3Q27Interactor> addWallXminInt(new D3Q27Interactor(addWallXmin, grid, slipBCAdapter, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> addWallYminInt(new D3Q27Interactor(addWallYmin, grid, slipBCAdapter, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, slipBCAdapter, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, slipBCAdapter, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, slipBCAdapter, Interactor3D::SOLID)); - - //inflow - GbCylinder3DPtr geoInflow(new GbCylinder3D(startX1it-deltaXfine*3.0, 0.0, 0.0, startX1it+deltaXfine*3.0, 0.0, 0.0, diameter_inlet)); - if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathOut + "/geo/geoInflow", WbWriterVtkXmlASCII::getInstance()); - SPtr<D3Q27Interactor> inflowIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID)); - - //GbCylinder3DPtr geoInflowCover(new GbCylinder3D(startX1it-deltaXfine*5.0, 0.0, 0.0, startX1it, 0.0, 0.0, diameter_inlet+deltaXfine*6.0)); - GbCylinder3DPtr geoInflowCover(new GbCylinder3D(startX1it-0.05, 0.0, 0.0, startX1it, 0.0, 0.0, 0.006)); - if (myid == 0) GbSystem3D::writeGeoObject(geoInflowCover.get(), pathOut + "/geo/geoInflowCover", WbWriterVtkXmlASCII::getInstance()); - SPtr<D3Q27Interactor> inflowCoverIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflowCover, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - //outflow - GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2 - deltaXcoarse, g_minX3 - deltaXcoarse, g_maxX1 + deltaXcoarse, g_maxX2 + deltaXcoarse, g_maxX3 + deltaXcoarse)); - if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathOut + "/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); - SPtr<D3Q27Interactor> outflowIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, outflowBCAdapter, Interactor3D::SOLID)); - - - //////////////////////////////////////////// - //METIS - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B, MetisPartitioner::RECURSIVE)); - //////////////////////////////////////////// - /////delete solid blocks - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - intHelper.addInteractor(outflowIntr); - intHelper.addInteractor(addWallXminInt); - intHelper.addInteractor(addWallZminInt); - intHelper.addInteractor(addWallZmaxInt); - intHelper.addInteractor(addWallYminInt); - intHelper.addInteractor(addWallYmaxInt); - intHelper.addInteractor(inflowIntr); - intHelper.addInteractor(organPipeInter); - intHelper.addInteractor(inletTubeInter); - intHelper.addInteractor(inflowCoverIntr); - intHelper.selectBlocks(); - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end"); - - { - WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm); - ppblocks.process(0); - } - - 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"); - } - - SetKernelBlockVisitor kernelVisitor(kernel, nu_LB, availMem, needMem); - grid->accept(kernelVisitor); - - if (myid == 0) UBLOG(logINFO, "SetKernelBlockVisitor:end"); - - if (myid == 0) - { - UBLOG(logINFO, "PID = " << myid << " Point 5"); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe() / 1073741824.0 << " GB"); - } - - if (refineLevel > 0) - { - bool twoTypeOfConnectorsCheck = false; - SetUndefinedNodesBlockVisitor undefNodesVisitor(twoTypeOfConnectorsCheck); - grid->accept(undefNodesVisitor); - } - - if (myid == 0) UBLOG(logINFO, "SetUndefinedNodesBlockVisitor:end"); - - //BC - intHelper.setBC(); - if (myid == 0) UBLOG(logINFO, "intHelper.setBC():end"); - - //initialization of distributions - InitDistributionsBlockVisitor initVisitor; - grid->accept(initVisitor); - - //Geometry and boundary conditions - { - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - WriteBoundaryConditionsCoProcessor ppgeo(grid, geoSch, pathOut, WbWriterVtkXmlBinary::getInstance(), comm); - ppgeo.process(0); - } - - } - else - { - //restartCoProcessor->restart((int)restartStep); - migCoProcessor->restart((int)restartStep); - grid->setTimeStep(restartStep); - } - ////set connectors - //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - SPtr<Interpolator> iProcessor(new CompressibleOffsetMomentsInterpolator()); - dynamicPointerCast<CompressibleOffsetMomentsInterpolator>(iProcessor)->setBulkViscosity(nu_LB, bulckViscosity); - SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor); - grid->accept(setConnsVisitor); - - //bcVisitor should be accept after initialization!!!! - grid->accept(bcVisitor); - if (myid == 0) UBLOG(logINFO, "grid->accept(bcVisitor):end"); - - - - ////sponge layer - //////////////////////////////////////////////////////////////////////////// - /*GbCuboid3DPtr spongeLayerX1max(new GbCuboid3D(g_maxX1 - 0.4, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 + blockLength, g_maxX2 + blockLength, g_maxX3 + blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(spongeLayerX1max.get(), pathOut + "/geo/spongeLayerX1max", WbWriterVtkXmlASCII::getInstance()); - SpongeLayerBlockVisitor slVisitorX1max(spongeLayerX1max, kernel, nu_LB, D3Q27System::E); - grid->accept(slVisitorX1max); - - GbCuboid3DPtr spongeLayerX1min(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_minX3 - blockLength, g_minX1 + 0.2, g_maxX2 + blockLength, g_maxX3 + blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(spongeLayerX1min.get(), pathOut + "/geo/spongeLayerX1min", WbWriterVtkXmlASCII::getInstance()); - SpongeLayerBlockVisitor slVisitorX1min(spongeLayerX1min, spKernel, nuLB, D3Q27System::W); - grid->accept(slVisitorX1min); - - GbCuboid3DPtr spongeLayerX2max(new GbCuboid3D(g_maxX1 - 0.4, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 + blockLength, g_maxX2 + blockLength, g_maxX3 + blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(spongeLayerX1max.get(), pathOut + "/geo/spongeLayerX1max", WbWriterVtkXmlASCII::getInstance()); - SpongeLayerBlockVisitor slVisitorX1max(spongeLayerX1max, kernel, nu_LB, D3Q27System::E); - grid->accept(slVisitorX1max); - - GbCuboid3DPtr spongeLayerX2min(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_minX3 - blockLength, g_minX1 + 0.2, g_maxX2 + blockLength, g_maxX3 + blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(spongeLayerX1min.get(), pathOut + "/geo/spongeLayerX1min", WbWriterVtkXmlASCII::getInstance()); - SpongeLayerBlockVisitor slVisitorX1min(spongeLayerX1min, spKernel, nuLB, D3Q27System::W); - grid->accept(slVisitorX1min); - - GbCuboid3DPtr spongeLayerX3min(new GbCuboid3D(g_minX1 + 0.2, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 - 0.4, g_maxX2 + blockLength, g_minX3 + 0.2)); - if (myid == 0) GbSystem3D::writeGeoObject(spongeLayerX3min.get(), pathOut + "/geo/spongeLayerX3min", WbWriterVtkXmlASCII::getInstance()); - SpongeLayerBlockVisitor slVisitorX3min(spongeLayerX3min, kernel, nuLB, D3Q27System::B); - grid->accept(slVisitorX3min); - - GbCuboid3DPtr spongeLayerX3max(new GbCuboid3D(g_minX1 + 0.2, g_minX2 - blockLength, g_maxX3 - 0.2, g_maxX1 - 0.4, g_maxX2 + blockLength, g_maxX3 + blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(spongeLayerX3max.get(), pathOut + "/geo/spongeLayerX3max", WbWriterVtkXmlASCII::getInstance()); - SpongeLayerBlockVisitor slVisitorX3max(spongeLayerX3max, kernel, nuLB, D3Q27System::T); - grid->accept(slVisitorX3max);*/ - ///////////////////////////////////////////////////////////////////////////// - - if (myid==0) UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - if (myid==0) UBLOG(logINFO, "Preprozess - end"); - - int numOfThreads = 1; - SPtr<UbScheduler> nupsSch(new UbScheduler(nupsStep[0], nupsStep[1], nupsStep[2])); - std::shared_ptr<NUPSCounterCoProcessor> nupsCoProcessor(new NUPSCounterCoProcessor(grid, nupsSch, numOfThreads, comm)); - - SPtr<UbScheduler> stepSch(new UbScheduler(outTimeStep, outTimeStart)); - - SPtr<WriteMacroscopicQuantitiesCoProcessor> writeMQCoProcessor(new WriteMacroscopicQuantitiesCoProcessor(grid, stepSch, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - - SPtr<UbScheduler> stepMV(new UbScheduler(1, 0, 1000000)); - SPtr<MicrophoneArrayCoProcessor> micCoProcessor(new MicrophoneArrayCoProcessor(grid, stepSch, pathOut, comm)); - std::vector<UbTupleFloat3> nodes; - micCoProcessor->addMicrophone(Vector3D(organPipeGeo->getX1Minimum()+0.0719, 0.0, organPipeGeo->getX3Maximum()+0.05)); - nodes.push_back(UbTupleFloat3(float(organPipeGeo->getX1Minimum()+0.0719), float(0.0), float(organPipeGeo->getX3Maximum()+0.05))); - micCoProcessor->addMicrophone(Vector3D(organPipeGeo->getX1Maximum()+0.05, 0.0, organPipeGeo->getX3Centroid())); - nodes.push_back(UbTupleFloat3(float(organPipeGeo->getX1Maximum()+0.05), float(0.0), float(organPipeGeo->getX3Centroid()))); - - //additional mics for ray traysing - Vector3D vec1(g_minX1+0.5*deltaXcoarse, g_minX2+0.5*deltaXcoarse, g_minX3+0.5*deltaXcoarse); - micCoProcessor->addMicrophone(vec1); - nodes.push_back(UbTupleFloat3(float(vec1[0]), float(vec1[1]), float(vec1[2]))); - - Vector3D vec2(g_minX1+0.5*deltaXcoarse, g_maxX2-0.5*deltaXcoarse, g_minX3+0.5*deltaXcoarse); - micCoProcessor->addMicrophone(vec2); - nodes.push_back(UbTupleFloat3(float(vec2[0]), float(vec2[1]), float(vec2[2]))); - - Vector3D vec3(g_minX1+0.5*deltaXcoarse, g_minX2+0.5*deltaXcoarse, g_maxX3-0.5*deltaXcoarse); - micCoProcessor->addMicrophone(vec3); - nodes.push_back(UbTupleFloat3(float(vec3[0]), float(vec3[1]), float(vec3[2]))); - - Vector3D vec4(g_minX1+0.5*deltaXcoarse, g_maxX2-0.5*deltaXcoarse, g_maxX3-0.5*deltaXcoarse); - micCoProcessor->addMicrophone(vec4); - nodes.push_back(UbTupleFloat3(float(vec4[0]), float(vec4[1]), float(vec4[2]))); - - Vector3D vec5(organPipeGeo->getX1Minimum()+0.0719, 0.0, organPipeGeo->getX3Maximum()); - micCoProcessor->addMicrophone(vec5); - nodes.push_back(UbTupleFloat3(float(vec5[0]), float(vec5[1]), float(vec5[2]))); - - Vector3D vec6(organPipeGeo->getX1Maximum(), 0.0, organPipeGeo->getX3Centroid()); - micCoProcessor->addMicrophone(vec6); - nodes.push_back(UbTupleFloat3(float(vec6[0]), float(vec6[1]), float(vec6[2]))); - ////////////////////////////////////////////////////////////////// - - if (myid==0) WbWriterVtkXmlBinary::getInstance()->writeNodes(pathOut+"/geo/mic", nodes); - - - SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1)); - SPtr<Calculator> calculator(new BasicCalculator(grid, stepGhostLayer, endTime)); - calculator->addCoProcessor(nupsCoProcessor); - calculator->addCoProcessor(micCoProcessor); - calculator->addCoProcessor(migCoProcessor); - calculator->addCoProcessor(writeMQCoProcessor); - ///////////////////////////////////////////////////////////////////////////////////// - - 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[]) -{ - if (argv != NULL) - { - if (argv[1] != NULL) - { - run(string(argv[1])); - } - else - { - cout << "Configuration file must be set!: " << argv[0] << " <config file>" << endl << std::flush; - } - } -} diff --git a/apps/cpu/OrganPipe/config.txt b/apps/cpu/OrganPipe/config.txt deleted file mode 100644 index 1554322df784bbf754ac214318e72b1909acb1b3..0000000000000000000000000000000000000000 --- a/apps/cpu/OrganPipe/config.txt +++ /dev/null @@ -1,21 +0,0 @@ -pathOut = e:/temp/OrganPipe -pathGeo = d:/Projects/SFB880/OrganPipe/geo - -availMem = 2e9 - -logToFile = false - -QN = 67.5 #Nl/min - -newStart = true -restartStep = 250000 - -cpStep = 8000 -cpStart = 258000 - -outTimeStep = 1 -outTimeStart = 1 - -nupsStep = 1000 1000 10000000 - -endTime = 10 \ No newline at end of file diff --git a/apps/cpu/PlateWithPorousInlay/CMakeLists.txt b/apps/cpu/PlateWithPorousInlay/CMakeLists.txt deleted file mode 100644 index 019ea34a9f344bd8f095bd0e9c37208baec22947..0000000000000000000000000000000000000000 --- a/apps/cpu/PlateWithPorousInlay/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(porplate) - -INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(porplate BINARY) diff --git a/apps/cpu/PlateWithPorousInlay/plate.cpp b/apps/cpu/PlateWithPorousInlay/plate.cpp deleted file mode 100644 index 0334da7c3410cba9f92a2c2396c9702db429c510..0000000000000000000000000000000000000000 --- a/apps/cpu/PlateWithPorousInlay/plate.cpp +++ /dev/null @@ -1,700 +0,0 @@ - - -#include <iostream> -#include <string> -#include <math.h> - -#include <vfluids.h> - -using namespace std; - -////////////////////////////////////////////////////////////////////////// -void inlay(GbVoxelMatrix3DPtr pmMesh, string& pathname, int myid, int i, Grid3DPtr grid) -{ - int bbOptionPM = 2; //quadratic bounce back with for thin walls - D3Q27BoundaryConditionAdapterPtr noSlipPM(new D3Q27NoSlipBCAdapter(bbOptionPM)); - D3Q27InteractorPtr inlayInt = D3Q27InteractorPtr(new D3Q27Interactor(pmMesh, grid, noSlipPM, Interactor3D::SOLID)); - - GbCuboid3DPtr inlayBox(new GbCuboid3D(pmMesh->getX1Minimum(), pmMesh->getX2Minimum(), pmMesh->getX3Minimum(), pmMesh->getX1Maximum(), pmMesh->getX2Maximum(), pmMesh->getX3Maximum())); - if (myid == 0) GbSystem3D::writeGeoObject(inlayBox.get(), pathname + "/geo/inlay" + UbSystem::toString(i), WbWriterVtkXmlASCII::getInstance()); - D3Q27InteractorPtr inlayBoxInt = D3Q27InteractorPtr(new D3Q27Interactor(inlayBox, grid, noSlipPM, Interactor3D::SOLID)); - SetSolidOrTransBlockVisitor v1(inlayBoxInt, SetSolidOrTransBlockVisitor::SOLID); - grid->accept(v1); - SetSolidOrTransBlockVisitor v2(inlayBoxInt, SetSolidOrTransBlockVisitor::TRANS); - grid->accept(v2); - - vector<Block3DPtr> inlayBlocks; - vector<Block3DPtr>& sb = inlayBoxInt->getSolidBlockSet(); - if (myid == 0) UBLOG(logINFO, "sb.size = " << sb.size()); - inlayBlocks.insert(inlayBlocks.end(), sb.begin(), sb.end()); - vector<Block3DPtr>& tb = inlayBoxInt->getTransBlockSet(); - if (myid == 0) UBLOG(logINFO, "tb.size = " << tb.size()); - inlayBlocks.insert(inlayBlocks.end(), tb.begin(), tb.end()); - - if (myid == 0) UBLOG(logINFO, "inlayBlocks.size = " << inlayBlocks.size()); - - BOOST_FOREACH(Block3DPtr block, inlayBlocks) - { - block->setActive(true); - inlayInt->setDifferencesToGbObject3D(block); - } -} -////////////////////////////////////////////////////////////////////////// -void run(const char *cstr) -{ - try - { - string pathname; - string pathGeo; - string pathLog; - int numOfThreads = 1; - bool logfile = false; - stringstream logFilename; - double availMem = 0; - - CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - string machine = string(cstr); - - if (machine == "my") - { - pathname = "d:/temp/porplate"; - pathGeo = "d:/Data/plate"; - pathLog = pathname; - numOfThreads = 4; - logfile = false; - availMem = 15.0e9; - } - else if (machine == "Ludwig") - { - pathname = "/work/koskuche/SFB880/porplate"; - pathGeo = "/home/koskuche/data/plate"; - pathLog = pathname; - numOfThreads = 8; - availMem = 12.0e9;///8*numOfThreads; - logfile = true; - } - else if (machine == "HLRS") - { - pathname = "/univ_1/ws1/ws/xrmkuchr-plate3-0"; - pathGeo = "/zhome/academic/HLRS/xrm/xrmkuchr/data/plate"; - pathLog = "/zhome/academic/HLRS/xrm/xrmkuchr/work/plate"; - numOfThreads = 12; - availMem = 2.0e9; - logfile = true; - } - else if (machine == "HLRN") - { - pathname = "/gfs1/work/niikonst/scratch/porplate"; - pathGeo = "/gfs1/work/niikonst/data/plate"; - pathLog = pathname; - numOfThreads = 24; - availMem = 64.0e9; - logfile = true; - } - else throw UbException(UB_EXARGS, "unknown CAB_MACHINE"); - -#if defined(__unix__) - if (myid==0) - { - const char* str = pathLog.c_str(); - int status=mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); - } -#endif - - if (myid == 0 && logfile) - { - //UbLog::reportingLevel() = logDEBUG5; - logFilename << pathLog + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + "_" + UbSystem::toString(myid) + ".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - - if (myid == 0) UBLOG(logINFO, "Testcase plate"); - - string PlatteFilename = pathGeo + "/Platte_bearbeitet2.stl"; - - string ZckbndFilename = pathGeo + "/2zackenbaender0.stl"; - - ///////////////Knotenabmessungen: - int nx[3], blocknx[3]; - nx[0] = 90;//240;//120;//60;//86;//43;//65;//50; //l�nge - nx[1] = 2;//2;//6;///1;//5;// //breite - nx[2] = 30;//64;//32;//18;//5;//15;//15; //h�he gebiet - blocknx[0] = 16;//10;//6; - blocknx[1] = 16;//10;//6; - blocknx[2] = 16;//10;//6; - - int baseLevel = 0; - int refineLevel = 5; - - double H = 600.0; // Kanalh�he [mm] - double cdx = H / (double)(nx[2] * blocknx[2]); - double fdx = cdx / double(1 << refineLevel); - - //double h = 200.0; // gew�nschte Plattenh�he in Gitterpunkten - //double fdx = plate->getLengthX3()/h; - //double cdx = fdx*double(1<<refineLevel); - - LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter()); - - ////////////////////////////////////////////////////////////////////////// - // physik - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // Experiment Parametr - // Re = 1000000 - // V = 16.05 # m / s - // p = 994.7 #hPa(manuell abgelesen von MUB) - // T = 21.78 #�C - // Luftfeuchte = 50.5 # % - ////////////////////////////////////////////////////////////////////////// - // Simulation Parametr - ////////////////////////////////////////////////////////////////////////// - double Re = 1e6; // 1133333.3333333335; - double rhoLB = 0.0; - double uLB = 0.1; - double lReal = 1000; //Plattenl�nge in mm - double nuLB = (uLB*(lReal / cdx)) / Re; - - int sizeSP = 4; - mu::Parser spongeLayer; - spongeLayer.SetExpr("x1>=(sizeX-sizeSP)/dx ? (sizeX-(x1+1))/sizeSP/2.0 + 0.5 : 1.0"); - spongeLayer.DefineConst("sizeX", nx[0] * blocknx[0]); - spongeLayer.DefineConst("sizeSP", sizeSP*blocknx[0]); - - Grid3DPtr grid(new Grid3D(comm)); - - ////////////////////////////////////////////////////////////////////////// - //restart - UbSchedulerPtr rSch(new UbScheduler(1000, 1000, 10000000)); - RestartPostprocessor rp(grid, rSch, comm, pathname, RestartPostprocessor::BINARY); - ////////////////////////////////////////////////////////////////////////// - bool restart; - - if (grid->getTimeStep() == 0) - { - - if (myid == 0) UBLOG(logINFO, "Neustart.."); - restart = false; - ////////////////////////////////////////////////////////////////////////// - //Platte - GbTriFaceMesh3DPtr plate(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(PlatteFilename, "Netz")); - if (myid == 0) GbSystem3D::writeGeoObject(plate.get(), pathname + "/geo/platte", WbWriterVtkXmlBinary::getInstance()); - ////////////////////////////////////////////////////////////////////////// - // Zackenband - ////////////////////////////////////////////////////////////////////////// - GbTriFaceMesh3DPtr meshBand1(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand")); - meshBand1->translate(5.0, -2.86, -14.717); - meshBand1->rotate(0.0, -0.5, 0.0); - if (myid == 0) GbSystem3D::writeGeoObject(meshBand1.get(), pathname + "/geo/Band1", WbWriterVtkXmlASCII::getInstance()); - // Zackenband2 - GbTriFaceMesh3DPtr meshBand2(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand2")); - meshBand2->translate(5.0, -7.86, -14.717); - meshBand2->rotate(0.0, -0.5, 0.0); - if (myid == 0) GbSystem3D::writeGeoObject(meshBand2.get(), pathname + "/geo/Band2", WbWriterVtkXmlASCII::getInstance()); - // Zackenband3 - GbTriFaceMesh3DPtr meshBand3(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand3")); - meshBand3->translate(5.0, -2.86, -14.417); //+0.3 - meshBand3->rotate(0.0, -0.5, 0.0); - if (myid == 0) GbSystem3D::writeGeoObject(meshBand3.get(), pathname + "/geo/Band3", WbWriterVtkXmlASCII::getInstance()); - // Zackenband4 - GbTriFaceMesh3DPtr meshBand4(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand4")); - meshBand4->translate(5.0, -7.86, -14.417); - meshBand4->rotate(0.0, -0.5, 0.0); - if (myid == 0) GbSystem3D::writeGeoObject(meshBand4.get(), pathname + "/geo/Band4", WbWriterVtkXmlASCII::getInstance()); - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - //porous inlay - // string pmFilename1 = pathGeo + "/CT-2014-039.raw"; - // int pmNX1t=1333; //abmessung einzelbild in x-richtung - // int pmNX2t=463; //abmessung einzelbild in y richtung - // int pmNX3t=1333; //anzahl der bilder - // float lthresholdt = 27686.97; - // float uthresholdt = 65535.0; - - //// string pmFilename1 = pathGeo + "/membran370x357x101.raw"; - //// int pmNX1t=370; //abmessung einzelbild in x-richtung - //// int pmNX2t=357; //abmessung einzelbild in y richtung - //// int pmNX3t=101; //anzahl der bilder - //// float lthresholdt = 55.0; - //// float uthresholdt = 182.0; - - // GbVoxelMatrix3DPtr pmMesht(new GbVoxelMatrix3D(pmNX1t,pmNX2t,pmNX3t,0,lthresholdt,uthresholdt)); - // pmMesht->readMatrixFromRawFile<unsigned short>(pmFilename1); - // //pmMesht->readMatrixFromRawFile<unsigned char>(pmFilename1); - // double deltaX1 = 0.05/pmNX2t; - // double deltaX2 = 0.05/pmNX2t; - // double deltaX3 = 0.05/pmNX3t; - // double scaleFactort = 0.001; - // double deltat = 3.75*scaleFactort; - // pmMesht->setVoxelMatrixDelta(deltat, deltat, deltat); - // pmMesht->rotate90aroundX(); - // pmMesht->rotate90aroundX(); - // pmMesht->rotate90aroundX(); - // double inlayXmin = 0; - // double inlayYmin = 0; - // double inlayZmin = 0; - // pmMesht->setVoxelMatrixMininum(inlayXmin, inlayYmin, inlayZmin); - // - // if(myid == 0) pmMesht->writeToLegacyVTKBinary(pathname+"/geo/pmMesh"); - - // return; - //////////////////////////////////////////////////////////////////////////// - - double blockLengthx1 = blocknx[0] * cdx; //geowerte - double blockLengthx2 = blockLengthx1; - double blockLengthx3 = blockLengthx1; - - double geoLength[] = { nx[0] * blockLengthx1, nx[1] * blockLengthx2, nx[2] * blockLengthx3 }; - - double originX1 = plate->getX1Minimum() - plate->getLengthX1() / 4.0; - double originX2 = plate->getX2Minimum(); - double originX3 = plate->getX3Minimum() - 299.5; - - - bool periodicx1 = false; - bool periodicx2 = true; - bool periodicx3 = false; - - //bounding box - double g_minX1 = originX1; - double g_minX2 = originX2; - double g_minX3 = originX3; - - double g_maxX1 = originX1 + geoLength[0]; - double g_maxX2 = originX2 + geoLength[1]; - double g_maxX3 = originX3 + geoLength[2];; - - - //set grid - grid->setDeltaX(cdx); - grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - grid->setPeriodicX1(periodicx1); - grid->setPeriodicX2(periodicx2); - grid->setPeriodicX3(periodicx3); - - GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); - gridCube->setCenterCoordinates(gridCube->getX1Centroid(), meshBand1->getX2Centroid(), gridCube->getX3Centroid()); - if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlASCII::getInstance()); - - originX2 = gridCube->getX2Minimum(); - g_minX2 = originX2; - g_maxX2 = originX2 + geoLength[1]; - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - ////////////////////////////////////////////////////////////////////////// - if (myid == 0) - { - UBLOG(logINFO, "*****************************************"); - UBLOG(logINFO, "* Parameters *"); - UBLOG(logINFO, "* Re =" << Re); - UBLOG(logINFO, "* nuLB =" << nuLB); - UBLOG(logINFO, "* uLB =" << uLB); - UBLOG(logINFO, "* cdx =" << cdx); - UBLOG(logINFO, "* fdx =" << fdx); - double Hzb = 0.6 / fdx; - UBLOG(logINFO, "* Height of Zackenband =" << Hzb); - UBLOG(logINFO, "* Re on Zackenband =" << (uLB*Hzb) / (nuLB*double(1 << refineLevel))); - UBLOG(logINFO, "* nx1/2/3 =" << nx[0] << "/" << nx[1] << "/" << nx[2]); - UBLOG(logINFO, "* blocknx1/2/3 =" << blocknx[0] << "/" << blocknx[1] << "/" << blocknx[2]); - UBLOG(logINFO, "* x1Periodic =" << periodicx1); - UBLOG(logINFO, "* x2Periodic =" << periodicx2); - UBLOG(logINFO, "* x3Periodic =" << periodicx3); - UBLOG(logINFO, "* number of levels =" << refineLevel + 1); - UBLOG(logINFO, "* path =" << pathname); - - UBLOG(logINFO, "*****************************************"); - UBLOG(logINFO, "* number of threads =" << numOfThreads); - UBLOG(logINFO, "* number of processes =" << comm->getNumberOfProcesses()); - UBLOG(logINFO, "*****************************************"); - UBLOG(logINFO, "*****************************************"); - } - ////////////////////////////////////////////////////////////////////////// - - - ////////////////////////////////////////////////////////////////////////// - //refinement - GbCuboid3DPtr refinePlatteBox(new GbCuboid3D(plate->getX1Minimum() - 1.0, plate->getX2Minimum(), plate->getX3Minimum() + (plate->getX3Maximum() - plate->getX3Minimum()) / 2.0, - plate->getX1Maximum() + 40.0, plate->getX2Maximum(), plate->getX3Maximum() + 2.0)); - if (myid == 0) GbSystem3D::writeGeoObject(refinePlatteBox.get(), pathname + "/geo/refinePlatteBox", WbWriterVtkXmlASCII::getInstance()); - - //inlay patch - GbCuboid3DPtr refineInlayBox(new GbCuboid3D(plate->getX1Maximum() - 85.0, plate->getX2Minimum(), plate->getX3Minimum() + (plate->getX3Maximum() - plate->getX3Minimum()) / 2.0, - plate->getX1Maximum() + 1.0, plate->getX2Maximum(), plate->getX3Maximum() + 1.0)); - if (myid == 0) GbSystem3D::writeGeoObject(refineInlayBox.get(), pathname + "/geo/refineInlayBox", WbWriterVtkXmlASCII::getInstance()); - - if (refineLevel > 0) - { - if (myid == 0) UBLOG(logINFO, "Refinement - start"); - RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel); - refineHelper.addGbObject(refinePlatteBox, refineLevel - 1); - refineHelper.addGbObject(refineInlayBox, refineLevel); - - refineHelper.refine(); - if (myid == 0) UBLOG(logINFO, "Refinement - end"); - } - - //if(myid == 0) - //{ - // UBLOG(logINFO,"Write blocks - start"); - // BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - // ppblocks->update(0); - // UBLOG(logINFO,"Write blocks - end"); - //} - - //return; - - - { - - ////walls - GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1 - blockLengthx1, g_minX2 - blockLengthx1, g_minX3 - blockLengthx1, g_maxX1 + blockLengthx1, g_maxX2 + blockLengthx1, g_minX3)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname + "/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1 - blockLengthx1, g_minX2 - blockLengthx1, g_maxX3, g_maxX1 + blockLengthx1, g_maxX2 + blockLengthx1, g_maxX3 + blockLengthx1)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname + "/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance()); - - //walls - int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr slip(new D3Q27SlipBCAdapter(bbOption)); - D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, slip, Interactor3D::SOLID)); - D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, slip, Interactor3D::SOLID)); - - ///////////////////////////////////////////////// - ///interactoren - int bbOption1 = 1; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr noSlip(new D3Q27NoSlipBCAdapter(bbOption1)); - D3Q27TriFaceMeshInteractorPtr triPlateInteractor(new D3Q27TriFaceMeshInteractor(plate, grid, noSlip, Interactor3D::SOLID, Interactor3D::POINTS)); - D3Q27TriFaceMeshInteractorPtr triBand1Interactor(new D3Q27TriFaceMeshInteractor(meshBand1, grid, noSlip, Interactor3D::SOLID, Interactor3D::EDGES)); - D3Q27TriFaceMeshInteractorPtr triBand2Interactor(new D3Q27TriFaceMeshInteractor(meshBand2, grid, noSlip, Interactor3D::SOLID, Interactor3D::EDGES)); - D3Q27TriFaceMeshInteractorPtr triBand3Interactor(new D3Q27TriFaceMeshInteractor(meshBand3, grid, noSlip, Interactor3D::SOLID, Interactor3D::EDGES)); - D3Q27TriFaceMeshInteractorPtr triBand4Interactor(new D3Q27TriFaceMeshInteractor(meshBand4, grid, noSlip, Interactor3D::SOLID, Interactor3D::EDGES)); - - //inflow - GbCuboid3DPtr velBCCuboid(new GbCuboid3D(originX1 - blockLengthx1, originX2 - blockLengthx1, originX3 - blockLengthx1, - originX1, originX2 + geoLength[1] + blockLengthx1, originX3 + geoLength[2] + blockLengthx1)); - if (myid == 0) GbSystem3D::writeGeoObject(velBCCuboid.get(), pathname + "/geo/velBCCuboid", WbWriterVtkXmlASCII::getInstance()); - D3Q27InteractorPtr velBCInteractor(new D3Q27Interactor(velBCCuboid, grid, Interactor3D::SOLID)); - - //inflow - double raiseVelSteps = 0; - vector<D3Q27BCFunction> velcX1BCs, dummy; - - mu::Parser inflowProfile; - inflowProfile.SetExpr("uLB"); - inflowProfile.DefineConst("uLB", uLB); - velcX1BCs.push_back(D3Q27BCFunction(inflowProfile, raiseVelSteps, D3Q27BCFunction::INFCONST)); - - D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter(velcX1BCs, dummy, dummy)); - velBCInteractor->addBCAdapter(velBCAdapter); - - //outflow - GbCuboid3DPtr densCuboid(new GbCuboid3D(originX1 + geoLength[0], originX2 - blockLengthx1, originX3 - blockLengthx1, - originX1 + geoLength[0] + blockLengthx1, originX2 + geoLength[1] + blockLengthx1, originX3 + geoLength[2] + blockLengthx1)); - if (myid == 0) GbSystem3D::writeGeoObject(densCuboid.get(), pathname + "/geo/densCuboid", WbWriterVtkXmlASCII::getInstance()); - D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB)); - D3Q27InteractorPtr densInteractor(new D3Q27Interactor(densCuboid, grid, denBCAdapter, Interactor3D::SOLID)); - - //////////////////////////////////////////// - //METIS - Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B)); - - //////////////////////////////////////////// - /////delete solid blocks - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - intHelper.addInteractor(triPlateInteractor); - intHelper.addInteractor(triBand1Interactor); - intHelper.addInteractor(triBand2Interactor); - intHelper.addInteractor(triBand3Interactor); - intHelper.addInteractor(triBand4Interactor); - intHelper.addInteractor(addWallZminInt); - intHelper.addInteractor(addWallZmaxInt); - intHelper.addInteractor(densInteractor); - intHelper.addInteractor(velBCInteractor); - intHelper.selectBlocks(); - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end"); - ////////////////////////////////////// - - //domain decomposition for threads - if (numOfThreads > 1) - { - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - } - - if (myid == 0) - { - UBLOG(logINFO, "Write blocks - start"); - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - ppblocks->update(0); - UBLOG(logINFO, "Write blocks - end"); - } - - unsigned long nob = grid->getNumberOfBlocks(); - unsigned long nod = nob * blocknx[0] * blocknx[1] * blocknx[2]; - unsigned long nod_real = nob * (blocknx[0] + 3)*(blocknx[1] + 3)*(blocknx[2] + 3); - unsigned long nodb = (blocknx[0]) * (blocknx[1]) * (blocknx[2]); - - double needMemAll = double(nod_real*(27 * sizeof(double) + sizeof(int))); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - double nup = 0; - - if (myid == 0) - { - UBLOG(logINFO, "Number of blocks = " << nob); - UBLOG(logINFO, "Number of nodes = " << nod); - 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*nodb); - nup += nobl*nodb*double(1 << level); - } - UBLOG(logINFO, "Hypothetically time for calculation step for 120 nodes = " << nup / 6.0e5 / (120 * 8) << " s"); - UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); - UBLOG(logINFO, "Available memory per node/8.0 = " << (availMem / 8.0) << " bytes"); - } - - ////////////////////////////////////////// - //set connectors - if (myid == 0) UBLOG(logINFO, "set connectors - start"); - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - grid->accept(setConnsVisitor); - if (myid == 0) UBLOG(logINFO, "set connectors - end"); - - //////////////////////////// - LBMKernel3DPtr kernel; - //kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL)); - - //with sponge layer - kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLBWithSpongeLayer(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL)); - kernel->setWithSpongeLayer(true); - kernel->setSpongeLayer(spongeLayer); - - //BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - BCProcessorPtr bcProc(new D3Q27ETForThinWallBCProcessor()); - kernel->setBCProcessor(bcProc); - SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem); - grid->accept(kernelVisitor); - ////////////////////////////////// - //undef nodes - if (refineLevel > 0) - { - D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - - intHelper.setBC(); - - } - ////////////////////////////////////////////////////////////////////////// - //porous inlay - { - string pmFilename = pathGeo + "/CT-2014-039.raw"; - int pmNX1 = 1333; //abmessung einzelbild in x-richtung - int pmNX2 = 463; //abmessung einzelbild in y richtung - int pmNX3 = 1333; //anzahl der bilder - float lthreshold = 27686.97; - float uthreshold = 65535.0; - - GbVoxelMatrix3DPtr pmMesh(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold)); - pmMesh->readMatrixFromRawFile<unsigned short>(pmFilename, GbVoxelMatrix3D::LittleEndian); - - double scaleFactor = 0.001; - double delta = 3.75*scaleFactor; - pmMesh->setVoxelMatrixDelta(delta, delta, delta); - pmMesh->rotate90aroundX(); - pmMesh->rotate90aroundX(); - pmMesh->rotate90aroundX(); - - double inlayXmin = plate->getX1Maximum() - 5.0;//995.0; - double inlayYmin = gridCube->getX2Minimum();//180.0; - double inlayZmin = 8.84 + fdx;//8.73; - - //pmMesh->setVoxelMatrixMininum(inlayXmin, inlayYmin, inlayZmin); - //if(myid == 0) pmMesh->writeToLegacyVTKBinary(pathname+"/geo/pmMesh"); - - int i = 0; - for (int y = 0; y <= 35; y += 10) - for (int x = 0; x <= 75; x += 10) - { - if (myid == 0) UBLOG(logINFO, "inlay # " << i); - pmMesh->setVoxelMatrixMininum(inlayXmin - (double)x, inlayYmin + (double)y, inlayZmin); - inlay(pmMesh, pathname, myid, i, grid); - i++; - - if (myid == 0) UBLOG(logINFO, "inlay # " << i); - pmMesh->setVoxelMatrixMininum(inlayXmin - (double)(x + 5), inlayYmin + (double)y, inlayZmin); - pmMesh->mirrorX(); - inlay(pmMesh, pathname, myid, i, grid); - i++; - - if (myid == 0) UBLOG(logINFO, "inlay # " << i); - pmMesh->setVoxelMatrixMininum(inlayXmin - (double)(x + 5), inlayYmin + (double)(y + 5), inlayZmin); - pmMesh->mirrorY(); - inlay(pmMesh, pathname, myid, i, grid); - i++; - - if (myid == 0) UBLOG(logINFO, "inlay # " << i); - pmMesh->setVoxelMatrixMininum(inlayXmin - (double)x, inlayYmin + (double)(y + 5), inlayZmin); - pmMesh->mirrorX(); - inlay(pmMesh, pathname, myid, i, grid); - pmMesh->mirrorY(); - i++; - } - - if (myid == 0) - { - UBLOG(logINFO, "mit VoxelMatrix"); - UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - } - } - ////////////////////////////////////////////////////////////////////////// - - - //initialization of decompositions - D3Q27ETInitDistributionsBlockVisitor initVisitor(nuLB, rhoLB); - initVisitor.setVx1(uLB); - grid->accept(initVisitor); - - //Postprozess - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), - unitConverter, true)); - ppgeo->update(0); - ppgeo.reset(); - geoSch.reset(); - - if (myid == 0) UBLOG(logINFO, "Preprozess - end"); - } - else - { - restart = true; - - //////////////////////////////////////////////////////////////////////////// - //change viscosity - Re = 1e6; - nuLB = ((uLB*(lReal/cdx))/Re)*1.043; - if (myid == 0) UBLOG(logINFO, "nuLB =" << nuLB); - - int gridRank = grid->getRank(); - int minInitLevel = grid->getCoarsestInitializedLevel(); - int maxInitLevel = grid->getFinestInitializedLevel(); - - std::vector<std::vector<Block3DPtr> > blockVector; - blockVector.resize(maxInitLevel + 1); - - for (int level = minInitLevel; level <= maxInitLevel; level++) - { - grid->getBlocks(level, gridRank, true, blockVector[level]); - - BOOST_FOREACH(Block3DPtr block, blockVector[level]) - { - LBMReal collFactor = LBMSystem::calcCollisionFactor(nuLB, block->getLevel()); - block->getKernel()->setCollisionFactor(collFactor); - } - } - //////////////////////////////////////////////////////////////////////////// - - //domain decomposition for threads - if (numOfThreads > 1) - { - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - } - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - grid->accept(setConnsVisitor); - SetSpongeLayerBlockVisitor ssp(spongeLayer); - grid->accept(ssp); - if (myid == 0) UBLOG(logINFO, "Restart - end"); - } - UbSchedulerPtr visSch(new UbScheduler()); - //visSch->addSchedule(1,0,10); - visSch->addSchedule(100, 100, 1000); - //visSch->addSchedule(1000,1000,5000); - //visSch->addSchedule(5000,5000,100000); - //visSch->addSchedule(100000,100000,10000000); - - visSch->addSchedule(1000, 1000, 10000000); - - D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), unitConverter); - - double startStep = 33000; - - UbSchedulerPtr resSchRMS(new UbScheduler()); - resSchRMS->addSchedule(1000000, startStep, 10000000); - UbSchedulerPtr resSchMeans(new UbScheduler()); - resSchMeans->addSchedule(1000000, startStep, 10000000); - UbSchedulerPtr stepAvSch(new UbScheduler()); - int averageInterval = 100; - - stepAvSch->addSchedule(averageInterval, 0, 10000000); - AverageValuesPostprocessor Avpp(grid, pathname, WbWriterVtkXmlBinary::getInstance(), visSch/*wann wird rausgeschrieben*/, - stepAvSch/*wann wird gemittelt*/, resSchMeans, resSchRMS/*wann wird resettet*/, restart); - - UbSchedulerPtr nupsSch(new UbScheduler(10, 10, 30)); - nupsSch->addSchedule(500, 500, 1e6); - NUPSCounterPostprocessor npr(grid, nupsSch, numOfThreads, comm); - - UbSchedulerPtr emSch(new UbScheduler(10)); - EmergencyExitPostprocessor empr(grid, emSch, pathname, RestartPostprocessorPtr(&rp), comm); - - if (myid == 0) - { - UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - } - - double endTime = 100000001; - 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[]) -{ - if (argc == 1) - { - cout << "Command line argument isn't specified!" << endl; - cout << "plate2 <machine name>" << endl; - return 1; - } - run(argv[1]); - - return 0; -} - diff --git a/apps/cpu/RisingBubble2D/CMakeLists.txt b/apps/cpu/RisingBubble2D/CMakeLists.txt deleted file mode 100644 index eb41f408e66218645e32a36daf910160d26954e1..0000000000000000000000000000000000000000 --- a/apps/cpu/RisingBubble2D/CMakeLists.txt +++ /dev/null @@ -1,3 +0,0 @@ -PROJECT(RisingBubble2D) - -vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES RisingBubble2D.cpp ) diff --git a/apps/cpu/RisingBubble2D/RisingBubble2D.cfg b/apps/cpu/RisingBubble2D/RisingBubble2D.cfg deleted file mode 100644 index d0635ea272199311a6e09a68e77ae7ca59a239f0..0000000000000000000000000000000000000000 --- a/apps/cpu/RisingBubble2D/RisingBubble2D.cfg +++ /dev/null @@ -1,47 +0,0 @@ -pathname = E:/Multiphase/RisingBubble2D_dr10_test - -numOfThreads = 4 -availMem = 10e9 - -#Grid - -#boundingBox = 0 160 0 320 0 3 -#blocknx = 16 16 3 -#blocknx = 80 80 3 - -boundingBox = 0 20 0 20 0 3 -blocknx = 20 20 3 - -dx = 1 -refineLevel = 0 - -#Simulation -uLB = 0 #0.001#0.005#0.005 -Re = 35 -#Eotvos number -Eo = 10; -nuL = 1e-3 -nuG = 1e-3 -densityRatio = 10 -sigma = 1.0850694444444444e-06 #1e-10 #1e-6 # 1e-5 #4.66e-3 #surface tension 1e-4 ./. 1e-5 -interfaceThickness = 4.096 -radius = 5 #40 -contactAngle = 110.0 -phi_L = 0.0 -phi_H = 1.0 -Phase-field Relaxation = 0.6 -Mobility = 0.056 # 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 = false -restartStep = 10 - -cpStart = 10 -cpStep = 10 - -outTime = 100000 -endTime = 13 - -rStep = 159990 #160000 \ No newline at end of file diff --git a/apps/cpu/RisingBubble2D/RisingBubble2D.cpp b/apps/cpu/RisingBubble2D/RisingBubble2D.cpp deleted file mode 100644 index e40a0804ffa18217e1c065d60893346127767391..0000000000000000000000000000000000000000 --- a/apps/cpu/RisingBubble2D/RisingBubble2D.cpp +++ /dev/null @@ -1,455 +0,0 @@ -#include <iostream> -#include <memory> -#include <string> - -#if defined(__unix__) -#include <stdio.h> -#include <stdlib.h> -#endif - -#include "VirtualFluids.h" -#include "MultiphaseFlow/MultiphaseFlow.h" -#include "NonNewtonianFluids/NonNewtonianFluids.h" - -using namespace std; - -void run(string configname) -{ - using namespace vf::lbm::dir; - - try { - vf::basics::ConfigurationFile config; - config.load(configname); - - string pathname = config.getValue<string>("pathname"); - int numOfThreads = config.getValue<int>("numOfThreads"); - vector<int> blocknx = config.getVector<int>("blocknx"); - vector<real> boundingBox = config.getVector<real>("boundingBox"); - real uLB = config.getValue<real>("uLB"); - real nuL = config.getValue<real>("nuL"); - real nuG = config.getValue<real>("nuG"); - real densityRatio = config.getValue<real>("densityRatio"); - // double sigma = config.getValue<double>("sigma"); - int interfaceThickness = config.getValue<int>("interfaceThickness"); - real radius = config.getValue<real>("radius"); - real theta = config.getValue<real>("contactAngle"); - real phiL = config.getValue<real>("phi_L"); - real phiH = config.getValue<real>("phi_H"); - real tauH = config.getValue<real>("Phase-field Relaxation"); - real mob = config.getValue<real>("Mobility"); - - real endTime = config.getValue<real>("endTime"); - real outTime = config.getValue<real>("outTime"); - real availMem = config.getValue<real>("availMem"); - int refineLevel = config.getValue<int>("refineLevel"); - real Re = config.getValue<real>("Re"); - real Eo = config.getValue<real>("Eo"); - real dx = config.getValue<real>("dx"); - bool logToFile = config.getValue<bool>("logToFile"); - real restartStep = config.getValue<real>("restartStep"); - real cpStart = config.getValue<real>("cpStart"); - real cpStep = config.getValue<real>("cpStep"); - bool newStart = config.getValue<bool>("newStart"); - // double rStep = config.getValue<double>("rStep"); - - std::shared_ptr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - if (myid == 0) UBLOG(logINFO, "2D Rising Bubble: 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) { - UbSystem::makeDirectory(pathname); - stringstream logFilename; - logFilename << pathname + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - } - - std::string fileName = "./LastTimeStep" + std::to_string((int)boundingBox[1]) + ".txt"; - - // #if defined(__unix__) - // double lastTimeStep = 0; - // if (!newStart) - // { - // std::ifstream ifstr(fileName); - // ifstr >> lastTimeStep; - // restartStep = lastTimeStep; - // if(endTime >= lastTimeStep) - // endTime = lastTimeStep + rStep; - // else - // return; - // } - // #endif - - // Sleep(20000); - - // LBMReal dLB = 0; // = length[1] / dx; - real rhoLB = 0.0; - real nuLB = nuL; //(uLB*dLB) / Re; - - // diameter of circular droplet - real D = 2.0 * radius; - - // density retio - // LBMReal r_rho = densityRatio; - - // density of heavy fluid - real rho_h = 1.0; - // density of light fluid - // LBMReal rho_l = rho_h / r_rho; - - // kinimatic viscosity - real nu_h = nuL; - // LBMReal nu_l = nuG; - // #dynamic viscosity - // LBMReal mu_h = rho_h * nu_h; - - // gravity - real g_y = Re * Re * nu_h * nu_h / (D * D * D); - // Eotvos number - // LBMReal Eo = 100; - // surface tension - real sigma = rho_h * g_y * D * D / Eo; - - // g_y = 0; - - real beta = 12.0 * sigma / interfaceThickness; - real kappa = 1.5 * interfaceThickness * sigma; - - if (myid == 0) { - // UBLOG(logINFO, "uLb = " << uLB); - // UBLOG(logINFO, "rho = " << rhoLB); - UBLOG(logINFO, "D = " << D); - UBLOG(logINFO, "nuL = " << nuL); - UBLOG(logINFO, "nuG = " << nuG); - UBLOG(logINFO, "Re = " << Re); - UBLOG(logINFO, "Eo = " << Eo); - UBLOG(logINFO, "g_y = " << g_y); - UBLOG(logINFO, "sigma = " << sigma); - UBLOG(logINFO, "dx = " << dx); - UBLOG(logINFO, "Preprocess - start"); - } - - SPtr<LBMUnitConverter> conv(new LBMUnitConverter()); - - // const int baseLevel = 0; - - SPtr<LBMKernel> kernel; - - // kernel = SPtr<LBMKernel>(new MultiphaseScratchCumulantLBMKernel()); - // kernel = SPtr<LBMKernel>(new MultiphaseCumulantLBMKernel()); - // kernel = SPtr<LBMKernel>(new MultiphaseTwoPhaseFieldsPressureFilterLBMKernel()); - //kernel = SPtr<LBMKernel>(new MultiphasePressureFilterLBMKernel()); - kernel = make_shared<MultiphaseScaleDistributionLBMKernel>(); - //kernel = make_shared<MultiphaseSharpInterfaceLBMKernel>(); - mu::Parser fgr; - fgr.SetExpr("-rho*g_y"); - fgr.DefineConst("g_y", g_y); - - kernel->setWithForcing(true); - kernel->setForcingX1(0.0); - kernel->setForcingX2(fgr); - kernel->setForcingX3(0.0); - - kernel->setPhiL(phiL); - kernel->setPhiH(phiH); - kernel->setPhaseFieldRelaxation(tauH); - kernel->setMobility(mob); - kernel->setInterfaceWidth(interfaceThickness); - - kernel->setCollisionFactorMultiphase(nuL, nuG); - kernel->setDensityRatio(densityRatio); - kernel->setMultiphaseModelParameters(beta, kappa); - kernel->setContactAngle(theta); - //dynamicPointerCast<MultiphasePressureFilterLBMKernel>(kernel)->setPhaseFieldBC(1.0); - kernel->setSigma(sigma); - SPtr<BCSet> bcProc(new BCSet()); - - kernel->setBCSet(bcProc); - - SPtr<BC> noSlipBC(new NoSlipBC()); - noSlipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNoSlipBCStrategy())); - //SPtr<BC> slipBC(new SlipBC()); - //slipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseSlipBCStrategy())); - ////////////////////////////////////////////////////////////////////////////////// - // BC visitor - MultiphaseBoundaryConditionsBlockVisitor bcVisitor; - - SPtr<Grid3D> grid(new Grid3D(comm)); - grid->setDeltaX(dx); - grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - grid->setPeriodicX1(true); - grid->setPeriodicX2(false); - grid->setPeriodicX3(true); - grid->setGhostLayerWidth(2); - - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE)); - - ////////////////////////////////////////////////////////////////////////// - // restart - SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart)); - SPtr<MPIIORestartSimulationObserver> rcp(new MPIIORestartSimulationObserver(grid, rSch, pathname, comm)); - // SPtr<MPIIOMigrationSimulationObserver> rcp(new MPIIOMigrationSimulationObserver(grid, rSch, metisVisitor, pathname, comm)); - // SPtr<MPIIOMigrationBESimulationObserver> rcp(new MPIIOMigrationBESimulationObserver(grid, rSch, pathname, comm)); - // rcp->setNu(nuLB); - // rcp->setNuLG(nuL, nuG); - // rcp->setDensityRatio(densityRatio); - - rcp->setLBMKernel(kernel); - rcp->setBCSet(bcProc); - ////////////////////////////////////////////////////////////////////////// - - if (newStart) { - - // bounding box - real g_minX1 = boundingBox[0]; - real g_minX2 = boundingBox[2]; - real g_minX3 = boundingBox[4]; - - real g_maxX1 = boundingBox[1]; - real g_maxX2 = boundingBox[3]; - real g_maxX3 = boundingBox[5]; - - // geometry - 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()); - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - real dx2 = 2.0 * dx; - GbCuboid3DPtr wallXmin(new GbCuboid3D(g_minX1 - dx2, g_minX2 - dx2, g_minX3 - dx2, g_minX1, g_maxX2 + dx2, g_maxX3 + dx2)); - GbSystem3D::writeGeoObject(wallXmin.get(), pathname + "/geo/wallXmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallXmax(new GbCuboid3D(g_maxX1, g_minX2 - dx2, g_minX3 - dx2, g_maxX1 + dx2, g_maxX2 + dx2, g_maxX3 + dx2)); - GbSystem3D::writeGeoObject(wallXmax.get(), pathname + "/geo/wallXmax", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr wallYmin(new GbCuboid3D(g_minX1 - dx2, g_minX2 - dx2, g_minX3 - dx2, g_maxX1 + dx2, g_minX2, g_maxX3 + dx2)); - GbSystem3D::writeGeoObject(wallYmin.get(), pathname + "/geo/wallYmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr wallYmax(new GbCuboid3D(g_minX1 - dx2, g_maxX2, g_minX3 - dx2, g_maxX1 + dx2, g_maxX2 + dx2, g_maxX3 + dx2)); - GbSystem3D::writeGeoObject(wallYmax.get(), pathname + "/geo/wallYmax", WbWriterVtkXmlASCII::getInstance()); - - SPtr<D3Q27Interactor> wallXminInt(new D3Q27Interactor(wallXmin, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallXmaxInt(new D3Q27Interactor(wallXmax, grid, noSlipBC, Interactor3D::SOLID)); - - SPtr<D3Q27Interactor> wallYminInt(new D3Q27Interactor(wallYmin, grid, noSlipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallYmaxInt(new D3Q27Interactor(wallYmax, grid, noSlipBC, Interactor3D::SOLID)); - - SPtr<WriteBlocksSimulationObserver> ppblocks(new WriteBlocksSimulationObserver(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - - InteractorsHelper intHelper(grid, metisVisitor, true); - //intHelper.addInteractor(wallXminInt); - //intHelper.addInteractor(wallXmaxInt); - intHelper.addInteractor(wallYminInt); - intHelper.addInteractor(wallYmaxInt); - intHelper.selectBlocks(); - - ppblocks->update(0); - ppblocks.reset(); - - unsigned long long numberOfBlocks = (unsigned long long)grid->getNumberOfBlocks(); - int ghostLayer = 5; - 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); - real needMemAll = real(numberOfNodesPerBlockWithGhostLayer * (27 * sizeof(real) + sizeof(int) + sizeof(float) * 4)); - real needMem = needMemAll / real(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"); - } - - MultiphaseSetKernelBlockVisitor kernelVisitor(kernel, nuL, nuG, availMem, needMem); - - grid->accept(kernelVisitor); - - if (refineLevel > 0) { - SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - intHelper.setBC(); - - // initialization of distributions - real x1c = D; - real x2c = D; - real x3c = 1.5; - // LBMReal x3c = 2.5 * D; - mu::Parser fct1; - fct1.SetExpr("0.5+0.5*tanh(2*(sqrt((x1-x1c)^2+(x2-x2c)^2+0*(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+0*(x3-x3c)^2)-radius)/interfaceThickness)"); - // fct2.SetExpr("uLB"); - fct2.DefineConst("uLB", uLB); - fct2.DefineConst("x1c", x1c); - fct2.DefineConst("x2c", x2c); - fct2.DefineConst("x3c", x3c); - fct2.DefineConst("radius", radius); - fct2.DefineConst("interfaceThickness", interfaceThickness); - - // MultiphaseInitDistributionsBlockVisitor initVisitor(densityRatio); - MultiphaseVelocityFormInitDistributionsBlockVisitor initVisitor; - initVisitor.setPhi(fct1); - //initVisitor.setVx1(fct2); - grid->accept(initVisitor); - - // boundary conditions grid - { - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - SPtr<WriteBoundaryConditionsSimulationObserver> ppgeo(new WriteBoundaryConditionsSimulationObserver(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - ppgeo->update(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); - - if (myid == 0) UBLOG(logINFO, "Restart - end"); - } - - grid->accept(bcVisitor); - - // TwoDistributionsSetConnectorsBlockVisitor setConnsVisitor(comm); - // grid->accept(setConnsVisitor); - - // ThreeDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm); - // grid->accept(setConnsVisitor); - - TwoDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm); - grid->accept(setConnsVisitor); - - SPtr<UbScheduler> visSch(new UbScheduler(outTime)); - // visSch->addSchedule(307200,307200,307200); //t=2 - // visSch->addSchedule(1228185,1228185,1228185); - - //Tlb = (np.sqrt(2 * dLB / gLB)) / (np.sqrt(2 * dLT / gLT)) - double gLT = 0.98; - double dLT = 0.5; - double Tlb = (sqrt(2 * D / g_y)) / (sqrt(2. * dLT / gLT)); - UBLOG(logINFO, "Tlb = " << Tlb); - double t = Tlb * 3.; - visSch->addSchedule(t, t, t); // t=2 - UBLOG(logINFO, "T3 = " << t); - - - // double t_ast, t; - // t_ast = 2; - // t = (int)(t_ast / std::sqrt(g_y / D)); - // visSch->addSchedule(t, t, t); // t=2 - // t_ast = 3; - // t = (int)(t_ast / std::sqrt(g_y / D)); - // visSch->addSchedule(t, t, t); // t=3 - // t_ast = 4; - // t = (int)(t_ast/std::sqrt(g_y/D)); - // visSch->addSchedule(t,t,t); //t=4 - // t_ast = 5; - // t = (int)(t_ast/std::sqrt(g_y/D)); - // visSch->addSchedule(t,t,t); //t=5 - // t_ast = 6; - // t = (int)(t_ast/std::sqrt(g_y/D)); - // visSch->addSchedule(t,t,t); //t=6 - // t_ast = 7; - // t = (int)(t_ast/std::sqrt(g_y/D)); - // visSch->addSchedule(t,t,t); //t=7 - // t_ast = 9; - // t = (int)(t_ast/std::sqrt(g_y/D)); - // visSch->addSchedule(t,t,t); //t=9 - - //SPtr<WriteMultiphaseQuantitiesSimulationObserver> pp(new WriteMultiphaseQuantitiesSimulationObserver(grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - - SPtr<WriteSharpInterfaceQuantitiesSimulationObserver> pp(new WriteSharpInterfaceQuantitiesSimulationObserver(grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - if (grid->getTimeStep() == 0) pp->update(0); - - SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100)); - SPtr<NUPSCounterSimulationObserver> npr(new NUPSCounterSimulationObserver(grid, nupsSch, numOfThreads, comm)); - - omp_set_num_threads(numOfThreads); - - endTime = t + 1000; - UBLOG(logINFO, "endTime = " << endTime); - - SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1)); - SPtr<Simulation> simulation(new Simulation(grid, stepGhostLayer, endTime)); - simulation->addSimulationObserver(npr); - simulation->addSimulationObserver(pp); - //simulation->addSimulationObserver(rcp); - - if (myid == 0) UBLOG(logINFO, "Simulation-start"); - simulation->run(); - if (myid == 0) UBLOG(logINFO, "Simulation-end"); - - // #if defined(__unix__) - // //if (!newStart) - // //{ - // if (myid == 0) - // { - // std::ofstream ostr(fileName); - // ostr << endTime; - // cout << "start sbatch\n"; - // //system("./start.sh"); - // //system("echo test!"); - // std::string str = "sbatch startJob" + std::to_string((int)boundingBox[1]) + ".sh"; - // //system("sbatch startJob512.sh"); - // system(str.c_str()); - // } - // //MPI_Barrier((MPI_Comm)comm->getNativeCommunicator()); - // //} - // #endif - - } 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/ShotcreteJet/CMakeLists.txt b/apps/cpu/ShotcreteJet/CMakeLists.txt deleted file mode 100644 index cd2efcfc9e15fa4f1744ba92bafd4dbfd2520847..0000000000000000000000000000000000000000 --- a/apps/cpu/ShotcreteJet/CMakeLists.txt +++ /dev/null @@ -1,3 +0,0 @@ -PROJECT(ShotcreteJet) - -vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES jet.cpp ) diff --git a/apps/cpu/ShotcreteJet/ShotcreteJet.cfg b/apps/cpu/ShotcreteJet/ShotcreteJet.cfg deleted file mode 100644 index 2d4507811d568974f9a338d5c3fa32c33b7989b4..0000000000000000000000000000000000000000 --- a/apps/cpu/ShotcreteJet/ShotcreteJet.cfg +++ /dev/null @@ -1,10 +0,0 @@ - outputPath = /scratch/projects/nii00154/ShotcreteJet2 - geoPath = /home/niikonst/NozzleGeo - logToFile = false - vtkSteps = 1000 - newStart = false - cpStep = 450000 - cpStart = 450000 - restartStep = 300000 - endTime = 450000 - diff --git a/apps/cpu/ShotcreteJet/jet.cpp b/apps/cpu/ShotcreteJet/jet.cpp deleted file mode 100644 index 23aaee5c8951603f5a5a5e8bc490509de01c894b..0000000000000000000000000000000000000000 --- a/apps/cpu/ShotcreteJet/jet.cpp +++ /dev/null @@ -1,1075 +0,0 @@ -#include <iostream> -#include <memory> -#include <string> - -#include "VirtualFluids.h" - -//#include "LiggghtsCoupling/LiggghtsCoupling.h" - -#include "MultiphaseFlow/MultiphaseFlow.h" - -#include "NonNewtonianFluids/NonNewtonianFluids.h" - -using namespace std; - -int main(int argc, char *argv[]) -{ - //Sleep(30000); - string configname; - if (argv != NULL) { - if (argv[1] != NULL) { - configname = string(argv[1]); - } else { - cout << "Configuration file is missing!" << endl; - return 0; - } - } - - - try { - - vf::basics::ConfigurationFile config; - config.load(configname); - - string outputPath = config.getValue<string>("outputPath"); - string geoPath = config.getValue<string>("geoPath"); - bool logToFile = config.getValue<bool>("logToFile"); - int vtkSteps = config.getValue<int>("vtkSteps"); - bool newStart = config.getValue<bool>("newStart"); - double cpStep = config.getValue<double>("cpStep"); - double cpStart = config.getValue<double>("cpStart"); - double restartStep = config.getValue<int>("restartStep"); - int endTime = config.getValue<int>("endTime"); - int numOfThreads = config.getValue<int>("numOfThreads"); - - std::shared_ptr<vf::parallel::Communicator> comm = vf::parallel::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 = outputPath.c_str(); - mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); - } -#endif - - if (myid == 0) { - stringstream logFilename; - logFilename << outputPath + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - } - - //bool newStart = false; - // bounding box - // double g_minX1 = -1341.81e-3; - // double g_minX2 = 348.087e-3; - // double g_minX3 = -210e-3; - - // double g_maxX1 = -1260.81e-3; - // double g_maxX2 = 429.087e-3; - // double g_maxX3 = 214.5e-3; - - // double g_minX1 = -1341.81e-3 + 10e-3; - // double g_minX2 = 0.360872; - // double g_minX3 = -210e-3; - - // double g_maxX1 = -1260.81e-3 - 10e-3; - // double g_maxX2 = 0.416302; - // double g_maxX3 = 210e-3; - - // int blockNX[3] = { 10, 10, 10 }; - - //int gridNZ = 3; - - //double g_minX1 = -1.31431; - //double g_minX2 = 0.375582; - //double g_minX3 = -0.21 + 0.035 * 8.0; //-0.21; //-210e-3 - 0.2 - 6e-3; //- 1e-3; - - //double g_maxX1 = -1.28831; - //double g_maxX2 = 0.401582; - //double g_maxX3 = 0.175;//0.21; - - double dx = 1; - - double g_maxX3_box = -0.065e3; - - double g_minX1 = -1.49631e3; - double g_minX2 = 0.193582e3; - double g_minX3 = g_maxX3_box - 0.39e3;//-0.095; //-0.215; - - double g_maxX1 = -1.10631e3; - double g_maxX2 = 0.583582e3; - double g_maxX3 = 0.175e3; - - - - //int blockNX[3] = { 26, 26, 35 }; - int blockNX[3] = { 15, 15, 15 }; - - - double uLB_ref = 0.0001; - // double rhoLB = 0.0; - - // concrete - double d_part = 1e-3; - double V = 0.4*7.0; // flow rate [m^3/h] - double D = 0.026; // shotcrete inlet diameter [m] - double R = D / 2.0; // radius [m] - double A = UbMath::PI * R * R; - double u = V / 3600 / A; - double muConcrete = 2.1133054011798826; // [Pa s] - double rhoAir = 1.2041; // [kg/m^3] - double tau0 = 715.218181094648; // Pa - double rhoConcrete = 2400; // [kg/m^3] - double nu = muConcrete / rhoConcrete; - - // double Re_D = d_part * u / nu; - // if (myid == 0) UBLOG(logINFO, "Re_D = " << Re_D); - // - SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 2400, d_part / dx, uLB_ref); - if (myid == 0) std::cout << units->toString() << std::endl; - - double interfaceThickness = 3; // 4.096; - double sigma = 0.3; //0.03; - double Re = rhoConcrete * u * d_part / muConcrete; - double We = rhoConcrete * u * u * d_part / sigma; - - double u_LB_con = u * units->getFactorVelocityWToLb(); - double nu_h_LB = nu * units->getFactorViscosityWToLb(); // uLB_ref * d_part * units->getFactorLentghWToLb() / Re; - double nu_l_LB = 0; // = nu_h_LB; - - double rho_h_LB = 1; - - // surface tension - double sigma_LB = rho_h_LB *u_LB_con *u_LB_con *d_part * units->getFactorLentghWToLb() / We; - - // LBMReal dLB = 0; // = length[1] / dx; - LBMReal rhoLB = 0.0; - // LBMReal nuLB = nu_l; //(uLB_ref*dLB) / Re; - - double beta = 12.0 * sigma_LB / interfaceThickness; - double kappa = 1.5 * interfaceThickness * sigma_LB; - - double phiL = 0.0; - double phiH = 1.0; - double tauH = 0.6; // Phase - field Relaxation - double mob = 0.02; // Mobility - // double nuL = 1e-2; - // double nuG = 0.015811388300841892; - double densityRatio = rhoConcrete / rhoAir; - // double sigma_old = 1.0850694444444444e-06; - // - // double beta_old = 12.0 * sigma / interfaceThickness; - // double kappa_old = 1.5 * interfaceThickness * sigma; - - double theta = 110; // contact angle - - // https://civilsir.com/density-of-cement-sand-and-aggregate-in-kg-m3-list-of-material-density/ - - // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, 1.480, 2060, r_p/dx); - // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(r_p, LBMUnitConverter::AIR_20C, r_p / dx); - // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 1000, d_part / dx, std::abs(uLB_ref)); - // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 1000, d_part / dx, std::abs(uLB_ref)); - // SPtr<LBMUnitConverter> units = std::make_shared<LBMUnitConverter>(d_part, 1., 2400, d_part / dx, uRef); - - double Bm = (tau0 * d_part) / (muConcrete * u); - double tau0_LB = Bm * nu_h_LB * u_LB_con / (d_part * units->getFactorLentghWToLb()); - - SPtr<Rheology> thix = Rheology::getInstance(); - thix->setYieldStress(tau0_LB); - - if (myid == 0) VF_LOG_INFO("Yield stress = {} Pa", tau0); - if (myid == 0) VF_LOG_INFO("Yield stress LB = {} ", tau0_LB); - - //SPtr<BC> noSlipBC(new NoSlipBC()); - //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new NoSlipInterpolated())); - SPtr<BC> noSlipBC(new NoSlipBC()); - noSlipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNoSlipBCStrategy())); - - SPtr<BC> unwettingNoSlipBC(new NoSlipBC(1)); - noSlipBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNoSlipBCStrategy())); - - // concrete inflow boundary condition - mu::Parser fct; - fct.SetExpr("U"); - fct.DefineConst("U", -u_LB_con); - if (myid == 0) VF_LOG_INFO("Concrete inflow velocity = {} m/s", u); - if (myid == 0) VF_LOG_INFO("Concrete inflow velocity = {} dx/dt", u_LB_con); - if (myid == 0) VF_LOG_INFO("Concrete Re = {}", Re); - - // // Å tigler, J. (2014). Analytical velocity profile in tube for laminar and turbulent flow. Engineering - // // Mechanics, 21(6), 371-379. - // double cx1 = -1.31431 + R; - // double cx2 = 0.375582 + R; - // //double cx3 = 0.20105 + R; - // double L = g_maxX1 - g_minX1; - // double p_concrete = 1e5; // Pa = 1 Bar - // double p1 = p_concrete * units->getFactorPressureWToLb(); - // double p2 = 0.0; - // double drhoLB = 1.0 + rhoLB; - // double muLB = drhoLB * nuLB; - // double N = R * R / 2 * muLB * uLB_ref * (p1 - p2) / L - 3; - - // // mu::Parser fct; - // fct.SetExpr("U*(1-(((((x2-y0)^2+(x1-x0)^2)^0.5)/R)^NplusOne))"); - // fct.DefineConst("x0", cx1); - // fct.DefineConst("y0", cx2); - // //fct.DefineConst("z0", cx3); - // fct.DefineConst("R", R); - // fct.DefineConst("U", uLB_ref * ((N + 3) / (N + 1))); - // fct.DefineConst("NplusOne", N + 1.0); - - //SPtr<BC> inflowConcreteBC(new VelocityBC(false, false, true, fct, 0, BCFunction::INFCONST)); - //inflowConcreteBC->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated())); - SPtr<BC> inflowConcreteBC(new MultiphaseVelocityBC(false, false, true, fct, phiH, 0, BCFunction::INFCONST)); - inflowConcreteBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - // air inflow boundary condition - // Å tigler, J. (2014). Analytical velocity profile in tube for laminar and turbulent flow. Engineering - // Mechanics, 21(6), 371-379. - // SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, LBMUnitConverter::AIR_20C, d_part / dx); - // SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, 1., 1.2041, d_part / dx, uLB_ref); - // double V = 40; // flow rate [m^3/h] - // double D = 0.0166; // air inlet diameter [m] - // double R = D / 2.0; // radius [m] - // double A = UbMath::PI * R * R; - // double u = V / 3600 / A; - // double uLB_ref = u * unitsAir->getFactorVelocityWToLb(); - //// double cx1 = -1.2788 + R; - // double cx2 = 0.3803 + R; - // double cx3 = 0.1517 + R; - // double L = g_maxX1 - g_minX1; - // double p_air = 7e5; // Pa = 7 Bar - // double p1 = p_air; - // double p2 = 0.0; - // double mu = 17.2e-6; // Pa s, air 20° C - // double N = R * R / 2 * mu * u * (p1 - p2) / L - 3; - // if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} m/s", u); - // if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} dx/dt", uLB_ref); - // - - // double nu = mu / rhoConcrete; - // double Re = d_part * u / nu; - // if (myid == 0) VF_LOG_INFO("Re_air = {}", Re); - - // double nuLB = d_part * unitsAir->getFactorLentghWToLb() * uLB_ref / Re; - // if (myid == 0) VF_LOG_INFO("nuLB_air = {}", nuLB); - // nu_l_LB = nuLB; - - SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, 1., 1.2041, d_part / dx, uLB_ref); - //SPtr<LBMUnitConverter> unitsAir = std::make_shared<LBMUnitConverter>(d_part, LBMUnitConverter::AIR_20C, d_part / dx); - double V_air = 40./6.; // flow rate [m^3/h] //10. - double D_air = 0.00553; // air inlet diameter [m] - double R_air = D_air / 2.0; // radius [m] - double A_air = UbMath::PI * (R_air * R_air); - double u_air = V_air / 3600 / A_air; - double uLB_air = u_air * unitsAir->getFactorVelocityWToLb(); - // double cx1 = -1.2788 + R; - double cx2 = 0.385822 + R_air; - double cx3 = 0.135562 + R_air; - //double L_air = 0.00747; - double p_air = 7e5; // Pa = 7 Bar - //double p1 = p_air; - //double p2 = 1e5; - double mu_air = 17.2e-6; // Pa s, air 20° C - double rho_air = 1.2041; // [kg/m^3] - double Re_inlet = D_air * u_air * rho_air / mu_air; - double lambda = 0.3164 / pow(Re_inlet, 0.25); - double deltaP = (lambda / (2. * R_air)) * (rho_air * pow(u_air, 2) / 2.); // Darcy friction factor (Rohrreibungszahl) - double N = pow(R_air, 2) / (2. * mu_air * u_air) * deltaP - 3.; - // double N = R_air * R_air / 2 * mu_air * u_air * (p1 - p2) / L_air - 3; - if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} m/s", u_air); - if (myid == 0) VF_LOG_INFO("Air inflow velocity = {} dx/dt", uLB_air); - - double nu_air = mu_air / rho_air; - double Re_air = d_part * u_air / nu_air; - if (myid == 0) VF_LOG_INFO("Air Re = {}", Re_air); - - double nuLB_air = nu_air * unitsAir->getFactorViscosityWToLb(); // d_part * unitsAir->getFactorLentghWToLb() * uLB_air / Re_air; - if (myid == 0) VF_LOG_INFO("nuLB_air = {}", nuLB_air); - nu_l_LB = nuLB_air; - - if (myid == 0) VF_LOG_INFO("nu_h = {}", nu_h_LB); - if (myid == 0) VF_LOG_INFO("nu_l = {}", nu_l_LB); - if (myid == 0) VF_LOG_INFO("sigma_LB = {}", sigma_LB); - - double p_air_LB = p_air * unitsAir->getFactorPressureWToLb(); - if (myid == 0) VF_LOG_INFO("p_air_LB = {}", p_air_LB); - - // mu::Parser fctVx1; - ////fctVx1.SetExpr("U"); - ////fctVx1.DefineConst("U", uLB_air); - // mu::Parser fctVx2; - // fctVx2.SetExpr("U"); - // fctVx2.DefineConst("U", 0); - // mu::Parser fctVx3; - ////fctVx3.SetExpr("U"); - ////fctVx3.DefineConst("U", -uLB_air); - - double cx1 = 0; - double alpha = 0; - double gamma = 0; - double U = uLB_air;// * ((N + 3.) / (N + 1.)); - - mu::Parser fctVx1; - //fctVx1.SetExpr("U*cos(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)^NplusOne))"); - //fctVx1.SetExpr("U*cos(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)))"); - // fctVx1.SetExpr("(((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5/R)^NplusOne"); - fctVx1.SetExpr("U*cos(alpha*_pi/180)"); - fctVx1.DefineConst("x0", cx1); - fctVx1.DefineConst("y0", cx2); - fctVx1.DefineConst("z0", cx3); - fctVx1.DefineConst("R", R_air); - fctVx1.DefineConst("U", U); //* ((N + 3.) / (N + 1.))); - fctVx1.DefineConst("NplusOne", N + 1.0); - fctVx1.DefineConst("alpha", alpha); - fctVx1.DefineConst("gamma", gamma); - - mu::Parser fctVx2; - //fctVx2.SetExpr("U*sin(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)^NplusOne))"); - //fctVx2.SetExpr("U*sin(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)))"); - fctVx2.SetExpr("U*sin(alpha*_pi/180)"); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("y0", cx2); - fctVx2.DefineConst("z0", cx3); - fctVx2.DefineConst("R", R_air); - fctVx2.DefineConst("U", U); //* ((N + 3.) / (N + 1.))); - fctVx2.DefineConst("NplusOne", N + 1.0); - fctVx2.DefineConst("alpha", alpha); - - mu::Parser fctVx3; - //fctVx3.SetExpr("U*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)^NplusOne))"); - //fctVx3.SetExpr("U*cos(alpha*_pi/180)*(1-(((((x1-x0)^2+(x2-y0)^2+(x3-z0)^2)^0.5)/R)))"); - fctVx3.SetExpr("U"); - fctVx3.DefineConst("x0", cx1); - fctVx3.DefineConst("y0", cx2); - fctVx3.DefineConst("z0", cx3); - fctVx3.DefineConst("R", R_air); - fctVx3.DefineConst("U", -U); //* ((N + 3.) / (N + 1.))); - fctVx3.DefineConst("NplusOne", N + 1.0); - fctVx3.DefineConst("alpha", alpha); - fctVx3.DefineConst("gamma", gamma); - - // SPtr<BC> inflowAirBC1(new VelocityBC(true, false, false, fct, 0, BCFunction::INFCONST)); - // inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated())); - // t = U * sin(alpha * _pi / 180) * (1 - (((((x1 - x0) ^ 2 + (x2 - y0) ^ 2 + (x3 - z0) ^ 2) ^ 0.5) / R) ^ NplusOne)); - cx1 = -1.31416e3; - cx2 = 0.388684e3; - cx3 = 0.138177e3; - alpha = 0; - gamma = 225; - fctVx1.DefineConst("x0", cx1); - fctVx1.DefineConst("y0", cx2); - fctVx1.DefineConst("z0", cx3); - fctVx1.DefineConst("alpha", alpha); - fctVx1.DefineConst("gamma", gamma); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("y0", cx2); - fctVx2.DefineConst("z0", cx3); - fctVx2.DefineConst("alpha", alpha); - fctVx2.DefineConst("gamma", gamma); - fctVx3.DefineConst("x0", cx1); - fctVx3.DefineConst("y0", cx2); - fctVx3.DefineConst("z0", cx3); - fctVx3.DefineConst("alpha", alpha); - fctVx3.DefineConst("gamma", gamma); - - //SPtr<BC> inflowAirBC1(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST)); - //inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated())); - SPtr<BC> inflowAirBC1(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST)); - inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - fctVx1.DefineVar("x1", &cx1); - fctVx1.DefineVar("x2", &cx2); - fctVx1.DefineVar("x3", &cx3); - fctVx2.DefineVar("x1", &cx1); - fctVx2.DefineVar("x2", &cx2); - fctVx2.DefineVar("x3", &cx3); - fctVx3.DefineVar("x1", &cx1); - fctVx3.DefineVar("x2", &cx2); - fctVx3.DefineVar("x3", &cx3); - - if (myid == 0) { - - VF_LOG_INFO("fctVx1 = {}", fctVx1.Eval()); - VF_LOG_INFO("fctVx2 = {}", fctVx2.Eval()); - VF_LOG_INFO("fctVx3 = {}", fctVx3.Eval()); - VF_LOG_INFO("N = {}", N); - VF_LOG_INFO("NplusOne = {}", N + 1.0); - // return 0; - } - cx1 = -1.31303e3; - cx2 = 0.377234e3; - cx3 = 0.138174e3; - alpha = 60; - fctVx1.DefineConst("x0", cx1); - fctVx1.DefineConst("y0", cx2); - fctVx1.DefineConst("z0", cx3); - fctVx1.DefineConst("alpha", alpha); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("y0", cx2); - fctVx2.DefineConst("z0", cx3); - fctVx2.DefineConst("alpha", alpha); - fctVx3.DefineConst("x0", cx1); - fctVx3.DefineConst("y0", cx2); - fctVx3.DefineConst("z0", cx3); - //SPtr<BC> inflowAirBC2(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST)); - //inflowAirBC2->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated())); - SPtr<BC> inflowAirBC2(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST)); - inflowAirBC2->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - cx1 = -1.2948374155694822e3; - cx2 = 0.37733728717266285e3; - cx3 = 0.13840460401111598e3; - alpha = 120; - fctVx1.DefineConst("x0", cx1); - fctVx1.DefineConst("y0", cx2); - fctVx1.DefineConst("z0", cx3); - fctVx1.DefineConst("alpha", alpha); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("y0", cx2); - fctVx2.DefineConst("z0", cx3); - fctVx2.DefineConst("alpha", alpha); - fctVx3.DefineConst("x0", cx1); - fctVx3.DefineConst("y0", cx2); - fctVx3.DefineConst("z0", cx3); - //SPtr<BC> inflowAirBC3(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST)); - //inflowAirBC3->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated())); - SPtr<BC> inflowAirBC3(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST)); - inflowAirBC3->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - cx1 = -1.28847e3; - cx2 = 0.3885e3; - cx3 = 0.1385e3; - alpha = 180; - fctVx1.DefineConst("x0", cx1); - fctVx1.DefineConst("y0", cx2); - fctVx1.DefineConst("z0", cx3); - fctVx1.DefineConst("alpha", alpha); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("y0", cx2); - fctVx2.DefineConst("z0", cx3); - fctVx2.DefineConst("alpha", alpha); - fctVx3.DefineConst("x0", cx1); - fctVx3.DefineConst("y0", cx2); - fctVx3.DefineConst("z0", cx3); - //SPtr<BC> inflowAirBC4(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST)); - //inflowAirBC4->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated())); - SPtr<BC> inflowAirBC4(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST)); - inflowAirBC4->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - cx1 = -1.294771417778694e3; - cx2 = 0.399787947463142e3; - cx3 = 0.1383429692754194e3; - alpha = 240; - fctVx1.DefineConst("x0", cx1); - fctVx1.DefineConst("y0", cx2); - fctVx1.DefineConst("z0", cx3); - fctVx1.DefineConst("alpha", alpha); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("y0", cx2); - fctVx2.DefineConst("z0", cx3); - fctVx2.DefineConst("alpha", alpha); - fctVx3.DefineConst("x0", cx1); - fctVx3.DefineConst("y0", cx2); - fctVx3.DefineConst("z0", cx3); - //SPtr<BC> inflowAirBC5(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST)); - //inflowAirBC5->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated())); - SPtr<BC> inflowAirBC5(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST)); - inflowAirBC5->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - cx1 = -1.3077338898450492e3; - cx2 = 0.3998516560596088e3; - cx3 = 0.13843501416896437e3; - alpha = 300; - fctVx1.DefineConst("x0", cx1); - fctVx1.DefineConst("y0", cx2); - fctVx1.DefineConst("z0", cx3); - fctVx1.DefineConst("alpha", alpha); - fctVx2.DefineConst("x0", cx1); - fctVx2.DefineConst("y0", cx2); - fctVx2.DefineConst("z0", cx3); - fctVx2.DefineConst("alpha", alpha); - fctVx3.DefineConst("x0", cx1); - fctVx3.DefineConst("y0", cx2); - fctVx3.DefineConst("z0", cx3); - //SPtr<BC> inflowAirBC6(new VelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, 0, BCFunction::INFCONST)); - //inflowAirBC6->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated())); - SPtr<BC> inflowAirBC6(new MultiphaseVelocityBC(true, true, true, fctVx1, fctVx2, fctVx3, phiL, 0, BCFunction::INFCONST)); - inflowAirBC6->setBCStrategy(SPtr<BCStrategy>(new MultiphaseVelocityBCStrategy())); - - // Pressure BC for air inlet - // SPtr<BC> inflowAirBC1(new PressureBC(p_air_LB)); - // inflowAirBC1->setBCStrategy(SPtr<BCStrategy>(new MultiphasePressureBCStrategy())); - - SPtr<BC> outflowBC(new PressureBC(rhoLB)); - //outflowBC->setBCStrategy(SPtr<BCStrategy>(new PressureNonEquilibrium())); - outflowBC->setBCStrategy(SPtr<BCStrategy>(new MultiphasePressureBCStrategy())); - - // SPtr<BC> outflowBC(new PressureBC(rhoLB)); - //outflowBC->setBCStrategy(SPtr<BCStrategy>(new MultiphaseNonReflectingOutflowBCStrategy())); - ////////////////////////////////////////////////////////////////////////////////// - // BC visitor - //BoundaryConditionsBlockVisitor bcVisitor; - MultiphaseBoundaryConditionsBlockVisitor bcVisitor; - - - // SPtr<LBMKernel> kernel = make_shared<IBcumulantK17LBMKernel>(); - //SPtr<LBMKernel> kernel = make_shared<CumulantK17LBMKernel>(); - // SPtr<LBMKernel> kernel = make_shared<MultiphaseTwoPhaseFieldsPressureFilterLBMKernel>(); - // SPtr<LBMKernel> kernel = make_shared<MultiphaseSimpleVelocityBaseExternalPressureLBMKernel>(); - //SPtr<LBMKernel> kernel = make_shared<MultiphaseSharpInterfaceLBMKernel>(); - SPtr<LBMKernel> kernel = make_shared<MultiphaseScaleDistributionLBMKernel>(); - //SPtr<LBMKernel> kernel = make_shared<IBcumulantK17LBMKernel>(); - //SPtr<LBMKernel> kernel = make_shared<IBsharpInterfaceLBMKernel>(); - - kernel->setWithForcing(false); - kernel->setForcingX1(0.0); - kernel->setForcingX2(0.0); - kernel->setForcingX3(0.0); - - kernel->setPhiL(phiL); - kernel->setPhiH(phiH); - kernel->setPhaseFieldRelaxation(tauH); - kernel->setMobility(mob); - kernel->setInterfaceWidth(interfaceThickness); - - kernel->setCollisionFactorMultiphase(nu_h_LB, nu_l_LB); - kernel->setDensityRatio(densityRatio); - kernel->setMultiphaseModelParameters(beta, kappa); - kernel->setContactAngle(theta); - kernel->setSigma(sigma_LB); - - SPtr<BCSet> bcProc = make_shared<BCSet>(); - kernel->setBCSet(bcProc); - - SPtr<Grid3D> grid = make_shared<Grid3D>(comm); - grid->setPeriodicX1(false); - grid->setPeriodicX2(false); - grid->setPeriodicX3(false); - grid->setDeltaX(dx); - grid->setBlockNX(blockNX[0], blockNX[1], blockNX[2]); - grid->setGhostLayerWidth(2); - - //string geoPath = "/home/niikonst/NozzleGeo"; - - //string outputPath = "/scratch/projects/nii00154/ShotcreteJet2"; - UbSystem::makeDirectory(outputPath); - UbSystem::makeDirectory(outputPath + "/liggghts"); - - // if (myid == 0) { - // stringstream logFilename; - // logFilename << outputPath + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; - // UbLog::output_policy::setStream(logFilename.str()); - // } - - ///////////////////////////////////////////////////////////////////// - //LIGGGHTS things - ///////////////////////////////////////////////////////////////////// - // string inFile1 = "d:/Projects/TRR277/Project/WP4/Config/in.nozzle"; - // // string inFile2 = "d:/Projects/VirtualFluids_LIGGGHTS_coupling/apps/cpu/LiggghtsApp/in2.lbdem"; - // MPI_Comm mpi_comm = *(MPI_Comm *)(comm->getNativeCommunicator()); - // LiggghtsCouplingWrapper wrapper(argv, mpi_comm); - - // double v_frac = 0.1; - // double dt_phys = units->getFactorTimeLbToW(); - // int demSubsteps = 10; - // double dt_dem = dt_phys / (double)demSubsteps; - //int vtkSteps = 1000; - // string demOutDir = outputPath + "/liggghts"; - - // // wrapper.execCommand("echo none"); - - // // wrapper.execFile((char*)inFile1.c_str()); - - // //// set timestep and output directory - // //////wrapper.setVariable("t_step", dt_dem); - // //////wrapper.setVariable("dmp_stp", vtkSteps * demSubsteps); - // //////wrapper.setVariable("dmp_dir", demOutDir); - - // //!!!!//wrapper.execFile((char *)inFile1.c_str()); - // //wrapper.runUpto(demSubsteps - 1); - // // wrapper.runUpto(1000); - - // //LatticeDecomposition lDec((g_maxX1 - g_minX1) / dx, (g_maxX2 - g_minX2) / dx, (g_maxX3 - g_minX3) / dx, wrapper.lmp, grid); - - SPtr<UbScheduler> lScheduler = make_shared<UbScheduler>(1); - // SPtr<LiggghtsCouplingSimulationObserver> lcSimulationObserver = make_shared<LiggghtsCouplingSimulationObserver>(grid, lScheduler, comm, wrapper, demSubsteps, unitsAir); - // //SPtr<Grid3DVisitor> partVisitor = make_shared<LiggghtsPartitioningGridVisitor>(std::ceil((g_maxX1 - g_minX1) / dx), std::ceil((g_maxX2 - g_minX2) / dx), std::ceil((g_maxX3 - g_minX3) / dx), wrapper.lmp); - // //SPtr<Grid3DVisitor> partVisitor = make_shared<LiggghtsPartitioningGridVisitor>(blockNX[0], blockNX[1], blockNX[2] * gridNZ, wrapper.lmp); - - // ///////////////////////////////////////////////////////////////////// - // ///////////////////////////////////////////////////////////////////// - - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::dMMM, MetisPartitioner::KWAY)); - - ////////////////////////////////////////////////////////////////////////// - // restart - //double cpStep = 15000; - //double cpStart = 10; - SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart)); - SPtr<MPIIOMigrationSimulationObserver> rcp(new MPIIOMigrationSimulationObserver(grid, rSch, metisVisitor, outputPath, comm)); - rcp->setLBMKernel(kernel); - rcp->setBCSet(bcProc); - ////////////////////////////////////////////////////////////////////////// - -//if (newStart) { - SPtr<GbObject3D> gridCube = make_shared<GbCuboid3D>(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3); - if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), outputPath + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - // geo - ////////////////////////////////////////////////////////// - //int accuracy = Interactor3D::EDGES; - /////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshNozzleAirDistributor = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirDistributor:start"); - meshNozzleAirDistributor->readMeshFromSTLFileBinary(geoPath + "/01_Nozzle_Air_Distributor.stl", false); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirDistributor:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAirDistributor.get(), outputPath + "/geo/meshNozzleAirDistributor", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrNozzleAirDistributor = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAirDistributor, grid, unwettingNoSlipBC, Interactor3D::SOLID, Interactor3D::POINTS); - ///////////////////////////////////////////////////////////// - //SPtr<GbTriFaceMesh3D> meshNozzleAirInlet = std::make_shared<GbTriFaceMesh3D>(); - //if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirInlet:start"); - //meshNozzleAirInlet->readMeshFromSTLFileASCII(geoPath + "/02_Nozzle_Air_Inlet.stl", false); - //if (myid == 0) UBLOG(logINFO, "Read meshNozzleAirInlet:end"); - //if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAirInlet.get(), outputPath + "/geo/meshNozzleAirInlet", WbWriterVtkXmlBinary::getInstance()); - //SPtr<Interactor3D> intrNozzleAirInlet = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAirInlet, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy); - ///////////////////////////////////////////////////////////// - //SPtr<GbTriFaceMesh3D> meshNozzleSpacer = std::make_shared<GbTriFaceMesh3D>(); - //if (myid == 0) UBLOG(logINFO, "Read meshNozzleSpacer:start"); - //meshNozzleSpacer->readMeshFromSTLFileASCII(geoPath + "/03_Nozzle_Spacer.stl", true); - //if (myid == 0) UBLOG(logINFO, "Read meshNozzleSpacer:end"); - //if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleSpacer.get(), outputPath + "/geo/meshNozzleSpacer", WbWriterVtkXmlBinary::getInstance()); - //SPtr<Interactor3D> intrNozzleSpacer = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleSpacer, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy); - ///////////////////////////////////////////////////////////// - //SPtr<GbTriFaceMesh3D> meshNozzleAccDistributor = std::make_shared<GbTriFaceMesh3D>(); - //if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccDistributor:start"); - //meshNozzleAccDistributor->readMeshFromSTLFileASCII(geoPath + "/04_Nozzle_Acc_Distributor.stl", false); - //if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccDistributor:end"); - //if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAccDistributor.get(), outputPath + "/geo/meshNozzleAccDistributor", WbWriterVtkXmlBinary::getInstance()); - //SPtr<Interactor3D> intrNozzleAccDistributor = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAccDistributor, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy); - ///////////////////////////////////////////////////////////// - //SPtr<GbTriFaceMesh3D> meshNozzleAccInlet = std::make_shared<GbTriFaceMesh3D>(); - //if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccInlet:start"); - //meshNozzleAccInlet->readMeshFromSTLFileASCII(geoPath + "/05_Nozzle_Acc_Inlet.stl", false); - //if (myid == 0) UBLOG(logINFO, "Read meshNozzleAccInlet:end"); - //if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleAccInlet.get(), outputPath + "/geo/meshNozzleAccInlet", WbWriterVtkXmlBinary::getInstance()); - //SPtr<Interactor3D> intrNozzleAccInlet = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleAccInlet, grid, noSlipBC, Interactor3D::SOLID, (Interactor3D::Accuracy)accuracy); - ///////////////////////////////////////////////////////////// - //SPtr<GbTriFaceMesh3D> meshNozzleVolcanNozzle1 = std::make_shared<GbTriFaceMesh3D>(); - //if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle1:start"); - //meshNozzleVolcanNozzle1->readMeshFromSTLFileBinary(geoPath + "/06_1_Nozzle_Volcan_Nozzle.stl", true); - //if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle1:end"); - //if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleVolcanNozzle1.get(), outputPath + "/geo/meshNozzleVolcanNozzle1", WbWriterVtkXmlBinary::getInstance()); - //SPtr<Interactor3D> intrNozzleVolcanNozzle1 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleVolcanNozzle1, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::EDGES); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshNozzleVolcanNozzle2 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle2:start"); - //meshNozzleVolcanNozzle2->readMeshFromSTLFileBinary(geoPath + "/06_2_Nozzle_Volcan_Nozzle.stl", true); - meshNozzleVolcanNozzle2->readMeshFromSTLFileBinary(geoPath + "/Nozzle_Volcan_Nozzle_Shift.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshNozzleVolcanNozzle2:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshNozzleVolcanNozzle2.get(), outputPath + "/geo/meshNozzleVolcanNozzle2", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrNozzleVolcanNozzle2 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshNozzleVolcanNozzle2, grid, unwettingNoSlipBC, Interactor3D::SOLID, Interactor3D::POINTS); - /////////////////////////////////////////////////////////// - // box - SPtr<D3Q27Interactor> intrBox = SPtr<D3Q27Interactor>(new D3Q27Interactor(gridCube, grid, noSlipBC, Interactor3D::INVERSESOLID)); - /////////////////////////////////////////////////////////// - // inflow - //GbCylinder3DPtr geoInflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, 0.20105, -1.30181 + 0.0005, 0.390872 - 0.00229, 0.23, 0.013)); - GbCylinder3DPtr geoInflow(new GbCylinder3D(-1.30181e3 + 0.0005e3, 0.390872e3 - 0.00229e3, g_maxX3 - 2.0 * dx, -1.30181e3 + 0.0005e3, 0.390872e3 - 0.00229e3, g_maxX3+2.0*dx, 0.013e3)); - if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), outputPath + "/geo/geoInflow", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27Interactor> intrInflow = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, inflowConcreteBC, Interactor3D::SOLID)); - /////////////////////////////////////////////////////////// - // outflow - //GbCylinder3DPtr geoOutflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, -0.22, -1.30181 + 0.0005, 0.390872 - 0.00229, -0.21, 0.013)); - //GbCylinder3DPtr geoOutflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, -0.426, -1.30181 + 0.0005, 0.390872 - 0.00229, -0.415, 0.013)); - GbCylinder3DPtr geoOutflow(new GbCylinder3D(-1.30181e3 + 0.0005e3, 0.390872e3 - 0.00229e3, g_minX3, -1.30181e3 + 0.0005e3, 0.390872e3 - 0.00229e3, g_minX3+2.*dx, 0.013e3)); - if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), outputPath + "/geo/geoOutflow", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27Interactor> intrOutflow = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, outflowBC, Interactor3D::SOLID)); - /////////////////////////////////////////////////////////// - // SPtr<GbTriFaceMesh3D> geoAirInlet = std::make_shared<GbTriFaceMesh3D>(); - // if (myid == 0) UBLOG(logINFO, "Read Air_Inlet:start"); - // geoAirInlet->readMeshFromSTLFileASCII(geoPath + "/Air_Inlet.stl", true); - // if (myid == 0) UBLOG(logINFO, "Read Air_Inlet:end"); - // if (myid == 0) GbSystem3D::writeGeoObject(geoAirInlet.get(), outputPath + "/geo/geoAirInlet", WbWriterVtkXmlBinary::getInstance()); - // SPtr<Interactor3D> intrAirInlet = std::make_shared<D3Q27TriFaceMeshInteractor>(geoAirInlet, grid, inflowAirBC1, Interactor3D::SOLID, Interactor3D::EDGES); - ///////////////////////////////////////////////////////////// - // Fluid area - //GbCylinder3DPtr geoFluidArea(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, g_minX3, -1.30181 + 0.0005, 0.390872 - 0.00229, g_maxX3, 0.013)); - GbCylinder3DPtr geoFluidArea(new GbCylinder3D(-1.30181e3 + 0.0005e3, 0.390872e3 - 0.00229e3, g_maxX3_box, -1.30181e3 + 0.0005e3, 0.390872e3 - 0.00229e3, g_maxX3, 0.013e3)); - if (myid == 0) GbSystem3D::writeGeoObject(geoFluidArea.get(), outputPath + "/geo/geoFluidArea", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27Interactor> intrFluidArea = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoFluidArea, grid, noSlipBC, Interactor3D::INVERSESOLID)); - - //SPtr<GbTriFaceMesh3D> meshFluidArea = std::make_shared<GbTriFaceMesh3D>(); - //if (myid == 0) UBLOG(logINFO, "Read geoFluidArea:start"); - //meshFluidArea->readMeshFromSTLFileBinary(geoPath + "/FluidArea.stl", true); - //if (myid == 0) UBLOG(logINFO, "Read geoFluidArea:end"); - //if (myid == 0) GbSystem3D::writeGeoObject(meshFluidArea.get(), outputPath + "/geo/meshFluidArea", WbWriterVtkXmlBinary::getInstance()); - //SPtr<Interactor3D> intrFluidArea = std::make_shared<D3Q27TriFaceMeshInteractor>(meshFluidArea, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::EDGES); - - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshInflowPipe = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read geoFluidArea:start"); - meshInflowPipe->readMeshFromSTLFileBinary(geoPath + "/InflowPipe.stl", true); - if (myid == 0) UBLOG(logINFO, "Read geoFluidArea:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshInflowPipe.get(), outputPath + "/geo/meshInflowPipe", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrInflowPipe = std::make_shared<D3Q27TriFaceMeshInteractor>(meshInflowPipe, grid, unwettingNoSlipBC, Interactor3D::SOLID, Interactor3D::EDGES); - /////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshInflowPipe2 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read geoFluidArea:start"); - meshInflowPipe2->readMeshFromSTLFileBinary(geoPath + "/LongTube2.stl", true); - if (myid == 0) UBLOG(logINFO, "Read geoFluidArea:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshInflowPipe2.get(), outputPath + "/geo/LongTube", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrInflowPipe2 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshInflowPipe2, grid, unwettingNoSlipBC, Interactor3D::SOLID, Interactor3D::EDGES); - /////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////// - //outflows - ////////////////////////////////////////////////////////// - SPtr<GbObject3D> geoOutflow1 = make_shared<GbCuboid3D>(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_maxX1 + 2.0 * dx, g_maxX2 + 2.0 * dx, g_minX3); - if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow1.get(), outputPath + "/geo/geoOutflow1", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27Interactor> intrOutflow1 = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow1, grid, noSlipBC, Interactor3D::SOLID)); - - SPtr<GbObject3D> geoOutflow2 = make_shared<GbCuboid3D>(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_minX1, g_maxX2 + 2.0 * dx, g_maxX3 + 2.0 * dx); - if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow2.get(), outputPath + "/geo/geoOutflow2", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27Interactor> intrOutflow2 = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow2, grid, outflowBC, Interactor3D::SOLID)); - - SPtr<GbObject3D> geoOutflow3 = make_shared<GbCuboid3D>(g_maxX1, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_maxX1 + 2.0 * dx, g_maxX2 + 2.0 * dx, g_maxX3 + 2.0 * dx); - if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow3.get(), outputPath + "/geo/geoOutflow3", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27Interactor> intrOutflow3 = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow3, grid, outflowBC, Interactor3D::SOLID)); - - SPtr<GbObject3D> geoOutflow4 = make_shared<GbCuboid3D>(g_minX1 - 2.0 * dx, g_minX2 - 2.0 * dx, g_minX3 - 2.0 * dx, g_maxX1 + 2.0 * dx, g_minX2, g_maxX3 + 2.0 * dx); - if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow4.get(), outputPath + "/geo/geoOutflow4", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27Interactor> intrOutflow4 = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow4, grid, outflowBC, Interactor3D::SOLID)); - - SPtr<GbObject3D> geoOutflow5 = make_shared<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(geoOutflow5.get(), outputPath + "/geo/geoOutflow5", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27Interactor> intrOutflow5 = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow5, grid, outflowBC, Interactor3D::SOLID)); - - //SPtr<GbObject3D> geoOutflow6 = make_shared<GbCuboid3D>(g_minX1, g_minX2, g_maxX3_box, g_maxX1, g_maxX2, g_maxX3_box + 2.0 * dx); - //if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow6.get(), outputPath + "/geo/geoOutflow6", WbWriterVtkXmlBinary::getInstance()); - //SPtr<D3Q27Interactor> intrOutflow6 = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow6, grid, outflowBC, Interactor3D::SOLID)); - - SPtr<GbTriFaceMesh3D> geoOutflow6 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read geoOutflow6:start"); - geoOutflow6->readMeshFromSTLFileBinary(geoPath + "/OutflowTop.stl", true); - if (myid == 0) UBLOG(logINFO, "Read geoOutflow6:end"); - if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow6.get(), outputPath + "/geo/geoOutflow6", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrOutflow6 = std::make_shared<D3Q27TriFaceMeshInteractor>(geoOutflow6, grid, outflowBC, Interactor3D::SOLID, Interactor3D::POINTS); - - /////////////////////////////////////////////////////////// - GbCylinder3DPtr geoAirInflow(new GbCylinder3D(-1.31431 - 0.0005, 0.388587, 0.1383275, -1.31431, 0.388587, 0.1383275, 0.002765)); - if (myid == 0) GbSystem3D::writeGeoObject(geoAirInflow.get(), outputPath + "/geo/geoAirInlet", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intrAirInflow = std::make_shared<D3Q27Interactor>(geoAirInflow, grid, inflowAirBC1, Interactor3D::SOLID, Interactor3D::EDGES); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshAirInlet1 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet1:start"); - meshAirInlet1->readMeshFromSTLFileBinary(geoPath + "/Air_Inlet_1.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet1:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet1.get(), outputPath + "/geo/meshAirInlet1", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intAirInlet1 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet1, grid, inflowAirBC1, Interactor3D::SOLID, Interactor3D::POINTS); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshAirInlet2 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet2:start"); - meshAirInlet2->readMeshFromSTLFileBinary(geoPath + "/Air_Inlet_2.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet2:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet2.get(), outputPath + "/geo/meshAirInlet2", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intAirInlet2 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet2, grid, inflowAirBC2, Interactor3D::SOLID, Interactor3D::POINTS); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshAirInlet3 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet3:start"); - meshAirInlet3->readMeshFromSTLFileBinary(geoPath + "/Air_Inlet_3.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet3:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet3.get(), outputPath + "/geo/meshAirInlet3", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intAirInlet3 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet3, grid, inflowAirBC3, Interactor3D::SOLID, Interactor3D::POINTS); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshAirInlet4 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet4:start"); - meshAirInlet4->readMeshFromSTLFileBinary(geoPath + "/Air_Inlet_4.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet4:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet4.get(), outputPath + "/geo/meshAirInlet4", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intAirInlet4 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet4, grid, inflowAirBC4, Interactor3D::SOLID, Interactor3D::POINTS); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshAirInlet5 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet5:start"); - meshAirInlet5->readMeshFromSTLFileBinary(geoPath + "/Air_Inlet_5.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet5:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet5.get(), outputPath + "/geo/meshAirInlet5", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intAirInlet5 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet5, grid, inflowAirBC5, Interactor3D::SOLID, Interactor3D::POINTS); - /////////////////////////////////////////////////////////// - SPtr<GbTriFaceMesh3D> meshAirInlet6 = std::make_shared<GbTriFaceMesh3D>(); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet6:start"); - meshAirInlet6->readMeshFromSTLFileBinary(geoPath + "/Air_Inlet_6.stl", true); - if (myid == 0) UBLOG(logINFO, "Read meshAirInlet6:end"); - if (myid == 0) GbSystem3D::writeGeoObject(meshAirInlet6.get(), outputPath + "/geo/meshAirInlet6", WbWriterVtkXmlBinary::getInstance()); - SPtr<Interactor3D> intAirInlet6 = std::make_shared<D3Q27TriFaceMeshInteractor>(meshAirInlet6, grid, inflowAirBC6, Interactor3D::SOLID, Interactor3D::POINTS); - /////////////////////////////////////////////////////////// - - SPtr<GbObject3D> geoBox1 = make_shared<GbCuboid3D>(g_minX1, g_minX2, g_maxX3_box, g_minX1+12.0*blockNX[0]*dx, g_maxX2, g_maxX3); - if (myid == 0) GbSystem3D::writeGeoObject(geoBox1.get(), outputPath + "/geo/geoBox1", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27Interactor> intrGeoBox1 = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoBox1, grid, outflowBC, Interactor3D::SOLID)); - - SPtr<GbObject3D> geoBox2 = make_shared<GbCuboid3D>(g_minX1 + 14.0 * blockNX[0] * dx, g_minX2, g_maxX3_box, g_maxX1, g_maxX2, g_maxX3); - if (myid == 0) GbSystem3D::writeGeoObject(geoBox2.get(), outputPath + "/geo/geoBox2", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27Interactor> intrGeoBox2 = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoBox2, grid, outflowBC, Interactor3D::SOLID)); - - SPtr<GbObject3D> geoBox3 = make_shared<GbCuboid3D>(g_minX1, g_minX2, g_maxX3_box, g_maxX1, g_minX2 + 12.0 * blockNX[0] * dx, g_maxX3); - if (myid == 0) GbSystem3D::writeGeoObject(geoBox3.get(), outputPath + "/geo/geoBox3", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27Interactor> intrGeoBox3 = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoBox3, grid, outflowBC, Interactor3D::SOLID)); - - SPtr<GbObject3D> geoBox4 = make_shared<GbCuboid3D>(g_minX1, g_minX2 + 14.0 * blockNX[0] * dx, g_maxX3_box, g_maxX1, g_maxX2, g_maxX3); - if (myid == 0) GbSystem3D::writeGeoObject(geoBox4.get(), outputPath + "/geo/geoBox4", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27Interactor> intrGeoBox4 = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoBox4, grid, outflowBC, Interactor3D::SOLID)); - - InteractorsHelper intHelper1(grid, metisVisitor, true); - //intHelper1.addInteractor(intrFluidArea); - intHelper1.addInteractor(intrGeoBox1); - intHelper1.addInteractor(intrGeoBox2); - intHelper1.addInteractor(intrGeoBox3); - intHelper1.addInteractor(intrGeoBox4); - intHelper1.selectBlocks(); - - //MultiphaseSetKernelBlockVisitor kernelVisitor(kernel, nu_h_LB, nu_l_LB, 1e9, 1); - //grid->accept(kernelVisitor); - - //intHelper1.setBC(); - - //SPtr<GbObject3D> gridCube2 = make_shared<GbCuboid3D>(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3_box); - //if (myid == 0) GbSystem3D::writeGeoObject(gridCube2.get(), outputPath + "/geo/gridCube2", WbWriterVtkXmlBinary::getInstance()); - //GenBlocksGridVisitor genBlocks2(gridCube2); - //grid->accept(genBlocks2); - - MultiphaseSetKernelBlockVisitor kernelVisitor2(kernel, nu_h_LB, nu_l_LB, 1e9, 1 ); // ,MultiphaseSetKernelBlockVisitor::AddKernel); - grid->accept(kernelVisitor2); - - vector<SPtr<Block3D>> blocks; - grid->getBlocksByCuboid(0, g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3, blocks); - - for (auto block : blocks) { - if (block) { - block->setActive(true); - SPtr<BCArray3D> bcArray = block->getKernel()->getBCSet()->getBCArray(); - - int minX1 = 0; - int minX2 = 0; - int minX3 = 0; - - int maxX1 = (int)(bcArray->getNX1()) - 1; - int maxX2 = (int)(bcArray->getNX2()) - 1; - int maxX3 = (int)(bcArray->getNX3()) - 1; - - for (int ix3 = minX3; ix3 <= maxX3; ix3++) { - for (int ix2 = minX2; ix2 <= maxX2; ix2++) { - for (int ix1 = minX1; ix1 <= maxX1; ix1++) { - bcArray->setFluid(ix1, ix2, ix3); - } - } - } - } - } - - if (!newStart) - { - rcp->readBlocks((int)restartStep); - grid->accept(metisVisitor); - rcp->readDataSet((int)restartStep); - grid->setTimeStep(restartStep); - } - - InteractorsHelper intHelper2(grid, metisVisitor, false); - intHelper2.addInteractor(intrInflowPipe); - intHelper2.addInteractor(intrInflowPipe2); - intHelper2.addInteractor(intrNozzleAirDistributor); - //intHelper2.addInteractor(intrFluidArea); - intHelper2.addInteractor(intrNozzleVolcanNozzle2); - // intHelper.addInteractor(intrBox); - intHelper2.addInteractor(intrInflow); - //// intHelper.addInteractor(intrAirInflow); - intHelper2.addInteractor(intAirInlet1); - intHelper2.addInteractor(intAirInlet2); - intHelper2.addInteractor(intAirInlet3); - intHelper2.addInteractor(intAirInlet4); - intHelper2.addInteractor(intAirInlet5); - intHelper2.addInteractor(intAirInlet6); - intHelper2.addInteractor(intrOutflow1); - intHelper2.addInteractor(intrOutflow2); - intHelper2.addInteractor(intrOutflow3); - intHelper2.addInteractor(intrOutflow4); - intHelper2.addInteractor(intrOutflow5); - intHelper2.addInteractor(intrOutflow6); - - // intHelper.addInteractor(intrNozzleAirDistributor); - // intHelper.addInteractor(intrNozzleAirInlet); - // intHelper.addInteractor(intrNozzleSpacer); - // intHelper.addInteractor(intrNozzleAccDistributor); - // intHelper.addInteractor(intrNozzleAccInlet); - // intHelper.addInteractor(intrNozzleVolcanNozzle1); - - intHelper2.selectBlocks(); - - // if (myid == 0) UBLOG(logINFO, Utilities::toString(grid, comm->getNumberOfProcesses())); - - //SetKernelBlockVisitor kernelVisitor(kernel, nu_l_LB, comm->getNumberOfProcesses()); - - - intHelper2.setBC(); - - - - //GenBlocksGridVisitor genBlocks2(gridCube2); - //grid->accept(genBlocks2); - - //grid->accept(metisVisitor); - - //MultiphaseSetKernelBlockVisitor kernelVisitor2(kernel, nu_h_LB, nu_l_LB, 1e9, 1, MultiphaseSetKernelBlockVisitor::AddKernel); - //grid->accept(kernelVisitor2); - - //SetBcBlocksBlockVisitor v1(intrOutflow1); - //grid->accept(v1); - //intrOutflow1->initInteractor(); - - - //SetBcBlocksBlockVisitor v2(intrOutflow2); - //grid->accept(v2); - //intrOutflow2->initInteractor(); - - //SetBcBlocksBlockVisitor v3(intrOutflow3); - //grid->accept(v3); - //intrOutflow3->initInteractor(); - - //SetBcBlocksBlockVisitor v4(intrOutflow4); - //grid->accept(v4); - //intrOutflow4->initInteractor(); - - //SetBcBlocksBlockVisitor v5(intrOutflow5); - //grid->accept(v5); - //intrOutflow5->initInteractor(); - - //SetBcBlocksBlockVisitor v6(intrOutflow6); - //grid->accept(v6); - //intrOutflow6->initInteractor(); - - //SetBcBlocksBlockVisitor v7(intrNozzleVolcanNozzle2); - //grid->accept(v7); - //intrNozzleVolcanNozzle2->initInteractor(); - - - SPtr<SimulationObserver> ppblocks = make_shared<WriteBlocksSimulationObserver>(grid, SPtr<UbScheduler>(new UbScheduler(1)), outputPath, WbWriterVtkXmlBinary::getInstance(), comm); - ppblocks->update(0); - ppblocks.reset(); - - // boundary conditions grid - { - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - SPtr<WriteBoundaryConditionsSimulationObserver> ppgeo(new WriteBoundaryConditionsSimulationObserver(grid, geoSch, outputPath, WbWriterVtkXmlBinary::getInstance(), comm)); - ppgeo->update(0); - ppgeo.reset(); - } - - - - if (newStart) - { - double x1c = -1.31431e3 + R; - double x2c = 0.375582e3 + R; - double Ri = 5e3; - //double x3c = 0.136e3 + Ri; - double x3c = -65 + Ri; - - mu::Parser fct1; - // fct1.SetExpr(" 0.5 - 0.5 * tanh(2 * (sqrt((x1 - x1c) ^ 2 + (x2 - x2c) ^ 2 + (x3 - x3c) ^ 2) - radius) / interfaceThickness)"); - fct1.SetExpr(" 0.5 - 0.5 * tanh(2 * (sqrt((x1 - 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", Ri); - fct1.DefineConst("interfaceThickness", interfaceThickness * dx); - - MultiphaseVelocityFormInitDistributionsBlockVisitor initVisitor; - initVisitor.setPhi(fct1); - grid->accept(initVisitor); - } - //else - //{ - // //rcp->restart((int)restartStep); - // rcp->readBlocks((int)restartStep); - // grid->accept(metisVisitor); - // rcp->readDataSet((int)restartStep); - // grid->setTimeStep(restartStep); - //} - - - - -//} -//else -//{ -// //double restartStep = 10; -// rcp->restart((int)restartStep); -// grid->setTimeStep(restartStep); -// -// //GbCylinder3DPtr geoInflow(new GbCylinder3D(-1.30181 + 0.0005, 0.390872 - 0.00229, g_maxX3 - 2.0 * dx, -1.30181 + 0.0005, 0.390872 - 0.00229, g_maxX3 + 2.0 * dx, 0.013)); -// //if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), outputPath + "/geo/geoInflow", WbWriterVtkXmlBinary::getInstance()); -// //SPtr<D3Q27Interactor> intrInflow = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, inflowConcreteBC, Interactor3D::SOLID)); -// //SetBcBlocksBlockVisitor v1(intrInflow); -// //grid->accept(v1); -// //intrInflow->initInteractor(); -// -// if (myid == 0) UBLOG(logINFO, "Restart - end"); -//} - - - if (myid == 0) VF_LOG_INFO("{}", Utilities::toString(grid, comm->getNumberOfProcesses())); - - - grid->accept(bcVisitor); - //OneDistributionSetConnectorsBlockVisitor setConnsVisitor(comm); - TwoDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm); - // ThreeDistributionsDoubleGhostLayerSetConnectorsBlockVisitor setConnsVisitor(comm); - grid->accept(setConnsVisitor); - - //int numOfThreads = 18; - omp_set_num_threads(numOfThreads); - - SPtr<UbScheduler> nupsSch = std::make_shared<UbScheduler>(10, 10, 100); - SPtr<NUPSCounterSimulationObserver> nupsSimulationObserver = make_shared<NUPSCounterSimulationObserver>(grid, nupsSch, numOfThreads, comm); - - //// write data for visualization of macroscopic quantities - SPtr<UbScheduler> visSch(new UbScheduler(vtkSteps)); - // SPtr<UbScheduler> visSch(new UbScheduler(1, 8700, 8800)); - // visSch->addSchedule(1, 8700, 8800); - SPtr<WriteSharpInterfaceQuantitiesSimulationObserver> writeMQSimulationObserver(new WriteSharpInterfaceQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm)); - //writeMQSimulationObserver->update(10); - - //SPtr<WriteMacroscopicQuantitiesSimulationObserver> writeMQSimulationObserver(new WriteMacroscopicQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm)); - //writeMQSimulationObserver->update(0); - - //int endTime = 20; - SPtr<Simulation> simulation(new Simulation(grid, lScheduler, endTime)); - simulation->addSimulationObserver(nupsSimulationObserver); - //!!!//simulation->addSimulationObserver(lcSimulationObserver); - simulation->addSimulationObserver(writeMQSimulationObserver); - simulation->addSimulationObserver(rcp); - - if (myid == 0) UBLOG(logINFO, "Simulation-start"); - simulation->run(); - 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; - } - return 0; -} diff --git a/apps/cpu/ViskomatXL/CMakeLists.txt b/apps/cpu/ViskomatXL/CMakeLists.txt deleted file mode 100644 index 17b147d92b5f09e5379bb9f8594b217388bebab0..0000000000000000000000000000000000000000 --- a/apps/cpu/ViskomatXL/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(viskomat) - -vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES viskomat.cpp ) \ No newline at end of file diff --git a/apps/cpu/ViskomatXL/viscosity.cfg b/apps/cpu/ViskomatXL/viscosity.cfg deleted file mode 100644 index bf2822c7b1d6dd42fdcbc513a4e6b39264ab4180..0000000000000000000000000000000000000000 --- a/apps/cpu/ViskomatXL/viscosity.cfg +++ /dev/null @@ -1 +0,0 @@ -nuLB = 1.5e-3 \ No newline at end of file diff --git a/apps/cpu/ViskomatXL/viskomat.cfg b/apps/cpu/ViskomatXL/viskomat.cfg deleted file mode 100644 index 626948407375ec46c5f4d350416225f4159bb319..0000000000000000000000000000000000000000 --- a/apps/cpu/ViskomatXL/viskomat.cfg +++ /dev/null @@ -1,38 +0,0 @@ -outputPath = d:/temp/viskomatXL_restart_test -geoPath = d:/Projects/TRR277/Project/WP1/Rheometer/Aileen -#geoPath = d:/Projects/TRR277/Project/WP1/Rheometer -geoFile = fishboneT.stl -#geoFile = cylinder.stl - -numOfThreads = 1 -availMem = 15e9 -logToFile = false - -blocknx = 14 14 14 -#blocknx = 14 15 15 -#blocknx = 35 83 83 -boundingBox = 0 140 -82.5 82.5 -82.5 82.5 - -#blocknx = 32 12 12 -#boundingBox = 0 32 -12 12 -12 12 -#boundingBox = 0 64 -24 24 -24 24 -#boundingBox = 0 64 -24 24 -24 24 - -deltax = 1 - -refineLevel = 0 - -OmegaLB = 1e-5 -mu = 5 # Pa s -N = 80 # rpm -tau0 = 20e-7 -N = 30 - -newStart = false -restartStep = 10 - -cpStart = 10 -cpStep = 10 - -outTime = 10000 -endTime = 20 \ No newline at end of file diff --git a/apps/cpu/ViskomatXL/viskomat.cpp b/apps/cpu/ViskomatXL/viskomat.cpp deleted file mode 100644 index d1a356e8169a55c52e6d9116a691caa82602f1b9..0000000000000000000000000000000000000000 --- a/apps/cpu/ViskomatXL/viskomat.cpp +++ /dev/null @@ -1,475 +0,0 @@ -#include <iostream> -#include <string> - -#include "VirtualFluids.h" -#include "NonNewtonianFluids/NonNewtonianFluids.h" - -using namespace std; - - -void bflow(string configname) -{ - using namespace vf::lbm::dir; - - try - { - vf::basics::ConfigurationFile config; - config.load(configname); - - string outputPath = config.getValue<string>("outputPath"); - string geoPath = config.getValue<string>("geoPath"); - string geoFile = config.getValue<string>("geoFile"); - int numOfThreads = config.getValue<int>("numOfThreads"); - vector<int> blocknx = config.getVector<int>("blocknx"); - vector<real> boundingBox = config.getVector<real>("boundingBox"); - real endTime = config.getValue<real>("endTime"); - real outTime = config.getValue<real>("outTime"); - real availMem = config.getValue<real>("availMem"); - int refineLevel = config.getValue<int>("refineLevel"); - bool logToFile = config.getValue<bool>("logToFile"); - real restartStep = config.getValue<real>("restartStep"); - real deltax = config.getValue<real>("deltax"); - real cpStep = config.getValue<real>("cpStep"); - real cpStart = config.getValue<real>("cpStart"); - bool newStart = config.getValue<bool>("newStart"); - real OmegaLB = config.getValue<real>("OmegaLB"); - real tau0 = config.getValue<real>("tau0"); - real N = config.getValue<real>("N"); - real mu = config.getValue<real>("mu"); - - - vf::basics::ConfigurationFile viscosity; - - std::shared_ptr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - if (logToFile) - { -#if defined(__unix__) - if (myid == 0) - { - const char* str = outputPath.c_str(); - mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); - } -#endif - - if (myid == 0) - { - stringstream logFilename; - logFilename << outputPath + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - } - - real rhoLB = 0.0; - - //double N = 70; //rpm - real Omega = 2 * UbMath::PI / 60.0 * N; //rad/s - //double mu = 5; //Pa s - real R = 0.165 / 2.0; //m - real rho = 2150;// 970; //kg/m^3 - real Re = Omega * R * R * rho / mu; - - //double nuLB = OmegaLB * R * 1e3 * R * 1e3 / Re; - - real dx = deltax * 1e-3; - real nuLB = OmegaLB * (R / dx)*(R / dx) / Re; - - real Bm = tau0/(mu*Omega); - real tau0LB = Bm*nuLB*OmegaLB; - - - //double dx = 1.0 * 1e-3; - //double nuLB = OmegaLB * (R / dx)*(R / dx) / Re; - - //acustic scaling - // OmegaLB /= 2.0; - // nuLB *= 2.0; - - SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter()); - //SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter(1, 1461, 970, 1e3)); - //UBLOG(logINFO, conv->toString()); - - //bounding box - - real g_minX1 = boundingBox[0]; - real g_maxX1 = boundingBox[1]; - - real g_minX2 = boundingBox[2]; - real g_maxX2 = boundingBox[3]; - - real g_minX3 = boundingBox[4]; - real g_maxX3 = boundingBox[5]; - - SPtr<Rheology> thix = Rheology::getInstance(); - //thix->setPowerIndex(n); - //thix->setViscosityParameter(k); - thix->setYieldStress(tau0LB); - //thix->setOmegaMin(omegaMin); - - SPtr<BC> noSlipBC(new NoSlipBC()); - // noSlipBC->setBCStrategy(SPtr<BCStrategy>(new NoSlipInterpolated())); - // //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new RheologyHerschelBulkleyModelNoSlipBCStrategy())); - // noSlipBC->setBCStrategy(SPtr<BCStrategy>(new RheologyBinghamModelNoSlipBCStrategy())); - - SPtr<BC> slipBC(new SlipBC()); - slipBC->setBCStrategy(SPtr<BCStrategy>(new SlipBounceBack())); - //slipBC->setBCStrategy(SPtr<BCStrategy>(new SlipInterpolated())); - - //// rotation around X-axis - mu::Parser fctVy; - fctVy.SetExpr("-Omega*(x3-z0-r)/deltax"); - fctVy.DefineConst("Omega", OmegaLB); - fctVy.DefineConst("r", 0.5 * (g_maxX3 - g_minX3)); - fctVy.DefineConst("z0", g_minX3); - fctVy.DefineConst("deltax", deltax); - - mu::Parser fctVz; - fctVz.SetExpr("Omega*(x2-y0-r)/deltax"); - fctVz.DefineConst("Omega", OmegaLB); - fctVz.DefineConst("r", 0.5 * (g_maxX2 - g_minX2)); - fctVz.DefineConst("y0", g_minX2); - fctVz.DefineConst("deltax", deltax); - - mu::Parser fctVx; - fctVx.SetExpr("0.0"); - - // rotation around Y-axis - //mu::Parser fctVz; - //// fctVx.SetExpr("omega*(r-x2)"); - //fctVz.SetExpr("Omega*(x1-r)"); - //fctVz.DefineConst("Omega", OmegaLB); - //fctVz.DefineConst("r", 0.5 * (g_maxX1 - g_minX1)); - - //mu::Parser fctVx; - //fctVx.SetExpr("-Omega*(x3-r)"); - //fctVx.DefineConst("Omega", OmegaLB); - //fctVx.DefineConst("r", 0.5 * (g_maxX1 - g_minX1)); - - //mu::Parser fctVy; - //fctVy.SetExpr("0.0"); - - SPtr<BC> velocityBC(new VelocityBC(true, true, true, fctVx, fctVy, fctVz, 0, BCFunction::INFCONST)); - //velocityBC->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated())); - velocityBC->setBCStrategy(SPtr<BCStrategy>(new VelocityBounceBack())); - //velocityBC->setBCStrategy(SPtr<BCStrategy>(new VelocityWithPressureInterpolated())); - //velocityBC->setBCStrategy(SPtr<BCStrategy>(new RheologyBinghamModelVelocityBCStrategy())); - - //SPtr<BC> densityBC(new PressureBC()); - //densityBC->setBCStrategy(SPtr<BCStrategy>(new PressureNonEquilibrium())); - ////densityBC->setBCStrategy(SPtr<BCStrategy>(new OutflowNonReflecting())); - - - //BS visitor - BoundaryConditionsBlockVisitor bcVisitor; - - SPtr<BCSet> bcProc; - bcProc = SPtr<BCSet>(new BCSet()); - - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new B92IncompressibleNavierStokes()); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CumulantLBMKernel()); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel()); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new K16IncompressibleNavierStokes()); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CumulantK17LBMKernel()); - SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new RheologyBinghamModelLBMKernel()); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new HerschelBulkleyModelLBMKernel()); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new BinghamModelLBMKernel()); - kernel->setBCSet(bcProc); - //kernel->setForcingX1(forcing); - //kernel->setWithForcing(true); - - SPtr<Grid3D> grid(new Grid3D(comm)); - grid->setPeriodicX1(false); - grid->setPeriodicX2(false); - grid->setPeriodicX3(false); - grid->setDeltaX(deltax); - grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - - SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); - if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), outputPath + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); - - //////////////////////////////////////////// - //METIS - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE)); - //////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - //restart - SPtr<UbScheduler> mSch(new UbScheduler(cpStep, cpStart)); - SPtr<MPIIOMigrationSimulationObserver> restartSimulationObserver(new MPIIOMigrationSimulationObserver(grid, mSch, metisVisitor, outputPath, comm)); - //SPtr<MPIIORestartSimulationObserver> restartSimulationObserver(new MPIIORestartSimulationObserver(grid, mSch, outputPath, comm)); - restartSimulationObserver->setLBMKernel(kernel); - restartSimulationObserver->setBCSet(bcProc); - //restartSimulationObserver->setNu(k); - ////////////////////////////////////////////////////////////////////////// - - ////stator - // rotation around X-axis - //SPtr<GbObject3D> stator(new GbCylinder3D(g_minX1 - 3.0 * deltax, g_minX2 + 0.5 * (g_maxX2 - g_minX2), - // g_minX3 + 0.5 * (g_maxX3 - g_minX3), g_maxX1 + 3.0 * deltax, - // g_minX2 + 0.5 * (g_maxX2 - g_minX2), g_minX3 + 0.5 * (g_maxX3 - g_minX3), 0.5 * (g_maxX3 - g_minX3) * 0.5)); - - // SPtr<GbObject3D> stator(new GbCylinder3D(g_minX1 - 4.0 * deltax, g_minX2 + 0.5 * (g_maxX2 - g_minX2), - // g_minX3 + 0.5 * (g_maxX3 - g_minX3), g_maxX1 + 3.0 * deltax, - // g_minX2 + 0.5 * (g_maxX2 - g_minX2), g_minX3 + 0.5 * (g_maxX3 - g_minX3), 12.0*0.5)); - - //// // rotation around Y-axis - //// //SPtr<GbObject3D> stator(new GbCylinder3D(g_minX1 + 0.5 * (g_maxX1 - g_minX1), g_minX2 - 3.0 * deltax, - //// // g_minX3 + 0.5 * (g_maxX3 - g_minX3), g_minX1 + 0.5 * (g_maxX1 - g_minX1), - //// // g_maxX2 + 3.0 * deltax, g_minX3 + 0.5 * (g_maxX3 - g_minX3), - //// // 0.5 * (g_maxX3 - g_minX3) * 0.5)); - - // SPtr<D3Q27Interactor> statorInt = - // SPtr<D3Q27Interactor>(new D3Q27Interactor(stator, grid, noSlipBC, Interactor3D::SOLID)); - - SPtr<GbTriFaceMesh3D> stator = make_shared<GbTriFaceMesh3D>(); - stator->readMeshFromSTLFileBinary(geoPath + "/" + geoFile, false); - //stator->scale(2.0, 2.0, 2.0); - //stator->translate(16.0, 0.0, 0.0); - //stator->translate(4.0, -73.0, -6.0); - - SPtr<D3Q27Interactor> statorInt = SPtr<D3Q27TriFaceMeshInteractor>( - new D3Q27TriFaceMeshInteractor(stator, grid, noSlipBC, Interactor3D::SOLID, Interactor3D::EDGES)); - - GbSystem3D::writeGeoObject(stator.get(), outputPath + "/geo/stator", WbWriterVtkXmlBinary::getInstance()); - - ////rotor (cylinder) - // rotation around X-axis - SPtr<GbObject3D> rotor(new GbCylinder3D( - g_minX1 - 3.0 * deltax, g_minX2 + 0.5 * (g_maxX2 - g_minX2), - g_minX3 + 0.5 * (g_maxX3 - g_minX3), g_maxX1 + 3.0 * deltax, - g_minX2 + 0.5 * (g_maxX2 - g_minX2), g_minX3 + 0.5 * (g_maxX3 - g_minX3), 0.5 * (g_maxX3 - g_minX3))); - // rotation around Y-axis - //SPtr<GbObject3D> rotor(new GbCylinder3D(g_minX1 + 0.5 * (g_maxX1 - g_minX1), g_minX2 - 3.0 * deltax, - // g_minX3 + 0.5 * (g_maxX3 - g_minX3), g_minX1 + 0.5 * (g_maxX1 - g_minX1), - // g_maxX2 + 3.0 * deltax, g_minX3 + 0.5 * (g_maxX3 - g_minX3), - // 0.5 * (g_maxX3 - g_minX3))); - - GbSystem3D::writeGeoObject(rotor.get(), outputPath + "/geo/rotor", WbWriterVtkXmlBinary::getInstance()); - - SPtr<D3Q27Interactor> rotorInt = - SPtr<D3Q27Interactor>(new D3Q27Interactor(rotor, grid, velocityBC, Interactor3D::INVERSESOLID)); - - //walls - GbCuboid3DPtr wallXmin(new GbCuboid3D(g_minX1 - deltax, g_minX2 - deltax, g_minX3 - deltax, g_minX1, - g_maxX2 + deltax, g_maxX3 + deltax)); - if (myid == 0) GbSystem3D::writeGeoObject(wallXmin.get(), outputPath + "/geo/wallXmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr wallXmax(new GbCuboid3D(g_maxX1, g_minX2 - deltax, g_minX3 - deltax, g_maxX1 + (real)blocknx[0]*deltax, - g_maxX2 + deltax, g_maxX3 + deltax)); - if (myid == 0) GbSystem3D::writeGeoObject(wallXmax.get(), outputPath + "/geo/wallXmax", WbWriterVtkXmlASCII::getInstance()); - - //wall interactors - SPtr<D3Q27Interactor> wallXminInt(new D3Q27Interactor(wallXmin, grid, slipBC, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> wallXmaxInt(new D3Q27Interactor(wallXmax, grid, slipBC, Interactor3D::SOLID)); - - if (myid == 0) - { - UBLOG(logINFO, "Parameters:"); - UBLOG(logINFO, "N = " << N << " rpm"); - UBLOG(logINFO, "Omega = " << Omega << " rad/s"); - UBLOG(logINFO, "mu = " << mu << " Pa s"); - UBLOG(logINFO, "tau0 = " << tau0<< " Pa"); - UBLOG(logINFO, "rho = " << rho<< " kg/m^3"); - UBLOG(logINFO, "Re = " << Re); - UBLOG(logINFO, "Bm = " << Bm); - UBLOG(logINFO, "rhoLB = " << rhoLB); - UBLOG(logINFO, "uLB = " << OmegaLB); - UBLOG(logINFO, "nuLB = " << nuLB); - UBLOG(logINFO, "tau0LB = " << tau0LB); - UBLOG(logINFO, "deltax = " << deltax << " mm"); - UBLOG(logINFO, "number of levels = " << refineLevel + 1); - UBLOG(logINFO, "number of threads = " << numOfThreads); - UBLOG(logINFO, "number of processes = " << comm->getNumberOfProcesses()); - UBLOG(logINFO, "blocknx = " << blocknx[0] << " " << blocknx[1] << " " << blocknx[2]); - UBLOG(logINFO, "output path = " << outputPath); - UBLOG(logINFO, "Preprozess - start"); - } - - if (newStart) - { - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - if (refineLevel > 0) - { - GbCuboid3DPtr refCube(new GbCuboid3D(-10, -10, -10, 0, 0, 0)); - if (myid == 0) GbSystem3D::writeGeoObject(refCube.get(), outputPath + "/geo/refCube", WbWriterVtkXmlASCII::getInstance()); - - if (myid == 0) UBLOG(logINFO, "Refinement - start"); - RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel, comm); - //refineHelper.addGbObject(sphere, refineLevel); - refineHelper.addGbObject(refCube, refineLevel); - refineHelper.refine(); - if (myid == 0) UBLOG(logINFO, "Refinement - end"); - } - - - - /////delete solid blocks - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - intHelper.addInteractor(wallXmaxInt); - intHelper.addInteractor(statorInt); - intHelper.addInteractor(rotorInt); - intHelper.addInteractor(wallXminInt); - - intHelper.selectBlocks(); - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end"); - ////////////////////////////////////// - - SPtr<SimulationObserver> ppblocks(new WriteBlocksSimulationObserver(grid, SPtr<UbScheduler>(new UbScheduler(1)), outputPath, WbWriterVtkXmlBinary::getInstance(), comm)); - ppblocks->update(0); - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nodb = (blocknx[0]) * (blocknx[1]) * (blocknx[2]); - unsigned long nod = nob * (blocknx[0]) * (blocknx[1]) * (blocknx[2]); - unsigned long nodg = nob * (blocknx[0] + gl) * (blocknx[1] + gl) * (blocknx[1] + gl); - real needMemAll = real(nodg * (27 * sizeof(real) + sizeof(int) + sizeof(float) * 4)); - real needMem = needMemAll / real(comm->getNumberOfProcesses()); - - if (myid == 0) - { - UBLOG(logINFO, "Number of blocks = " << nob); - UBLOG(logINFO, "Number of nodes = " << nod); - 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 * nodb); - } - UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); - } - - SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem); - grid->accept(kernelVisitor); - - if (refineLevel > 0) - { - SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - //BC - intHelper.setBC(); - - //initialization of distributions - InitDistributionsBlockVisitor initVisitor; - grid->accept(initVisitor); - - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - WriteBoundaryConditionsSimulationObserver ppgeo = WriteBoundaryConditionsSimulationObserver(grid, geoSch, outputPath, WbWriterVtkXmlBinary::getInstance(), comm); - ppgeo.update(0); - - if (myid == 0) UBLOG(logINFO, "Preprozess - end"); - } - else - { - restartSimulationObserver->restart((int)restartStep); - - //restartSimulationObserver->readBlocks((int)restartStep); - //restartSimulationObserver->readDataSet((int)restartStep); - ////restartSimulationObserver->readBoundaryConds((int)restartStep); - //grid->setTimeStep((int)restartStep); - - SetBcBlocksBlockVisitor v2(wallXmaxInt); - grid->accept(v2); - wallXmaxInt->initInteractor(); - - SetBcBlocksBlockVisitor v3(statorInt); - grid->accept(v3); - statorInt->initInteractor(); - - SetBcBlocksBlockVisitor v4(rotorInt); - grid->accept(v4); - rotorInt->initInteractor(); - - SetBcBlocksBlockVisitor v1(wallXminInt); - grid->accept(v1); - wallXminInt->initInteractor(); - - SPtr<SimulationObserver> ppblocks(new WriteBlocksSimulationObserver(grid, SPtr<UbScheduler>(new UbScheduler(1)), outputPath, - WbWriterVtkXmlBinary::getInstance(), comm)); - ppblocks->update(1); - } - - //omp_set_num_threads(numOfThreads); - - //set connectors - //InterpolationProcessorPtr iProcessor(new ThixotropyInterpolationProcessor()); - //static_pointer_cast<ThixotropyInterpolationProcessor>(iProcessor)->setOmegaMin(thix->getOmegaMin()); - //SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - //grid->accept(setConnsVisitor); - - OneDistributionSetConnectorsBlockVisitor setConnsVisitor(comm); - grid->accept(setConnsVisitor); - - grid->accept(bcVisitor); - - SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100)); - SPtr<SimulationObserver> npr(new NUPSCounterSimulationObserver(grid, nupsSch, numOfThreads, comm)); - - //write data for visualization of macroscopic quantities - SPtr<UbScheduler> visSch(new UbScheduler(outTime)); - //SPtr<UbScheduler> visSch(new UbScheduler(10,1)); - SPtr<WriteMacroscopicQuantitiesSimulationObserver> writeMQSimulationObserver(new WriteMacroscopicQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm)); - //writeMQSimulationObserver->update(100); - - SPtr<UbScheduler> forceSch(new UbScheduler(100)); - SPtr<CalculateTorqueSimulationObserver> fp = make_shared<CalculateTorqueSimulationObserver>(grid, forceSch, outputPath + "/torque/TorqueRotor.csv", comm); - fp->addInteractor(rotorInt); - SPtr<CalculateTorqueSimulationObserver> fp2 = make_shared<CalculateTorqueSimulationObserver>(grid, forceSch, outputPath + "/torque/TorqueStator.csv", comm); - fp2->addInteractor(statorInt); - - //SPtr<WriteThixotropyQuantitiesSimulationObserver> writeThixotropicMQSimulationObserver(new WriteThixotropyQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm)); - - SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1)); - SPtr<Simulation> simulation(new Simulation(grid, stepGhostLayer, endTime)); - simulation->addSimulationObserver(npr); - //simulation->addSimulationObserver(fp); - simulation->addSimulationObserver(fp2); - //simulation->addSimulationObserver(writeMQSimulationObserver); - //simulation->addSimulationObserver(writeThixotropicMQSimulationObserver); - simulation->addSimulationObserver(restartSimulationObserver); - - if (myid == 0) UBLOG(logINFO, "Simulation-start"); - simulation->run(); - 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[]) -{ - if (argv != NULL) - { - if (argv[1] != NULL) - { - //pflowForcing(string(argv[1])); - bflow(string(argv[1])); - } - else - { - cout << "Configuration file is missing!" << endl; - } - } - - return 0; -} diff --git a/apps/cpu/Wing/Bombadil.cfg b/apps/cpu/Wing/Bombadil.cfg deleted file mode 100644 index 17b15243d313b7ed6d5b8ae1516be90ad1c70ead..0000000000000000000000000000000000000000 --- a/apps/cpu/Wing/Bombadil.cfg +++ /dev/null @@ -1,8 +0,0 @@ -machine=Bombadil -path="d:/temp/wing/" -geoFile="d:/Data/SFB/grundgeometrie.stl" -numOfThreads=1 -availMem=15e9 -refineLevel=5 -blocknx=8 -endTime=10 \ No newline at end of file diff --git a/apps/cpu/Wing/CMakeLists.txt b/apps/cpu/Wing/CMakeLists.txt deleted file mode 100644 index a507c94a98eede5c4bbc67e71159038f53d5bb80..0000000000000000000000000000000000000000 --- a/apps/cpu/Wing/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(wing) - -INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(wing BINARY) diff --git a/apps/cpu/Wing/wing.cpp b/apps/cpu/Wing/wing.cpp deleted file mode 100644 index d7e4cd77057f3edb63432b25e50aecc285734a7e..0000000000000000000000000000000000000000 --- a/apps/cpu/Wing/wing.cpp +++ /dev/null @@ -1,414 +0,0 @@ -#include <iostream> -#include <string> - -#include <boost/pointer_cast.hpp> - -#include "vfluids.h" - -using namespace std; - - -void setup(const char *cstr1, const char *cstr2) -{ - try - { - //Sleep(30000); - - ConfigFileReader cf(cstr1); - if ( !cf.read() ) - { - std::string exceptionText = "Unable to read configuration file\n"; - throw exceptionText; - } - - //parameters from config file - string machine = cf.getValue("machine"); - string pathname = cf.getValue("path"); - string geoFile = cf.getValue("geoFile"); - int numOfThreads = UbSystem::stringTo<int>(cf.getValue("numOfThreads")); - double availMem = UbSystem::stringTo<double>(cf.getValue("availMem")); - int refineLevel = UbSystem::stringTo<int>(cf.getValue("refineLevel")); - int blocknx = UbSystem::stringTo<int>(cf.getValue("blocknx")); - - CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - if(machine == "Bombadil") int dumy=0; - else if(machine == "Ludwig" || machine == "HLRN") - { - if(myid ==0) - { - stringstream logFilename; - logFilename << pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - } - else throw UbException(UB_EXARGS, "unknown machine"); - - GbTriFaceMesh3DPtr geo (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(geoFile,"geo")); - if(myid == 0) GbSystem3D::writeGeoObject(geo.get(), pathname+"/geo/geo", WbWriterVtkXmlASCII::getInstance()); - - double dx = (fabs(geo->getX3Maximum()-geo->getX3Minimum())*10e-3)*(double)(1<<refineLevel); - dx /= 4.0; - - double blockLength = blocknx*dx; - - double offsetX1 = fabs(geo->getX1Maximum()-geo->getX1Minimum()); - double h = fabs(geo->getX3Maximum()-geo->getX3Minimum()); - double offsetX2 = fabs(geo->getX2Maximum()-geo->getX2Minimum())/3.0; - double offsetX3 = 3.0*h; //30.0*h; - - double g_minX1 = geo->getX1Minimum()-offsetX1; - double g_minX2 = geo->getX2Minimum()+offsetX2; - double g_minX3 = geo->getX3Centroid()-offsetX3; - - double g_maxX1 = geo->getX1Maximum()+5.0*offsetX1; - double g_maxX2 = g_minX2 + 4.0*blockLength; - double g_maxX3 = geo->getX3Centroid()+offsetX3; - - //########################################################################## - //## physical parameters - //########################################################################## - double Re = 1e6; - - double rhoLB = 0.0; - double rhoReal = 1.0; - double nueReal = 0.000015;//0.015; - - double lReal = 3.0;//<-m ;//Profile laenge in cm(! cm nicht m !) - double uReal = Re*nueReal/lReal; - - //##Machzahl: - //#Ma = uReal/csReal - double Ma = 0.1;//Ma-Real! - double csReal = uReal/Ma; - double hLB = lReal/dx; - - LBMUnitConverter unitConverter(lReal, csReal, rhoReal, hLB); - - double uLB = uReal * unitConverter.getFactorVelocityWToLb(); - double nueLB = nueReal * unitConverter.getFactorViscosityWToLb(); - - LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - - const int baseLevel = 0; - - //////////////////////////////////////////////////////////////////////// - //Grid - ////////////////////////////////////////////////////////////////////////// - Grid3DPtr grid(new Grid3D(comm)); - grid->setDeltaX(dx); - grid->setBlockNX(blocknx, blocknx, blocknx); - - GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); - //gridCube->setCenterCoordinates(geo->getX1Centroid(), geo->getX2Centroid(), geo->getX3Centroid()); - if(myid == 0) GbSystem3D::writeGeoObject(gridCube.get(),pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance()); - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - grid->setPeriodicX2(true); - grid->setPeriodicX3(true); - - double outTime = 1.0; - UbSchedulerPtr stepSch(new UbScheduler(outTime)); - //PostprocessorPtr pp(new D3Q27MacroscopicQuantitiesPostprocessor(grid, stepSch, pathname + "/steps/step", WbWriterVtkXmlASCII::getInstance(), conv, comm)); - - UbSchedulerPtr rSch(new UbScheduler()); - rSch->addSchedule(50,50,50); - RestartPostprocessorPtr rp(new RestartPostprocessor(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::TXT)); - - - std::string opt; - - if(cstr2!= NULL) - opt = std::string(cstr2); - - if/*(cstr== NULL)*/(cstr2!= NULL) - { - if(myid==0) UBLOG(logINFO,"Restart step: " << opt); - grid = rp->restart(UbSystem::stringTo<int>(opt)); - rp->reconnect(grid); - - SetForcingBlockVisitor forcingVisitor(0.0, 0.0, 0.0); - grid->accept(forcingVisitor); - - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - } - else -{ - //rp->addPostprocessor(pp); - if(myid ==0) - { - UBLOG(logINFO,"Parameters:"); - UBLOG(logINFO, "* Re ="<<Re); - UBLOG(logINFO, "* Ma ="<<Ma); - UBLOG(logINFO, "* uReal ="<<uReal); - UBLOG(logINFO, "* nueReal ="<<nueReal); - UBLOG(logINFO, "* nue ="<<nueLB); - UBLOG(logINFO, "* velocity ="<<uLB); - //UBLOG(logINFO, "* LX1 (world/LB)="<<kanallaengeSI<<"/"<<kanallaengeSI/coarseNodeDx); - //UBLOG(logINFO, "* LX2 (world/LB)="<<kanalbreiteSI<<"/"<<kanalbreiteSI/coarseNodeDx); - //UBLOG(logINFO, "* LX3 (world/LB)="<<kanalhoeheSI<<"/"<<kanalhoeheSI/coarseNodeDx); - UBLOG(logINFO, "* dx_base ="<<dx); - UBLOG(logINFO, "* dx_refine ="<<dx/(double)(1<<refineLevel)); - //UBLOG(logINFO, "* nx1/2/3 ="<<nx[0]<<"/"<<nx[1]<<"/"<<nx[2]); - UBLOG(logINFO, "* blocknx1/2/3 ="<<blocknx<<"/"<<blocknx<<"/"<<blocknx); - //UBLOG(logINFO, "* x2Periodic ="<<periodicx2); - //UBLOG(logINFO, "* x3Periodic ="<<periodicx3); - UBLOG(logINFO, "*****************************************"); - UBLOGML(logINFO, "UnitConverter:"<<unitConverter.toString()); - UBLOG(logINFO, "*****************************************"); - UBLOG(logINFO,"number of levels = " << refineLevel+1 ); - UBLOG(logINFO,"numOfThreads = " << numOfThreads ); - UBLOG(logINFO,"Preprozess - start"); - } - - - //inflow - GbCuboid3DPtr geoInflow (new GbCuboid3D(g_minX1-4.0*blockLength, g_minX2-4.0*blockLength, g_minX3-4.0*blockLength, g_minX1+2.0*dx, g_maxX2+4.0*blockLength, g_maxX3+4.0*blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname+"/geo/geoInflow", WbWriterVtkXmlASCII::getInstance()); - - //outflow - GbCuboid3DPtr geoOutflow (new GbCuboid3D(g_maxX1-2.0*dx, g_minX2-4.0*blockLength, g_minX3-4.0*blockLength, g_maxX1+4.0*blockLength, g_maxX2+4.0*blockLength, g_maxX3+4.0*blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); - - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm)); - - double scaleFactorX = 1.2; - double scaleFactorZ = 1.2; - //geo->scale(scaleFactorX, 1.0, scaleFactorZ); - if(myid == 0) GbSystem3D::writeGeoObject(geo.get(), pathname+"/geo/geo2", WbWriterVtkXmlASCII::getInstance()); - - int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr noSlipBCAdapter(new D3Q27NoSlipBCAdapter(bbOption)); - - Interactor3DPtr geoIntr = D3Q27TriFaceMeshInteractorPtr(new D3Q27TriFaceMeshInteractor(geo, grid, noSlipBCAdapter,Interactor3D::SOLID)); - - //boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(geoIntr)->refineBlockGridToLevel(refineLevel, 0.0, 5.0); - - if (refineLevel > 0) - { - if(myid == 0) UBLOG(logINFO,"Refinement - start"); - //RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel); - //refineHelper.addGbObject(geo, refineLevel); - //refineHelper.refine(); - RefineAroundGbObjectHelper refineHelper(grid, refineLevel, boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(geoIntr), 0.0, 0.5); - refineHelper.refine(); - if(myid == 0) UBLOG(logINFO,"Refinement - end"); - } - - ppblocks->update(0); - ppblocks.reset(); - return; - - //geo->scale(1.0/scaleFactorX, 1.0, 1.0/scaleFactorX); - //geo = GbTriFaceMesh3DPtr(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(geoFile,"geo")); - if(myid == 0) GbSystem3D::writeGeoObject(geo.get(), pathname+"/geo/geo3", WbWriterVtkXmlASCII::getInstance()); - - MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B, true, numOfThreads); - grid->accept( metisVisitor ); - - SolidBlocksHelper sd(grid, comm); - - mu::Parser fct; - fct.SetExpr("U"); - fct.DefineConst("U", uLB); - - //inflow - D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter (true, false ,false ,fct, 0, D3Q27BCFunction::INFCONST)); - velBCAdapter->setSecondaryBcOption(2); - D3Q27InteractorPtr inflowIntr = D3Q27InteractorPtr( new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID)); - - //outflow - D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB)); - denBCAdapter->setSecondaryBcOption(0); - D3Q27InteractorPtr outflowIntr = D3Q27InteractorPtr( new D3Q27Interactor(geoOutflow, grid, denBCAdapter,Interactor3D::SOLID)); - - - sd.addInteractor(inflowIntr); - sd.addInteractor(outflowIntr); - sd.addInteractor(geoIntr); - - sd.deleteSolidBlocks(); - - grid->accept( metisVisitor ); - - sd.setTransBlocks(); - - ppblocks->update(0); - ppblocks.reset(); - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - - //domain decomposition for threads - //PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - //grid->accept(pqPartVisitor); - - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nodb = (blocknx) * (blocknx) * (blocknx); - unsigned long nod = nob * (blocknx) * (blocknx) * (blocknx); - unsigned long nodg = nob * (blocknx+gl) * (blocknx+gl) * (blocknx+gl); - double needMemAll = double(nodg*(27*sizeof(double) + sizeof(int) + sizeof(float)*4)); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - if(myid == 0) - { - UBLOG(logINFO,"Number of blocks = " << nob); - UBLOG(logINFO,"Number of nodes = " << nod); - 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*nodb); - } - UBLOG(logINFO,"Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO,"Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO,"Available memory per process = " << availMem << " bytes"); - } - - LBMKernel3DPtr kernel; - kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx, blocknx, blocknx, LBMKernelETD3Q27CCLB::NORMAL)); - - //mu::Parser fctForcingX1; - //fctForcingX1.SetExpr("Fx1"); - //fctForcingX1.DefineConst("Fx1", 9.99685e-7); - - //kernel->setForcingX1(fctForcingX1); - //kernel->setWithForcing(true); - // - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem); - grid->accept(kernelVisitor); - - if (refineLevel > 0) - { - D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - //UbSchedulerPtr geoSch(new UbScheduler(1)); - //D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - // new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv, comm, true)); - //ppgeo->update(0); - //ppgeo.reset(); - - //return; - - //inflow - grid->addAndInitInteractor(inflowIntr); - - //outflow - grid->addAndInitInteractor(outflowIntr); - - //geo - grid->addAndInitInteractor(geoIntr); - - //initialization of distributions - D3Q27ETInitDistributionsBlockVisitor initVisitor(nueLB, rhoLB); - initVisitor.setVx1(fct); - initVisitor.setNu(nueLB); - grid->accept(initVisitor); - - //Postrozess - //UbSchedulerPtr geoSch(new UbScheduler(1)); - //D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - // new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv, comm, true)); - //ppgeo->update(0); - //ppgeo.reset(); - - { - UbSchedulerPtr geoSch(new UbScheduler(1)); - //D3Q27MacroscopicQuantitiesPostprocessor ppgeo(grid,geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv, comm, true); - D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv, true)); - //grid->addObserver(ppgeo); - grid->doPostProcess(0); - //grid->notifyObservers(0); - //grid->removeObserver(ppgeo); - } - - //grid->notifyObservers(0); - - //UbSchedulerPtr stepSch(new UbScheduler(outTime)); - D3Q27MacroscopicQuantitiesPostprocessorPtr pp(new D3Q27MacroscopicQuantitiesPostprocessor(grid, stepSch, pathname + "/steps/step", WbWriterVtkXmlASCII::getInstance(), conv)); - rp->addPostprocessor(pp); - - if(myid == 0) UBLOG(logINFO,"Preprozess - end"); -} - UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); - NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm); - - // double outTime = 3.0; - // UbSchedulerPtr stepSch(new UbScheduler(outTime)); - //UbSchedulerPtr stepSch(new UbScheduler()); - //stepSch->addSchedule(10, 100, 1000); - //nodeSch->addSchedule(1000, 1000, 10000); - //nodeSch->addSchedule(10000, 10000, 50000); - //stepSch->addSchedule(100, 100, 1000); - - //UbSchedulerPtr st(new UbScheduler(100,50,1000)); - //UbSchedulerPtr rs(new UbScheduler(3)); - //AverageValuesPostprocessor ap(grid, pathname + "/av/av", WbWriterVtkXmlASCII::getInstance(), stepSch, rs, comm); - - //D3Q27ShearStressPostprocessor shs(grid,pathname + "/shs/shs", WbWriterVtkXmlASCII::getInstance(), stepSch, rs, comm); - //shs.addInteractor(boost::dynamic_pointer_cast<D3Q27Interactor>(addWallZminInt)); - - //D3Q27MacroscopicQuantitiesPostprocessor pp(grid, stepSch, pathname + "/steps/step", WbWriterVtkXmlASCII::getInstance(), conv, comm); - - UbSchedulerPtr visSch(new UbScheduler(1)); - //UbSchedulerPtr visSch(stepSch); - double endTime = UbSystem::stringTo<int>(cf.getValue("endTime"));//10001.0; - - //cout << "PID = " << myid << " Total Physical Memory (RAM): " << MemoryUtil::getTotalPhysMem()<<endl; - //cout << "PID = " << myid << " Physical Memory currently used: " << MemoryUtil::getPhysMemUsed()<<endl; - //cout << "PID = " << myid << " Physical Memory currently used by current process: " << MemoryUtil::getPhysMemUsedByMe()<<endl; - - 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[]) -{ - - if ( argv != NULL ) - { - if (argc > 1) - { - setup(argv[1], argv[2]); - } - else - { - cout << "Configuration file must be set!: " << argv[0] << " <config file>" << endl << std::flush; - } - } - - return 0; -} - diff --git a/apps/cpu/aperm/CMakeLists.txt b/apps/cpu/aperm/CMakeLists.txt deleted file mode 100644 index c6362507ee96c1f5712e2fce600e5f44a334e2ed..0000000000000000000000000000000000000000 --- a/apps/cpu/aperm/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(aperm) - -INCLUDE(${APPS_ROOT}/IncludsList.cmake) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(aperm BINARY) diff --git a/apps/cpu/aperm/PA200-250-50_800MPI.cfg b/apps/cpu/aperm/PA200-250-50_800MPI.cfg deleted file mode 100644 index 9fc6561972b903fbda884e8341c60e8801e1c8c7..0000000000000000000000000000000000000000 --- a/apps/cpu/aperm/PA200-250-50_800MPI.cfg +++ /dev/null @@ -1,53 +0,0 @@ -pathname = /hpc3lustre/work/koskuche/SFB880/Permeability/anisotropic/PA200-250-50_800MPI -pathGeo = /hpc3lustre/work/koskuche/SFB880/Materials/anisotropic - -numOfThreads = 1 -availMem = 11e9 -logToFile = true - -#porous media -rawFile = true -sampleFilename = /PA_200-250-50%_gewalzt_1575x1616x1643_32922.raw - -#diminsions [voxel] -pmNX1 = 1575 -pmNX2 = 1616 -pmNX3 = 1643 - -#threshold -lthreshold = 32922 -uthreshold = 65535 - -#diminsions [m] -pmL1 = 15.75e-3 -pmL2 = 16.16e-3 -pmL3 = 16.43e-3 - -#grid -blocknx = 32 -nx3 = 10 -deltax = 20e-6 -spongeLayer=false - -#physic -newPressure = false -dp_LB = 1e-7 -newViscosity = false -nu_LB = 0.0005 - -timeSeriesFile = /timeseries/1 -timeSeriesOutTime = 1000 - -gridPrepare = true -numOfParts = 800 - -restartStep = 50000 -restartStepStart=50000 -flowInit = true - -endTime = 800000 -outTime = 50000 - -nupsStep = 1000 1000 10000000 - - diff --git a/apps/cpu/aperm/PA80-110+120-150_MPI.cfg b/apps/cpu/aperm/PA80-110+120-150_MPI.cfg deleted file mode 100644 index 6ba92ac1503650cdc40f56494927791a8a6c51c5..0000000000000000000000000000000000000000 --- a/apps/cpu/aperm/PA80-110+120-150_MPI.cfg +++ /dev/null @@ -1,50 +0,0 @@ -pathname = /hpc3lustre/work/koskuche/SFB880/Permeability/anisotropic/PA80-110+120-150_MPI -pathGeo = /hpc3lustre/work/koskuche/SFB880/Materials/anisotropic - -numOfThreads = 1 -availMem = 11e9 -logToFile = true - -#porous media -rawFile = false -#sampleFilename = /PA_80-110+120-150_1824x1735x1603_8656.raw -sampleFilename = /vtk/PA80-110+120-150_1600x1600x1600_8656.vti - -#diminsions [voxel] -pmNX1 = 1600 -pmNX2 = 1600 -pmNX3 = 1600 - -#threshold -lthreshold = 8656 -uthreshold = 30294 - -#diminsions [m] -pmL1 = 16e-3 -pmL2 = 16e-3 -pmL3 = 16e-3 - - -#grid -blocknx = 32 -nx3 = 10 -deltax = 16e-6 -spongeLayer=false - -#physic -dp_LB = 1e-6 -nu_LB = 0.0005 - -timeSeriesFile = /timeseries/1 -timeSeriesOutTime = 1000 - -restartStep = 50000 -restartStepStart=50000 - -endTime = 800000 -outTime = 50000 - -nupsStep = 1000 1000 10000000 - -gridPrepare = false -numOfParts = 800 diff --git a/apps/cpu/aperm/PA80-110+120-150_dx80.cfg b/apps/cpu/aperm/PA80-110+120-150_dx80.cfg deleted file mode 100644 index 8e0237077b725ff4adb9ed8e3d4bfeb4352ea697..0000000000000000000000000000000000000000 --- a/apps/cpu/aperm/PA80-110+120-150_dx80.cfg +++ /dev/null @@ -1,63 +0,0 @@ -pathname = d:/temp/apermPA80-110+120-150 -pathGeo = f:/ - -numOfThreads = 4 -availMem = 11e9 -logToFile = flse - -#porous media -rawFile = false -sampleFilename = /PA80-110+120-150_1600x1600x1600_8656.vti - -#diminsions [voxel] -pmNX1 = 1600 -pmNX2 = 1600 -pmNX3 = 1600 - -#threshold -lthreshold = 8656 -uthreshold = 30294 - -#diminsions [m] -pmL1 = 16e-3 -pmL2 = 16e-3 -pmL3 = 16e-3 - -pmDeltas = true - -#deltas [m] -pmDeltaX1 = 0.01e-3 -pmDeltaX2 = 0.01e-3 -pmDeltaX3 = 0.01e-3 - -yDir = false -zDir = false - -#grid -blocknx = 32 -nx3 = 10 -deltax = 80e-6 -spongeLayer=false - -#physic -newPressure = false -dp_LB = 1e-6 - -newViscosity = false -nu_LB = 0.0005 - -vx1=0 -vx2=0 -vx3=0 - -timeSeriesFile = /timeseries/1 -timeSeriesOutTime = 1000 - -restartStep = 50000 -restartStepStart=50000 - -endTime = 800000 -outTime = 50000 - -nupsStep = 1000 1000 10000000 - diff --git a/apps/cpu/aperm/PA80-110-200-250-HLRN.cfg b/apps/cpu/aperm/PA80-110-200-250-HLRN.cfg deleted file mode 100644 index a6a4511ddf184601ad802453c2eaff88cb630655..0000000000000000000000000000000000000000 --- a/apps/cpu/aperm/PA80-110-200-250-HLRN.cfg +++ /dev/null @@ -1,70 +0,0 @@ -pathname = /gfs2/work/niikonst/scratch/SFB880/Permeability/anisotropic/PA80-110-200-250-X_test2 -pathGeo = /gfs2/work/niikonst/data/materials - -numOfThreads = 12 -availMem = 32e9 -logToFile = true - -#porous media -rawFile = true -sampleFilename = /PA_80-110+200-250_1368x1368x1368_11461.raw - -#diminsions [voxel] -pmNX1 = 1368 -pmNX2 = 1368 -pmNX3 = 1368 - -#threshold -lthreshold = 11461 -uthreshold = 65535 - -#diminsions [m] -pmL1 = 0.009375 -pmL2 = 0.009375 -pmL3 = 0.009375 - -pmDeltas = true - -#deltas [m] -pmDeltaX1 = 10e-6 -pmDeltaX2 = 10e-6 -pmDeltaX3 = 10e-6 - -yDir = false -zDir = false - -#grid -blocknx = 32 -nx3 = 10 -deltax = 40e-6 #10e-6 -spongeLayer=false - -#physic -newPressure = false -dp_LB = 1e-6 -newViscosity = false -nu_LB = 0.0005 - -vx1=0 -vx2=0 -vx3=0 - -timeSeriesFile = /timeseries/1 -timeSeriesOutTime = 100 - - -newStart = false -restartStep = 480000 - -cpStep = 960000 -cpStepStart = 960000 - -outTimeStep = 960000 -outTimeStart = 960000 - -nupsStep = 1000 1000 10000000 - -endTime = 960000 - - -#restartStepStart = 240000000 diff --git a/apps/cpu/aperm/aperm.cpp b/apps/cpu/aperm/aperm.cpp deleted file mode 100644 index 44b48bb3cfd4038da8be18bfa1a0328edb7cb570..0000000000000000000000000000000000000000 --- a/apps/cpu/aperm/aperm.cpp +++ /dev/null @@ -1,574 +0,0 @@ -#include <iostream> -#include <string> -#include <VirtualFluids.h> - -using namespace std; - -void changeDP() -{ -} -////////////////////////////////////////////////////////////////////////// -void run(string configname) -{ - try - { - vf::basics::ConfigurationFile config; - config.load(configname); - - string pathname = config.getString("pathname"); - string pathGeo = config.getString("pathGeo"); - int numOfThreads = config.getInt("numOfThreads"); - string sampleFilename = config.getString("sampleFilename"); - int pmNX1 = config.getInt("pmNX1"); - int pmNX2 = config.getInt("pmNX2"); - int pmNX3 = config.getInt("pmNX3"); - double lthreshold = config.getDouble("lthreshold"); - double uthreshold = config.getDouble("uthreshold"); - double pmL1 = config.getDouble("pmL1"); - double pmL2 = config.getDouble("pmL2"); - double pmL3 = config.getDouble("pmL3"); - int blocknx = config.getInt("blocknx"); - //double nx3 = config.getDouble("nx3"); - double dpLB = config.getDouble("dp_LB"); - double nu_LB = config.getDouble("nu_LB"); - string timeSeriesFile = config.getString("timeSeriesFile"); - double restartStep = config.getDouble("restartStep"); - //double restartStepStart = config.getDouble("restartStepStart"); - double endTime = config.getDouble("endTime"); - double outTimeStep = config.getValue<double>("outTimeStep"); - double outTimeStart = config.getValue<double>("outTimeStart"); - double availMem = config.getDouble("availMem"); - bool rawFile = config.getBool("rawFile"); - double timeSeriesOutTime = config.getDouble("timeSeriesOutTime"); - bool logToFile = config.getBool("logToFile"); - bool spongeLayer = config.getBool("spongeLayer"); - vector<double> nupsStep = config.getVector<double>("nupsStep"); - double deltax = config.getDouble("deltax"); - bool newViscosity = config.getBool("newViscosity"); - bool newPressure = config.getBool("newPressure"); - bool pmDeltas = config.getBool("pmDeltas"); - double pmDeltaX1 = config.getDouble("pmDeltaX1"); - double pmDeltaX2 = config.getDouble("pmDeltaX2"); - double pmDeltaX3 = config.getDouble("pmDeltaX3"); - double vx1 = config.getDouble("vx1"); - double vx2 = config.getDouble("vx2"); - double vx3 = config.getDouble("vx3"); - bool yDir = config.getBool("yDir"); - bool zDir = config.getBool("zDir"); - double cpStep = config.getDouble("cpStep"); - double cpStepStart = config.getDouble("cpStepStart"); - bool newStart = config.getValue<bool>("newStart"); - - SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - if (logToFile) - { -#if defined(__unix__) - if (myid==0) - { - const char* str = pathname.c_str(); - int status = 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); - - if (myid==0) UBLOG(logINFO, "Testcase permeability"); - - string machinename = UbSystem::getMachineName(); - //UBLOG(logINFO, "PID = " << myid << " Hostname: " << machinename); - //UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - //UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - //UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - - int blocknx1 = blocknx; - int blocknx2 = blocknx; - int blocknx3 = blocknx; - - LBMReal rhoLB = 0.0; - double rhoLBinflow = dpLB*3.0; - - SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter()); - - const int baseLevel = 0; - - double coord[6]; - //double deltax; - - SPtr<Grid3D> grid(new Grid3D(comm)); - - ////////////////////////////////////////////////////////////////////////// - //restart - //SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStepStart)); - //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT); - - SPtr<UbScheduler> rSch2(new UbScheduler(cpStep, cpStepStart)); - MPIIORestart11CoProcessor rcp(grid, rSch2, pathname, comm); - - SPtr<LBMKernel> kernel; - kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel(blocknx1, blocknx2, blocknx3, IncompressibleCumulantLBMKernel::NORMAL)); - - //SPtr<BCProcessor> bcProc(new BCProcessor()); - SPtr<BCProcessor> bcProc = SPtr<BCProcessor>(new ThinWallBCProcessor()); - kernel->setBCProcessor(bcProc); - - rcp.setLBMKernel(kernel); - rcp.setBCProcessor(bcProc); - rcp.setChunk(1); - ////////////////////////////////////////////////////////////////////////// - - //BC Adapter - ////////////////////////////////////////////////////////////////////////////// - SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter()); - noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new ThinWallNoSlipBCAlgorithm())); - //noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm())); - - SPtr<BCAdapter> denBCAdapterInflow(new DensityBCAdapter(rhoLBinflow)); - denBCAdapterInflow->setBcAlgorithm(SPtr<BCAlgorithm>(new NonEqDensityBCAlgorithm())); - - SPtr<BCAdapter> denBCAdapterOutflow(new DensityBCAdapter(rhoLB)); - denBCAdapterOutflow->setBcAlgorithm(SPtr<BCAlgorithm>(new NonEqDensityBCAlgorithm())); - ////////////////////////////////////////////////////////////////////////////////// - //BS visitor - BoundaryConditionsBlockVisitor bcVisitor; - bcVisitor.addBC(noSlipBCAdapter); - bcVisitor.addBC(denBCAdapterInflow); - bcVisitor.addBC(denBCAdapterOutflow); - - if (newStart) - { - if (myid==0) UBLOG(logINFO, "new start.."); - if (myid==0) UBLOG(logINFO, "preprocess start.."); - - //UBLOG(logINFO, "new start PID = " << myid << " Hostname: " << machinename); - //UBLOG(logINFO, "new start PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - //UBLOG(logINFO, "new start PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - //UBLOG(logINFO, "new start PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - - string samplePathname = pathGeo+sampleFilename; - - double deltaVoxelX1 = pmL1/(double)pmNX1; - double deltaVoxelX2 = pmL2/(double)pmNX2; - double deltaVoxelX3 = pmL3/(double)pmNX3; - - if (pmDeltas) - { - deltaVoxelX1 = pmDeltaX1; - deltaVoxelX2 = pmDeltaX2; - deltaVoxelX3 = pmDeltaX3; - } - - if (myid==0) UBLOG(logINFO, "read voxel matrix: start"); - GbVoxelMatrix3DPtr sample(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold)); - if (rawFile) - { - sample->readMatrixFromRawFile<unsigned short>(samplePathname, GbVoxelMatrix3D::BigEndian); - } - else - { - sample->readMatrixFromVtiASCIIFile(samplePathname); - } - - sample->setVoxelMatrixDelta((float)deltaVoxelX1, (float)deltaVoxelX2, (float)deltaVoxelX3); - sample->setVoxelMatrixMininum(0.0, 0.0, 0.0); - if (myid==0) UBLOG(logINFO, "read voxel matrix: end"); - - - if (myid==0) UBLOG(logINFO, "rotate voxel matrix: start"); - if (yDir) - { - sample->rotate90aroundZ(); - //sample->rotate90aroundZ(); - //sample->rotate90aroundZ(); - } - if (zDir) - { - sample->rotate90aroundY(); - } - if (myid==0) UBLOG(logINFO, "rotate voxel matrix: end"); - - if (myid==0) sample->writeToVTKImageDataASCII(pathname+"/geo/sample"); - - /////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////// - - double offset1 = sample->getLengthX1()/10.0; - double offset2 = 2.0*offset1; - //double offset2 = offset1; - //bounding box - double g_minX1 = sample->getX1Minimum()-offset1; - double g_minX2 = sample->getX2Minimum(); - double g_minX3 = sample->getX3Minimum(); - - double g_maxX1 = sample->getX1Maximum()+offset2; - double g_maxX2 = sample->getX2Maximum(); - double g_maxX3 = sample->getX3Maximum(); - - //////////////////////////////////////////////////////////////////////////// - //double nx1_temp = floor((g_maxX1-g_minX1)/(deltax*(double)blocknx)); - - //deltax = (g_maxX1-g_minX1)/(nx1_temp*(double)blocknx); - - // g_maxX3 -= 0.5* deltax; - //////////////////////////////////////////////////////////////////////////// - - ////deltax = (g_maxX3-g_minX3) /(nx3*blocknx3); - - double blockLength = (double)blocknx1*deltax; - - grid->setPeriodicX1(false); - grid->setPeriodicX2(false); - grid->setPeriodicX3(false); - grid->setDeltaX(deltax); - grid->setBlockNX(blocknx1, blocknx2, blocknx3); - - 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()); - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - if (myid==0) - { - UBLOG(logINFO, "Parameters:"); - UBLOG(logINFO, "rho_LB = "<<rhoLB); - UBLOG(logINFO, "nu_LB = "<<nu_LB); - UBLOG(logINFO, "dp_LB = "<<dpLB); - UBLOG(logINFO, "dx = "<<deltax<<" m"); - UBLOG(logINFO, "numOfThreads = "<<numOfThreads); - UBLOG(logINFO, "path = "<<pathname); - UBLOG(logINFO, "Preprozess - start"); - } - - //walls - GbCuboid3DPtr addWallYmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_minX2, g_maxX3+blockLength)); - if (myid==0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname+"/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3)); - if (myid==0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallYmax(new GbCuboid3D(g_minX1-blockLength, g_maxX2, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if (myid==0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if (myid==0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", 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()); - - WriteBlocksSPtr<CoProcessor> ppblocks(new WriteBlocksCoProcessor(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - - - //PM interactor - SPtr<D3Q27Interactor> sampleInt(new D3Q27Interactor(sample, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - //wall interactors - SPtr<D3Q27Interactor> addWallYminInt(new D3Q27Interactor(addWallYmin, grid, noSlipBCAdapter, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, noSlipBCAdapter, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, noSlipBCAdapter, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - - SPtr<D3Q27Interactor> inflowInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, denBCAdapterInflow, Interactor3D::SOLID)); - - //outflow - SPtr<D3Q27Interactor> outflowInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, denBCAdapterOutflow, Interactor3D::SOLID)); - - - //UBLOG(logINFO, "PID = "<<myid<<" Hostname: "<<machinename); - //UBLOG(logINFO, "PID = "<<myid<<" Total Physical Memory (RAM): "<<Utilities::getTotalPhysMem()); - //UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used: "<<Utilities::getPhysMemUsed()); - //UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()); - - - //////////////////////////////////////////// - //METIS - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::RECURSIVE)); - //////////////////////////////////////////// - //Zoltan - //SPtr<Grid3DVisitor> zoltanVisitor(new ZoltanPartitioningGridVisitor(comm, D3Q27System::BSW, 1)); - //grid->accept(zoltanVisitor); - - /////delete solid blocks - if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - intHelper.addInteractor(addWallYminInt); - intHelper.addInteractor(addWallZminInt); - intHelper.addInteractor(addWallYmaxInt); - intHelper.addInteractor(addWallZmaxInt); - intHelper.addInteractor(inflowInt); - intHelper.addInteractor(outflowInt); - intHelper.addInteractor(sampleInt); - intHelper.selectBlocks(); - if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - end"); - ////////////////////////////////////// - - //set connectors - InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator()); - SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor); - grid->accept(setConnsVisitor); - - //domain decomposition for threads - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - ppblocks->process(0); - ppblocks.reset(); - - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nodb = (blocknx1)* (blocknx2)* (blocknx3); - unsigned long nod = nob * (blocknx1)* (blocknx2)* (blocknx3); - unsigned long nodg = nob * (blocknx1+gl) * (blocknx2+gl) * (blocknx3+gl); - double needMemAll = double(nodg*(27*sizeof(double)+sizeof(int)+sizeof(float)*4)); - double needMem = needMemAll/double(comm->getNumberOfProcesses()); - - if (myid==0) - { - UBLOG(logINFO, "Number of blocks = "<<nob); - UBLOG(logINFO, "Number of nodes = "<<nod); - 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*nodb); - } - UBLOG(logINFO, "Necessary memory = "<<needMemAll<<" bytes"); - UBLOG(logINFO, "Necessary memory per process = "<<needMem<<" bytes"); - UBLOG(logINFO, "Available memory per process = "<<availMem<<" bytes"); - } - - //SPtr<LBMKernel> kernel; - //kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel(blocknx1, blocknx2, blocknx3, IncompressibleCumulantLBMKernel::NORMAL)); - - ////SPtr<BCProcessor> bcProc(new BCProcessor()); - //SPtr<BCProcessor> bcProc = SPtr<BCProcessor>(new ThinWallBCProcessor()); - kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nu_LB, availMem, needMem); - grid->accept(kernelVisitor); - - //BC - intHelper.setBC(); - - //BS visitor - grid->accept(bcVisitor); - - //Press*1.6e8+(14.76-coordsX)/3.5*5000 - //initialization of distributions - mu::Parser fct; - fct.SetExpr("(x1max-x1)/l*dp*3.0"); - fct.DefineConst("dp", dpLB); - fct.DefineConst("x1max", g_maxX1); - fct.DefineConst("l", g_maxX1-g_minX1); - - InitDistributionsBlockVisitor initVisitor(nu_LB, rhoLB); - initVisitor.setRho(fct); - grid->accept(initVisitor); - - //Postrozess - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - WriteBoundaryConditionsSPtr<CoProcessor> ppgeo( - new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - ppgeo->process(0); - ppgeo.reset(); - - coord[0] = sample->getX1Minimum(); - coord[1] = sample->getX2Minimum(); - coord[2] = sample->getX3Minimum(); - coord[3] = sample->getX1Maximum(); - coord[4] = sample->getX2Maximum(); - coord[5] = sample->getX3Maximum(); - - //////////////////////////////////////////////////////// - UbFileOutputASCII outf(pathname+"/checkpoints/coord.txt"); - outf.writeDouble(deltax); - outf.writeDouble(coord[0]); - outf.writeDouble(coord[1]); - outf.writeDouble(coord[2]); - outf.writeDouble(coord[3]); - outf.writeDouble(coord[4]); - outf.writeDouble(coord[5]); - outf.writeDouble(g_minX1); - outf.writeDouble(g_maxX1); - outf.writeDouble(availMem); - outf.writeDouble(needMem); - //////////////////////////////////////////////////////// - - grid->addInteractor(inflowInt); - - if (myid==0) UBLOG(logINFO, "Preprozess - end"); - } - else - { - //////////////////////////////////////////////////////// - UbFileInputASCII inf(pathname+"/checkpoints/coord.txt"); - deltax = inf.readDouble(); - coord[0] = inf.readDouble(); - coord[1] = inf.readDouble(); - coord[2] = inf.readDouble(); - coord[3] = inf.readDouble(); - coord[4] = inf.readDouble(); - coord[5] = inf.readDouble(); - double g_minX1 = inf.readDouble(); - double g_maxX1 = inf.readDouble(); - double availMem = inf.readDouble(); - double needMem = inf.readDouble(); - //////////////////////////////////////////////////////// - - rcp.restart((int)restartStep); - grid->setTimeStep(restartStep); - - //new nu - if (newViscosity) - { - ViscosityBlockVisitor nuVisitor(nu_LB); - grid->accept(nuVisitor); - } - - //new dp - if (newPressure) - { - Grid3D::Interactor3DSet interactors = grid->getInteractors(); - interactors[0]->setGrid3D(grid); - dynamicPointerCast<D3Q27Interactor>(interactors[0])->deleteBCAdapter(); - SPtr<BCAdapter> denBCAdapterFront(new DensityBCAdapter(rhoLBinflow)); - denBCAdapterFront->setBcAlgorithm(SPtr<BCAlgorithm>(new EqDensityBCAlgorithm())); - dynamicPointerCast<D3Q27Interactor>(interactors[0])->addBCAdapter(denBCAdapterFront); - interactors[0]->updateInteractor(); - } - - if (myid==0) - { - UBLOG(logINFO, "Parameters:"); - UBLOG(logINFO, "rho_LB = "<<rhoLB); - UBLOG(logINFO, "nu_LB = "<<nu_LB); - UBLOG(logINFO, "dp_LB = "<<dpLB); - UBLOG(logINFO, "dx = "<<deltax<<" m"); - } - - //set connectors - InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator()); - SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor); - grid->accept(setConnsVisitor); - - //domain decomposition for threads - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - //BS visitor - grid->accept(bcVisitor); - - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - WriteBoundaryConditionsCoProcessor ppgeo = WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm); - ppgeo.process(1); - - - if (myid==0) UBLOG(logINFO, "Restart - end"); - } - SPtr<UbScheduler> nupsSch(new UbScheduler(nupsStep[0], nupsStep[1], nupsStep[2])); - //nupsSch->addSchedule(nupsStep[0], nupsStep[1], nupsStep[2]); - NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); - - SPtr<UbScheduler> stepSch(new UbScheduler(outTimeStep,outTimeStart)); - - WriteMacroscopicQuantitiesCoProcessor pp(grid, stepSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm); - - deltax = grid->getDeltaX(baseLevel); - double dxd2 = deltax/2.0; - - SPtr<IntegrateValuesHelper> ih1(new IntegrateValuesHelper(grid, comm, coord[0]-dxd2*10.0, coord[1]-dxd2, coord[2]-dxd2, - coord[0]-dxd2*10.0-2.0*dxd2, coord[4]+dxd2, coord[5]+dxd2)); - - //D3Q27SPtr<IntegrateValuesHelper> ih2(new D3Q27IntegrateValuesHelper(grid, comm, coord[3]/2.0, coord[1] - dxd2, coord[2] - dxd2, - // coord[3]/2.0 + 2.0*dxd2, coord[4] + dxd2, coord[5] + dxd2)); - SPtr<IntegrateValuesHelper> ih2(new IntegrateValuesHelper(grid, comm, coord[0], coord[1], coord[2], coord[3], coord[4], coord[5])); - - SPtr<IntegrateValuesHelper> ih3(new IntegrateValuesHelper(grid, comm, coord[3]+dxd2*10.0, coord[1]-dxd2, coord[2]-dxd2, - coord[3]+dxd2*10.0+2.0*dxd2, coord[4]+dxd2, coord[5]+dxd2)); - - //D3Q27SPtr<IntegrateValuesHelper> ih1(new D3Q27IntegrateValuesHelper(grid, comm, coord[0], coord[1], coord[2], coord[3], coord[4], coord[5])); - if (myid==0) GbSystem3D::writeGeoObject(ih1->getBoundingBox().get(), pathname+"/geo/ih1", WbWriterVtkXmlBinary::getInstance()); - if (myid==0) GbSystem3D::writeGeoObject(ih2->getBoundingBox().get(), pathname+"/geo/ih2", WbWriterVtkXmlBinary::getInstance()); - if (myid==0) GbSystem3D::writeGeoObject(ih3->getBoundingBox().get(), pathname+"/geo/ih3", WbWriterVtkXmlBinary::getInstance()); - - double factorp = 1; // dp_real / dp_LB; - double factorv = 1;// dx / dt; - SPtr<UbScheduler> stepMV(new UbScheduler(timeSeriesOutTime)); - - TimeseriesCoProcessor tsp1(grid, stepMV, ih1, pathname+timeSeriesFile+"_1", comm); - TimeseriesCoProcessor tsp2(grid, stepMV, ih2, pathname+timeSeriesFile+"_2", comm); - TimeseriesCoProcessor tsp3(grid, stepMV, ih3, pathname+timeSeriesFile+"_3", comm); - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Total Physical Memory (RAM): "<<Utilities::getTotalPhysMem()); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used: "<<Utilities::getPhysMemUsed()); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()); - } - - const SPtr<ConcreteCalculatorFactory> calculatorFactory = std::make_shared<ConcreteCalculatorFactory>(stepSch); - CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, calculatorFactory, CalculatorType::HYBRID)); - if (myid==0) UBLOG(logINFO, "Simulation-start"); - calculation->calculate(); - if (myid==0) UBLOG(logINFO, "Simulation-end"); - - //////MPIIORestart2CoProcessor - //grid->deleteBlockIDs(); - //RenumberBlockVisitor renumber; - //grid->accept(renumber); - //SPtr<UbScheduler> iiSch(new UbScheduler(1)); - //MPIIORestart2CoProcessor rcpInit(grid, iiSch, pathname, comm); - //rcpInit.process(300); - } - catch (exception& e) - { - cerr<<e.what()<<endl<<flush; - } - catch (string& s) - { - cerr<<s<<endl; - } - catch (...) - { - cerr<<"unknown exception"<<endl; - } - -} -////////////////////////////////////////////////////////////////////////// -int main(int argc, char* argv[]) -{ - - if (argv!=NULL) - { - if (argv[1]!=NULL) - { - run(string(argv[1])); - } - else - { - cout<<"Configuration file is missing!"<<endl; - } - } - - return 0; -} diff --git a/apps/cpu/aperm/aperm.cpp.old b/apps/cpu/aperm/aperm.cpp.old deleted file mode 100644 index 3776c454f75d0510a6ec4f033d25f35aa82618d4..0000000000000000000000000000000000000000 --- a/apps/cpu/aperm/aperm.cpp.old +++ /dev/null @@ -1,573 +0,0 @@ -#include <iostream> -#include <string> -#include <VirtualFluids.h> - -using namespace std; - -void changeDP() -{ -} -////////////////////////////////////////////////////////////////////////// -void run(string configname) -{ - try - { - vf::basics::ConfigurationFile config; - config.load(configname); - - string pathname = config.getString("pathname"); - string pathGeo = config.getString("pathGeo"); - int numOfThreads = config.getInt("numOfThreads"); - string sampleFilename = config.getString("sampleFilename"); - int pmNX1 = config.getInt("pmNX1"); - int pmNX2 = config.getInt("pmNX2"); - int pmNX3 = config.getInt("pmNX3"); - double lthreshold = config.getDouble("lthreshold"); - double uthreshold = config.getDouble("uthreshold"); - double pmL1 = config.getDouble("pmL1"); - double pmL2 = config.getDouble("pmL2"); - double pmL3 = config.getDouble("pmL3"); - int blocknx = config.getInt("blocknx"); - double nx3 = config.getDouble("nx3"); - double dp_LB = config.getDouble("dp_LB"); - double nu_LB = config.getDouble("nu_LB"); - string timeSeriesFile = config.getString("timeSeriesFile"); - double restartStep = config.getDouble("restartStep"); - double restartStepStart = config.getDouble("restartStepStart"); - double endTime = config.getDouble("endTime"); - double outTime = config.getDouble("outTime"); - double availMem = config.getDouble("availMem"); - bool rawFile = config.getBool("rawFile"); - double timeSeriesOutTime = config.getDouble("timeSeriesOutTime"); - bool logToFile = config.getBool("logToFile"); - bool spongeLayer = config.getBool("spongeLayer"); - vector<double> nupsStep = config.getVector<double>("nupsStep"); - int numOfParts = config.getInt("numOfParts"); - bool gridPrepare = config.getBool("gridPrepare"); - double deltax = config.getDouble("deltax"); - bool flowInit = config.getBool("flowInit"); - bool newViscosity = config.getBool("newViscosity"); - bool newPressure = config.getBool("newPressure"); - bool pmDeltas = config.getBool("pmDeltas"); - double pmDeltaX1 = config.getDouble("pmDeltaX1"); - double pmDeltaX2 = config.getDouble("pmDeltaX2"); - double pmDeltaX3 = config.getDouble("pmDeltaX3"); - double vx1 = config.getDouble("vx1"); - double vx2 = config.getDouble("vx2"); - double vx3 = config.getDouble("vx3"); - bool yDir = config.getBool("yDir"); - bool zDir = config.getBool("zDir"); - - CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - if (logToFile) - { -#if defined(__unix__) - if (myid == 0) - { - const char* str = pathname.c_str(); - int status = 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); - - if (myid == 0) UBLOG(logINFO, "Testcase permeability"); - - string machinename = UbSystem::getMachineName(); - //UBLOG(logINFO, "PID = " << myid << " Hostname: " << machinename); - //UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - //UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - //UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - - int blocknx1 = blocknx; - int blocknx2 = blocknx; - int blocknx3 = blocknx; - - LBMReal rho_LB = 0.0; - double rhoLBinflow = dp_LB*3.0; - - LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - - const int baseLevel = 0; - - double coord[6]; - //double deltax; - - Grid3DPtr grid(new Grid3D(comm)); - - ////////////////////////////////////////////////////////////////////////// - //restart - UbSchedulerPtr rSch(new UbScheduler(restartStep, restartStepStart)); - RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::BINARY); - ////////////////////////////////////////////////////////////////////////// - - if (gridPrepare) - { - if (myid == 0) UBLOG(logINFO, "new start.."); - - UBLOG(logINFO, "new start PID = " << myid << " Hostname: " << machinename); - UBLOG(logINFO, "new start PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - UBLOG(logINFO, "new start PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - UBLOG(logINFO, "new start PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - - string samplePathname = pathGeo + sampleFilename; - - double deltaVoxelX1 = pmL1/(double)pmNX1; - double deltaVoxelX2 = pmL2/(double)pmNX2; - double deltaVoxelX3 = pmL3/(double)pmNX3; - - if (pmDeltas) - { - deltaVoxelX1 = pmDeltaX1; - deltaVoxelX2 = pmDeltaX2; - deltaVoxelX3 = pmDeltaX3; - } - - GbVoxelMatrix3DPtr sample(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold)); - if (rawFile) - { - sample->readMatrixFromRawFile<unsigned short>(samplePathname, GbVoxelMatrix3D::BigEndian); - } - else - { - sample->readMatrixFromVtiASCIIFile(samplePathname); - } - - sample->setVoxelMatrixDelta((float)deltaVoxelX1, (float)deltaVoxelX2, (float)deltaVoxelX3); - sample->setVoxelMatrixMininum(0.0, 0.0, 0.0); - - if (yDir) - { - sample->rotate90aroundZ(); - sample->rotate90aroundZ(); - sample->rotate90aroundZ(); - } - if (zDir) - { - sample->rotate90aroundY(); - } - - if (myid == 0) sample->writeToVTKImageDataASCII(pathname + "/geo/sample"); - - /////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////// - - double offset1 = sample->getLengthX1()/10.0; - double offset2 = 2.0*offset1; - //double offset2 = offset1; - //bounding box - double g_minX1 = sample->getX1Minimum() - offset1; - double g_minX2 = sample->getX2Minimum(); - double g_minX3 = sample->getX3Minimum(); - - double g_maxX1 = sample->getX1Maximum() + offset2; - double g_maxX2 = sample->getX2Maximum(); - double g_maxX3 = sample->getX3Maximum(); - - //////////////////////////////////////////////////////////////////////////// - double nx1_temp = floor((g_maxX1-g_minX1)/(deltax*(double)blocknx)); - - deltax = (g_maxX1-g_minX1)/(nx1_temp*(double)blocknx); - - // g_maxX3 -= 0.5* deltax; - //////////////////////////////////////////////////////////////////////////// - - ////deltax = (g_maxX3-g_minX3) /(nx3*blocknx3); - - double blockLength = (double)blocknx1*deltax; - - grid->setPeriodicX1(false); - grid->setPeriodicX2(false); - grid->setPeriodicX3(false); - grid->setDeltaX(deltax); - grid->setBlockNX(blocknx1, blocknx2, blocknx3); - - 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()); - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - if (myid == 0) - { - UBLOG(logINFO, "Parameters:"); - UBLOG(logINFO, "rho_LB = " << rho_LB); - UBLOG(logINFO, "nu_LB = " << nu_LB); - UBLOG(logINFO, "dp_LB = " << dp_LB); - UBLOG(logINFO, "dx = " << deltax << " m"); - UBLOG(logINFO, "numOfThreads = " << numOfThreads); - UBLOG(logINFO, "path = " << pathname); - UBLOG(logINFO, "Preprozess - start"); - } - - //walls - GbCuboid3DPtr addWallYmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_minX2, g_maxX3+blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname+"/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallYmax(new GbCuboid3D(g_minX1-blockLength, g_maxX2, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", 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()); - - WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - - //PM interactor - BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); - noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new ThinWallNoSlipBCAlgorithm())); - D3Q27InteractorPtr sampleInt(new D3Q27Interactor(sample, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - //wall interactors - D3Q27InteractorPtr addWallYminInt(new D3Q27Interactor(addWallYmin, grid, noSlipBCAdapter, Interactor3D::SOLID)); - D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, noSlipBCAdapter, Interactor3D::SOLID)); - D3Q27InteractorPtr addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, noSlipBCAdapter, Interactor3D::SOLID)); - D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - BCAdapterPtr denBCAdapterInflow(new DensityBCAdapter(rhoLBinflow)); - denBCAdapterInflow->setBcAlgorithm(BCAlgorithmPtr(new EqDensityBCAlgorithm())); - D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoInflow, grid, denBCAdapterInflow, Interactor3D::SOLID)); - - //outflow - BCAdapterPtr denBCAdapterOutflow(new DensityBCAdapter(rho_LB)); - denBCAdapterOutflow->setBcAlgorithm(BCAlgorithmPtr(new EqDensityBCAlgorithm())); - D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoOutflow, grid, denBCAdapterOutflow, Interactor3D::SOLID)); - - - UBLOG(logINFO, "PID = " << myid << " Hostname: " << machinename); - UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - - - //////////////////////////////////////////// - //METIS - Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::RECURSIVE)); - //////////////////////////////////////////// - //Zoltan - //Grid3DVisitorPtr zoltanVisitor(new ZoltanPartitioningGridVisitor(comm, D3Q27System::BSW, 1)); - //grid->accept(zoltanVisitor); - - /////delete solid blocks - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - intHelper.addInteractor(addWallYminInt); - intHelper.addInteractor(addWallZminInt); - intHelper.addInteractor(addWallYmaxInt); - intHelper.addInteractor(addWallZmaxInt); - intHelper.addInteractor(inflowInt); - intHelper.addInteractor(outflowInt); - intHelper.addInteractor(sampleInt); - intHelper.selectBlocks(); - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end"); - ////////////////////////////////////// - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator()); - SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor); - grid->accept(setConnsVisitor); - - //domain decomposition for threads - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - ppblocks->process(0); - ppblocks.reset(); - - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nodb = (blocknx1)* (blocknx2)* (blocknx3); - unsigned long nod = nob * (blocknx1)* (blocknx2)* (blocknx3); - unsigned long nodg = nob * (blocknx1 + gl) * (blocknx2 + gl) * (blocknx3 + gl); - double needMemAll = double(nodg*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - if (myid == 0) - { - UBLOG(logINFO, "Number of blocks = " << nob); - UBLOG(logINFO, "Number of nodes = " << nod); - 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*nodb); - } - UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); - } - - LBMKernelPtr kernel; - if (comm->getNumberOfProcesses()>1 && gridPrepare) - { - kernel = LBMKernelPtr(new IncompressibleCumulantLBMKernel(blocknx1, blocknx2, blocknx3, IncompressibleCumulantLBMKernel::NORMAL)); - } - else - { - kernel = LBMKernelPtr(new VoidLBMKernel(blocknx1, blocknx2, blocknx3)); - } - - //BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - BCProcessorPtr bcProc = BCProcessorPtr(new ThinWallBCProcessor()); - kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nu_LB, availMem, needMem); - grid->accept(kernelVisitor); - - //BC - intHelper.setBC(); - - if (comm->getNumberOfProcesses()>1 && gridPrepare) - { - BoundaryConditionBlockVisitor bcVisitor; - //bcVisitor.addBC('N', BCAlgorithmPtr(new NoSlipBCAlgorithm())); - //bcVisitor.addBC('I', BCAlgorithmPtr(new EqDensityBCAlgorithm())); - //bcVisitor.addBC('O', BCAlgorithmPtr(new EqDensityBCAlgorithm())); - bcVisitor.addBC(noSlipBCAdapter); - bcVisitor.addBC(denBCAdapterInflow); - bcVisitor.addBC(denBCAdapterOutflow); - grid->accept(bcVisitor); - - //Press*1.6e8+(14.76-coordsX)/3.5*5000 - //initialization of distributions - mu::Parser fct; - fct.SetExpr("(x1max-x1)/l*dp*3.0"); - fct.DefineConst("dp", dp_LB); - fct.DefineConst("x1max", g_maxX1); - fct.DefineConst("l", g_maxX1-g_minX1); - - InitDistributionsBlockVisitor initVisitor(nu_LB, rho_LB); - initVisitor.setRho(fct); - grid->accept(initVisitor); - - //Postrozess - UbSchedulerPtr geoSch(new UbScheduler(1)); - WriteBoundaryConditionsCoProcessorPtr ppgeo( - new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - ppgeo->process(0); - ppgeo.reset(); - } - - - coord[0] = sample->getX1Minimum(); - coord[1] = sample->getX2Minimum(); - coord[2] = sample->getX3Minimum(); - coord[3] = sample->getX1Maximum(); - coord[4] = sample->getX2Maximum(); - coord[5] = sample->getX3Maximum(); - - //////////////////////////////////////////////////////// - UbFileOutputASCII outf(pathname + "/checkpoints/coord.txt"); - outf.writeDouble(deltax); - outf.writeDouble(coord[0]); - outf.writeDouble(coord[1]); - outf.writeDouble(coord[2]); - outf.writeDouble(coord[3]); - outf.writeDouble(coord[4]); - outf.writeDouble(coord[5]); - outf.writeDouble(g_minX1); - outf.writeDouble(g_maxX1); - outf.writeDouble(availMem); - outf.writeDouble(needMem); - //////////////////////////////////////////////////////// - - grid->addInteractor(inflowInt); - - - if (myid == 0) UBLOG(logINFO, "Preprozess - end"); - - if (comm->getNumberOfProcesses() == 1 && gridPrepare) - { - UBLOG(logINFO, "Prepare grid - start"); - rp.writeDistributedGrid(grid, numOfParts); - UBLOG(logINFO, "Prepare grid - end"); - return; - } - } - else - { - //////////////////////////////////////////////////////// - UbFileInputASCII inf(pathname+"/checkpoints/coord.txt"); - deltax = inf.readDouble(); - coord[0] = inf.readDouble(); - coord[1] = inf.readDouble(); - coord[2] = inf.readDouble(); - coord[3] = inf.readDouble(); - coord[4] = inf.readDouble(); - coord[5] = inf.readDouble(); - double g_minX1 = inf.readDouble(); - double g_maxX1 = inf.readDouble(); - double availMem = inf.readDouble(); - double needMem = inf.readDouble(); - //////////////////////////////////////////////////////// - - if (flowInit) - { - grid->setRank(myid); - LBMKernelPtr kernel = LBMKernelPtr(new IncompressibleCumulantLBMKernel(blocknx1, blocknx2, blocknx3, IncompressibleCumulantLBMKernel::NORMAL)); - BCProcessorPtr bcProc(new BCProcessor()); - kernel->setBCProcessor(bcProc); - SetKernelBlockVisitor kernelVisitor(kernel, nu_LB, availMem, needMem, SetKernelBlockVisitor::ChangeKernelWithData); - grid->accept(kernelVisitor); - - BoundaryConditionBlockVisitor bcVisitor; - grid->accept(bcVisitor); - - UbSchedulerPtr geoSch(new UbScheduler(1)); - WriteBoundaryConditionsCoProcessor pp(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm); - pp.process(0); - - //Press*1.6e8+(14.76-coordsX)/3.5*5000 - //initialization of distributions - mu::Parser fct; - fct.SetExpr("(x1max-x1)/l*dp*3.0"); - fct.DefineConst("dp", dp_LB); - fct.DefineConst("x1max", g_maxX1); - fct.DefineConst("l", g_maxX1-g_minX1); - - InitDistributionsBlockVisitor initVisitor(nu_LB, rho_LB); - initVisitor.setRho(fct); - initVisitor.setVx1(vx1); - initVisitor.setVx1(vx2); - initVisitor.setVx1(vx3); - grid->accept(initVisitor); - } - - //new nu - if (newViscosity) - { - ViscosityBlockVisitor nuVisitor(nu_LB); - grid->accept(nuVisitor); - } - - //new dp - if (newPressure) - { - Grid3D::Interactor3DSet interactors = grid->getInteractors(); - interactors[0]->setGrid3D(grid); - boost::dynamic_pointer_cast<D3Q27Interactor>(interactors[0])->deleteBCAdapter(); - BCAdapterPtr denBCAdapterFront(new DensityBCAdapter(rhoLBinflow)); - denBCAdapterFront->setBcAlgorithm(BCAlgorithmPtr(new EqDensityBCAlgorithm())); - boost::dynamic_pointer_cast<D3Q27Interactor>(interactors[0])->addBCAdapter(denBCAdapterFront); - interactors[0]->updateInteractor(); - } - - if (myid == 0) - { - UBLOG(logINFO, "Parameters:"); - UBLOG(logINFO, "rho_LB = " << rho_LB); - UBLOG(logINFO, "nu_LB = " << nu_LB); - UBLOG(logINFO, "dp_LB = " << dp_LB); - UBLOG(logINFO, "dx = " << deltax << " m"); - } - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator()); - SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor); - grid->accept(setConnsVisitor); - - if (myid == 0) UBLOG(logINFO, "Restart - end"); - } - UbSchedulerPtr nupsSch(new UbScheduler(nupsStep[0], nupsStep[1], nupsStep[2])); - //nupsSch->addSchedule(nupsStep[0], nupsStep[1], nupsStep[2]); - NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); - - UbSchedulerPtr stepSch(new UbScheduler(outTime)); - - WriteMacroscopicQuantitiesCoProcessor pp(grid, stepSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm); - - deltax = grid->getDeltaX(baseLevel); - double dxd2 = deltax / 2.0; - - IntegrateValuesHelperPtr ih1(new IntegrateValuesHelper(grid, comm, coord[0] - dxd2*10.0, coord[1] - dxd2, coord[2] - dxd2, - coord[0] - dxd2*10.0 - 2.0*dxd2, coord[4] + dxd2, coord[5] + dxd2)); - - //D3Q27IntegrateValuesHelperPtr ih2(new D3Q27IntegrateValuesHelper(grid, comm, coord[3]/2.0, coord[1] - dxd2, coord[2] - dxd2, - // coord[3]/2.0 + 2.0*dxd2, coord[4] + dxd2, coord[5] + dxd2)); - IntegrateValuesHelperPtr ih2(new IntegrateValuesHelper(grid, comm, coord[0], coord[1], coord[2], coord[3], coord[4], coord[5])); - - IntegrateValuesHelperPtr ih3(new IntegrateValuesHelper(grid, comm, coord[3] + dxd2*10.0, coord[1] - dxd2, coord[2] - dxd2, - coord[3] + dxd2*10.0 + 2.0*dxd2, coord[4] + dxd2, coord[5] + dxd2)); - - //D3Q27IntegrateValuesHelperPtr ih1(new D3Q27IntegrateValuesHelper(grid, comm, coord[0], coord[1], coord[2], coord[3], coord[4], coord[5])); - if (myid == 0) GbSystem3D::writeGeoObject(ih1->getBoundingBox().get(), pathname + "/geo/ih1", WbWriterVtkXmlBinary::getInstance()); - if (myid == 0) GbSystem3D::writeGeoObject(ih2->getBoundingBox().get(), pathname + "/geo/ih2", WbWriterVtkXmlBinary::getInstance()); - if (myid == 0) GbSystem3D::writeGeoObject(ih3->getBoundingBox().get(), pathname + "/geo/ih3", WbWriterVtkXmlBinary::getInstance()); - - double factorp = 1; // dp_real / dp_LB; - double factorv = 1;// dx / dt; - UbSchedulerPtr stepMV(new UbScheduler(timeSeriesOutTime)); - - TimeseriesCoProcessor tsp1(grid, stepMV, ih1, pathname+timeSeriesFile+"_1", comm); - TimeseriesCoProcessor tsp2(grid, stepMV, ih2, pathname+timeSeriesFile+"_2", comm); - TimeseriesCoProcessor tsp3(grid, stepMV, ih3, pathname+timeSeriesFile+"_3", comm); - - if (myid == 0) - { - UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - } - - CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, stepMV)); - if (myid == 0) UBLOG(logINFO, "Simulation-start"); - calculation->calculate(); - if (myid == 0) UBLOG(logINFO, "Simulation-end"); - } - catch (exception& e) - { - cerr << e.what() << endl << flush; - } - catch (string& s) - { - cerr << s << endl; - } - catch (...) - { - cerr << "unknown exception" << endl; - } - -} -////////////////////////////////////////////////////////////////////////// -int main(int argc, char* argv[]) -{ - - if (argv!=NULL) - { - if (argv[1]!=NULL) - { - run(string(argv[1])); - } - else - { - cout<<"Configuration file is missing!"<<endl; - } - } - - return 0; -} diff --git a/apps/cpu/aperm/aperm.cpp.old2 b/apps/cpu/aperm/aperm.cpp.old2 deleted file mode 100644 index ece4410e92f4ac587391ed0921400c4110cfb921..0000000000000000000000000000000000000000 --- a/apps/cpu/aperm/aperm.cpp.old2 +++ /dev/null @@ -1,543 +0,0 @@ -#include <iostream> -#include <string> -#include <VirtualFluids.h> - -using namespace std; - -void changeDP() -{ -} -////////////////////////////////////////////////////////////////////////// -void run(string configname) -{ - try - { - vf::basics::ConfigurationFile config; - config.load(configname); - - string pathname = config.getString("pathname"); - string pathGeo = config.getString("pathGeo"); - int numOfThreads = config.getInt("numOfThreads"); - string sampleFilename = config.getString("sampleFilename"); - int pmNX1 = config.getInt("pmNX1"); - int pmNX2 = config.getInt("pmNX2"); - int pmNX3 = config.getInt("pmNX3"); - double lthreshold = config.getDouble("lthreshold"); - double uthreshold = config.getDouble("uthreshold"); - double pmL1 = config.getDouble("pmL1"); - double pmL2 = config.getDouble("pmL2"); - double pmL3 = config.getDouble("pmL3"); - int blocknx = config.getInt("blocknx"); - double nx3 = config.getDouble("nx3"); - double dp_LB = config.getDouble("dp_LB"); - double nu_LB = config.getDouble("nu_LB"); - string timeSeriesFile = config.getString("timeSeriesFile"); - double restartStep = config.getDouble("restartStep"); - double restartStepStart = config.getDouble("restartStepStart"); - double endTime = config.getDouble("endTime"); - double outTime = config.getDouble("outTime"); - double availMem = config.getDouble("availMem"); - bool rawFile = config.getBool("rawFile"); - double timeSeriesOutTime = config.getDouble("timeSeriesOutTime"); - bool logToFile = config.getBool("logToFile"); - bool spongeLayer = config.getBool("spongeLayer"); - vector<double> nupsStep = config.getVector<double>("nupsStep"); - double deltax = config.getDouble("deltax"); - bool newViscosity = config.getBool("newViscosity"); - bool newPressure = config.getBool("newPressure"); - bool pmDeltas = config.getBool("pmDeltas"); - double pmDeltaX1 = config.getDouble("pmDeltaX1"); - double pmDeltaX2 = config.getDouble("pmDeltaX2"); - double pmDeltaX3 = config.getDouble("pmDeltaX3"); - double vx1 = config.getDouble("vx1"); - double vx2 = config.getDouble("vx2"); - double vx3 = config.getDouble("vx3"); - bool yDir = config.getBool("yDir"); - bool zDir = config.getBool("zDir"); - - CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - if (logToFile) - { -#if defined(__unix__) - if (myid==0) - { - const char* str = pathname.c_str(); - int status = 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); - - if (myid==0) UBLOG(logINFO, "Testcase permeability"); - - string machinename = UbSystem::getMachineName(); - //UBLOG(logINFO, "PID = " << myid << " Hostname: " << machinename); - //UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - //UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - //UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - - int blocknx1 = blocknx; - int blocknx2 = blocknx; - int blocknx3 = blocknx; - - LBMReal rho_LB = 0.0; - double rhoLBinflow = dp_LB*3.0; - - LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - - const int baseLevel = 0; - - double coord[6]; - //double deltax; - - Grid3DPtr grid(new Grid3D(comm)); - - ////////////////////////////////////////////////////////////////////////// - //restart - UbSchedulerPtr rSch(new UbScheduler(restartStep, restartStepStart)); - //RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT); - MPIIORestartCoProcessor rcp(grid, rSch, pathname, comm); - ////////////////////////////////////////////////////////////////////////// - - //BC Adapter - ////////////////////////////////////////////////////////////////////////////// - BCAdapterPtr noSlipBCAdapter(new NoSlipBCAdapter()); - noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new ThinWallNoSlipBCAlgorithm())); - //noSlipBCAdapter->setBcAlgorithm(BCAlgorithmPtr(new NoSlipBCAlgorithm())); - - BCAdapterPtr denBCAdapterInflow(new DensityBCAdapter(rhoLBinflow)); - denBCAdapterInflow->setBcAlgorithm(BCAlgorithmPtr(new NonEqDensityBCAlgorithm())); - - BCAdapterPtr denBCAdapterOutflow(new DensityBCAdapter(rho_LB)); - denBCAdapterOutflow->setBcAlgorithm(BCAlgorithmPtr(new NonEqDensityBCAlgorithm())); - ////////////////////////////////////////////////////////////////////////////////// - //BS visitor - BoundaryConditionsBlockVisitor bcVisitor; - bcVisitor.addBC(noSlipBCAdapter); - bcVisitor.addBC(denBCAdapterInflow); - bcVisitor.addBC(denBCAdapterOutflow); - - if (grid->getTimeStep() == 0) - { - if (myid==0) UBLOG(logINFO, "new start.."); - if (myid==0) UBLOG(logINFO, "preprocess start.."); - - //UBLOG(logINFO, "new start PID = " << myid << " Hostname: " << machinename); - //UBLOG(logINFO, "new start PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - //UBLOG(logINFO, "new start PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - //UBLOG(logINFO, "new start PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - - string samplePathname = pathGeo+sampleFilename; - - double deltaVoxelX1 = pmL1/(double)pmNX1; - double deltaVoxelX2 = pmL2/(double)pmNX2; - double deltaVoxelX3 = pmL3/(double)pmNX3; - - if (pmDeltas) - { - deltaVoxelX1 = pmDeltaX1; - deltaVoxelX2 = pmDeltaX2; - deltaVoxelX3 = pmDeltaX3; - } - - if (myid==0) UBLOG(logINFO, "read voxel matrix: start"); - GbVoxelMatrix3DPtr sample(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold)); - if (rawFile) - { - sample->readMatrixFromRawFile<unsigned short>(samplePathname, GbVoxelMatrix3D::BigEndian); - } - else - { - sample->readMatrixFromVtiASCIIFile(samplePathname); - } - - sample->setVoxelMatrixDelta((float)deltaVoxelX1, (float)deltaVoxelX2, (float)deltaVoxelX3); - sample->setVoxelMatrixMininum(0.0, 0.0, 0.0); - if (myid==0) UBLOG(logINFO, "read voxel matrix: end"); - - - if (myid==0) UBLOG(logINFO, "rotate voxel matrix: start"); - if (yDir) - { - sample->rotate90aroundZ(); - //sample->rotate90aroundZ(); - //sample->rotate90aroundZ(); - } - if (zDir) - { - sample->rotate90aroundY(); - } - if (myid==0) UBLOG(logINFO, "rotate voxel matrix: end"); - - if (myid==0) sample->writeToVTKImageDataASCII(pathname+"/geo/sample"); - - /////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////// - - double offset1 = sample->getLengthX1()/10.0; - double offset2 = 2.0*offset1; - //double offset2 = offset1; - //bounding box - double g_minX1 = sample->getX1Minimum()-offset1; - double g_minX2 = sample->getX2Minimum(); - double g_minX3 = sample->getX3Minimum(); - - double g_maxX1 = sample->getX1Maximum()+offset2; - double g_maxX2 = sample->getX2Maximum(); - double g_maxX3 = sample->getX3Maximum(); - - //////////////////////////////////////////////////////////////////////////// - double nx1_temp = floor((g_maxX1-g_minX1)/(deltax*(double)blocknx)); - - deltax = (g_maxX1-g_minX1)/(nx1_temp*(double)blocknx); - - // g_maxX3 -= 0.5* deltax; - //////////////////////////////////////////////////////////////////////////// - - ////deltax = (g_maxX3-g_minX3) /(nx3*blocknx3); - - double blockLength = (double)blocknx1*deltax; - - grid->setPeriodicX1(false); - grid->setPeriodicX2(false); - grid->setPeriodicX3(false); - grid->setDeltaX(deltax); - grid->setBlockNX(blocknx1, blocknx2, blocknx3); - - 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()); - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - if (myid==0) - { - UBLOG(logINFO, "Parameters:"); - UBLOG(logINFO, "rho_LB = "<<rho_LB); - UBLOG(logINFO, "nu_LB = "<<nu_LB); - UBLOG(logINFO, "dp_LB = "<<dp_LB); - UBLOG(logINFO, "dx = "<<deltax<<" m"); - UBLOG(logINFO, "numOfThreads = "<<numOfThreads); - UBLOG(logINFO, "path = "<<pathname); - UBLOG(logINFO, "Preprozess - start"); - } - - //walls - GbCuboid3DPtr addWallYmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_minX2, g_maxX3+blockLength)); - if (myid==0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname+"/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3)); - if (myid==0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallYmax(new GbCuboid3D(g_minX1-blockLength, g_maxX2, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if (myid==0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if (myid==0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", 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()); - - WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - - - //PM interactor - D3Q27InteractorPtr sampleInt(new D3Q27Interactor(sample, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - //wall interactors - D3Q27InteractorPtr addWallYminInt(new D3Q27Interactor(addWallYmin, grid, noSlipBCAdapter, Interactor3D::SOLID)); - D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, noSlipBCAdapter, Interactor3D::SOLID)); - D3Q27InteractorPtr addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, noSlipBCAdapter, Interactor3D::SOLID)); - D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - - D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoInflow, grid, denBCAdapterInflow, Interactor3D::SOLID)); - - //outflow - D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoOutflow, grid, denBCAdapterOutflow, Interactor3D::SOLID)); - - - //UBLOG(logINFO, "PID = "<<myid<<" Hostname: "<<machinename); - //UBLOG(logINFO, "PID = "<<myid<<" Total Physical Memory (RAM): "<<Utilities::getTotalPhysMem()); - //UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used: "<<Utilities::getPhysMemUsed()); - //UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()); - - - //////////////////////////////////////////// - //METIS - Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::RECURSIVE)); - //////////////////////////////////////////// - //Zoltan - //Grid3DVisitorPtr zoltanVisitor(new ZoltanPartitioningGridVisitor(comm, D3Q27System::BSW, 1)); - //grid->accept(zoltanVisitor); - - /////delete solid blocks - if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - intHelper.addInteractor(addWallYminInt); - intHelper.addInteractor(addWallZminInt); - intHelper.addInteractor(addWallYmaxInt); - intHelper.addInteractor(addWallZmaxInt); - intHelper.addInteractor(inflowInt); - intHelper.addInteractor(outflowInt); - intHelper.addInteractor(sampleInt); - intHelper.selectBlocks(); - if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - end"); - ////////////////////////////////////// - - //set connectors - InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator()); - SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor); - grid->accept(setConnsVisitor); - - //domain decomposition for threads - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - ppblocks->process(0); - ppblocks.reset(); - - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nodb = (blocknx1)* (blocknx2)* (blocknx3); - unsigned long nod = nob * (blocknx1)* (blocknx2)* (blocknx3); - unsigned long nodg = nob * (blocknx1+gl) * (blocknx2+gl) * (blocknx3+gl); - double needMemAll = double(nodg*(27*sizeof(double)+sizeof(int)+sizeof(float)*4)); - double needMem = needMemAll/double(comm->getNumberOfProcesses()); - - if (myid==0) - { - UBLOG(logINFO, "Number of blocks = "<<nob); - UBLOG(logINFO, "Number of nodes = "<<nod); - 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*nodb); - } - 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 IncompressibleCumulantLBMKernel(blocknx1, blocknx2, blocknx3, IncompressibleCumulantLBMKernel::NORMAL)); - - //BCProcessorPtr bcProc(new BCProcessor()); - BCProcessorPtr bcProc = BCProcessorPtr(new ThinWallBCProcessor()); - kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nu_LB, availMem, needMem); - grid->accept(kernelVisitor); - - //BC - intHelper.setBC(); - - //BS visitor - grid->accept(bcVisitor); - - //Press*1.6e8+(14.76-coordsX)/3.5*5000 - //initialization of distributions - mu::Parser fct; - fct.SetExpr("(x1max-x1)/l*dp*3.0"); - fct.DefineConst("dp", dp_LB); - fct.DefineConst("x1max", g_maxX1); - fct.DefineConst("l", g_maxX1-g_minX1); - - InitDistributionsBlockVisitor initVisitor(nu_LB, rho_LB); - initVisitor.setRho(fct); - grid->accept(initVisitor); - - //Postrozess - UbSchedulerPtr geoSch(new UbScheduler(1)); - WriteBoundaryConditionsCoProcessorPtr ppgeo( - new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - ppgeo->process(0); - ppgeo.reset(); - - coord[0] = sample->getX1Minimum(); - coord[1] = sample->getX2Minimum(); - coord[2] = sample->getX3Minimum(); - coord[3] = sample->getX1Maximum(); - coord[4] = sample->getX2Maximum(); - coord[5] = sample->getX3Maximum(); - - //////////////////////////////////////////////////////// - UbFileOutputASCII outf(pathname+"/checkpoints/coord.txt"); - outf.writeDouble(deltax); - outf.writeDouble(coord[0]); - outf.writeDouble(coord[1]); - outf.writeDouble(coord[2]); - outf.writeDouble(coord[3]); - outf.writeDouble(coord[4]); - outf.writeDouble(coord[5]); - outf.writeDouble(g_minX1); - outf.writeDouble(g_maxX1); - outf.writeDouble(availMem); - outf.writeDouble(needMem); - //////////////////////////////////////////////////////// - - grid->addInteractor(inflowInt); - - if (myid==0) UBLOG(logINFO, "Preprozess - end"); - } - else - { - //////////////////////////////////////////////////////// - UbFileInputASCII inf(pathname+"/checkpoints/coord.txt"); - deltax = inf.readDouble(); - coord[0] = inf.readDouble(); - coord[1] = inf.readDouble(); - coord[2] = inf.readDouble(); - coord[3] = inf.readDouble(); - coord[4] = inf.readDouble(); - coord[5] = inf.readDouble(); - double g_minX1 = inf.readDouble(); - double g_maxX1 = inf.readDouble(); - double availMem = inf.readDouble(); - double needMem = inf.readDouble(); - //////////////////////////////////////////////////////// - - rcp.restart((int)restartStep); - grid->setTimeStep(restartStep); - - //new nu - if (newViscosity) - { - ViscosityBlockVisitor nuVisitor(nu_LB); - grid->accept(nuVisitor); - } - - //new dp - if (newPressure) - { - Grid3D::Interactor3DSet interactors = grid->getInteractors(); - interactors[0]->setGrid3D(grid); - boost::dynamic_pointer_cast<D3Q27Interactor>(interactors[0])->deleteBCAdapter(); - BCAdapterPtr denBCAdapterFront(new DensityBCAdapter(rhoLBinflow)); - denBCAdapterFront->setBcAlgorithm(BCAlgorithmPtr(new EqDensityBCAlgorithm())); - boost::dynamic_pointer_cast<D3Q27Interactor>(interactors[0])->addBCAdapter(denBCAdapterFront); - interactors[0]->updateInteractor(); - } - - if (myid==0) - { - UBLOG(logINFO, "Parameters:"); - UBLOG(logINFO, "rho_LB = "<<rho_LB); - UBLOG(logINFO, "nu_LB = "<<nu_LB); - UBLOG(logINFO, "dp_LB = "<<dp_LB); - UBLOG(logINFO, "dx = "<<deltax<<" m"); - } - - //set connectors - InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator()); - SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor); - grid->accept(setConnsVisitor); - - //domain decomposition for threads - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - //BS visitor - grid->accept(bcVisitor); - - if (myid==0) UBLOG(logINFO, "Restart - end"); - } - - UbSchedulerPtr nupsSch(new UbScheduler(nupsStep[0], nupsStep[1], nupsStep[2])); - NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); - - UbSchedulerPtr stepSch(new UbScheduler(outTime)); - - WriteMacroscopicQuantitiesCoProcessor pp(grid, stepSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm); - - deltax = grid->getDeltaX(baseLevel); - double dxd2 = deltax/2.0; - - IntegrateValuesHelperPtr ih1(new IntegrateValuesHelper(grid, comm, coord[0]-dxd2*10.0, coord[1]-dxd2, coord[2]-dxd2, - coord[0]-dxd2*10.0-2.0*dxd2, coord[4]+dxd2, coord[5]+dxd2)); - - //D3Q27IntegrateValuesHelperPtr ih2(new D3Q27IntegrateValuesHelper(grid, comm, coord[3]/2.0, coord[1] - dxd2, coord[2] - dxd2, - // coord[3]/2.0 + 2.0*dxd2, coord[4] + dxd2, coord[5] + dxd2)); - IntegrateValuesHelperPtr ih2(new IntegrateValuesHelper(grid, comm, coord[0], coord[1], coord[2], coord[3], coord[4], coord[5])); - - IntegrateValuesHelperPtr ih3(new IntegrateValuesHelper(grid, comm, coord[3]+dxd2*10.0, coord[1]-dxd2, coord[2]-dxd2, - coord[3]+dxd2*10.0+2.0*dxd2, coord[4]+dxd2, coord[5]+dxd2)); - - //D3Q27IntegrateValuesHelperPtr ih1(new D3Q27IntegrateValuesHelper(grid, comm, coord[0], coord[1], coord[2], coord[3], coord[4], coord[5])); - if (myid==0) GbSystem3D::writeGeoObject(ih1->getBoundingBox().get(), pathname+"/geo/ih1", WbWriterVtkXmlBinary::getInstance()); - if (myid==0) GbSystem3D::writeGeoObject(ih2->getBoundingBox().get(), pathname+"/geo/ih2", WbWriterVtkXmlBinary::getInstance()); - if (myid==0) GbSystem3D::writeGeoObject(ih3->getBoundingBox().get(), pathname+"/geo/ih3", WbWriterVtkXmlBinary::getInstance()); - - double factorp = 1; // dp_real / dp_LB; - double factorv = 1;// dx / dt; - UbSchedulerPtr stepMV(new UbScheduler(timeSeriesOutTime)); - - TimeseriesCoProcessor tsp1(grid, stepMV, ih1, pathname+timeSeriesFile+"_1", comm); - TimeseriesCoProcessor tsp2(grid, stepMV, ih2, pathname+timeSeriesFile+"_2", comm); - TimeseriesCoProcessor tsp3(grid, stepMV, ih3, pathname+timeSeriesFile+"_3", comm); - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Total Physical Memory (RAM): "<<Utilities::getTotalPhysMem()); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used: "<<Utilities::getPhysMemUsed()); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()); - } - - CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, stepSch)); - if (myid==0) UBLOG(logINFO, "Simulation-start"); - calculation->calculate(); - if (myid==0) UBLOG(logINFO, "Simulation-end"); - } - catch (exception& e) - { - cerr<<e.what()<<endl<<flush; - } - catch (string& s) - { - cerr<<s<<endl; - } - catch (...) - { - cerr<<"unknown exception"<<endl; - } - -} -////////////////////////////////////////////////////////////////////////// -int main(int argc, char* argv[]) -{ - - if (argv!=NULL) - { - if (argv[1]!=NULL) - { - run(string(argv[1])); - } - else - { - cout<<"Configuration file is missing!"<<endl; - } - } - - return 0; -} diff --git a/apps/cpu/aperm/configBombadil2.txt b/apps/cpu/aperm/configBombadil2.txt deleted file mode 100644 index 4e79ff63f0f6d1c6b14333bbd2e9b18ee25cf760..0000000000000000000000000000000000000000 --- a/apps/cpu/aperm/configBombadil2.txt +++ /dev/null @@ -1,90 +0,0 @@ -pathname = d:/temp/aperm5 -pathGeo = d:/Projects/SFB880/GeometrienPoroeseMedien/isotrop/PA80-110 -#pathGeo = d:/Projects/SFB880/GeometrienPoroeseMedien/isotrop/SBP120 -numOfThreads = 4 -availMem = 5e9 -logToFile = false - -#poroeses Medium -rawFile = false -sampleFilename = /alu_80-110.vti -#sampleFilename = /SBP120s500_center.vti -#sampleFilename = /Sinterbronze_SBP120_1358x1376x1572_new.raw - -#sampleFilename = /1.raw - -#Diminsion in Voxel -pmNX1 = 200 -pmNX2 = 200 -pmNX3 = 200 - -#pmNX1 = 500 -#pmNX2 = 500 -#pmNX3 = 500 - -#pmNX1 = 1358 -#pmNX2 = 1376 -#pmNX3 = 1572 - - -#Threshold -lthreshold = 29041 -uthreshold = 65535 - -#lthreshold = 38370 - -#Diminsion in m -pmL1 = 0.726e-3 -pmL2 = 0.75e-3 -pmL3 = 0.786e-3 - -pmDeltas = true - -#deltas [m] -pmDeltaX1 = 3.6e-6 -pmDeltaX2 = 3.6e-6 -pmDeltaX3 = 3.6e-6 - -#pmDeltaX1 = 3.75e-6 -#pmDeltaX2 = 3.75e-6 -#pmDeltaX3 = 3.75e-6 - -yDir = false -zDir = false - -#grid -blocknx = 95 -nx3 = 5 -deltax = 10e-6 -spongeLayer=false - -#physic -newPressure = false -dp_LB = 1e-6 - -newViscosity = false -nu_LB = 0.0005 - -vx1=0 -vx2=0 -vx3=0 - -timeSeriesFile = /timeseries/1 -timeSeriesOutTime = 100 - -nupsStep = 10000 10000 10000000 - -restartStepStart = 240000 - -newStart = false -restartStep = 10 - -cpStep = 20 -cpStepStart = 20 - -outTimeStart = 0 -outTimeStep = 1 - -endTime = 20 - - diff --git a/apps/cpu/aperm/configBombadilSBP120s500.txt b/apps/cpu/aperm/configBombadilSBP120s500.txt deleted file mode 100644 index 3a07c4d9803771aeba821a26d3de6fc048690e81..0000000000000000000000000000000000000000 --- a/apps/cpu/aperm/configBombadilSBP120s500.txt +++ /dev/null @@ -1,50 +0,0 @@ -# -#Simulation parameters for determitatoin of permeability -#SBP120 - -pathname = d:/temp/perm -pathGeo = d:/Projects/SFB880/GeometrienPoroeseMedien/isotrop/SBP120 -numOfThreads = 4 -availMem = 3e9 -logToFile = false - -#porous media -rawFile = false -sampleFilename = /SBP120s500_center_closed.vti - -#diminsions [voxel] -pmNX1 = 500 -pmNX2 = 500 -pmNX3 = 500 - -#threshold -#lthreshold = 38370 -#uthreshold = 65535 -lthreshold = 1 -uthreshold = 1 - - -#diminsions [m] -pmL1 = 1.87e-3 -pmL2 = 1.87e-3 -pmL3 = 1.87e-3 - -#grid -#blocknx = 30 -#nx3 = 5 -blocknx = 50 -nx3 = 10 -spongeLayer=false - -#physic -dp_LB = 1e-7 -nu_LB = 0.01 - -timeSeriesFile = /timeseries/simSBP120_1 -timeSeriesOutTime = 10 - -restartStep = 200 -restartStepStart=200 - -endTime = 60000 -outTime = 100 diff --git a/apps/cpu/aperm/config_HLRS_SBP120.cfg b/apps/cpu/aperm/config_HLRS_SBP120.cfg deleted file mode 100644 index 720302622a33d7cb8119e66c82a0992383da511e..0000000000000000000000000000000000000000 --- a/apps/cpu/aperm/config_HLRS_SBP120.cfg +++ /dev/null @@ -1,43 +0,0 @@ -#HLRS -#Simulation parameters for determitatoin of permeability -#SBP120 - -pathname = /univ_1/ws1/ws/xrmkuchr-perm-0/SBP120 -pathGeo = /univ_1/ws1/ws/xrmkuchr-perm-0/SBP120/Data -numOfThreads = 24 -availMem = 128e9 -logToFile = true -#porous media -rawFile = false -sampleFilename = /Sinterbronze_SBP120_1358x1376x1572.raw - -#diminsions [voxel] -pmNX1 = 1358 -pmNX2 = 1376 -pmNX3 = 1572 - -#threshold -lthreshold = 38370 -uthreshold = 65535 - -#diminsions [m] -pmL1 = 5092499.73e-9 -pmL2 = 5159999.85e-9 -pmL3 = 5894999.98e-9 - -#grid -blocknx = 64 -nx3 = 22 - -#physic -dp_LB = 1e-7 -nu_LB = 0.01 - -timeSeriesFile = /timeseries/simSBP120_1 -timeSeriesOutTime = 100 - -restartStep = 1000 -restartStepStart=1000 - -endTime = 2000 -outTime = 1000 diff --git a/apps/cpu/bChannelA/CMakeLists.txt b/apps/cpu/bChannelA/CMakeLists.txt deleted file mode 100644 index 51f2c4be524155746529538ee10d9511c3dcbdc7..0000000000000000000000000000000000000000 --- a/apps/cpu/bChannelA/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(bchannel) - -INCLUDE(${APPS_ROOT}/IncludsList.cmake) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(bchannel BINARY) diff --git a/apps/cpu/bChannelA/bChannelA.cpp b/apps/cpu/bChannelA/bChannelA.cpp deleted file mode 100644 index a59d829c35e6d1211d206439803c732f832831b2..0000000000000000000000000000000000000000 --- a/apps/cpu/bChannelA/bChannelA.cpp +++ /dev/null @@ -1,527 +0,0 @@ -#include <iostream> -#include <string> -#include "VirtualFluids.h" - -using namespace std; - -void generateCubes(double top_porosity, double bottom_porosity, std::array<double,3> dimensions, std::array<double,3> cubes_in_direction, string pathOut, SPtr<Grid3D> grid, SPtr<BCAdapter> noSlipBCAdapter) -{ - double x = dimensions[0]; - double y = dimensions[1]; - double z = dimensions[2]; - double num_x_cubes = cubes_in_direction[0]; - double num_y_cubes = cubes_in_direction[1]; - double num_z_cubes = cubes_in_direction[2]; - - double H = z / 2.; - - double outer_cube_side_length = 20; - double inner_cube_side_length = 10; - - double dx = (x - outer_cube_side_length) / (num_x_cubes - 1); - double dy = (y - outer_cube_side_length) / (num_y_cubes - 1); - double dz = 20; //(z - outer_cube_side_length) / (num_z_cubes - 1); - - double porosity_step_z = (top_porosity - bottom_porosity) / (num_z_cubes - 1); - double porosity = float(bottom_porosity); - double cube_side_length = pow(1.-porosity, 1. / 3) * outer_cube_side_length; - double initial_x = 0. + outer_cube_side_length / 2.; - double initial_y = 0. + outer_cube_side_length / 2.; - double initial_z = 0. + outer_cube_side_length / 2.; - - double current_z = initial_z; - - double cube_side_length_temp = 0; - - SPtr<GbObject3D> cube(new GbCuboid3D(0, 0, 0, inner_cube_side_length, inner_cube_side_length, inner_cube_side_length)); - double scaleFactor = cube_side_length / inner_cube_side_length; - cube->scale(scaleFactor, scaleFactor, scaleFactor); - - std::vector< SPtr<Interactor3D> > interactors; - - SPtr<D3Q27Interactor> cubeInt(new D3Q27Interactor(cube, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - int num = 0; - for(int k = 0; k < num_z_cubes; k++) - { - double current_y = initial_y; - for(int j = 0; j < num_y_cubes; j++) - { - double current_x = initial_x; - for(int i = 0; i < num_x_cubes; i++) - { - cube->setCenterCoordinates(current_x, current_y, current_z); - //GbSystem3D::writeGeoObject(cube.get(), pathOut + "/cubes/cube"+ UbSystem::toString(num), WbWriterVtkXmlBinary::getInstance()); - std::vector< std::shared_ptr<Block3D> > blockVector; - UbTupleInt3 blockNX=grid->getBlockNX(); - SPtr<GbObject3D> geoObject(cubeInt->getGbObject3D()); - double ext = 0.0; - std::array<double, 6> AABB ={ geoObject->getX1Minimum(),geoObject->getX2Minimum(),geoObject->getX3Minimum(),geoObject->getX1Maximum(),geoObject->getX2Maximum(),geoObject->getX3Maximum() }; - grid->getBlocksByCuboid(AABB[0]-(double)val<1>(blockNX)*ext, AABB[1]-(double)val<2>(blockNX)*ext, AABB[2]-(double)val<3>(blockNX)*ext, AABB[3]+(double)val<1>(blockNX)*ext, AABB[4]+(double)val<2>(blockNX)*ext, AABB[5]+(double)val<3>(blockNX)*ext, blockVector); - cubeInt->getBcNodeIndicesMap(); - dynamic_pointer_cast<Interactor3D>(cubeInt)->removeBcBlocks(); - for (std::shared_ptr<Block3D> block : blockVector) - { - if (block->getKernel()) - { - cubeInt->setBCBlock(block); - } - } - cubeInt->initInteractor(); - num ++; - current_x += dx; - } - current_y += dy; - } - current_z += dz; - porosity += porosity_step_z; - cube_side_length_temp = cube_side_length; - cube_side_length = pow(1.-porosity, 1. / 3) * outer_cube_side_length; - scaleFactor = cube_side_length / cube_side_length_temp; - cube->scale(scaleFactor, scaleFactor, scaleFactor); - } -} - -////////////////////////////////////////////////////////////////////////// -void run(string configname) -{ - try - { - vf::basics::ConfigurationFile config; - config.load(configname); - - string pathOut = config.getValue<string>("pathOut"); - string pathGeo = config.getValue<string>("pathGeo"); - int numOfThreads = config.getValue<int>("numOfThreads"); - vector<int> blocknx = config.getVector<int>("blocknx"); - double u_LB = config.getValue<double>("u_LB"); - double restartStep = config.getValue<double>("restartStep"); - double cpStep = config.getValue<double>("cpStep"); - double cpStart = config.getValue<double>("cpStart"); - double endTime = config.getValue<double>("endTime"); - double outTime = config.getValue<double>("outTime"); - double availMem = config.getValue<double>("availMem"); - bool logToFile = config.getValue<bool>("logToFile"); - double deltaXfine = config.getValue<double>("deltaXfine"); - int refineLevel = config.getValue<int>("refineLevel"); - double Re = config.getValue<double>("Re"); - double timeAvStart = config.getValue<double>("timeAvStart"); - double timeAvStop = config.getValue<double>("timeAvStop"); - bool newStart = config.getValue<bool>("newStart"); - vector<double> nupsStep = config.getVector<double>("nupsStep"); - vector<double> boundingBox = config.getVector<double>("boundingBox"); - - SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - if (logToFile) - { -#if defined(__unix__) - if (myid == 0) - { - const char* str = pathOut.c_str(); - mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); - } -#endif - - if (myid == 0) - { - stringstream logFilename; - logFilename << pathOut + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - } - - //Sleep(30000); - - if (myid == 0) UBLOG(logINFO, "Testcase porous channel"); - - SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter()); - - const int baseLevel = 0; - double deltaXcoarse = deltaXfine*(double)(1<<refineLevel); - - LBMReal rho_LB = 0.0; - double rhoReal = 1.2041; //(kg/m3) - double uReal = 48; //m/s - double lReal = 0.008/2.0;//m - double hLB = lReal / deltaXcoarse; - double Ma = 0.13;//Ma-Real! - double csReal = uReal / Ma; - LBMUnitConverter unitConverter(lReal, csReal, rhoReal, hLB); - if (myid==0) UBLOG(logINFO, unitConverter.toString()); - - //double coord[6]; - - vector<double> origin(3); - origin[0] = 0; - origin[1] = 0; - origin[2] = 0; - - //real velocity is 49.63 m/s - - SPtr<Grid3D> grid(new Grid3D(comm)); - - //BC adapters - SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter()); - noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm())); - - BoundaryConditionsBlockVisitor bcVisitor; - bcVisitor.addBC(noSlipBCAdapter); - - SPtr<BCProcessor> bcProc; - bcProc = SPtr<BCProcessor>(new BCProcessor()); - - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel()); - SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel()); - - mu::Parser fctForcingX1; - fctForcingX1.SetExpr("Fx1"); - fctForcingX1.DefineConst("Fx1", 1.0e-6); - kernel->setWithForcing(true); - - kernel->setBCProcessor(bcProc); - - ////////////////////////////////////////////////////////////////////////// - //restart - SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart)); - SPtr<MPIIORestartCoProcessor> restartCoProcessor(new MPIIORestartCoProcessor(grid, rSch, pathOut, comm)); - restartCoProcessor->setLBMKernel(kernel); - restartCoProcessor->setBCProcessor(bcProc); - - SPtr<UbScheduler> mSch(new UbScheduler(cpStep, cpStart)); - SPtr<MPIIOMigrationCoProcessor> migCoProcessor(new MPIIOMigrationCoProcessor(grid, mSch, pathOut+"/mig", comm)); - migCoProcessor->setLBMKernel(kernel); - migCoProcessor->setBCProcessor(bcProc); - ////////////////////////////////////////////////////////////////////////// - - //bounding box - double g_minX1 = boundingBox[0]; - double g_minX2 = boundingBox[1]; - double g_minX3 = boundingBox[2]; - - double g_maxX1 = boundingBox[3]; - double g_maxX2 = boundingBox[4]; - double g_maxX3 = boundingBox[5]; - - double blockLength = (double)blocknx[0]*deltaXcoarse; - - double channel_hight = (g_maxX3-g_minX3)/2.0; - double channel_hight_LB = channel_hight/deltaXcoarse; - double d_p = channel_hight/20.0; - ////////////////////////////////////////////////////////////////////////// - double nu_LB = (u_LB*channel_hight_LB)/Re; - ////////////////////////////////////////////////////////////////////////// - if (myid == 0) - { - UBLOG(logINFO, "Parameters:"); - UBLOG(logINFO, "Re = " << Re); - UBLOG(logINFO, "u_LB = " << u_LB); - UBLOG(logINFO, "rho_LB = " << rho_LB); - UBLOG(logINFO, "nu_LB = " << nu_LB); - UBLOG(logINFO, "dx coarse = " << deltaXcoarse); - UBLOG(logINFO, "dx fine = " << deltaXfine); - UBLOG(logINFO, "channel_high = " << channel_hight); - UBLOG(logINFO, "channel_high_LB = " << channel_hight_LB); - UBLOG(logINFO, "number of levels = " << refineLevel + 1); - UBLOG(logINFO, "number of processes = " << comm->getNumberOfProcesses()); - UBLOG(logINFO, "number of threads = " << numOfThreads); - UBLOG(logINFO, "path = " << pathOut); - UBLOG(logINFO, "Preprocess - start"); - } - - - if (newStart) - { - if (myid == 0) UBLOG(logINFO, "new start..."); - - - - grid->setPeriodicX1(true); - grid->setPeriodicX2(true); - grid->setPeriodicX3(false); - grid->setDeltaX(deltaXcoarse); - grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - - SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); - if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathOut + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); - - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - - ////////////////////////////////////////////////////////////////////////// - //refinement - double blockLengthX3Fine = grid->getDeltaX(refineLevel) * blocknx[2]; - double refHight = 0.002; - - GbCuboid3DPtr refineBoxTop(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3-refHight, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3)); - if (myid == 0) GbSystem3D::writeGeoObject(refineBoxTop.get(), pathOut + "/geo/refineBoxTop", WbWriterVtkXmlASCII::getInstance()); - - //GbCuboid3DPtr refineBoxBottom(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3+offsetMinX3+blockLengthX3Fine)); - GbCuboid3DPtr refineBoxBottom(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3+refHight)); - if (myid == 0) GbSystem3D::writeGeoObject(refineBoxBottom.get(), pathOut + "/geo/refineBoxBottom", WbWriterVtkXmlASCII::getInstance()); - - if (refineLevel > 0) - { - if (myid == 0) UBLOG(logINFO, "Refinement - start"); - RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel, comm); - refineHelper.addGbObject(refineBoxTop, refineLevel); - refineHelper.addGbObject(refineBoxBottom, refineLevel); - refineHelper.refine(); - if (myid == 0) UBLOG(logINFO, "Refinement - end"); - } - ////////////////////////////////////////////////////////////////////////// - - //walls - GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathOut+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathOut+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance()); - - - //wall interactors - SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, noSlipBCAdapter, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - //////////////////////////////////////////// - //METIS - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::RECURSIVE)); - - //DEBUG METIS - ////////////////////////////////////////////////////////////////////////// - - //SimpleGeometricPartitioner sgp; - //UbTupleInt3 dim = sgp.createDimensions(30, 20, 20, 20); - - - //dynamic_pointer_cast<MetisPartitioningGridVisitor>(metisVisitor)->setNumberOfProcesses(1500); - //grid->accept(metisVisitor); - - //SPtr<Grid3DVisitor> zoltanVisitor(new ZoltanPartitioningGridVisitor(comm, D3Q27System::BSW)); - //grid->accept(zoltanVisitor); - - //WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm); - //ppblocks.process(0); - //return; - ////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////// - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - intHelper.addInteractor(addWallZminInt); - intHelper.addInteractor(addWallZmaxInt); - intHelper.selectBlocks(); - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end"); - ////////////////////////////////////// - - { - WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm); - ppblocks.process(0); - } - - 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"); - } - - - SetKernelBlockVisitor kernelVisitor(kernel, nu_LB, availMem, needMem); - grid->accept(kernelVisitor); - - ////////////////////////////////// - //undef nodes for refinement - if (refineLevel > 0) - { - SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - //BC - intHelper.setBC(); - - double bottom_porosity = 0.875; - double top_porosity = 1 - (1 - bottom_porosity) / 9; - generateCubes(top_porosity, bottom_porosity, std::array<double, 3>{600., 400., 400.}, std::array<double, 3>{30., 20., 9.}, pathOut, grid, noSlipBCAdapter); - - grid->accept(bcVisitor); - - mu::Parser inflowProfileVx1, inflowProfileVx2, inflowProfileVx3, inflowProfileRho; - inflowProfileVx1.SetExpr("x3 < h ? 0.0 : uLB-1e-5*(x1+x2+x3)"); - inflowProfileVx1.DefineConst("uLB", u_LB); - inflowProfileVx1.DefineConst("h", channel_hight-d_p); - - InitDistributionsBlockVisitor initVisitor; - initVisitor.setVx1(inflowProfileVx1); - //initVisitor.setVx1(u_LB); - //initVisitor.setVx2(u_LB); - //initVisitor.setVx3(u_LB); - - //initVisitor.setVx1(inflowProfileVx1); - initVisitor.setVx1(0); - - grid->accept(initVisitor); - - ////set connectors - //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator()); - InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor); - grid->accept(setConnsVisitor); - - //domain decomposition for threads - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - //Postrozess - { - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - WriteBoundaryConditionsCoProcessor ppgeo(grid, geoSch, pathOut, WbWriterVtkXmlBinary::getInstance(), comm); - ppgeo.process(0); - } - - if (myid == 0) UBLOG(logINFO, "Preprozess - end"); - } - else - { - restartCoProcessor->restart((int)restartStep); - //migCoProcessor->restart((int)restartStep); - grid->setTimeStep(restartStep); - //////////////////////////////////////////////////////////////////////////// - InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor); - grid->accept(setConnsVisitor); - - grid->accept(bcVisitor); - - if (myid == 0) UBLOG(logINFO, "Restart - end"); - } - - SPtr<UbScheduler> nupsSch(new UbScheduler(nupsStep[0], nupsStep[1], nupsStep[2])); - std::shared_ptr<NUPSCounterCoProcessor> nupsCoProcessor(new NUPSCounterCoProcessor(grid, nupsSch, numOfThreads, comm)); - - SPtr<UbScheduler> stepSch(new UbScheduler(outTime)); - - SPtr<WriteMacroscopicQuantitiesCoProcessor> writeMQCoProcessor(new WriteMacroscopicQuantitiesCoProcessor(grid, stepSch, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - writeMQCoProcessor->process(0); - - SPtr<GbObject3D> bbBox(new GbCuboid3D(g_minX1-blockLength, (g_maxX2-g_minX2)/2.0, g_minX3-blockLength, g_maxX1+blockLength, (g_maxX2-g_minX2)/2.0+deltaXcoarse, g_maxX3+blockLength)); - if (myid==0) GbSystem3D::writeGeoObject(bbBox.get(), pathOut+"/geo/bbBox", WbWriterVtkXmlASCII::getInstance()); - SPtr<WriteMQFromSelectionCoProcessor> writeMQSelectCoProcessor(new WriteMQFromSelectionCoProcessor(grid, stepSch, bbBox, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - - - SPtr<UbScheduler> AdjForcSch(new UbScheduler()); - AdjForcSch->addSchedule(10, 0, 10000000); - SPtr<IntegrateValuesHelper> intValHelp(new IntegrateValuesHelper(grid, comm, g_minX1, g_minX2, channel_hight, g_maxX1, g_maxX2, g_maxX3)); - if (myid == 0) GbSystem3D::writeGeoObject(intValHelp->getBoundingBox().get(), pathOut + "/geo/IntValHelp", WbWriterVtkXmlBinary::getInstance()); - - double vxTarget=u_LB; - SPtr<AdjustForcingCoProcessor> AdjForcCoProcessor(new AdjustForcingCoProcessor(grid, AdjForcSch, pathOut, intValHelp, vxTarget, comm)); - - - std::vector<double> levelCoords; - std::vector<int> levels; - std::vector<double> bounds; - - bounds.push_back(g_minX1); - bounds.push_back(g_minX2); - bounds.push_back(g_minX3); - bounds.push_back(g_maxX1); - bounds.push_back(g_maxX2); - bounds.push_back(g_maxX3); - levels.push_back(0); - levelCoords.push_back(g_minX3); - levelCoords.push_back(g_maxX3); - SPtr<UbScheduler> tavSch(new UbScheduler(1, timeAvStart, timeAvStop)); - SPtr<CoProcessor> timeAveragingCoProcessor(new TimeAveragedValuesCoProcessor(grid, pathOut, WbWriterVtkXmlBinary::getInstance(), tavSch, comm,TimeAveragedValuesCoProcessor::Density | TimeAveragedValuesCoProcessor::Velocity | TimeAveragedValuesCoProcessor::Fluctuations | TimeAveragedValuesCoProcessor::Triplecorrelations, levels, levelCoords, bounds)); - - - //create line time series - //SPtr<UbScheduler> tpcSch(new UbScheduler(1,1,3)); - //GbPoint3DPtr p1(new GbPoint3D(0.0,0.005,0.01)); - //GbPoint3DPtr p2(new GbPoint3D(0.064,0.005,0.01)); - //SPtr<GbLine3D> line(new GbLine3D(p1.get(),p2.get())); - //SPtr<GbLine3D> line(new GbLine3D(new GbPoint3D(0.0,0.005,0.01),new GbPoint3D(0.064,0.005,0.01))); - //LineTimeSeriesCoProcessor lineTs(grid, tpcSch,pathOut+"/TimeSeries/line1.csv",line, 0,comm); - //if (myid==0) lineTs.writeLine(pathOut+"/geo/line1"); - - if (myid == 0) - { - UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - } - - omp_set_num_threads(numOfThreads); - SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1)); - SPtr<Calculator> calculator(new BasicCalculator(grid, stepGhostLayer, (int)endTime)); - calculator->addCoProcessor(nupsCoProcessor); - calculator->addCoProcessor(AdjForcCoProcessor); - calculator->addCoProcessor(migCoProcessor); - //calculator->addCoProcessor(restartCoProcessor); - calculator->addCoProcessor(writeMQSelectCoProcessor); - calculator->addCoProcessor(writeMQCoProcessor); - calculator->addCoProcessor(timeAveragingCoProcessor); - - if (myid == 0) UBLOG(logINFO, "Simulation-start"); - calculator->calculate(); - if (myid == 0) UBLOG(logINFO, "Simulation-end"); - } - catch (exception& e) - { - cerr << e.what() << endl << flush; - } - catch (string& s) - { - cerr << s << endl; - } - catch (mu::Parser::exception_type &e) - { - std::cout << e.GetMsg() << std::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; - } - } - - return 0; -} diff --git a/apps/cpu/bChannelA/configBombadilpChannel.cfg b/apps/cpu/bChannelA/configBombadilpChannel.cfg deleted file mode 100644 index 123ee12a91c9d7ed7d899ad549b961753b65cc1b..0000000000000000000000000000000000000000 --- a/apps/cpu/bChannelA/configBombadilpChannel.cfg +++ /dev/null @@ -1,38 +0,0 @@ -# -#Simulation parameters for porous channel -# - -pathOut = e:/temp/BreugemChannelAnisotrop -pathGeo = g:/pChannelBA/cubes -numOfThreads = 1 -availMem = 14e9 -logToFile = false - - -#grid -boundingBox = 0 0 0 60 40 40 -#boundingBox = 1 1 1 4 4 4 -refineLevel = 0 -deltaXfine = 1 -#deltaXfine = 1 -blocknx = 20 20 20 -#blocknx = 4 4 4 -u_LB = 0.1 -Re = 5500 -#Re = 1 - -newStart = true -restartStep = 2000 -cpStep = 10000 -cpStart = 10000 - -timeAvStart = 0 -timeAvStop = 200000 - -nupsStep = 1000 1000 10000000 -outTime = 100 -endTime = 500 - - - - diff --git a/apps/cpu/bChannelVA/Averaging.cpp b/apps/cpu/bChannelVA/Averaging.cpp deleted file mode 100644 index d7604b4b087c55f15b01f2bd486f7665efc1271b..0000000000000000000000000000000000000000 --- a/apps/cpu/bChannelVA/Averaging.cpp +++ /dev/null @@ -1,2340 +0,0 @@ -#include "Averaging.h" -#include "UbLogger.h" -#include "MemoryUtil.h" -#include "UbSystem.h" - -#include "ReadDataSet.h" - -//#include "Postprocessing.h" -#include <vtkSmartPointer.h> -#include <vtkDataSet.h> -#include <vtkPlane.h> -#include <vtkCutter.h> -#include <vtkDataArray.h> -#include <vtkUnstructuredGrid.h> -#include <vtkPointData.h> - -#include <vtkProbeFilter.h> -#include <vtkImageData.h> -#include <vtkXMLImageDataWriter.h> -#include <vtkMultiBlockDataSet.h> -#include <vtkThreshold.h> -#include <vtkCellArray.h> -#include <vtkCellData.h> -#include <vtkDoubleArray.h> -#include <vtkXMLUnstructuredGridWriter.h> -#include <vtkFileOutputWindow.h> -#include <vtkXMLPUnstructuredGridReader.h> - -#include <omp.h> -#include <mpi.h> - -using namespace std; -void Averaging::createGeoMatrix(std::string dataNameG) -{ - UBLOG(logINFO, "createGeoMatrix:start"); - - vtkSmartPointer<vtkTimerLog> timer = vtkSmartPointer<vtkTimerLog>::New(); - vtkSmartPointer<vtkTimerLog> level_grid_timer = vtkSmartPointer<vtkTimerLog>::New(); - vtkSmartPointer<vtkTimerLog> level_interp_timer = vtkSmartPointer<vtkTimerLog>::New(); - vtkSmartPointer<vtkTimerLog> timer_total = vtkSmartPointer<vtkTimerLog>::New(); - - timer_total->StartTimer(); - - UBLOG(logINFO, "read data set from " << dataNameG << ": start"); - timer->StartTimer(); - - vtkXMLPUnstructuredGridReader* reader = vtkXMLPUnstructuredGridReader::New(); - reader->SetFileName(dataNameG.c_str()); - reader->Update(); - - UBLOG(logINFO, "read data set from " + dataNameG + ": end"); - timer->StopTimer(); - UBLOG(logINFO, "read data set time: " << UbSystem::toString(timer->GetElapsedTime()) + " s"); - - geoMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 1); - - UBLOG(logINFO, "Perform the solid nodes: start"); - level_interp_timer->StartTimer(); - - vtkThreshold* thrFilter = vtkThreshold::New(); - thrFilter->SetInputData(reader->GetOutput()); - thrFilter->SetInputArrayToProcess(0, 0, 0, vtkDataObject::FIELD_ASSOCIATION_POINTS, "Geometry"); - thrFilter->ThresholdBetween(1, 1); - thrFilter->Update(); - vtkUnstructuredGrid* ugrid = thrFilter->GetOutput(); - - vtkPoints* points = vtkPoints::New(); - vtkCellArray* cells = vtkCellArray::New(); - - int numberOfCells = ugrid->GetNumberOfCells(); - - double x[3]; - array<double, 3> xMin; - array<double, 3> xMax; - array<int, 3> ixMin; - array<int, 3> ixMax; - vtkIdType idc = 0; - - for (int i = 0; i < numberOfCells; i++) - { - vtkIdList* plist = vtkIdList::New(); - ugrid->GetCellPoints(i, plist); - vector <double> x1; - vector <double> x2; - vector <double> x3; - for (int p = 0; p < plist->GetNumberOfIds(); p++) - { - ugrid->GetPoint(plist->GetId(p), x); - x1.push_back(x[0]); - x2.push_back(x[1]); - x3.push_back(x[2]); - } - xMin[0] = *min_element(x1.begin(), x1.end()); - xMin[1] = *min_element(x2.begin(), x2.end()); - xMin[2] = *min_element(x3.begin(), x3.end()); - - xMax[0] = *max_element(x1.begin(), x1.end()); - xMax[1] = *max_element(x2.begin(), x2.end()); - xMax[2] = *max_element(x3.begin(), x3.end()); - - getNodeIndexes(xMin, ixMin); - getNodeIndexes(xMax, ixMax); - - for (int k = ixMin[2]; k <= ixMax[2]; k++) - { - for (int j = ixMin[1]; j <= ixMax[1]; j++) - { - for (int i = ixMin[0]; i <= ixMax[0]; i++) - { - if (i >= 0 && i < dimensions[0] && j >= 0 && j < dimensions[1] && k >= 0 && k < dimensions[2]) - { - geoMatrix(i, j, k) = 0; - } - } - } - } - plist->Delete(); - } - - reader->Delete(); - thrFilter->Delete(); - points->Delete(); - cells->Delete(); - - UBLOG(logINFO, "Perform the solid nodes: end"); - level_interp_timer->StopTimer(); - UBLOG(logINFO, "interpolation time: " << UbSystem::toString(level_interp_timer->GetElapsedTime()) << " s"); - - UBLOG(logINFO, "createGeoMatrix:end"); - timer_total->StopTimer(); - UBLOG(logINFO, "total time: " << UbSystem::toString(timer_total->GetElapsedTime()) << " s"); -} -////////////////////////////////////////////////////////////////////////// -void Averaging::writeGeoMatrixToImageFile(std::string output) -{ - vtkSmartPointer<vtkTimerLog> timer_write = vtkSmartPointer<vtkTimerLog>::New(); - - std::string vtkfilename = output + ".vti"; - - UBLOG(logINFO, "write data set to " << vtkfilename << ": start"); - timer_write->StartTimer(); - - vtkImageData* image = vtkImageData::New(); - - image->SetExtent(&geo_extent[0]); - image->SetOrigin(&geo_origin[0]); - image->SetSpacing(&geo_spacing[0]); - - vtkIntArray* geoArray = vtkIntArray::New(); - geoArray->SetNumberOfComponents(1); - geoArray->SetName("geo"); - - int size = dimensions[0] * dimensions[1] * dimensions[2]; - - geoArray->SetArray(geoMatrix.getStartAdressOfSortedArray(0, 0, 0), size, 1); - image->GetPointData()->AddArray(geoArray); - - vtkXMLImageDataWriter* writer = vtkXMLImageDataWriter::New(); - writer->SetInputData(image); - writer->SetFileName(vtkfilename.c_str()); - //writer->SetDataModeToAscii(); - writer->SetDataModeToAppended(); - writer->SetCompressorTypeToZLib(); - writer->Update(); - - image->Delete(); - geoArray->Delete(); - writer->Delete(); - - UBLOG(logINFO, "write data set: end"); - timer_write->StopTimer(); - UBLOG(logINFO, "write data set time: " << UbSystem::toString(timer_write->GetElapsedTime()) << " s"); -} -void Averaging::initMeanMqValues() -{ - meanVxMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanVyMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanVzMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanPrMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); -} -void Averaging::sumMqValues() -{ - vector<double>& vxSum = meanVxMatrix.getDataVector(); - vector<double>& vySum = meanVyMatrix.getDataVector(); - vector<double>& vzSum = meanVzMatrix.getDataVector(); - vector<double>& prSum = meanPrMatrix.getDataVector(); - - vector<double>& vxVa = vxMatrix.getDataVector(); - vector<double>& vyVa = vyMatrix.getDataVector(); - vector<double>& vzVa = vzMatrix.getDataVector(); - vector<double>& prVa = prMatrix.getDataVector(); - - int size = (int)vxVa.size(); - - for (int i = 0; i < size; i++) - { - vxSum[i] += vxVa[i]; - vySum[i] += vyVa[i]; - vzSum[i] += vzVa[i]; - prSum[i] += prVa[i]; - } -} -void Averaging::computeMeanMqValues(int numberOfTimeSteps) -{ - vector<double>& vxSum = meanVxMatrix.getDataVector(); - vector<double>& vySum = meanVyMatrix.getDataVector(); - vector<double>& vzSum = meanVzMatrix.getDataVector(); - vector<double>& prSum = meanPrMatrix.getDataVector(); - - vector<double>& vxMean = meanVxMatrix.getDataVector(); - vector<double>& vyMean = meanVyMatrix.getDataVector(); - vector<double>& vzMean = meanVzMatrix.getDataVector(); - vector<double>& prMean = meanPrMatrix.getDataVector(); - - int size = (int)vxSum.size(); - - for (int i = 0; i < size; i++) - { - vxMean[i] = vxSum[i] / numberOfTimeSteps; - vyMean[i] = vySum[i] / numberOfTimeSteps; - vzMean[i] = vzSum[i] / numberOfTimeSteps; - prMean[i] = prSum[i] / numberOfTimeSteps; - } -} -void Averaging::writeMeanMqValuesToBinaryFiles(std::string fname) -{ - writeMatrixToBinaryFiles<double>(meanVxMatrix, fname + "Vx" + ".bin"); - writeMatrixToBinaryFiles<double>(meanVyMatrix, fname + "Vy" + ".bin"); - writeMatrixToBinaryFiles<double>(meanVzMatrix, fname + "Vz" + ".bin"); - writeMatrixToBinaryFiles<double>(meanPrMatrix, fname + "Pr" + ".bin"); -} -void Averaging::readMeanMqValuesFromBinaryFiles(std::string fname) -{ - readMatrixFromBinaryFiles<double>(fname + "Vx" + ".bin", meanVxMatrix); - readMatrixFromBinaryFiles<double>(fname + "Vy" + ".bin", meanVyMatrix); - readMatrixFromBinaryFiles<double>(fname + "Vz" + ".bin", meanVzMatrix); - readMatrixFromBinaryFiles<double>(fname + "Pr" + ".bin", meanPrMatrix); -} -void Averaging::volumeAveragingOfMeanMqValuesWithMPI(double l_real) -{ - vtkSmartPointer<vtkTimerLog> timer_averaging = vtkSmartPointer<vtkTimerLog>::New(); - - UBLOG(logINFO, "volume averaging: start"); - timer_averaging->StartTimer(); - - double l = round(l_real / deltax); - UBLOG(logINFO, "l = " + UbSystem::toString(l)); - - UBLOG(logINFO, "NX1 x NX2 x NX3 = " + UbSystem::toString(dimensions[0]) << " x " + UbSystem::toString(dimensions[1]) << " x " << UbSystem::toString(dimensions[2])); - - int size = dimensions[0] * dimensions[1] * dimensions[2]; - vaMeanVxMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaMeanVyMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaMeanVzMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaMeanPrMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - - int numprocs, PID; - MPI_Comm_rank(MPI_COMM_WORLD, &PID); - MPI_Comm_size(MPI_COMM_WORLD, &numprocs); - - int part = (int)round((double)dimensions[0] / (double)numprocs); - UBLOG(logINFO, "part = " + UbSystem::toString(part)); - - int startX1 = part * PID; - int stopX1 = startX1 + part; - if (PID == numprocs - 1) - { - stopX1 = dimensions[0]; - } - - UBLOG(logINFO, "startX1 = " + UbSystem::toString(startX1)); - UBLOG(logINFO, "stopX1 = " + UbSystem::toString(stopX1)); - - vtkSmartPointer<vtkTimerLog> timer_inloop = vtkSmartPointer<vtkTimerLog>::New(); - //timer_inloop->StartTimer(); - int p = 1000000; - - //omp_set_num_threads(8); - - //#pragma omp parallel num_threads(4) //private(i) - { - int i = 0; - -#pragma omp parallel for //private(i)//scheduler(dynamic, 1) - for (int x3 = 0; x3 < dimensions[2]; x3++) - for (int x2 = 0; x2 < dimensions[1]; x2++) - for (int x1 = startX1; x1 < stopX1; x1++) - { - int ID = omp_get_thread_num(); - if (i == 0 && ID == 0) - { - timer_inloop->StartTimer(); - UBLOG(logINFO, "point id = " + UbSystem::toString(i)); - } - double vx = 0.0; - double vy = 0.0; - double vz = 0.0; - double pr = 0.0; - - int ll = (int)l; - int llz1 = ll; - if (x3 - ll < 0) llz1 = x3; - if (x3 + ll >= dimensions[2]) llz1 = dimensions[2] - 1 - x3; - double lQuadrat = l * l; - double lNorm = lQuadrat * lQuadrat * double(llz1) * double(llz1); - - //#pragma omp parallel for - for (int z = -llz1; z <= +llz1; z++) - for (int y = -ll; y <= +ll; y++) - for (int x = -ll; x <= +ll; x++) - { - int xx = x1 + x; - int yy = x2 + y; - int zz = x3 + z; - - //correctIndex(xx, yy, zz); - if (xx < 0) xx = dimensions[0] + xx; - if (xx >= dimensions[0]) xx = xx - dimensions[0]; - - if (yy < 0) yy = dimensions[1] + yy; - if (yy >= dimensions[1]) yy = yy - dimensions[1]; - - if (zz < 0) zz = 0; - if (zz >= dimensions[2]) zz = dimensions[2] - 1; - - double mm = (G((double)x, l) * G((double)y, l) * G((double)z, (double)llz1)) / lNorm; - double gamma = (double)geoMatrix(xx, yy, zz); - - vx += gamma * mm * meanVxMatrix(xx, yy, zz); - vy += gamma * mm * meanVyMatrix(xx, yy, zz); - vz += gamma * mm * meanVzMatrix(xx, yy, zz); - pr += gamma * mm * meanPrMatrix(xx, yy, zz); - - } - - vaMeanVxMatrix(x1, x2, x3) = vx; - vaMeanVyMatrix(x1, x2, x3) = vy; - vaMeanVzMatrix(x1, x2, x3) = vz; - vaMeanPrMatrix(x1, x2, x3) = pr; - - if (i % p == 0 && i != 0 && ID == 0) - { - timer_inloop->StopTimer(); - UBLOG(logINFO, "point id = " + UbSystem::toString(i)); - UBLOG(logINFO, "time per " + UbSystem::toString(p) + " points: " + UbSystem::toString(timer_inloop->GetElapsedTime()) + " s"); - UBLOG(logINFO, "actual memory usage: " << UbSystem::toString(Utilities::getPhysMemUsedByMe() / 1e9) << " GByte"); - timer_inloop->StartTimer(); - UBLOG(logINFO, "thread id: " + UbSystem::toString(ID)); - UBLOG(logINFO, "Number of treads: " + UbSystem::toString(omp_get_num_threads())); - } - i++; - } - } - - if (PID == 0) - { - vector<double> receiveBuffer; - for (int i = 1; i < numprocs; i++) - { - int count, lstartX1, lstopX1; - MPI_Status status; - MPI_Recv(&count, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status); - receiveBuffer.resize(count); - MPI_Recv(&receiveBuffer[0], count, MPI_DOUBLE, i, 0, MPI_COMM_WORLD, &status); - MPI_Recv(&lstartX1, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status); - MPI_Recv(&lstopX1, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status); - int c = 0; - for (int x3 = 0; x3 < dimensions[2]; x3++) - for (int x2 = 0; x2 < dimensions[1]; x2++) - for (int x1 = lstartX1; x1 < lstopX1; x1++) - { - vaMeanVxMatrix(x1, x2, x3) = receiveBuffer[c++]; - vaMeanVyMatrix(x1, x2, x3) = receiveBuffer[c++]; - vaMeanVzMatrix(x1, x2, x3) = receiveBuffer[c++]; - vaMeanPrMatrix(x1, x2, x3) = receiveBuffer[c++]; - } - } - } - else - { - vector<double> sendBuffer; - for (int x3 = 0; x3 < dimensions[2]; x3++) - for (int x2 = 0; x2 < dimensions[1]; x2++) - for (int x1 = startX1; x1 < stopX1; x1++) - { - sendBuffer.push_back(vaMeanVxMatrix(x1, x2, x3)); - sendBuffer.push_back(vaMeanVyMatrix(x1, x2, x3)); - sendBuffer.push_back(vaMeanVzMatrix(x1, x2, x3)); - sendBuffer.push_back(vaMeanPrMatrix(x1, x2, x3)); - } - int count = (int)sendBuffer.size(); - MPI_Send(&count, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); - MPI_Send(&sendBuffer[0], count, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD); - MPI_Send(&startX1, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); - MPI_Send(&stopX1, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); - } - - timer_averaging->StopTimer(); - UBLOG(logINFO, "volume averaging: end"); - UBLOG(logINFO, "volume averaging time: " + UbSystem::toString(timer_averaging->GetElapsedTime()) + " s"); -} -void Averaging::writeVaMeanMqValuesToBinaryFiles(std::string fname) -{ - writeMatrixToBinaryFiles<double>(vaMeanVxMatrix, fname + "Vx" + ".bin"); - writeMatrixToBinaryFiles<double>(vaMeanVyMatrix, fname + "Vy" + ".bin"); - writeMatrixToBinaryFiles<double>(vaMeanVzMatrix, fname + "Vz" + ".bin"); - writeMatrixToBinaryFiles<double>(vaMeanPrMatrix, fname + "Pr" + ".bin"); -} -void Averaging::readVaMeanMqValuesFromBinaryFiles(std::string fname) -{ - readMatrixFromBinaryFiles<double>(fname + "Vx" + ".bin", vaMeanVxMatrix); - readMatrixFromBinaryFiles<double>(fname + "Vy" + ".bin", vaMeanVyMatrix); - readMatrixFromBinaryFiles<double>(fname + "Vz" + ".bin", vaMeanVzMatrix); - readMatrixFromBinaryFiles<double>(fname + "Pr" + ".bin", vaMeanPrMatrix); -} -void Averaging::initFluctuationsOfMqValues() -{ - flucVxMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - flucVyMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - flucVzMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - flucPrMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); -} -void Averaging::computeFluctuationsOfMqValues() -{ - vector<double>& vxF = vxMatrix.getDataVector(); - vector<double>& vyF = vyMatrix.getDataVector(); - vector<double>& vzF = vzMatrix.getDataVector(); - vector<double>& prF = prMatrix.getDataVector(); - - vector<double>& vxMean = meanVxMatrix.getDataVector(); - vector<double>& vyMean = meanVyMatrix.getDataVector(); - vector<double>& vzMean = meanVzMatrix.getDataVector(); - vector<double>& prMean = meanPrMatrix.getDataVector(); - - vector<double>& vxFluc = flucVxMatrix.getDataVector(); - vector<double>& vyFluc = flucVyMatrix.getDataVector(); - vector<double>& vzFluc = flucVzMatrix.getDataVector(); - vector<double>& prFluc = flucPrMatrix.getDataVector(); - - int size = (int)vxF.size(); - - for (int i = 0; i < size; i++) - { - vxFluc[i] = vxF[i] - vxMean[i]; - vyFluc[i] = vyF[i] - vyMean[i]; - vzFluc[i] = vzF[i] - vzMean[i]; - prFluc[i] = prF[i] - prMean[i]; - } -} -void Averaging::writeFluctuationsOfMqValuesToBinaryFiles(std::string fname, int timeStep) -{ - writeMatrixToBinaryFiles<double>(flucVxMatrix, fname + "Vx" + UbSystem::toString(timeStep) + ".bin"); - writeMatrixToBinaryFiles<double>(flucVyMatrix, fname + "Vy" + UbSystem::toString(timeStep) + ".bin"); - writeMatrixToBinaryFiles<double>(flucVzMatrix, fname + "Vz" + UbSystem::toString(timeStep) + ".bin"); - writeMatrixToBinaryFiles<double>(flucPrMatrix, fname + "Pr" + UbSystem::toString(timeStep) + ".bin"); -} -void Averaging::readFluctuationsOfMqValuesFromBinaryFiles(std::string fname, int timeStep) -{ - readMatrixFromBinaryFiles<double>(fname + "Vx" + UbSystem::toString(timeStep) + ".bin", flucVxMatrix); - readMatrixFromBinaryFiles<double>(fname + "Vy" + UbSystem::toString(timeStep) + ".bin", flucVyMatrix); - readMatrixFromBinaryFiles<double>(fname + "Vz" + UbSystem::toString(timeStep) + ".bin", flucVzMatrix); - readMatrixFromBinaryFiles<double>(fname + "Pr" + UbSystem::toString(timeStep) + ".bin", flucPrMatrix); -} -void Averaging::volumeAveragingOfFluctuationsWithMPI(double l_real) -{ - vtkSmartPointer<vtkTimerLog> timer_averaging = vtkSmartPointer<vtkTimerLog>::New(); - - UBLOG(logINFO, "volume averaging fluct and stress: start"); - timer_averaging->StartTimer(); - - double l = round(l_real / deltax); - UBLOG(logINFO, "l = " + UbSystem::toString(l)); - - UBLOG(logINFO, "NX1 x NX2 x NX3 = " + UbSystem::toString(dimensions[0]) << " x " + UbSystem::toString(dimensions[1]) << " x " << UbSystem::toString(dimensions[2])); - - int size = dimensions[0] * dimensions[1] * dimensions[2]; - vaFlucVxMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaFlucVyMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaFlucVzMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaFlucPrMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - - int numprocs, PID; - MPI_Comm_rank(MPI_COMM_WORLD, &PID); - MPI_Comm_size(MPI_COMM_WORLD, &numprocs); - - int part = (int)round((double)dimensions[0] / (double)numprocs); - UBLOG(logINFO, "part = " + UbSystem::toString(part)); - - int startX1 = part * PID; - int stopX1 = startX1 + part; - if (PID == numprocs - 1) - { - stopX1 = dimensions[0]; - } - - UBLOG(logINFO, "startX1 = " + UbSystem::toString(startX1)); - UBLOG(logINFO, "stopX1 = " + UbSystem::toString(stopX1)); - - vtkSmartPointer<vtkTimerLog> timer_inloop = vtkSmartPointer<vtkTimerLog>::New(); - //timer_inloop->StartTimer(); - int p = 1000000; - - //omp_set_num_threads(8); - - //#pragma omp parallel num_threads(4) //private(i) - { - int i = 0; -#pragma omp parallel for //private(i)//scheduler(dynamic, 1) - for (int x3 = 0; x3 < dimensions[2]; x3++) - for (int x2 = 0; x2 < dimensions[1]; x2++) - for (int x1 = startX1; x1 < stopX1; x1++) - { - int ID = omp_get_thread_num(); - if (i == 0 && ID == 0) - { - timer_inloop->StartTimer(); - UBLOG(logINFO, "point id = " + UbSystem::toString(i)); - } - double flucvx = 0.0; - double flucvy = 0.0; - double flucvz = 0.0; - double flucpr = 0.0; - - int ll = (int)l; - int llz1 = ll; - if (x3 - ll < 0) llz1 = x3; - if (x3 + ll >= dimensions[2]) llz1 = dimensions[2] - 1 - x3; - double lQuadrat = l * l; - double lNorm = lQuadrat * lQuadrat * double(llz1) * double(llz1); - - //#pragma omp parallel for - for (int z = -llz1; z <= +llz1; z++) - for (int y = -ll; y <= +ll; y++) - for (int x = -ll; x <= +ll; x++) - { - int xx = x1 + x; - int yy = x2 + y; - int zz = x3 + z; - - //correctIndex(xx, yy, zz); - if (xx < 0) xx = dimensions[0] + xx; - if (xx >= dimensions[0]) xx = xx - dimensions[0]; - - if (yy < 0) yy = dimensions[1] + yy; - if (yy >= dimensions[1]) yy = yy - dimensions[1]; - - if (zz < 0) zz = 0; - if (zz >= dimensions[2]) zz = dimensions[2] - 1; - - double mm = (G((double)x, l) * G((double)y, l) * G((double)z, (double)llz1)) / lNorm; - double gamma = (double)geoMatrix(xx, yy, zz); - - flucvx += gamma * mm * flucVxMatrix(xx, yy, zz); - flucvy += gamma * mm * flucVyMatrix(xx, yy, zz); - flucvz += gamma * mm * flucVzMatrix(xx, yy, zz); - flucpr += gamma * mm * flucPrMatrix(xx, yy, zz); - } - - vaFlucVxMatrix(x1, x2, x3) = flucvx; - vaFlucVyMatrix(x1, x2, x3) = flucvy; - vaFlucVzMatrix(x1, x2, x3) = flucvz; - vaFlucPrMatrix(x1, x2, x3) = flucpr; - - if (i % p == 0 && i != 0 && ID == 0) - { - timer_inloop->StopTimer(); - UBLOG(logINFO, "point id = " + UbSystem::toString(i)); - UBLOG(logINFO, "time per " + UbSystem::toString(p) + " points: " + UbSystem::toString(timer_inloop->GetElapsedTime()) + " s"); - UBLOG(logINFO, "actual memory usage: " << UbSystem::toString(Utilities::getPhysMemUsedByMe() / 1e9) << " GByte"); - timer_inloop->StartTimer(); - UBLOG(logINFO, "thread id: " + UbSystem::toString(ID)); - UBLOG(logINFO, "Number of treads: " + UbSystem::toString(omp_get_num_threads())); - } - i++; - } - } - - if (PID == 0) - { - vector<double> receiveBuffer; - for (int i = 1; i < numprocs; i++) - { - int count, lstartX1, lstopX1; - MPI_Status status; - MPI_Recv(&count, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status); - receiveBuffer.resize(count); - MPI_Recv(&receiveBuffer[0], count, MPI_DOUBLE, i, 0, MPI_COMM_WORLD, &status); - MPI_Recv(&lstartX1, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status); - MPI_Recv(&lstopX1, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status); - int c = 0; - for (int x3 = 0; x3 < dimensions[2]; x3++) - for (int x2 = 0; x2 < dimensions[1]; x2++) - for (int x1 = lstartX1; x1 < lstopX1; x1++) - { - vaFlucVxMatrix(x1, x2, x3) = receiveBuffer[c++]; - vaFlucVyMatrix(x1, x2, x3) = receiveBuffer[c++]; - vaFlucVzMatrix(x1, x2, x3) = receiveBuffer[c++]; - vaFlucPrMatrix(x1, x2, x3) = receiveBuffer[c++]; - } - } - } - else - { - vector<double> sendBuffer; - for (int x3 = 0; x3 < dimensions[2]; x3++) - for (int x2 = 0; x2 < dimensions[1]; x2++) - for (int x1 = startX1; x1 < stopX1; x1++) - { - sendBuffer.push_back(vaFlucVxMatrix(x1, x2, x3)); - sendBuffer.push_back(vaFlucVyMatrix(x1, x2, x3)); - sendBuffer.push_back(vaFlucVzMatrix(x1, x2, x3)); - sendBuffer.push_back(vaFlucPrMatrix(x1, x2, x3)); - } - int count = (int)sendBuffer.size(); - MPI_Send(&count, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); - MPI_Send(&sendBuffer[0], count, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD); - MPI_Send(&startX1, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); - MPI_Send(&stopX1, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); - } - - timer_averaging->StopTimer(); - UBLOG(logINFO, "volume averaging fluct and stress: end"); - UBLOG(logINFO, "volume averaging fluct and stress time: " + UbSystem::toString(timer_averaging->GetElapsedTime()) + " s"); -} -void Averaging::readTimeAveragedDataFromVtkFile(std::string dataNameMQ) -{ - UBLOG(logINFO, "createMQMatrix:start"); - - vtkSmartPointer<vtkTimerLog> timer = vtkSmartPointer<vtkTimerLog>::New(); - vtkSmartPointer<vtkTimerLog> timer_total = vtkSmartPointer<vtkTimerLog>::New(); - - timer_total->StartTimer(); - - UBLOG(logINFO, "read data set from " + dataNameMQ + ": start"); - timer->StartTimer(); - - vtkXMLPUnstructuredGridReader* reader = vtkXMLPUnstructuredGridReader::New(); - reader->SetFileName(dataNameMQ.c_str()); - reader->Update(); - - UBLOG(logINFO, "read data set from " + dataNameMQ + ": end"); - timer->StopTimer(); - UBLOG(logINFO, "read data set time: " + UbSystem::toString(timer->GetElapsedTime()) + " s"); - - UBLOG(logINFO, "NX1 x NX2 x NX3 = " + UbSystem::toString(dimensions[0]) + " x " + UbSystem::toString(dimensions[1]) + " x " + UbSystem::toString(dimensions[2])); - - int size = dimensions[0] * dimensions[1] * dimensions[2]; - meanVxMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanVyMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanVzMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanPrMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - - StressXX.resize(dimensions[0], dimensions[1], dimensions[2], 0); - StressYY.resize(dimensions[0], dimensions[1], dimensions[2], 0); - StressZZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); - StressXY.resize(dimensions[0], dimensions[1], dimensions[2], 0); - StressXZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); - StressYZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); - - vtkUnstructuredGrid* ugrid = reader->GetOutput(); - - vtkPoints* points = vtkPoints::New(); - vtkCellArray* cells = vtkCellArray::New(); - - int numberOfCells = ugrid->GetNumberOfCells(); - - vtkDataArray* vxArray = ugrid->GetPointData()->GetArray("taVx"); - vtkDataArray* vyArray = ugrid->GetPointData()->GetArray("taVy"); - vtkDataArray* vzArray = ugrid->GetPointData()->GetArray("taVz"); - vtkDataArray* prArray = ugrid->GetPointData()->GetArray("taRho"); - - vtkDataArray* vxxArray = ugrid->GetPointData()->GetArray("taVxx"); - vtkDataArray* vyyArray = ugrid->GetPointData()->GetArray("taVyy"); - vtkDataArray* vzzArray = ugrid->GetPointData()->GetArray("taVzz"); - vtkDataArray* vxyArray = ugrid->GetPointData()->GetArray("taVxy"); - vtkDataArray* vxzArray = ugrid->GetPointData()->GetArray("taVxz"); - vtkDataArray* vyzArray = ugrid->GetPointData()->GetArray("taVyz"); - //Vxx; Vyy; Vzz; Vxy; Vxz; Vyz - - double x[3]; - array<double, 3> xMin; - array<double, 3> xMax; - array<int, 3> ixMin; - array<int, 3> ixMax; - vtkIdType idc = 0; - - for (int i = 0; i < numberOfCells; i++) - { - vtkIdList* plist = vtkIdList::New(); - ugrid->GetCellPoints(i, plist); - vector <double> x1; - vector <double> x2; - vector <double> x3; - for (int p = 0; p < plist->GetNumberOfIds(); p++) - { - ugrid->GetPoint(plist->GetId(p), x); - x1.push_back(x[0]); - x2.push_back(x[1]); - x3.push_back(x[2]); - } - xMin[0] = *min_element(x1.begin(), x1.end()); - xMin[1] = *min_element(x2.begin(), x2.end()); - xMin[2] = *min_element(x3.begin(), x3.end()); - - xMax[0] = *max_element(x1.begin(), x1.end()); - xMax[1] = *max_element(x2.begin(), x2.end()); - xMax[2] = *max_element(x3.begin(), x3.end()); - - getNodeIndexes(xMin, ixMin); - getNodeIndexes(xMax, ixMax); - int c = 0; - for (int k = ixMin[2]; k <= ixMax[2]; k++) - { - for (int j = ixMin[1]; j <= ixMax[1]; j++) - { - for (int i = ixMin[0]; i <= ixMax[0]; i++) - { - if (i >= 0 && i < dimensions[0] && j >= 0 && j < dimensions[1] && k >= 0 && k < dimensions[2]) - { - if (geoMatrix(i, j, k) == 1) - { - meanVxMatrix(i, j, k) = vxArray->GetTuple1(plist->GetId(c)); - meanVyMatrix(i, j, k) = vyArray->GetTuple1(plist->GetId(c)); - meanVzMatrix(i, j, k) = vzArray->GetTuple1(plist->GetId(c)); - meanPrMatrix(i, j, k) = prArray->GetTuple1(plist->GetId(c)); - - StressXX(i, j, k) = vxxArray->GetTuple1(plist->GetId(c)); - StressYY(i, j, k) = vyyArray->GetTuple1(plist->GetId(c)); - StressZZ(i, j, k) = vzzArray->GetTuple1(plist->GetId(c)); - StressXY(i, j, k) = vxyArray->GetTuple1(plist->GetId(c)); - StressXZ(i, j, k) = vxzArray->GetTuple1(plist->GetId(c)); - StressYZ(i, j, k) = vyzArray->GetTuple1(plist->GetId(c)); - c++; - } - } - } - } - } - plist->Delete(); - } - - reader->Delete(); - points->Delete(); - cells->Delete(); - - UBLOG(logINFO, "createMQMatrix:end"); - timer_total->StopTimer(); - UBLOG(logINFO, "total time: " + UbSystem::toString(timer_total->GetElapsedTime()) + " s"); -} -void Averaging::volumeAveragingOfTimeAveragedDataWithMPI(double l_real) -{ - vtkSmartPointer<vtkTimerLog> timer_averaging = vtkSmartPointer<vtkTimerLog>::New(); - - UBLOG(logINFO, "volume averaging: start"); - timer_averaging->StartTimer(); - - double l = round(l_real / deltax); - UBLOG(logINFO, "l = " + UbSystem::toString(l)); - - UBLOG(logINFO, "NX1 x NX2 x NX3 = " + UbSystem::toString(dimensions[0]) << " x " + UbSystem::toString(dimensions[1]) << " x " << UbSystem::toString(dimensions[2])); - - int size = dimensions[0] * dimensions[1] * dimensions[2]; - vaMeanVxMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaMeanVyMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaMeanVzMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaMeanPrMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - - vaStressXX.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaStressYY.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaStressZZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaStressXY.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaStressXZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaStressYZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); - - int numprocs, PID; - MPI_Comm_rank(MPI_COMM_WORLD, &PID); - MPI_Comm_size(MPI_COMM_WORLD, &numprocs); - - int part = (int)round((double)dimensions[0] / (double)numprocs); - UBLOG(logINFO, "part = " + UbSystem::toString(part)); - - int startX1 = part * PID; - int stopX1 = startX1 + part; - if (PID == numprocs - 1) - { - stopX1 = dimensions[0]; - } - - UBLOG(logINFO, "startX1 = " + UbSystem::toString(startX1)); - UBLOG(logINFO, "stopX1 = " + UbSystem::toString(stopX1)); - - vtkSmartPointer<vtkTimerLog> timer_inloop = vtkSmartPointer<vtkTimerLog>::New(); - //timer_inloop->StartTimer(); - int p = 1000000; - - //omp_set_num_threads(8); - - //#pragma omp parallel num_threads(4) //private(i) - { - int i = 0; - -#pragma omp parallel for //private(i)//scheduler(dynamic, 1) - for (int x3 = 0; x3 < dimensions[2]; x3++) - for (int x2 = 0; x2 < dimensions[1]; x2++) - for (int x1 = startX1; x1 < stopX1; x1++) - { - int ID = omp_get_thread_num(); - if (i == 0 && ID == 0) - { - timer_inloop->StartTimer(); - UBLOG(logINFO, "point id = " + UbSystem::toString(i)); - } - double vx = 0.0; - double vy = 0.0; - double vz = 0.0; - double pr = 0.0; - double stressXX = 0.0; - double stressYY = 0.0; - double stressZZ = 0.0; - double stressXY = 0.0; - double stressXZ = 0.0; - double stressYZ = 0.0; - - int ll = (int)l; - int llz1 = ll; - if (x3 - ll < 0) llz1 = x3; - if (x3 + ll >= dimensions[2]) llz1 = dimensions[2] - 1 - x3; - double lQuadrat = l * l; - double lNorm = lQuadrat * lQuadrat * double(llz1)*double(llz1); - - //#pragma omp parallel for - for (int z = -llz1; z <= +llz1; z++) - for (int y = -ll; y <= +ll; y++) - for (int x = -ll; x <= +ll; x++) - { - int xx = x1 + x; - int yy = x2 + y; - int zz = x3 + z; - - //correctIndex(xx, yy, zz); - if (xx < 0) xx = dimensions[0] + xx; - if (xx >= dimensions[0]) xx = xx - dimensions[0]; - - if (yy < 0) yy = dimensions[1] + yy; - if (yy >= dimensions[1]) yy = yy - dimensions[1]; - - if (zz < 0) zz = 0; - if (zz >= dimensions[2]) zz = dimensions[2] - 1; - - if (x3 != 0 || x3 != dimensions[2] - 1) - { - double mm = (G((double)x, l) * G((double)y, l) * G((double)z, (double)llz1)) / lNorm; - double gamma = (double)geoMatrix(xx, yy, zz); - - vx += gamma * mm * meanVxMatrix(xx, yy, zz); - vy += gamma * mm * meanVyMatrix(xx, yy, zz); - vz += gamma * mm * meanVzMatrix(xx, yy, zz); - pr += gamma * mm * meanPrMatrix(xx, yy, zz); - - stressXX += gamma * mm * StressXX(xx, yy, zz); - stressYY += gamma * mm * StressYY(xx, yy, zz); - stressZZ += gamma * mm * StressZZ(xx, yy, zz); - stressXY += gamma * mm * StressXY(xx, yy, zz); - stressXZ += gamma * mm * StressXZ(xx, yy, zz); - stressYZ += gamma * mm * StressYZ(xx, yy, zz); - } - else - { - vx += meanVxMatrix(xx, yy, zz); - vy += meanVyMatrix(xx, yy, zz); - vz += meanVzMatrix(xx, yy, zz); - pr += meanPrMatrix(xx, yy, zz); - - stressXX += StressXX(xx, yy, zz); - stressYY += StressYY(xx, yy, zz); - stressZZ += StressZZ(xx, yy, zz); - stressXY += StressXY(xx, yy, zz); - stressXZ += StressXZ(xx, yy, zz); - stressYZ += StressYZ(xx, yy, zz); - } - } - - vaMeanVxMatrix(x1, x2, x3) = vx; - vaMeanVyMatrix(x1, x2, x3) = vy; - vaMeanVzMatrix(x1, x2, x3) = vz; - vaMeanPrMatrix(x1, x2, x3) = pr; - - vaStressXX(x1, x2, x3) = stressXX; - vaStressYY(x1, x2, x3) = stressYY; - vaStressZZ(x1, x2, x3) = stressZZ; - vaStressXY(x1, x2, x3) = stressXY; - vaStressXZ(x1, x2, x3) = stressXZ; - vaStressYZ(x1, x2, x3) = stressYZ; - - if (i % p == 0 && i != 0 && ID == 0) - { - timer_inloop->StopTimer(); - UBLOG(logINFO, "point id = " + UbSystem::toString(i)); - UBLOG(logINFO, "time per " + UbSystem::toString(p) + " points: " + UbSystem::toString(timer_inloop->GetElapsedTime()) + " s"); - UBLOG(logINFO, "actual memory usage: " << UbSystem::toString(Utilities::getPhysMemUsedByMe() / 1e9) << " GByte"); - timer_inloop->StartTimer(); - UBLOG(logINFO, "thread id: " + UbSystem::toString(ID)); - UBLOG(logINFO, "Number of treads: " + UbSystem::toString(omp_get_num_threads())); - } - i++; - } - } - - if (PID == 0) - { - vector<double> receiveBuffer; - for (int i = 1; i < numprocs; i++) - { - int count, lstartX1, lstopX1; - MPI_Status status; - MPI_Recv(&count, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status); - receiveBuffer.resize(count); - MPI_Recv(&receiveBuffer[0], count, MPI_DOUBLE, i, 0, MPI_COMM_WORLD, &status); - MPI_Recv(&lstartX1, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status); - MPI_Recv(&lstopX1, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status); - int c = 0; - for (int x3 = 0; x3 < dimensions[2]; x3++) - for (int x2 = 0; x2 < dimensions[1]; x2++) - for (int x1 = lstartX1; x1 < lstopX1; x1++) - { - vaMeanVxMatrix(x1, x2, x3) = receiveBuffer[c++]; - vaMeanVyMatrix(x1, x2, x3) = receiveBuffer[c++]; - vaMeanVzMatrix(x1, x2, x3) = receiveBuffer[c++]; - vaMeanPrMatrix(x1, x2, x3) = receiveBuffer[c++]; - - vaStressXX(x1, x2, x3) = receiveBuffer[c++]; - vaStressYY(x1, x2, x3) = receiveBuffer[c++]; - vaStressZZ(x1, x2, x3) = receiveBuffer[c++]; - vaStressXY(x1, x2, x3) = receiveBuffer[c++]; - vaStressXZ(x1, x2, x3) = receiveBuffer[c++]; - vaStressYZ(x1, x2, x3) = receiveBuffer[c++]; - } - } - } - else - { - vector<double> sendBuffer; - for (int x3 = 0; x3 < dimensions[2]; x3++) - for (int x2 = 0; x2 < dimensions[1]; x2++) - for (int x1 = startX1; x1 < stopX1; x1++) - { - sendBuffer.push_back(vaMeanVxMatrix(x1, x2, x3)); - sendBuffer.push_back(vaMeanVyMatrix(x1, x2, x3)); - sendBuffer.push_back(vaMeanVzMatrix(x1, x2, x3)); - sendBuffer.push_back(vaMeanPrMatrix(x1, x2, x3)); - - sendBuffer.push_back(vaStressXX(x1, x2, x3)); - sendBuffer.push_back(vaStressYY(x1, x2, x3)); - sendBuffer.push_back(vaStressZZ(x1, x2, x3)); - sendBuffer.push_back(vaStressXY(x1, x2, x3)); - sendBuffer.push_back(vaStressXZ(x1, x2, x3)); - sendBuffer.push_back(vaStressYZ(x1, x2, x3)); - } - int count = (int)sendBuffer.size(); - MPI_Send(&count, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); - MPI_Send(&sendBuffer[0], count, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD); - MPI_Send(&startX1, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); - MPI_Send(&stopX1, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); - } - - timer_averaging->StopTimer(); - UBLOG(logINFO, "volume averaging: end"); - UBLOG(logINFO, "volume averaging time: " + UbSystem::toString(timer_averaging->GetElapsedTime()) + " s"); -} -void Averaging::planarAveragingOfVaTaData() -{ - double numberof_XY_points = (double)dimensions[0] * (double)dimensions[1]; - - for (int z = 0; z < dimensions[2]; z++) - { - double sumVx = 0, sumVy = 0, sumVz = 0, sumPr = 0; - double sumFluctVx = 0, sumFluctVy = 0, sumFluctVz = 0, sumFluctPr = 0; - double sumStressXX = 0, sumStressYY = 0, sumStressZZ = 0, sumStressXY = 0, sumStressXZ = 0, sumStressYZ = 0; - for (int y = 0; y < dimensions[1]; y++) - for (int x = 0; x < dimensions[0]; x++) - { - sumVx += vaMeanVxMatrix(x, y, z); - sumVy += vaMeanVyMatrix(x, y, z); - sumVz += vaMeanVzMatrix(x, y, z); - sumPr += vaMeanPrMatrix(x, y, z); - - sumStressXX += vaStressXX(x, y, z); - sumStressYY += vaStressYY(x, y, z); - sumStressZZ += vaStressZZ(x, y, z); - sumStressXY += vaStressXY(x, y, z); - sumStressXZ += vaStressXZ(x, y, z); - sumStressYZ += vaStressYZ(x, y, z); - } - PlanarVx[z] = sumVx / numberof_XY_points; - PlanarVy[z] = sumVy / numberof_XY_points; - PlanarVz[z] = sumVz / numberof_XY_points; - PlanarPr[z] = sumPr / numberof_XY_points; - - PlanarStressXX[z] = sumStressXX / numberof_XY_points; - PlanarStressYY[z] = sumStressYY / numberof_XY_points; - PlanarStressZZ[z] = sumStressZZ / numberof_XY_points; - PlanarStressXY[z] = sumStressXY / numberof_XY_points; - PlanarStressXZ[z] = sumStressXZ / numberof_XY_points; - PlanarStressYZ[z] = sumStressYZ / numberof_XY_points; - } -} -////////////////////////////////////////////////////////////////////////// -void Averaging::getNodeIndexes(std::array<double, 3> x, std::array<int, 3>& ix) -{ - ix[0] = (int)round((x[0] - geo_origin[0]) / deltax); - ix[1] = (int)round((x[1] - geo_origin[1]) / deltax); - ix[2] = (int)round((x[2] - geo_origin[2]) / deltax); -} -////////////////////////////////////////////////////////////////////////// -void Averaging::createMQMatrix(std::string dataNameMQ) -{ - UBLOG(logINFO, "createMQMatrix:start"); - - vtkSmartPointer<vtkTimerLog> timer = vtkSmartPointer<vtkTimerLog>::New(); - vtkSmartPointer<vtkTimerLog> timer_total = vtkSmartPointer<vtkTimerLog>::New(); - - timer_total->StartTimer(); - - UBLOG(logINFO, "read data set from " + dataNameMQ + ": start"); - timer->StartTimer(); - - vtkXMLPUnstructuredGridReader* reader = vtkXMLPUnstructuredGridReader::New(); - reader->SetFileName(dataNameMQ.c_str()); - reader->Update(); - - UBLOG(logINFO, "read data set from " + dataNameMQ + ": end"); - timer->StopTimer(); - UBLOG(logINFO, "read data set time: " + UbSystem::toString(timer->GetElapsedTime()) + " s"); - - UBLOG(logINFO, "NX1 x NX2 x NX3 = " + UbSystem::toString(dimensions[0]) + " x " + UbSystem::toString(dimensions[1]) + " x " + UbSystem::toString(dimensions[2])); - - int size = dimensions[0] * dimensions[1] * dimensions[2]; - vxMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vyMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vzMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - prMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - - vtkUnstructuredGrid* ugrid = reader->GetOutput(); - - vtkPoints* points = vtkPoints::New(); - vtkCellArray* cells = vtkCellArray::New(); - - int numberOfCells = ugrid->GetNumberOfCells(); - - vtkDataArray* vxArray = ugrid->GetPointData()->GetArray("Vx"); - vtkDataArray* vyArray = ugrid->GetPointData()->GetArray("Vy"); - vtkDataArray* vzArray = ugrid->GetPointData()->GetArray("Vz"); - vtkDataArray* prArray = ugrid->GetPointData()->GetArray("Rho"); - - double x[3]; - array<double, 3> xMin; - array<double, 3> xMax; - array<int, 3> ixMin; - array<int, 3> ixMax; - vtkIdType idc = 0; - - for (int i = 0; i < numberOfCells; i++) - { - vtkIdList* plist = vtkIdList::New(); - ugrid->GetCellPoints(i, plist); - vector <double> x1; - vector <double> x2; - vector <double> x3; - for (int p = 0; p < plist->GetNumberOfIds(); p++) - { - ugrid->GetPoint(plist->GetId(p), x); - x1.push_back(x[0]); - x2.push_back(x[1]); - x3.push_back(x[2]); - } - xMin[0] = *min_element(x1.begin(), x1.end()); - xMin[1] = *min_element(x2.begin(), x2.end()); - xMin[2] = *min_element(x3.begin(), x3.end()); - - xMax[0] = *max_element(x1.begin(), x1.end()); - xMax[1] = *max_element(x2.begin(), x2.end()); - xMax[2] = *max_element(x3.begin(), x3.end()); - - getNodeIndexes(xMin, ixMin); - getNodeIndexes(xMax, ixMax); - int c = 0; - for (int k = ixMin[2]; k <= ixMax[2]; k++) - { - for (int j = ixMin[1]; j <= ixMax[1]; j++) - { - for (int i = ixMin[0]; i <= ixMax[0]; i++) - { - if (i >= 0 && i < dimensions[0] && j >= 0 && j < dimensions[1] && k >= 0 && k < dimensions[2]) - { - if (geoMatrix(i, j, k) == 1) - { - vxMatrix(i, j, k) = vxArray->GetTuple1(plist->GetId(c)); - vyMatrix(i, j, k) = vyArray->GetTuple1(plist->GetId(c)); - vzMatrix(i, j, k) = vzArray->GetTuple1(plist->GetId(c)); - prMatrix(i, j, k) = prArray->GetTuple1(plist->GetId(c)); - c++; - } - } - } - } - } - plist->Delete(); - } - - reader->Delete(); - points->Delete(); - cells->Delete(); - - UBLOG(logINFO, "createMQMatrix:end"); - timer_total->StopTimer(); - UBLOG(logINFO, "total time: " + UbSystem::toString(timer_total->GetElapsedTime()) + " s"); -} -////////////////////////////////////////////////////////////////////////// -void Averaging::writeMatrixToImageFile(std::string output, std::array<CbArray3D<double>, 4> matrix) -{ - vtkSmartPointer<vtkTimerLog> timer_write = vtkSmartPointer<vtkTimerLog>::New(); - - std::string vtkfilename = output + ".vti"; - - UBLOG(logINFO, "write data set to " + vtkfilename + ": start"); - timer_write->StartTimer(); - - vtkImageData* image = vtkImageData::New(); - - image->SetExtent(&geo_extent[0]); - image->SetOrigin(&geo_origin[0]); - image->SetSpacing(&geo_spacing[0]); - - vtkDoubleArray* vxArray = vtkDoubleArray::New(); - vxArray->SetNumberOfComponents(1); - vxArray->SetName("Vx"); - - vtkDoubleArray* vyArray = vtkDoubleArray::New(); - vyArray->SetNumberOfComponents(1); - vyArray->SetName("Vy"); - - vtkDoubleArray* vzArray = vtkDoubleArray::New(); - vzArray->SetNumberOfComponents(1); - vzArray->SetName("Vz"); - - vtkSmartPointer<vtkDoubleArray> prArray = vtkDoubleArray::New(); - prArray->SetNumberOfComponents(1); - prArray->SetName("Press"); - - int size = dimensions[0] * dimensions[1] * dimensions[2]; - - vxArray->SetArray(matrix[0].getStartAdressOfSortedArray(0, 0, 0), size, 1); - vyArray->SetArray(matrix[1].getStartAdressOfSortedArray(0, 0, 0), size, 1); - vzArray->SetArray(matrix[2].getStartAdressOfSortedArray(0, 0, 0), size, 1); - prArray->SetArray(matrix[3].getStartAdressOfSortedArray(0, 0, 0), size, 1); - - image->GetPointData()->AddArray(vxArray); - image->GetPointData()->AddArray(vyArray); - image->GetPointData()->AddArray(vzArray); - image->GetPointData()->AddArray(prArray); - - vtkXMLImageDataWriter* writer = vtkXMLImageDataWriter::New(); - writer->SetInputData(image); - writer->SetFileName(vtkfilename.c_str()); - //writer->SetDataModeToAscii(); - writer->SetDataModeToAppended(); - writer->SetCompressorTypeToZLib(); - writer->Update(); - - image->Delete(); - vxArray->Delete(); - vyArray->Delete(); - vzArray->Delete(); - writer->Delete(); - - UBLOG(logINFO, "write data set: end"); - timer_write->StopTimer(); - UBLOG(logINFO, "write data set time: " + UbSystem::toString(timer_write->GetElapsedTime()) + " s"); -} -void Averaging::writeMqMatrixToImageFile(std::string output) -{ - array < CbArray3D<double>, 4 > matrix = { vxMatrix, vyMatrix, vzMatrix, prMatrix }; - writeMatrixToImageFile(output, matrix); -} -void Averaging::writeVaMatrixToImageFile(std::string output) -{ - array < CbArray3D<double>, 4 > matrix = { vaVxMatrix, vaVyMatrix, vaVzMatrix, vaPrMatrix }; - writeMatrixToImageFile(output, matrix); -} -void Averaging::writeVaSumMatrixToImageFile(std::string output) -{ - array < CbArray3D<double>, 4 > matrix = { sumVaVxMatrix, sumVaVyMatrix, sumVaVzMatrix, sumVaPrMatrix }; - writeMatrixToImageFile(output, matrix); -} -void Averaging::writeMeanMatrixToImageFile(std::string output) -{ - array < CbArray3D<double>, 4 > matrix = { vaMeanVxMatrix, vaMeanVyMatrix, vaMeanVzMatrix, vaMeanPrMatrix }; - writeMatrixToImageFile(output, matrix); -} - -////////////////////////////////////////////////////////////////////////// -void Averaging::readGeoMatrix(string dataNameG) -{ - vtkSmartPointer<vtkTimerLog> timer = vtkSmartPointer<vtkTimerLog>::New(); - - UBLOG(logINFO, "readGeoMatrix:start"); - - UBLOG(logINFO, "read data set from " + dataNameG + ": start"); - timer->StartTimer(); - vtkDataSet* dataSetGeo(ReadDataSet(dataNameG.c_str())); - UBLOG(logINFO, "read data set from " + dataNameG + ": end"); - timer->StopTimer(); - UBLOG(logINFO, "read data set time: " + UbSystem::toString(timer->GetElapsedTime()) + " s"); - - vtkImageData* image = vtkImageData::SafeDownCast(dataSetGeo); - - int geo_extent[6]; - double geo_origin[3]; - double geo_spacing[3]; - - image->GetExtent(geo_extent); - image->GetOrigin(geo_origin); - image->GetSpacing(geo_spacing); - - int geo_nx1 = geo_extent[1] + 1; - int geo_nx2 = geo_extent[3] + 1; - int geo_nx3 = geo_extent[5] + 1; - - UBLOG(logINFO, "NX1 x NX2 x NX3 = " + UbSystem::toString(geo_nx1) + " x " + UbSystem::toString(geo_nx2) + " x " + UbSystem::toString(geo_nx3)); - - geoMatrix.resize(geo_nx1, geo_nx2, geo_nx3, 0); - - vtkDataArray* geoArray = dataSetGeo->GetPointData()->GetArray("geo"); - - int numberOfPoints = dataSetGeo->GetNumberOfPoints(); - int* gm = geoMatrix.getStartAdressOfSortedArray(0, 0, 0); - for (int i = 0; i < numberOfPoints; i++) - { - gm[i] = (int)geoArray->GetTuple1(i); - } - - dataSetGeo->Delete(); - image->Delete(); - geoArray->Delete(); - - UBLOG(logINFO, "readGeoMatrix:end"); -} -void Averaging::writeGeoMatrixToBinaryFiles(std::string fname) -{ - writeMatrixToBinaryFiles<int>(geoMatrix, fname); -} -void Averaging::readGeoMatrixFromBinaryFiles(std::string fname) -{ - readMatrixFromBinaryFiles<int>(fname, geoMatrix); -} -void Averaging::writeMqMatrixToBinaryFiles(std::string fname, int timeStep) -{ - writeMatrixToBinaryFiles<double>(vxMatrix, fname + "Vx" + UbSystem::toString(timeStep) + ".bin"); - writeMatrixToBinaryFiles<double>(vyMatrix, fname + "Vy" + UbSystem::toString(timeStep) + ".bin"); - writeMatrixToBinaryFiles<double>(vzMatrix, fname + "Vz" + UbSystem::toString(timeStep) + ".bin"); - writeMatrixToBinaryFiles<double>(prMatrix, fname + "Pr" + UbSystem::toString(timeStep) + ".bin"); -} -void Averaging::readMqMatrixFromBinaryFiles(std::string fname, int timeStep) -{ - readMatrixFromBinaryFiles<double>(fname + "Vx" + UbSystem::toString(timeStep) + ".bin", vxMatrix); - readMatrixFromBinaryFiles<double>(fname + "Vy" + UbSystem::toString(timeStep) + ".bin", vyMatrix); - readMatrixFromBinaryFiles<double>(fname + "Vz" + UbSystem::toString(timeStep) + ".bin", vzMatrix); - readMatrixFromBinaryFiles<double>(fname + "Pr" + UbSystem::toString(timeStep) + ".bin", prMatrix); -} - -//-------------------------------- volume avaraging -------------------------- -void Averaging::initVolumeAveragingValues() -{ - sumVaVxMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - sumVaVyMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - sumVaVzMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - sumVaPrMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); -} -void Averaging::initVolumeAveragingFluctStressValues() -{ - sumVaFlucVx.resize(dimensions[0], dimensions[1], dimensions[2], 0); - sumVaFlucVy.resize(dimensions[0], dimensions[1], dimensions[2], 0); - sumVaFlucVz.resize(dimensions[0], dimensions[1], dimensions[2], 0); - sumVaFlucPr.resize(dimensions[0], dimensions[1], dimensions[2], 0); - - sumVaStressXX.resize(dimensions[0], dimensions[1], dimensions[2], 0); - sumVaStressYY.resize(dimensions[0], dimensions[1], dimensions[2], 0); - sumVaStressZZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); - sumVaStressXY.resize(dimensions[0], dimensions[1], dimensions[2], 0); - sumVaStressXZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); - sumVaStressYZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); -} -void Averaging::initMeanVolumeAveragingValues() -{ - vaMeanVxMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaMeanVyMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaMeanVzMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaMeanPrMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); -} -void Averaging::initMeanVolumeAveragingFluctStressValues() -{ - meanVaFlucVx.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanVaFlucVy.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanVaFlucVz.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanVaFlucPr.resize(dimensions[0], dimensions[1], dimensions[2], 0); - - meanVaStressXX.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanVaStressYY.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanVaStressZZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanVaStressXY.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanVaStressXZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanVaStressYZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); -} -void Averaging::sumOfVolumeAveragingValues() -{ - vector<double>& vxSum = sumVaVxMatrix.getDataVector(); - vector<double>& vySum = sumVaVyMatrix.getDataVector(); - vector<double>& vzSum = sumVaVzMatrix.getDataVector(); - vector<double>& prSum = sumVaPrMatrix.getDataVector(); - - vector<double>& vxVa = vaVxMatrix.getDataVector(); - vector<double>& vyVa = vaVyMatrix.getDataVector(); - vector<double>& vzVa = vaVzMatrix.getDataVector(); - vector<double>& prVa = vaPrMatrix.getDataVector(); - - int size = (int)vxVa.size(); - - for (int i = 0; i < size; i++) - { - vxSum[i] += vxVa[i]; - vySum[i] += vyVa[i]; - vzSum[i] += vzVa[i]; - prSum[i] += prVa[i]; - } -} -void Averaging::meanOfVolumeAveragingValues(int numberOfTimeSteps) -{ - vector<double>& vxSum = sumVaVxMatrix.getDataVector(); - vector<double>& vySum = sumVaVyMatrix.getDataVector(); - vector<double>& vzSum = sumVaVzMatrix.getDataVector(); - vector<double>& prSum = sumVaPrMatrix.getDataVector(); - - vector<double>& vxMean = vaMeanVxMatrix.getDataVector(); - vector<double>& vyMean = vaMeanVyMatrix.getDataVector(); - vector<double>& vzMean = vaMeanVzMatrix.getDataVector(); - vector<double>& prMean = vaMeanPrMatrix.getDataVector(); - - int size = (int)vxSum.size(); - - for (int i = 0; i < size; i++) - { - vxMean[i] = vxSum[i] / numberOfTimeSteps; - vyMean[i] = vySum[i] / numberOfTimeSteps; - vzMean[i] = vzSum[i] / numberOfTimeSteps; - prMean[i] = prSum[i] / numberOfTimeSteps; - } -} -void Averaging::volumeAveragingWithMPI(double l_real) -{ - ////////////////////////////////////////////////////////////////////////// - //DEBUG - ////////////////////////////////////////////////////////////////////////// - //vaVxMatrix = vxMatrix; - //vaVyMatrix = vyMatrix; - //vaVzMatrix = vzMatrix; - //vaPrMatrix = prMatrix; - //return; - ////////////////////////////////////////////////////////////////////////// - - vtkSmartPointer<vtkTimerLog> timer_averaging = vtkSmartPointer<vtkTimerLog>::New(); - - UBLOG(logINFO, "volume averaging: start"); - timer_averaging->StartTimer(); - - double l = round(l_real / deltax); - UBLOG(logINFO, "l = " + UbSystem::toString(l)); - - UBLOG(logINFO, "NX1 x NX2 x NX3 = " + UbSystem::toString(dimensions[0]) << " x " + UbSystem::toString(dimensions[1]) << " x " << UbSystem::toString(dimensions[2])); - - int size = dimensions[0] * dimensions[1] * dimensions[2]; - vaVxMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaVyMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaVzMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaPrMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - - int numprocs, PID; - MPI_Comm_rank(MPI_COMM_WORLD, &PID); - MPI_Comm_size(MPI_COMM_WORLD, &numprocs); - - int part = (int)round((double)dimensions[0] / (double)numprocs); - UBLOG(logINFO, "part = " + UbSystem::toString(part)); - - int startX1 = part * PID; - int stopX1 = startX1 + part; - if (PID == numprocs - 1) - { - stopX1 = dimensions[0]; - } - - UBLOG(logINFO, "startX1 = " + UbSystem::toString(startX1)); - UBLOG(logINFO, "stopX1 = " + UbSystem::toString(stopX1)); - - vtkSmartPointer<vtkTimerLog> timer_inloop = vtkSmartPointer<vtkTimerLog>::New(); - //timer_inloop->StartTimer(); - int p = 1000000; - - //omp_set_num_threads(8); - - //#pragma omp parallel num_threads(4) //private(i) - { - int i = 0; - -#pragma omp parallel for //private(i)//scheduler(dynamic, 1) - for (int x3 = 0; x3 < dimensions[2]; x3++) - for (int x2 = 0; x2 < dimensions[1]; x2++) - for (int x1 = startX1; x1 < stopX1; x1++) - { - int ID = omp_get_thread_num(); - if (i == 0 && ID == 0) - { - timer_inloop->StartTimer(); - UBLOG(logINFO, "point id = " + UbSystem::toString(i)); - } - double vx = 0.0; - double vy = 0.0; - double vz = 0.0; - double pr = 0.0; - - int ll = (int)l; - int llz1 = ll; - if (x3 - ll < 0) llz1 = x3; - if (x3 + ll >= dimensions[2]) llz1 = dimensions[2] - 1 - x3; - double lQuadrat = l * l; - double lNorm = lQuadrat * lQuadrat * double(llz1) * double(llz1); - - //#pragma omp parallel for - for (int z = -llz1; z <= +llz1; z++) - for (int y = -ll; y <= +ll; y++) - for (int x = -ll; x <= +ll; x++) - { - int xx = x1 + x; - int yy = x2 + y; - int zz = x3 + z; - - //correctIndex(xx, yy, zz); - if (xx < 0) xx = dimensions[0] + xx; - if (xx >= dimensions[0]) xx = xx - dimensions[0]; - - if (yy < 0) yy = dimensions[1] + yy; - if (yy >= dimensions[1]) yy = yy - dimensions[1]; - - if (zz < 0) zz = 0; - if (zz >= dimensions[2]) zz = dimensions[2] - 1; - - double mm = (G((double)x, l)*G((double)y, l)*G((double)z, (double)llz1)) / lNorm; - double gamma = (double)geoMatrix(xx, yy, zz); - - vx += gamma*mm*vxMatrix(xx, yy, zz); - vy += gamma*mm*vyMatrix(xx, yy, zz); - vz += gamma*mm*vzMatrix(xx, yy, zz); - pr += gamma*mm*prMatrix(xx, yy, zz); - - } - - vaVxMatrix(x1, x2, x3) = vx; - vaVyMatrix(x1, x2, x3) = vy; - vaVzMatrix(x1, x2, x3) = vz; - vaPrMatrix(x1, x2, x3) = pr; - - if (i%p == 0 && i != 0 && ID == 0) - { - timer_inloop->StopTimer(); - UBLOG(logINFO, "point id = " + UbSystem::toString(i)); - UBLOG(logINFO, "time per " + UbSystem::toString(p) + " points: " + UbSystem::toString(timer_inloop->GetElapsedTime()) + " s"); - UBLOG(logINFO, "actual memory usage: " << UbSystem::toString(Utilities::getPhysMemUsedByMe() / 1e9) << " GByte"); - timer_inloop->StartTimer(); - UBLOG(logINFO, "thread id: " + UbSystem::toString(ID)); - UBLOG(logINFO, "Number of treads: " + UbSystem::toString(omp_get_num_threads())); - } - i++; - } - } - - if (PID == 0) - { - vector<double> receiveBuffer; - for (int i = 1; i < numprocs; i++) - { - int count, lstartX1, lstopX1; - MPI_Status status; - MPI_Recv(&count, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status); - receiveBuffer.resize(count); - MPI_Recv(&receiveBuffer[0], count, MPI_DOUBLE, i, 0, MPI_COMM_WORLD, &status); - MPI_Recv(&lstartX1, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status); - MPI_Recv(&lstopX1, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status); - int c = 0; - for (int x3 = 0; x3 < dimensions[2]; x3++) - for (int x2 = 0; x2 < dimensions[1]; x2++) - for (int x1 = lstartX1; x1 < lstopX1; x1++) - { - vaVxMatrix(x1, x2, x3) = receiveBuffer[c++]; - vaVyMatrix(x1, x2, x3) = receiveBuffer[c++]; - vaVzMatrix(x1, x2, x3) = receiveBuffer[c++]; - vaPrMatrix(x1, x2, x3) = receiveBuffer[c++]; - } - } - } - else - { - vector<double> sendBuffer; - for (int x3 = 0; x3 < dimensions[2]; x3++) - for (int x2 = 0; x2 < dimensions[1]; x2++) - for (int x1 = startX1; x1 < stopX1; x1++) - { - sendBuffer.push_back(vaVxMatrix(x1, x2, x3)); - sendBuffer.push_back(vaVyMatrix(x1, x2, x3)); - sendBuffer.push_back(vaVzMatrix(x1, x2, x3)); - sendBuffer.push_back(vaPrMatrix(x1, x2, x3)); - } - int count = (int)sendBuffer.size(); - MPI_Send(&count, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); - MPI_Send(&sendBuffer[0], count, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD); - MPI_Send(&startX1, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); - MPI_Send(&stopX1, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); - } - - timer_averaging->StopTimer(); - UBLOG(logINFO, "volume averaging: end"); - UBLOG(logINFO, "volume averaging time: " + UbSystem::toString(timer_averaging->GetElapsedTime()) + " s"); -} -void Averaging::volumeAveragingFluctStressWithMPI(double l_real) -{ - vtkSmartPointer<vtkTimerLog> timer_averaging = vtkSmartPointer<vtkTimerLog>::New(); - - UBLOG(logINFO, "volume averaging fluct and stress: start"); - timer_averaging->StartTimer(); - - double l = round(l_real / deltax); - UBLOG(logINFO, "l = " + UbSystem::toString(l)); - - UBLOG(logINFO, "NX1 x NX2 x NX3 = " + UbSystem::toString(dimensions[0]) << " x " + UbSystem::toString(dimensions[1]) << " x " << UbSystem::toString(dimensions[2])); - - int size = dimensions[0] * dimensions[1] * dimensions[2]; - vaFlucVxMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaFlucVyMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaFlucVzMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaFlucPrMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaStressXX.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaStressYY.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaStressZZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaStressXY.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaStressXZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaStressYZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); - - int numprocs, PID; - MPI_Comm_rank(MPI_COMM_WORLD, &PID); - MPI_Comm_size(MPI_COMM_WORLD, &numprocs); - - int part = (int)round((double)dimensions[0] / (double)numprocs); - UBLOG(logINFO, "part = " + UbSystem::toString(part)); - - int startX1 = part * PID; - int stopX1 = startX1 + part; - if (PID == numprocs - 1) - { - stopX1 = dimensions[0]; - } - - UBLOG(logINFO, "startX1 = " + UbSystem::toString(startX1)); - UBLOG(logINFO, "stopX1 = " + UbSystem::toString(stopX1)); - - vtkSmartPointer<vtkTimerLog> timer_inloop = vtkSmartPointer<vtkTimerLog>::New(); - //timer_inloop->StartTimer(); - int p = 1000000; - - //omp_set_num_threads(8); - - //#pragma omp parallel num_threads(4) //private(i) - { - int i = 0; -#pragma omp parallel for //private(i)//scheduler(dynamic, 1) - for (int x3 = 0; x3 < dimensions[2]; x3++) - for (int x2 = 0; x2 < dimensions[1]; x2++) - for (int x1 = startX1; x1 < stopX1; x1++) - { - int ID = omp_get_thread_num(); - if (i == 0 && ID == 0) - { - timer_inloop->StartTimer(); - UBLOG(logINFO, "point id = " + UbSystem::toString(i)); - } - double flucvx = 0.0; - double flucvy = 0.0; - double flucvz = 0.0; - double flucpr = 0.0; - double stressXX = 0.0; - double stressYY = 0.0; - double stressZZ = 0.0; - double stressXY = 0.0; - double stressXZ = 0.0; - double stressYZ = 0.0; - - int ll = (int)l; - int llz1 = ll; - if (x3 - ll < 0) llz1 = x3; - if (x3 + ll >= dimensions[2]) llz1 = dimensions[2] - 1 - x3; - double lQuadrat = l * l; - double lNorm = lQuadrat * lQuadrat * double(llz1) * double(llz1); - - //#pragma omp parallel for - for (int z = -llz1; z <= +llz1; z++) - for (int y = -ll; y <= +ll; y++) - for (int x = -ll; x <= +ll; x++) - { - int xx = x1 + x; - int yy = x2 + y; - int zz = x3 + z; - - //correctIndex(xx, yy, zz); - if (xx < 0) xx = dimensions[0] + xx; - if (xx >= dimensions[0]) xx = xx - dimensions[0]; - - if (yy < 0) yy = dimensions[1] + yy; - if (yy >= dimensions[1]) yy = yy - dimensions[1]; - - if (zz < 0) zz = 0; - if (zz >= dimensions[2]) zz = dimensions[2] - 1; - - double mm = (G((double)x, l)*G((double)y, l)*G((double)z, (double)llz1)) / lNorm; - double gamma = (double)geoMatrix(xx, yy, zz); - - flucvx += gamma*mm*flucVxMatrix(xx, yy, zz); - flucvy += gamma*mm*flucVyMatrix(xx, yy, zz); - flucvz += gamma*mm*flucVzMatrix(xx, yy, zz); - flucpr += gamma*mm*flucPrMatrix(xx, yy, zz); - - stressXX += gamma*mm*StressXX(xx, yy, zz); - stressYY += gamma*mm*StressYY(xx, yy, zz); - stressZZ += gamma*mm*StressZZ(xx, yy, zz); - stressXY += gamma*mm*StressXY(xx, yy, zz); - stressXZ += gamma*mm*StressXZ(xx, yy, zz); - stressYZ += gamma*mm*StressYZ(xx, yy, zz); - - } - - vaFlucVxMatrix(x1, x2, x3) = flucvx; - vaFlucVyMatrix(x1, x2, x3) = flucvy; - vaFlucVzMatrix(x1, x2, x3) = flucvz; - vaFlucPrMatrix(x1, x2, x3) = flucpr; - - vaStressXX(x1, x2, x3) = stressXX; - vaStressYY(x1, x2, x3) = stressYY; - vaStressZZ(x1, x2, x3) = stressZZ; - vaStressXY(x1, x2, x3) = stressXY; - vaStressXZ(x1, x2, x3) = stressXZ; - vaStressYZ(x1, x2, x3) = stressYZ; - - if (i%p == 0 && i != 0 && ID == 0) - { - timer_inloop->StopTimer(); - UBLOG(logINFO, "point id = " + UbSystem::toString(i)); - UBLOG(logINFO, "time per " + UbSystem::toString(p) + " points: " + UbSystem::toString(timer_inloop->GetElapsedTime()) + " s"); - UBLOG(logINFO, "actual memory usage: " << UbSystem::toString(Utilities::getPhysMemUsedByMe() / 1e9) << " GByte"); - timer_inloop->StartTimer(); - UBLOG(logINFO, "thread id: " + UbSystem::toString(ID)); - UBLOG(logINFO, "Number of treads: " + UbSystem::toString(omp_get_num_threads())); - } - i++; - } - } - - if (PID == 0) - { - vector<double> receiveBuffer; - for (int i = 1; i < numprocs; i++) - { - int count, lstartX1, lstopX1; - MPI_Status status; - MPI_Recv(&count, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status); - receiveBuffer.resize(count); - MPI_Recv(&receiveBuffer[0], count, MPI_DOUBLE, i, 0, MPI_COMM_WORLD, &status); - MPI_Recv(&lstartX1, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status); - MPI_Recv(&lstopX1, 1, MPI_INT, i, 0, MPI_COMM_WORLD, &status); - int c = 0; - for (int x3 = 0; x3 < dimensions[2]; x3++) - for (int x2 = 0; x2 < dimensions[1]; x2++) - for (int x1 = lstartX1; x1 < lstopX1; x1++) - { - vaFlucVxMatrix(x1, x2, x3) = receiveBuffer[c++]; - vaFlucVyMatrix(x1, x2, x3) = receiveBuffer[c++]; - vaFlucVzMatrix(x1, x2, x3) = receiveBuffer[c++]; - vaFlucPrMatrix(x1, x2, x3) = receiveBuffer[c++]; - - vaStressXX(x1, x2, x3) = receiveBuffer[c++]; - vaStressYY(x1, x2, x3) = receiveBuffer[c++]; - vaStressZZ(x1, x2, x3) = receiveBuffer[c++]; - vaStressXY(x1, x2, x3) = receiveBuffer[c++]; - vaStressXZ(x1, x2, x3) = receiveBuffer[c++]; - vaStressYZ(x1, x2, x3) = receiveBuffer[c++]; - } - } - } - else - { - vector<double> sendBuffer; - for (int x3 = 0; x3 < dimensions[2]; x3++) - for (int x2 = 0; x2 < dimensions[1]; x2++) - for (int x1 = startX1; x1 < stopX1; x1++) - { - sendBuffer.push_back(vaFlucVxMatrix(x1, x2, x3)); - sendBuffer.push_back(vaFlucVyMatrix(x1, x2, x3)); - sendBuffer.push_back(vaFlucVzMatrix(x1, x2, x3)); - sendBuffer.push_back(vaFlucPrMatrix(x1, x2, x3)); - - sendBuffer.push_back(vaStressXX(x1, x2, x3)); - sendBuffer.push_back(vaStressYY(x1, x2, x3)); - sendBuffer.push_back(vaStressZZ(x1, x2, x3)); - sendBuffer.push_back(vaStressXY(x1, x2, x3)); - sendBuffer.push_back(vaStressXZ(x1, x2, x3)); - sendBuffer.push_back(vaStressYZ(x1, x2, x3)); - } - int count = (int)sendBuffer.size(); - MPI_Send(&count, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); - MPI_Send(&sendBuffer[0], count, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD); - MPI_Send(&startX1, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); - MPI_Send(&stopX1, 1, MPI_INT, 0, 0, MPI_COMM_WORLD); - } - - timer_averaging->StopTimer(); - UBLOG(logINFO, "volume averaging fluct and stress: end"); - UBLOG(logINFO, "volume averaging fluct and stress time: " + UbSystem::toString(timer_averaging->GetElapsedTime()) + " s"); -} -void Averaging::writeVolumeAveragingValuesToBinaryFiles(std::string ffname, int timeStep) -{ - writeMatrixToBinaryFiles<double>(vaVxMatrix, ffname + "Vx" + UbSystem::toString(timeStep) + ".bin"); - writeMatrixToBinaryFiles<double>(vaVyMatrix, ffname + "Vy" + UbSystem::toString(timeStep) + ".bin"); - writeMatrixToBinaryFiles<double>(vaVzMatrix, ffname + "Vz" + UbSystem::toString(timeStep) + ".bin"); - writeMatrixToBinaryFiles<double>(vaPrMatrix, ffname + "Pr" + UbSystem::toString(timeStep) + ".bin"); -} -void Averaging::readVolumeAveragingValuesFromBinaryFiles(std::string fname, int timeStep) -{ - readMatrixFromBinaryFiles<double>(fname + "Vx" + UbSystem::toString(timeStep) + ".bin", vaVxMatrix); - readMatrixFromBinaryFiles<double>(fname + "Vy" + UbSystem::toString(timeStep) + ".bin", vaVyMatrix); - readMatrixFromBinaryFiles<double>(fname + "Vz" + UbSystem::toString(timeStep) + ".bin", vaVzMatrix); - readMatrixFromBinaryFiles<double>(fname + "Pr" + UbSystem::toString(timeStep) + ".bin", vaPrMatrix); -} -void Averaging::writeMeanVolumeAveragingValuesToBinaryFiles(std::string ffname) -{ - writeMatrixToBinaryFiles<double>(vaMeanVxMatrix, ffname + "Vx" + ".bin"); - writeMatrixToBinaryFiles<double>(vaMeanVyMatrix, ffname + "Vy" + ".bin"); - writeMatrixToBinaryFiles<double>(vaMeanVzMatrix, ffname + "Vz" + ".bin"); - writeMatrixToBinaryFiles<double>(vaMeanPrMatrix, ffname + "Pr" + ".bin"); -} -void Averaging::readMeanVolumeAveragingValuesFromBinaryFiles(std::string ffname) -{ - readMatrixFromBinaryFiles<double>(ffname + "Vx" + ".bin", vaMeanVxMatrix); - readMatrixFromBinaryFiles<double>(ffname + "Vy" + ".bin", vaMeanVyMatrix); - readMatrixFromBinaryFiles<double>(ffname + "Vz" + ".bin", vaMeanVzMatrix); - readMatrixFromBinaryFiles<double>(ffname + "Pr" + ".bin", vaMeanPrMatrix); -} -//void Averaging::readVolumeAveragingFluctStressValuesFromBinaryFiles(std::string fname, int timeStep) -//{ -// readMatrixFromBinaryFiles<double>(fname + "fluctVx" + UbSystem::toString(timeStep) + ".bin", vaFlucVxMatrix); -// readMatrixFromBinaryFiles<double>(fname + "fluctVy" + UbSystem::toString(timeStep) + ".bin", vaFlucVyMatrix); -// readMatrixFromBinaryFiles<double>(fname + "fluctVz" + UbSystem::toString(timeStep) + ".bin", vaFlucVzMatrix); -// readMatrixFromBinaryFiles<double>(fname + "fluctPr" + UbSystem::toString(timeStep) + ".bin", vaFlucPrMatrix); -// -// readMatrixFromBinaryFiles<double>(fname + "stressXX" + UbSystem::toString(timeStep) + ".bin", vaStressXX); -// readMatrixFromBinaryFiles<double>(fname + "stressYY" + UbSystem::toString(timeStep) + ".bin", vaStressYY); -// readMatrixFromBinaryFiles<double>(fname + "stressZZ" + UbSystem::toString(timeStep) + ".bin", vaStressZZ); -// readMatrixFromBinaryFiles<double>(fname + "stressXY" + UbSystem::toString(timeStep) + ".bin", vaStressXY); -// readMatrixFromBinaryFiles<double>(fname + "stressXZ" + UbSystem::toString(timeStep) + ".bin", vaStressXZ); -// readMatrixFromBinaryFiles<double>(fname + "stressYZ" + UbSystem::toString(timeStep) + ".bin", vaStressYZ); -//} - -//------------------------------ fluctuations ----------------------- -void Averaging::initFluctuations() -{ - flucVxMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - flucVyMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - flucVzMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - flucPrMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaFlucVxMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaFlucVyMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaFlucVzMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaFlucPrMatrix.resize(dimensions[0], dimensions[1], dimensions[2], 0); -} -void Averaging::initSumOfVaFluctuations() -{ - sumVaFlucVx.resize(dimensions[0], dimensions[1], dimensions[2], 0); - sumVaFlucVy.resize(dimensions[0], dimensions[1], dimensions[2], 0); - sumVaFlucVz.resize(dimensions[0], dimensions[1], dimensions[2], 0); - sumVaFlucPr.resize(dimensions[0], dimensions[1], dimensions[2], 0); -} -void Averaging::initMeanOfVaFluctuations() -{ - meanVaFlucVx.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanVaFlucVy.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanVaFlucVz.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanVaFlucPr.resize(dimensions[0], dimensions[1], dimensions[2], 0); -} -void Averaging::fluctuationsStress() -{ - vector<double>& vxF = vxMatrix.getDataVector(); - vector<double>& vyF = vyMatrix.getDataVector(); - vector<double>& vzF = vzMatrix.getDataVector(); - vector<double>& prF = prMatrix.getDataVector(); - - vector<double>& vxMean = vaMeanVxMatrix.getDataVector(); - vector<double>& vyMean = vaMeanVyMatrix.getDataVector(); - vector<double>& vzMean = vaMeanVzMatrix.getDataVector(); - vector<double>& prMean = vaMeanPrMatrix.getDataVector(); - - vector<double>& vxFluc = flucVxMatrix.getDataVector(); - vector<double>& vyFluc = flucVyMatrix.getDataVector(); - vector<double>& vzFluc = flucVzMatrix.getDataVector(); - vector<double>& prFluc = flucPrMatrix.getDataVector(); - - vector<double>& XXStress = StressXX.getDataVector(); - vector<double>& YYStress = StressYY.getDataVector(); - vector<double>& ZZStress = StressZZ.getDataVector(); - vector<double>& XYStress = StressXY.getDataVector(); - vector<double>& XZStress = StressXZ.getDataVector(); - vector<double>& YZStress = StressYZ.getDataVector(); - - int size = (int)vxF.size(); - - for (int i = 0; i < size; i++) - { - vxFluc[i] = vxF[i] - vxMean[i]; - vyFluc[i] = vyF[i] - vyMean[i]; - vzFluc[i] = vzF[i] - vzMean[i]; - prFluc[i] = prF[i] - prMean[i]; - - XXStress[i] = vxFluc[i] * vxFluc[i]; - YYStress[i] = vyFluc[i] * vyFluc[i]; - ZZStress[i] = vzFluc[i] * vzFluc[i]; - XYStress[i] = vxFluc[i] * vyFluc[i]; - XZStress[i] = vxFluc[i] * vzFluc[i]; - YZStress[i] = vyFluc[i] * vzFluc[i]; - } -} -void Averaging::fluctuationsStress2() -{ - vector<double>& vxVa = vaVxMatrix.getDataVector(); - vector<double>& vyVa = vaVyMatrix.getDataVector(); - vector<double>& vzVa = vaVzMatrix.getDataVector(); - vector<double>& prVa = vaPrMatrix.getDataVector(); - - vector<double>& vxMean = vaMeanVxMatrix.getDataVector(); - vector<double>& vyMean = vaMeanVyMatrix.getDataVector(); - vector<double>& vzMean = vaMeanVzMatrix.getDataVector(); - vector<double>& prMean = vaMeanPrMatrix.getDataVector(); - - vector<double>& vxFluc = vaFlucVxMatrix.getDataVector(); - vector<double>& vyFluc = vaFlucVyMatrix.getDataVector(); - vector<double>& vzFluc = vaFlucVzMatrix.getDataVector(); - vector<double>& prFluc = vaFlucPrMatrix.getDataVector(); - - vector<double>& XXStress = vaStressXX.getDataVector(); - vector<double>& YYStress = vaStressYY.getDataVector(); - vector<double>& ZZStress = vaStressZZ.getDataVector(); - vector<double>& XYStress = vaStressXY.getDataVector(); - vector<double>& XZStress = vaStressXZ.getDataVector(); - vector<double>& YZStress = vaStressYZ.getDataVector(); - - int size = (int)vxVa.size(); - - for (int i = 0; i < size; i++) - { - vxFluc[i] = vxVa[i] - vxMean[i]; - vyFluc[i] = vyVa[i] - vyMean[i]; - vzFluc[i] = vzVa[i] - vzMean[i]; - prFluc[i] = prVa[i] - prMean[i]; - - XXStress[i] = vxFluc[i] * vxFluc[i]; - YYStress[i] = vyFluc[i] * vyFluc[i]; - ZZStress[i] = vzFluc[i] * vzFluc[i]; - XYStress[i] = vxFluc[i] * vyFluc[i]; - XZStress[i] = vxFluc[i] * vzFluc[i]; - YZStress[i] = vyFluc[i] * vzFluc[i]; - } -} - - -void Averaging::sumOfVaFluctuations() -{ - static int counter = 0; - vector<double>& vxFluc = vaFlucVxMatrix.getDataVector(); - vector<double>& vyFluc = vaFlucVyMatrix.getDataVector(); - vector<double>& vzFluc = vaFlucVzMatrix.getDataVector(); - vector<double>& prFluc = vaFlucPrMatrix.getDataVector(); - - vector<double>& SumFlucVx = sumVaFlucVx.getDataVector(); - vector<double>& SumFlucVy = sumVaFlucVy.getDataVector(); - vector<double>& SumFlucVz = sumVaFlucVz.getDataVector(); - vector<double>& SumFlucPr = sumVaFlucPr.getDataVector(); - - int size = (int)vxFluc.size(); - - for (int i = 0; i < size; i++) - { - SumFlucVx[i] += vxFluc[i]; - SumFlucVy[i] += vyFluc[i]; - SumFlucVz[i] += vzFluc[i]; - SumFlucPr[i] += prFluc[i]; - counter++; - } - -} -void Averaging::meanOfVaFluctuations(int numberOfTimeSteps) -{ - vector<double>& MeanFlucVx = meanVaFlucVx.getDataVector(); - vector<double>& MeanFlucVy = meanVaFlucVy.getDataVector(); - vector<double>& MeanFlucVz = meanVaFlucVz.getDataVector(); - vector<double>& MeanFlucPr = meanVaFlucPr.getDataVector(); - - vector<double>& SumFlucVx = sumVaFlucVx.getDataVector(); - vector<double>& SumFlucVy = sumVaFlucVy.getDataVector(); - vector<double>& SumFlucVz = sumVaFlucVz.getDataVector(); - vector<double>& SumFlucPr = sumVaFlucPr.getDataVector(); - - int size = (int)SumFlucVx.size(); - - for (int i = 0; i < size; i++) - { - MeanFlucVx[i] = SumFlucVx[i] / numberOfTimeSteps; - MeanFlucVy[i] = SumFlucVy[i] / numberOfTimeSteps; - MeanFlucVz[i] = SumFlucVz[i] / numberOfTimeSteps; - MeanFlucPr[i] = SumFlucPr[i] / numberOfTimeSteps; - } -} -void Averaging::writeVaFluctuationsToBinaryFiles(std::string fname, int timeStep) -{ - writeMatrixToBinaryFiles<double>(vaFlucVxMatrix, fname + "Vx" + UbSystem::toString(timeStep) + ".bin"); - writeMatrixToBinaryFiles<double>(vaFlucVyMatrix, fname + "Vy" + UbSystem::toString(timeStep) + ".bin"); - writeMatrixToBinaryFiles<double>(vaFlucVzMatrix, fname + "Vz" + UbSystem::toString(timeStep) + ".bin"); - writeMatrixToBinaryFiles<double>(vaFlucPrMatrix, fname + "Pr" + UbSystem::toString(timeStep) + ".bin"); -} -void Averaging::readVaFluctuationsFromBinaryFiles(std::string fname, int timeStep) -{ - readMatrixFromBinaryFiles<double>(fname + "Vx" + UbSystem::toString(timeStep) + ".bin", vaFlucVxMatrix); - readMatrixFromBinaryFiles<double>(fname + "Vy" + UbSystem::toString(timeStep) + ".bin", vaFlucVyMatrix); - readMatrixFromBinaryFiles<double>(fname + "Vz" + UbSystem::toString(timeStep) + ".bin", vaFlucVzMatrix); - readMatrixFromBinaryFiles<double>(fname + "Pr" + UbSystem::toString(timeStep) + ".bin", vaFlucPrMatrix); -} -void Averaging::initMeanOfVolumeAveragedValues() -{ - meanVaFlucVx.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanVaFlucVy.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanVaFlucVz.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanVaFlucPr.resize(dimensions[0], dimensions[1], dimensions[2], 0); - - meanVaStressXX.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanVaStressYY.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanVaStressZZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanVaStressXY.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanVaStressXZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanVaStressYZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); -} -void Averaging::sumVolumeAveragedValues() -{ - static int counter = 0; - vector<double>& vxFluc = vaFlucVxMatrix.getDataVector(); - vector<double>& vyFluc = vaFlucVyMatrix.getDataVector(); - vector<double>& vzFluc = vaFlucVzMatrix.getDataVector(); - vector<double>& prFluc = vaFlucPrMatrix.getDataVector(); - - vector<double>& sumFlucVx = meanVaFlucVx.getDataVector(); - vector<double>& sumFlucVy = meanVaFlucVy.getDataVector(); - vector<double>& sumFlucVz = meanVaFlucVz.getDataVector(); - vector<double>& sumFlucPr = meanVaFlucPr.getDataVector(); - - vector<double>& sumStressXX = meanVaStressXX.getDataVector(); - vector<double>& sumStressYY = meanVaStressYY.getDataVector(); - vector<double>& sumStressZZ = meanVaStressZZ.getDataVector(); - vector<double>& sumStressXY = meanVaStressXY.getDataVector(); - vector<double>& sumStressXZ = meanVaStressXZ.getDataVector(); - vector<double>& sumStressYZ = meanVaStressYZ.getDataVector(); - - int size = (int)vxFluc.size(); - - for (int i = 0; i < size; i++) - { - sumFlucVx[i] += vxFluc[i]; - sumFlucVy[i] += vyFluc[i]; - sumFlucVz[i] += vzFluc[i]; - sumFlucPr[i] += prFluc[i]; - - sumStressXX[i] += vxFluc[i] * vxFluc[i]; - sumStressYY[i] += vyFluc[i] * vyFluc[i]; - sumStressZZ[i] += vzFluc[i] * vzFluc[i]; - sumStressXY[i] += vxFluc[i] * vyFluc[i]; - sumStressXZ[i] += vxFluc[i] * vzFluc[i]; - sumStressYZ[i] += vyFluc[i] * vzFluc[i]; - - counter++; - } -} -void Averaging::computeVolumeAveragedValues(int numberOfTimeSteps) -{ - vector<double>& meanFlucVx = meanVaFlucVx.getDataVector(); - vector<double>& meanFlucVy = meanVaFlucVy.getDataVector(); - vector<double>& meanFlucVz = meanVaFlucVz.getDataVector(); - vector<double>& meanFlucPr = meanVaFlucPr.getDataVector(); - - vector<double>& meanStressXX = meanVaStressXX.getDataVector(); - vector<double>& meanStressYY = meanVaStressYY.getDataVector(); - vector<double>& meanStressZZ = meanVaStressZZ.getDataVector(); - vector<double>& meanStressXY = meanVaStressXY.getDataVector(); - vector<double>& meanStressXZ = meanVaStressXZ.getDataVector(); - vector<double>& meanStressYZ = meanVaStressYZ.getDataVector(); - - int size = (int)meanFlucVx.size(); - - for (int i = 0; i < size; i++) - { - meanFlucVx[i] = meanFlucVx[i] / numberOfTimeSteps; - meanFlucVy[i] = meanFlucVy[i] / numberOfTimeSteps; - meanFlucVz[i] = meanFlucVz[i] / numberOfTimeSteps; - meanFlucPr[i] = meanFlucPr[i] / numberOfTimeSteps; - - meanStressXX[i] = meanStressXX[i] / numberOfTimeSteps; - meanStressYY[i] = meanStressYY[i] / numberOfTimeSteps; - meanStressZZ[i] = meanStressZZ[i] / numberOfTimeSteps; - meanStressXY[i] = meanStressXY[i] / numberOfTimeSteps; - meanStressXZ[i] = meanStressXZ[i] / numberOfTimeSteps; - meanStressYZ[i] = meanStressYZ[i] / numberOfTimeSteps; - } -} -void Averaging::writeVolumeAveragedValuesToBinaryFiles(std::string fname) -{ - writeMatrixToBinaryFiles<double>(meanVaFlucVx, fname + "Vx" + ".bin"); - writeMatrixToBinaryFiles<double>(meanVaFlucVy, fname + "Vy" + ".bin"); - writeMatrixToBinaryFiles<double>(meanVaFlucVz, fname + "Vz" + ".bin"); - writeMatrixToBinaryFiles<double>(meanVaFlucPr, fname + "Pr" + ".bin"); - - writeMatrixToBinaryFiles<double>(meanVaStressXX, fname + "XX" + ".bin"); - writeMatrixToBinaryFiles<double>(meanVaStressYY, fname + "YY" + ".bin"); - writeMatrixToBinaryFiles<double>(meanVaStressZZ, fname + "ZZ" + ".bin"); - writeMatrixToBinaryFiles<double>(meanVaStressXY, fname + "XY" + ".bin"); - writeMatrixToBinaryFiles<double>(meanVaStressXZ, fname + "XZ" + ".bin"); - writeMatrixToBinaryFiles<double>(meanVaStressYZ, fname + "YZ" + ".bin"); -} -void Averaging::readVolumeAveragedValuesFromBinaryFiles(std::string fname) -{ - readMatrixFromBinaryFiles<double>(fname + "Vx" + ".bin", meanVaFlucVx); - readMatrixFromBinaryFiles<double>(fname + "Vy" + ".bin", meanVaFlucVy); - readMatrixFromBinaryFiles<double>(fname + "Vz" + ".bin", meanVaFlucVz); - readMatrixFromBinaryFiles<double>(fname + "Pr" + ".bin", meanVaFlucPr); - - readMatrixFromBinaryFiles<double>(fname + "XX" + ".bin", meanVaStressXX); - readMatrixFromBinaryFiles<double>(fname + "YY" + ".bin", meanVaStressYY); - readMatrixFromBinaryFiles<double>(fname + "ZZ" + ".bin", meanVaStressZZ); - readMatrixFromBinaryFiles<double>(fname + "XY" + ".bin", meanVaStressXY); - readMatrixFromBinaryFiles<double>(fname + "XZ" + ".bin", meanVaStressXZ); - readMatrixFromBinaryFiles<double>(fname + "YZ" + ".bin", meanVaStressYZ); -} -void Averaging::writeMeanVaFluctuationsToBinaryFiles(std::string fname) -{ - writeMatrixToBinaryFiles<double>(meanVaFlucVx, fname + "Vx" + ".bin"); - writeMatrixToBinaryFiles<double>(meanVaFlucVy, fname + "Vy" + ".bin"); - writeMatrixToBinaryFiles<double>(meanVaFlucVz, fname + "Vz" + ".bin"); - writeMatrixToBinaryFiles<double>(meanVaFlucPr, fname + "Pr" + ".bin"); -} -void Averaging::readMeanVaFluctuationsFromBinaryFiles(std::string fname) -{ - readMatrixFromBinaryFiles<double>(fname + "Vx" + ".bin", meanVaFlucVx); - readMatrixFromBinaryFiles<double>(fname + "Vy" + ".bin", meanVaFlucVy); - readMatrixFromBinaryFiles<double>(fname + "Vz" + ".bin", meanVaFlucVz); - readMatrixFromBinaryFiles<double>(fname + "Pr" + ".bin", meanVaFlucPr); -} -void Averaging::writeMeanOfVaFluctuationsToImageFile(std::string output) -{ - array < CbArray3D<double>, 4 > matrix = { meanVaFlucVx, meanVaFlucVy, meanVaFlucVz, meanVaFlucPr }; - writeMatrixToImageFile(output, matrix); -} -void Averaging::writeFluctuationsToImageFile(std::string output) -{ - array < CbArray3D<double>, 4 > matrix = { flucVxMatrix, flucVyMatrix, flucVzMatrix, flucPrMatrix }; - writeMatrixToImageFile(output, matrix); -} -void Averaging::writeVaFluctuationsToImageFile(std::string output) -{ - array < CbArray3D<double>, 4 > matrix = { vaFlucVxMatrix, vaFlucVyMatrix, vaFlucVzMatrix, vaFlucPrMatrix }; - writeMatrixToImageFile(output, matrix); -} - -//----------------------------- stress ----------------------------- -void Averaging::initStresses() -{ - StressXX.resize(dimensions[0], dimensions[1], dimensions[2], 0); - StressYY.resize(dimensions[0], dimensions[1], dimensions[2], 0); - StressZZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); - StressXY.resize(dimensions[0], dimensions[1], dimensions[2], 0); - StressXZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); - StressYZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaStressXX.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaStressYY.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaStressZZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaStressXY.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaStressXZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); - vaStressYZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); -} -void Averaging::initSumOfVaStresses() -{ - sumVaStressXX.resize(dimensions[0], dimensions[1], dimensions[2], 0); - sumVaStressYY.resize(dimensions[0], dimensions[1], dimensions[2], 0); - sumVaStressZZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); - sumVaStressXY.resize(dimensions[0], dimensions[1], dimensions[2], 0); - sumVaStressXZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); - sumVaStressYZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); -} -void Averaging::initMeanOfVaStresses() -{ - meanVaStressXX.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanVaStressYY.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanVaStressZZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanVaStressXY.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanVaStressXZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); - meanVaStressYZ.resize(dimensions[0], dimensions[1], dimensions[2], 0); -} -void Averaging::sumOfVaStresses() -{ - vector<double>& XXStress = vaStressXX.getDataVector(); - vector<double>& YYStress = vaStressYY.getDataVector(); - vector<double>& ZZStress = vaStressZZ.getDataVector(); - vector<double>& XYStress = vaStressXY.getDataVector(); - vector<double>& XZStress = vaStressXZ.getDataVector(); - vector<double>& YZStress = vaStressYZ.getDataVector(); - - vector<double>& XXSum = sumVaStressXX.getDataVector(); - vector<double>& YYSum = sumVaStressYY.getDataVector(); - vector<double>& ZZSum = sumVaStressZZ.getDataVector(); - vector<double>& XYSum = sumVaStressXY.getDataVector(); - vector<double>& XZSum = sumVaStressXZ.getDataVector(); - vector<double>& YZSum = sumVaStressYZ.getDataVector(); - - int size = (int)XXStress.size(); - - for (int i = 0; i < size; i++) - { - XXSum[i] += XXStress[i]; - YYSum[i] += YYStress[i]; - ZZSum[i] += ZZStress[i]; - XYSum[i] += XYStress[i]; - XZSum[i] += XZStress[i]; - YZSum[i] += YZStress[i]; - } -} -void Averaging::meanOfVaStresses(int numberOfTimeSteps) -{ - vector<double>& XXSum = sumVaStressXX.getDataVector(); - vector<double>& YYSum = sumVaStressYY.getDataVector(); - vector<double>& ZZSum = sumVaStressZZ.getDataVector(); - vector<double>& XYSum = sumVaStressXY.getDataVector(); - vector<double>& XZSum = sumVaStressXZ.getDataVector(); - vector<double>& YZSum = sumVaStressYZ.getDataVector(); - - vector<double>& XXMean = meanVaStressXX.getDataVector(); - vector<double>& YYMean = meanVaStressYY.getDataVector(); - vector<double>& ZZMean = meanVaStressZZ.getDataVector(); - vector<double>& XYMean = meanVaStressXY.getDataVector(); - vector<double>& XZMean = meanVaStressXZ.getDataVector(); - vector<double>& YZMean = meanVaStressYZ.getDataVector(); - - int size = (int)XXSum.size(); - - for (int i = 0; i < size; i++) - { - XXMean[i] = XXSum[i] / numberOfTimeSteps; - YYMean[i] = YYSum[i] / numberOfTimeSteps; - ZZMean[i] = ZZSum[i] / numberOfTimeSteps; - XYMean[i] = XYSum[i] / numberOfTimeSteps; - XZMean[i] = XZSum[i] / numberOfTimeSteps; - YZMean[i] = YZSum[i] / numberOfTimeSteps; - } -} -void Averaging::writeVaStressesToBinaryFiles(std::string fname, int timeStep) -{ - writeMatrixToBinaryFiles<double>(vaStressXX, fname + "XX" + UbSystem::toString(timeStep) + ".bin"); - writeMatrixToBinaryFiles<double>(vaStressYY, fname + "YY" + UbSystem::toString(timeStep) + ".bin"); - writeMatrixToBinaryFiles<double>(vaStressZZ, fname + "ZZ" + UbSystem::toString(timeStep) + ".bin"); - writeMatrixToBinaryFiles<double>(vaStressXY, fname + "XY" + UbSystem::toString(timeStep) + ".bin"); - writeMatrixToBinaryFiles<double>(vaStressXZ, fname + "XZ" + UbSystem::toString(timeStep) + ".bin"); - writeMatrixToBinaryFiles<double>(vaStressYZ, fname + "YZ" + UbSystem::toString(timeStep) + ".bin"); -} -void Averaging::readVaStressesFromBinaryFiles(std::string fname, int timeStep) -{ - readMatrixFromBinaryFiles<double>(fname + "XX" + UbSystem::toString(timeStep) + ".bin", vaStressXX); - readMatrixFromBinaryFiles<double>(fname + "YY" + UbSystem::toString(timeStep) + ".bin", vaStressYY); - readMatrixFromBinaryFiles<double>(fname + "ZZ" + UbSystem::toString(timeStep) + ".bin", vaStressZZ); - readMatrixFromBinaryFiles<double>(fname + "XY" + UbSystem::toString(timeStep) + ".bin", vaStressXY); - readMatrixFromBinaryFiles<double>(fname + "XZ" + UbSystem::toString(timeStep) + ".bin", vaStressXZ); - readMatrixFromBinaryFiles<double>(fname + "YZ" + UbSystem::toString(timeStep) + ".bin", vaStressYZ); -} -void Averaging::writeMeanVaStressesToBinaryFiles(std::string fname) -{ - writeMatrixToBinaryFiles<double>(meanVaStressXX, fname + "XX" + ".bin"); - writeMatrixToBinaryFiles<double>(meanVaStressYY, fname + "YY" + ".bin"); - writeMatrixToBinaryFiles<double>(meanVaStressZZ, fname + "ZZ" + ".bin"); - writeMatrixToBinaryFiles<double>(meanVaStressXY, fname + "XY" + ".bin"); - writeMatrixToBinaryFiles<double>(meanVaStressXZ, fname + "XZ" + ".bin"); - writeMatrixToBinaryFiles<double>(meanVaStressYZ, fname + "YZ" + ".bin"); -} -void Averaging::readMeanVaStressesFromBinaryFiles(std::string fname) -{ - readMatrixFromBinaryFiles<double>(fname + "XX" + ".bin", meanVaStressXX); - readMatrixFromBinaryFiles<double>(fname + "YY" + ".bin", meanVaStressYY); - readMatrixFromBinaryFiles<double>(fname + "ZZ" + ".bin", meanVaStressZZ); - readMatrixFromBinaryFiles<double>(fname + "XY" + ".bin", meanVaStressXY); - readMatrixFromBinaryFiles<double>(fname + "XZ" + ".bin", meanVaStressXZ); - readMatrixFromBinaryFiles<double>(fname + "YZ" + ".bin", meanVaStressYZ); -} - -void Averaging::writeMeanOfVaStressesToImageFile(std::string ffname) -{ - array < CbArray3D<double>, 4 > matrix = { meanVaStressXX, meanVaStressYY, meanVaStressZZ, meanVaStressXY }; - writeMatrixToImageFile(ffname, matrix); -} - -//------------------------------------ planar -------------------------- -void Averaging::initPlanarAveraging() -{ - PlanarVx.resize(dimensions[2], 0); - PlanarVy.resize(dimensions[2], 0); - PlanarVz.resize(dimensions[2], 0); - PlanarPr.resize(dimensions[2], 0); - - PlanarFlucVx.resize(dimensions[2], 0); - PlanarFlucVy.resize(dimensions[2], 0); - PlanarFlucVz.resize(dimensions[2], 0); - PlanarFlucPr.resize(dimensions[2], 0); - - PlanarStressXX.resize(dimensions[2], 0); - PlanarStressYY.resize(dimensions[2], 0); - PlanarStressZZ.resize(dimensions[2], 0); - PlanarStressXY.resize(dimensions[2], 0); - PlanarStressXZ.resize(dimensions[2], 0); - PlanarStressYZ.resize(dimensions[2], 0); -} -void Averaging::planarAveraging() -{ - double numberof_XY_points = (double)dimensions[0] * (double)dimensions[1]; - - for (int z = 0; z < dimensions[2]; z++) - { - double sumVx = 0, sumVy = 0, sumVz = 0, sumPr = 0; - double sumFluctVx = 0, sumFluctVy = 0, sumFluctVz = 0, sumFluctPr = 0; - double sumStressXX = 0, sumStressYY = 0, sumStressZZ = 0, sumStressXY = 0, sumStressXZ = 0, sumStressYZ = 0; - for (int y = 0; y < dimensions[1]; y++) - for (int x = 0; x < dimensions[0]; x++) - { - sumVx += vaMeanVxMatrix(x, y, z); - sumVy += vaMeanVyMatrix(x, y, z); - sumVz += vaMeanVzMatrix(x, y, z); - sumPr += vaMeanPrMatrix(x, y, z); - - sumFluctVx += meanVaFlucVx(x, y, z); - sumFluctVy += meanVaFlucVy(x, y, z); - sumFluctVz += meanVaFlucVz(x, y, z); - sumFluctPr += meanVaFlucPr(x, y, z); - - sumStressXX += meanVaStressXX(x, y, z); - sumStressYY += meanVaStressYY(x, y, z); - sumStressZZ += meanVaStressZZ(x, y, z); - sumStressXY += meanVaStressXY(x, y, z); - sumStressXZ += meanVaStressXZ(x, y, z); - sumStressYZ += meanVaStressYZ(x, y, z); - } - PlanarVx[z] = sumVx / numberof_XY_points; - PlanarVy[z] = sumVy / numberof_XY_points; - PlanarVz[z] = sumVz / numberof_XY_points; - PlanarPr[z] = sumPr / numberof_XY_points; - - PlanarFlucVx[z] = sumFluctVx / numberof_XY_points; - PlanarFlucVy[z] = sumFluctVy / numberof_XY_points; - PlanarFlucVz[z] = sumFluctVz / numberof_XY_points; - PlanarFlucPr[z] = sumFluctPr / numberof_XY_points; - - PlanarStressXX[z] = sumStressXX / numberof_XY_points; - PlanarStressYY[z] = sumStressYY / numberof_XY_points; - PlanarStressZZ[z] = sumStressZZ / numberof_XY_points; - PlanarStressXY[z] = sumStressXY / numberof_XY_points; - PlanarStressXZ[z] = sumStressXZ / numberof_XY_points; - PlanarStressYZ[z] = sumStressYZ / numberof_XY_points; - } -} - -void Averaging::writeToCSV(std::string path, double origin, double deltax) - { - std::ofstream ostr; - std::string fname = path + ".csv"; - - ostr.open(fname.c_str(), std::ios_base::out); - if (!ostr) - { - ostr.clear(); - std::string path = UbSystem::getPathFromString(fname); - if (path.size() > 0) - { - UbSystem::makeDirectory(path); - ostr.open(fname.c_str(), std::ios_base::out); - } - if (!ostr) throw UbException(UB_EXARGS, "couldn't open file " + fname); - } - ostr << "z;Vx;Vy;Vz;Pr;FlucVx;FlucVy;FlucVz;FlucPr;StressXX;StressYY;StressZZ;StressXY;StressXZ;StressYZ\n"; - for (int i = 0; i < dimensions[2]; i++) - { - double z = origin + (deltax*i); - ostr << z << ";" << PlanarVx[i] << ";" << PlanarVy[i] << ";" << PlanarVz[i] << ";" << PlanarPr[i] << ";" << PlanarFlucVx[i] << ";" << PlanarFlucVy[i] << ";" << PlanarFlucVz[i] << ";" << PlanarFlucPr[i] << ";" << PlanarStressXX[i] << ";" << PlanarStressYY[i] << ";" << PlanarStressZZ[i] << ";" << PlanarStressXY[i] << ";" << PlanarStressXZ[i] << ";" << PlanarStressYZ[i] << "\n"; - } - ostr.close(); - } - - void Averaging::writeToCSV2(std::string path, double origin, double deltax) - { - std::ofstream ostr; - std::string fname = path + ".csv"; - - ostr.open(fname.c_str(), std::ios_base::out); - if (!ostr) - { - ostr.clear(); - std::string path = UbSystem::getPathFromString(fname); - if (path.size() > 0) - { - UbSystem::makeDirectory(path); - ostr.open(fname.c_str(), std::ios_base::out); - } - if (!ostr) throw UbException(UB_EXARGS, "couldn't open file " + fname); - } - ostr << "z;Vx;Vy;Vz;Pr;StressXX;StressYY;StressZZ;StressXY;StressXZ;StressYZ\n"; - for (int i = 0; i < dimensions[2]; i++) - { - double z = origin + (deltax*i); - ostr << z << ";" << PlanarVx[i] << ";" << PlanarVy[i] << ";" << PlanarVz[i] << ";" << PlanarPr[i] << ";"<< PlanarStressXX[i] << ";" << PlanarStressYY[i] << ";" << PlanarStressZZ[i] << ";" << PlanarStressXY[i] << ";" << PlanarStressXZ[i] << ";" << PlanarStressYZ[i] << "\n"; - } - ostr.close(); - } \ No newline at end of file diff --git a/apps/cpu/bChannelVA/Averaging.h b/apps/cpu/bChannelVA/Averaging.h deleted file mode 100644 index ab9d7fc743218715f248de823ac966c3a0393ce1..0000000000000000000000000000000000000000 --- a/apps/cpu/bChannelVA/Averaging.h +++ /dev/null @@ -1,292 +0,0 @@ -#include <array> -#include <fstream> -#include "CbArray3D.h" -#include "UbSystem.h" -#include <vtkTimerLog.h> -#include <vtkSmartPointer.h> - - -class Averaging -{ -public: - void createGeoMatrix(std::string dataNameG); - void writeGeoMatrixToImageFile(std::string output); - void readGeoMatrix(std::string dataNameG); - void writeGeoMatrixToBinaryFiles(std::string fname); - void readGeoMatrixFromBinaryFiles(std::string fname); - - void createMQMatrix(std::string dataNameMQ); - void writeMqMatrixToBinaryFiles(std::string fname, int timeStep); - void readMqMatrixFromBinaryFiles(std::string fname, int timeStep); - void writeMqMatrixToImageFile(std::string output); - void writeVaMatrixToImageFile(std::string output); - void writeVaSumMatrixToImageFile(std::string output); - void writeMeanMatrixToImageFile(std::string output); - void writeMatrixToImageFile(std::string output, std::array<CbArray3D<double>, 4> matrix); - - void initVolumeAveragingValues(); - void initVolumeAveragingFluctStressValues(); - void initMeanVolumeAveragingValues(); - void initMeanVolumeAveragingFluctStressValues(); - void volumeAveragingWithMPI(double l_real); - void volumeAveragingFluctStressWithMPI(double l_real); - void meanOfVolumeAveragingValues(int numberOfTimeSteps); - void sumOfVolumeAveragingValues(); - void writeVolumeAveragingValuesToBinaryFiles(std::string ffname, int timeStep); - void readVolumeAveragingValuesFromBinaryFiles(std::string fname, int timeStep); - void writeMeanVolumeAveragingValuesToBinaryFiles(std::string ffname); - void readMeanVolumeAveragingValuesFromBinaryFiles(std::string fname); - - void initFluctuations(); - void initMeanOfVaFluctuations(); - void initSumOfVaFluctuations(); - void fluctuationsStress(); - void fluctuationsStress2(); - void meanOfVaFluctuations(int numberOfTimeSteps); - void sumOfVaFluctuations(); - void writeMeanVaFluctuationsToBinaryFiles(std::string ffname); - void readMeanVaFluctuationsFromBinaryFiles(std::string ffname); - void writeMeanOfVaFluctuationsToImageFile(std::string ffname); - void writeFluctuationsToImageFile(std::string ffname); - void writeVaFluctuationsToImageFile(std::string ffname); - - void initStresses(); - void initSumOfVaStresses(); - void initMeanOfVaStresses(); - void sumOfVaStresses(); - void meanOfVaStresses(int numberOfTimeSteps); - void writeVaStressesToBinaryFiles(std::string fname, int timeStep); - void readVaStressesFromBinaryFiles(std::string fname, int timeStep); - void writeMeanVaStressesToBinaryFiles(std::string ffname); - void readMeanVaStressesFromBinaryFiles(std::string ffname); - void writeMeanOfVaStressesToImageFile(std::string ffname); - - void initPlanarAveraging(); - void planarAveraging(); - - void writeToCSV(std::string path, double origin, double deltax); - void writeToCSV2(std::string path, double origin, double deltax); - - std::array<int, 3> getDimensions() const { return dimensions; } - void setDimensions(std::array<int, 3> val) { dimensions = val; } - void setExtent(std::array<int, 6> val) { geo_extent = val; } - void setOrigin(std::array<double, 3> val) { geo_origin = val; } - void setSpacing(std::array<double, 3> val) { geo_spacing = val; } - void setDeltaX(double val) { deltax = val; } - - //////////////////////////////////////////////////////////////// - //new implimentation - //////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////// - //compute mean of MQ values - void initMeanMqValues(); - void sumMqValues(); - void computeMeanMqValues(int numberOfTimeSteps); - void writeMeanMqValuesToBinaryFiles(std::string fname); - void readMeanMqValuesFromBinaryFiles(std::string fname); - void volumeAveragingOfMeanMqValuesWithMPI(double l_real); - void writeVaMeanMqValuesToBinaryFiles(std::string fname); - void readVaMeanMqValuesFromBinaryFiles(std::string fname); - - //////////////////////////////////////////////////////////////// - //compute fluctuations of MQ values - void initFluctuationsOfMqValues(); - void computeFluctuationsOfMqValues(); - void writeFluctuationsOfMqValuesToBinaryFiles(std::string fname, int timeStep); - void readFluctuationsOfMqValuesFromBinaryFiles(std::string fname, int timeStep); - void volumeAveragingOfFluctuationsWithMPI(double l_real); - void writeVaFluctuationsToBinaryFiles(std::string fname, int timeStep); - void readVaFluctuationsFromBinaryFiles(std::string fname, int timeStep); - void initMeanOfVolumeAveragedValues(); - void sumVolumeAveragedValues(); - void computeVolumeAveragedValues(int numberOfTimeSteps); - void writeVolumeAveragedValuesToBinaryFiles(std::string fname); - void readVolumeAveragedValuesFromBinaryFiles(std::string fname); - - ////////////////////////////////////////////////////////////////// - //compute volume average of time averaged data - void readTimeAveragedDataFromVtkFile(std::string dataNameMQ); - void volumeAveragingOfTimeAveragedDataWithMPI(double l_real); - void planarAveragingOfVaTaData(); - -protected: - void getNodeIndexes(std::array<double, 3> x, std::array<int, 3>& ix); - double G(double x, double l); - - template <class T> - void writeMatrixToBinaryFiles(CbArray3D<T>& matrix, std::string fname); - template <class T> - void readMatrixFromBinaryFiles(std::string fname, CbArray3D<T>& matrix); -private: - std::array<int, 3> dimensions; - std::array<int, 6> geo_extent; - std::array<double, 3> geo_origin; - std::array<double, 3> geo_spacing; - double deltax; - - CbArray3D<int> geoMatrix; - - CbArray3D<double> vxMatrix; - CbArray3D<double> vyMatrix; - CbArray3D<double> vzMatrix; - CbArray3D<double> prMatrix; - - CbArray3D<double> meanVxMatrix; - CbArray3D<double> meanVyMatrix; - CbArray3D<double> meanVzMatrix; - CbArray3D<double> meanPrMatrix; - - CbArray3D<double> vaVxMatrix; - CbArray3D<double> vaVyMatrix; - CbArray3D<double> vaVzMatrix; - CbArray3D<double> vaPrMatrix; - - CbArray3D<double> sumVaVxMatrix; - CbArray3D<double> sumVaVyMatrix; - CbArray3D<double> sumVaVzMatrix; - CbArray3D<double> sumVaPrMatrix; - - CbArray3D<double> vaMeanVxMatrix; - CbArray3D<double> vaMeanVyMatrix; - CbArray3D<double> vaMeanVzMatrix; - CbArray3D<double> vaMeanPrMatrix; -//---------------------------------------- - CbArray3D<double> flucVxMatrix; - CbArray3D<double> flucVyMatrix; - CbArray3D<double> flucVzMatrix; - CbArray3D<double> flucPrMatrix; - - CbArray3D<double> vaFlucVxMatrix; - CbArray3D<double> vaFlucVyMatrix; - CbArray3D<double> vaFlucVzMatrix; - CbArray3D<double> vaFlucPrMatrix; - - CbArray3D<double> sumVaFlucVx; - CbArray3D<double> sumVaFlucVy; - CbArray3D<double> sumVaFlucVz; - CbArray3D<double> sumVaFlucPr; - - CbArray3D<double> meanVaFlucVx; - CbArray3D<double> meanVaFlucVy; - CbArray3D<double> meanVaFlucVz; - CbArray3D<double> meanVaFlucPr; -//---------------------------------------- - CbArray3D<double> StressXX; - CbArray3D<double> StressYY; - CbArray3D<double> StressZZ; - CbArray3D<double> StressXY; - CbArray3D<double> StressXZ; - CbArray3D<double> StressYZ; - - CbArray3D<double> vaStressXX; - CbArray3D<double> vaStressYY; - CbArray3D<double> vaStressZZ; - CbArray3D<double> vaStressXY; - CbArray3D<double> vaStressXZ; - CbArray3D<double> vaStressYZ; - - CbArray3D<double> sumVaStressXX; - CbArray3D<double> sumVaStressYY; - CbArray3D<double> sumVaStressZZ; - CbArray3D<double> sumVaStressXY; - CbArray3D<double> sumVaStressXZ; - CbArray3D<double> sumVaStressYZ; - - CbArray3D<double> meanVaStressXX; - CbArray3D<double> meanVaStressYY; - CbArray3D<double> meanVaStressZZ; - CbArray3D<double> meanVaStressXY; - CbArray3D<double> meanVaStressXZ; - CbArray3D<double> meanVaStressYZ; -//---------------------------------------- - std::vector<double> PlanarVx; - std::vector<double> PlanarVy; - std::vector<double> PlanarVz; - std::vector<double> PlanarPr; - - std::vector<double> PlanarFlucVx; - std::vector<double> PlanarFlucVy; - std::vector<double> PlanarFlucVz; - std::vector<double> PlanarFlucPr; - - std::vector<double> PlanarStressXX; - std::vector<double> PlanarStressYY; - std::vector<double> PlanarStressZZ; - std::vector<double> PlanarStressXY; - std::vector<double> PlanarStressXZ; - std::vector<double> PlanarStressYZ; -}; - -////////////////////////////////////////////////////////////////////////// -template<class T> void Averaging::writeMatrixToBinaryFiles(CbArray3D<T>& matrix, std::string fname) - { - vtkSmartPointer<vtkTimerLog> timer_write = vtkSmartPointer<vtkTimerLog>::New(); - - UBLOG(logINFO,"write matrix to " + fname + ": start"); - timer_write->StartTimer(); - - std::ofstream ostr; - ostr.open(fname.c_str(), std::fstream::out | std::fstream::binary); - - if (!ostr) - { - ostr.clear(); - std::string path = UbSystem::getPathFromString(fname); - if (path.size() > 0) { UbSystem::makeDirectory(path); ostr.open(fname.c_str(), std::ios_base::out | std::fstream::binary); } - if (!ostr) throw UbException(UB_EXARGS, "couldn't open file " + fname); - } - - std::vector<T>& vec = matrix.getDataVector(); - - ostr.write((char*)& vec[0], sizeof(T)*vec.size()); - ostr.close(); - - UBLOG(logINFO,"write matrix: end"); - timer_write->StopTimer(); - UBLOG(logINFO,"write matrix time: " + UbSystem::toString(timer_write->GetElapsedTime()) + " s"); -} -////////////////////////////////////////////////////////////////////////// -template<class T> void Averaging::readMatrixFromBinaryFiles(std::string fname, CbArray3D<T>& matrix) -{ - vtkSmartPointer<vtkTimerLog> timer_write = vtkSmartPointer<vtkTimerLog>::New(); - - UBLOG(logINFO,"read matrix from " + fname + ": start"); - timer_write->StartTimer(); - - FILE *file; - file = fopen(fname.c_str(), "rb"); - - if (file==NULL) { fputs("File error", stderr); exit(1); } - - // obtain file size: - fseek(file, 0, SEEK_END); - long lSize = ftell(file)/sizeof(T); - rewind(file); - - // allocate memory to contain the whole file: - //matrix.resize(lSize); - matrix.resize(dimensions[0], dimensions[1], dimensions[2]); - std::vector<T>& vec = matrix.getDataVector(); - - if (vec.size() == 0) { fputs("Memory error", stderr); exit(2); } - - // copy the file into the buffer: - size_t result = fread(&vec[0], sizeof(T), lSize, file); - if (result != lSize) { fputs("Reading error", stderr); exit(3); } - - fclose(file); - - UBLOG(logINFO,"read matrix: end"); - timer_write->StopTimer(); - UBLOG(logINFO,"read matrix time: " + UbSystem::toString(timer_write->GetElapsedTime()) + " s"); -} -////////////////////////////////////////////////////////////////////////// -inline double Averaging::G(double x, double l) -{ - if (fabs(x) <= l) - return l - fabs(x); - else - return 0.0; -} -////////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/apps/cpu/bChannelVA/CMakeLists.txt b/apps/cpu/bChannelVA/CMakeLists.txt deleted file mode 100644 index 7c89234cb0f39640705b52ed5587988205b238d8..0000000000000000000000000000000000000000 --- a/apps/cpu/bChannelVA/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(bChannelVA) - -INCLUDE(${APPS_ROOT}/IncludsList.cmake) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(bchannelva BINARY) diff --git a/apps/cpu/bChannelVA/ReadDataSet.cpp b/apps/cpu/bChannelVA/ReadDataSet.cpp deleted file mode 100644 index 6244cb974c56ba21181e04b2fba1c71322f4c460..0000000000000000000000000000000000000000 --- a/apps/cpu/bChannelVA/ReadDataSet.cpp +++ /dev/null @@ -1,72 +0,0 @@ -#include "ReadDataSet.h" -#include <vtkXMLReader.h> -#include <vtkXMLUnstructuredGridReader.h> -#include <vtkXMLPUnstructuredGridReader.h> -#include <vtkXMLPolyDataReader.h> -#include <vtkXMLPPolyDataReader.h> -#include <vtkXMLStructuredGridReader.h> -#include <vtkXMLRectilinearGridReader.h> -//#include <vtkXMLHyperOctreeReader.h> -#include <vtkXMLCompositeDataReader.h> -#include <vtkXMLStructuredGridReader.h> -#include <vtkXMLImageDataReader.h> -#include <vtkDataSetReader.h> -#include <vtkUnstructuredGrid.h> -#include <vtkRectilinearGrid.h> -//#include <vtkHyperOctree.h> -#include <vtkImageData.h> -#include <vtkPolyData.h> -#include <vtkStructuredGrid.h> -#include <vtkPointData.h> -#include <vtkCellData.h> -#include <vtkFieldData.h> -#include <vtkCellTypes.h> -#include <vtksys/SystemTools.hxx> - -vtkDataSet* ReadDataSet(std::string fileName) -{ - std::string extension = - vtksys::SystemTools::GetFilenameLastExtension(fileName); - // Dispatch based on the file extension - if (extension == ".vtu") - { - return ReadAnXMLFile<vtkXMLUnstructuredGridReader> (fileName); - } - else if (extension == ".vtp") - { - return ReadAnXMLFile<vtkXMLPolyDataReader> (fileName); - } - else if (extension == ".vts") - { - return ReadAnXMLFile<vtkXMLStructuredGridReader> (fileName); - } - else if (extension == ".vtr") - { - return ReadAnXMLFile<vtkXMLRectilinearGridReader> (fileName); - } - else if (extension == ".vti") - { - return ReadAnXMLFile<vtkXMLImageDataReader> (fileName); - } - //else if (extension == ".vto") - //{ - // return ReadAnXMLFile<vtkXMLHyperOctreeReader> (fileName); - //} - else if (extension == ".vtk") - { - return ReadAnXMLFile<vtkDataSetReader> (fileName); - } - else if (extension == ".pvtu") - { - return ReadAnXMLFile<vtkXMLPUnstructuredGridReader> (fileName); - } - else if (extension == ".pvtp") - { - return ReadAnXMLFile<vtkXMLPPolyDataReader> (fileName); - } - else - { - return NULL; - } -} - diff --git a/apps/cpu/bChannelVA/ReadDataSet.h b/apps/cpu/bChannelVA/ReadDataSet.h deleted file mode 100644 index 7186eafcee1b35fd21ccd60ee952442364b24aa7..0000000000000000000000000000000000000000 --- a/apps/cpu/bChannelVA/ReadDataSet.h +++ /dev/null @@ -1,17 +0,0 @@ -#include <string> -#include <vtkDataSet.h> -#include <vtkSmartPointer.h> - -vtkDataSet* ReadDataSet(std::string fileName); - -////////////////////////////////////////////////////////////////////////// -template<class TReader> -vtkDataSet* ReadAnXMLFile(std::string fileName) -{ - TReader* reader = TReader::New(); - reader->SetFileName(fileName.c_str()); - reader->Update(); - reader->GetOutput()->Register(reader); - return vtkDataSet::SafeDownCast(reader->GetOutput()); -} -////////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/apps/cpu/bChannelVA/bChannelVA.cpp b/apps/cpu/bChannelVA/bChannelVA.cpp deleted file mode 100644 index 363d02697f0fde6ff18736b07e09e1ac3310bea7..0000000000000000000000000000000000000000 --- a/apps/cpu/bChannelVA/bChannelVA.cpp +++ /dev/null @@ -1,145 +0,0 @@ -#include <iostream> -#include <string> -#include "VirtualFluids.h" - -#include "Averaging.h" - -using namespace std; - - -////////////////////////////////////////////////////////////////////////// -int main(int argc, char* argv[]) -{ - try - { - //Sleep(20000); - SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - //Pheonix - //double deltaX = 1; - //double halfDeltaX = deltaX / 2.0; - //std::array<int, 3> dimensions = { 600 / (int)deltaX, 400 / (int)deltaX, 400 / (int)deltaX }; - //std::array<double, 3> geo_origin = { halfDeltaX, halfDeltaX, halfDeltaX }; - //std::array<double, 3> geo_spacing = { 1,1,1 }; - //std::array<int, 6> geo_extent = { 0, dimensions[0] - 1, 0, dimensions[1] - 1, 0, dimensions[2] - 1 }; - //double real_l = 40; - //double l = 40; - - //int startTimeStep = 600000; - //int timeStep = 10000; - //int numberOfTimeSteps = 610000; //1200000; - //int numberOfSamples = numberOfTimeSteps / startTimeStep; - //int numberOfGridPoints = dimensions[0] * dimensions[1] * dimensions[2]; - - - //Bombadil - string pathIn = "d:/temp/BreugemChannelAnisotrop2"; - string pathOut = "d:/temp/BreugemChannelAnisotrop2"; - - double deltaX = 10; - double halfDeltaX = deltaX / 2.0; - std::array<int, 3> dimensions = { 600 / (int)deltaX, 400 / (int)deltaX, 400 / (int)deltaX }; - std::array<double, 3> geo_origin = { halfDeltaX, halfDeltaX, halfDeltaX }; - std::array<double, 3> geo_spacing = { 10,10,10 }; - std::array<int, 6> geo_extent = { 0, dimensions[0] - 1, 0, dimensions[1] - 1, 0, dimensions[2] - 1 }; - double real_l = 20; - double l = 20; - - int startTimeStep = 60000; - int timeStep = 1000; - int numberOfTimeSteps = 65000; - int numberOfSamples = (numberOfTimeSteps - startTimeStep) / timeStep + 1; - int numberOfGridPoints = dimensions[0] * dimensions[1] * dimensions[2]; - - Averaging av; - - av.setDimensions(dimensions); - av.setExtent(geo_extent); - av.setOrigin(geo_origin); - av.setSpacing(geo_spacing); - av.setDeltaX(deltaX); - - //read geo matrix - //av.createGeoMatrix(pathIn + "/bc/bc0.pvtu"); - //if (myid == 0) av.writeGeoMatrixToBinaryFiles(pathOut + "/va/geo/geomatrix.bin"); - //av.readGeoMatrixFromBinaryFiles(pathOut + "/va/geo/geomatrix.bin"); - - ////read mq matrix - //for (int t = startTimeStep; t <= numberOfTimeSteps; t += timeStep) - //{ - // av.createMQMatrix(pathIn + "/mq/mq" + UbSystem::toString(t) + ".pvtu"); - // av.writeMqMatrixToBinaryFiles(pathOut + "/va/mq/mq", t); - //} - - ////compute mq values - //av.initMeanMqValues(); - //for (int t = startTimeStep; t <= numberOfTimeSteps; t += timeStep) - //{ - // av.readMqMatrixFromBinaryFiles(pathOut + "/va/mq/mq", t); - // av.sumMqValues(); - //} - //av.computeMeanMqValues(numberOfSamples); - //av.writeMeanMqValuesToBinaryFiles(pathOut + "/va/mean/mean"); - - //compute volume averaging of Reynolds averaged MQ values - //av.readMeanMqValuesFromBinaryFiles(pathOut + "/va/mean/mean"); - //av.volumeAveragingOfMeanMqValuesWithMPI(l); - //av.writeVaMeanMqValuesToBinaryFiles(pathOut + "/va/vaMean/vaMean"); - - ////compute fluctuations - //av.readMeanMqValuesFromBinaryFiles(pathOut + "/va/mean/mean"); - //av.initFluctuationsOfMqValues(); - //for (int t = startTimeStep; t <= numberOfTimeSteps; t += timeStep) - //{ - // av.readMqMatrixFromBinaryFiles(pathOut + "/va/mq/mq", t); - // av.computeFluctuationsOfMqValues(); - // av.writeFluctuationsOfMqValuesToBinaryFiles(pathOut + "/va/fluc/fluc", t); - //} - - ////compute volume averaged fluctuations - //av.initMeanOfVolumeAveragedValues(); - //for (int t = startTimeStep; t <= numberOfTimeSteps; t += timeStep) - //{ - // av.readFluctuationsOfMqValuesFromBinaryFiles(pathOut + "/va/fluc/fluc", t); - // av.volumeAveragingOfFluctuationsWithMPI(l); - // av.writeVaFluctuationsToBinaryFiles(pathOut + "/va/vaFluc/vaFluc", t); - //av.sumVolumeAveragedValues(); - //} - //av.computeVolumeAveragedValues(numberOfSamples); - //av.writeVolumeAveragedValuesToBinaryFiles(pathOut + "/va/values/val"); - - //planar averaging - //av.initPlanarAveraging(); - //av.planarAveraging(); - //av.writeToCSV(pathOut + "/va/planar/planar", geo_origin[2], deltaX); - - //read geo matrix - av.readGeoMatrixFromBinaryFiles(pathOut + "/va/geo/geomatrix.bin"); - - av.initMeanOfVolumeAveragedValues(); - - av.readTimeAveragedDataFromVtkFile(pathIn + "/tav/tav200000.pvtu"); - - av.volumeAveragingOfTimeAveragedDataWithMPI(l); - - if (myid == 0) av.initPlanarAveraging(); - - if (myid == 0) av.planarAveragingOfVaTaData(); - - if (myid == 0) av.writeToCSV2(pathOut + "/va/planar/planar12", geo_origin[2], deltaX); - } - catch (const std::exception& e) - { - cerr << e.what() << endl << flush; - } - catch (std::string& s) - { - cerr << s << endl; - } - catch (...) - { - cerr << "unknown exception" << endl; - } - -} \ No newline at end of file diff --git a/apps/cpu/bKanal/CMakeLists.txt b/apps/cpu/bKanal/CMakeLists.txt deleted file mode 100644 index 305be694406be5f61a51600d71203df5270359f5..0000000000000000000000000000000000000000 --- a/apps/cpu/bKanal/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(bKanal) - -INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(bKanal BINARY) diff --git a/apps/cpu/bKanal/HLRNb/bKanal.cpp b/apps/cpu/bKanal/HLRNb/bKanal.cpp deleted file mode 100644 index 99b21eabf2a3c11b325fc3727e5acb795b394dfc..0000000000000000000000000000000000000000 --- a/apps/cpu/bKanal/HLRNb/bKanal.cpp +++ /dev/null @@ -1,683 +0,0 @@ - - -#include <iostream> -#include <string> -#include <math.h> - -#include <sys/types.h> //mkdir rights -#include <sys/stat.h> //mkdir -#include <vfluids.h> - -using namespace std; - - -void run(const char *cstr) -{ - try - { - string machine = QUOTEME(CAB_MACHINE); - UBLOG(logINFO,"Testcase BreugemChannel"); - string pathname; - string pathnameRestart; - string pathGeo; - int numOfThreads =1; - bool logfile = false; - stringstream logFilename; - double availMem = 0; - - UbLog::reportingLevel() = logINFO; - - CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - - pathname = "/gfs1/work/niivfcpu/scratch/kucher/BKanaltest"; - pathnameRestart = "/gfs1/work/niivfcpu/scratch/kucher/BKanaltest";//BKanaltest0Ref2up0612";//BKanaltest0Ref2up1012Out"; - //pathname = "/work/koskuche/SFB880/BKanaltestRe260000Out"; - //pathnameRestart = "/work/koskuche/SFB880/BKanaltestRe260000";//BKanaltest0Ref2up0612";//BKanaltest0Ref2up1012Out"; - - pathGeo = "/home/koskuche/data/plate"; - numOfThreads = 1; - availMem = 64.0e9; - logfile = true; - - if (myid==0) - { - const char* str = pathname.c_str(); -#if defined(__unix__) - int status=mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); -#endif - - } - - if(myid ==0) - { - logFilename << pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt"; - } - - - - - //if(myid ==0 && logfile) - //{ - UbLog::output_policy::setStream(logFilename.str()); - //} - - int baseLevel, refineLevel,nx[3],blocknx[3]; - double Re,velocity,rhoInit,vx1Init;//,vx2Init,vx3Init; - - ////////////////////////////////////////////////////////////////////////// - //physik - ////////////////////////////////////////////////////////////////////////// - Re = 5500;// 13286;//13286;//gemessen 18.98 m/s...*5.0 zum testen ob was passiert - velocity = 0.01; - vx1Init = 0.01; - rhoInit = 0.0; - SimulationParametersPtr param = SimulationParameters::getInstanz(); - - int H=200;//200;//392; - - // nx[0] =8;//ok mit 8// (int)(3.0*(double)H/8.0/8.0);//2;// (int)(0.3*(double)H/6.0/4.0);//das "/4" hier ist wegen der verfeinerung da! //l�nge - // nx[1] =8;//ok mit 8// (int)(2.0*(double)H/8.0/8.0);//2;// (int)(0.2*(double)H/6.0/4.0);// //breite - nx[2] = (int)(2.0*(double)H/5.0/8.0);// //h�he gebiet - - //(3/2/2)-ratio: - nx[1]=nx[2]; - nx[0]=15; - - blocknx[0] = 15;//10;//5; - blocknx[1] = 15;//10;//5; - blocknx[2] = 15;//10;//5; - - baseLevel = 0; - refineLevel = 2;//1;////3;//3 soll 1 test; - - - ///////////////Weltabmessungen: - //double kanallaengeSI = ( 2.0*(double)H); - // double kanalbreiteSI = ( 1.0*(double)H); - double kanalhoeheSI = ( 2.0*(double)H); - - // double refinewidth1=kanalhoeheSI/10.0; - - double fineNodeDx = (kanalhoeheSI) / (double)( blocknx[2]*nx[2]*(1<<refineLevel)+1 ); //+1--> gitter liegt jeweils 0.5dx innerhalb - double coarseNodeDx = fineNodeDx * (double)(1<<refineLevel);//geowerte - - double blockLengthx1 = blocknx[0]*coarseNodeDx; //geowerte - double blockLengthx2 = blockLengthx1; - double blockLengthx3 = blockLengthx1; - - double originX1 = 0.0;//-50.0*propellerDurchmesser; //geowerte - double originX2 = 0.0;//-0.5*blockLengthx2*nx2; - double originX3 = 0.0;// minX3 + 0.5*fineNodeDx; - - double geoLength[] = { nx[0]*blockLengthx1, nx[1]*blockLengthx2, nx[2]*blockLengthx3}; - - bool periodicx1 = true; - bool periodicx2 = true; - bool periodicx3 = false; - - - //########################################################################## - //## physical parameters - //########################################################################## - double smagorinskiConstant = 0.18; - - - double rhoLB = 0.0; - - double rhoReal = 1.0; - double nueReal = 1;//0.000016;//0.015; - - double hReal = blocknx[2]*nx[2];//H*0.9;//0.0105;//<-m 1.05;//Plattendicke in cm(! cm nicht m !) - double uReal = Re*nueReal/hReal; - - //##Machzahl: - //#Ma = uReal/csReal - double csReal=343.0; - double Ma = uReal/csReal;//Ma-Real! - //double csReal = uReal/Ma; - double hLB = hReal/coarseNodeDx; - - LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter(hReal, csReal, rhoReal, hLB)); - - double uLB = uReal * unitConverter->getFactorVelocityWToLb(); - double nueLB = nueReal * unitConverter->getFactorViscosityWToLb(); - double timestep = unitConverter->getFactorTimeLbToW(coarseNodeDx); - - velocity = uLB; - // double viscosity =nueLB*1000.0; - - Grid3DPtr grid(new Grid3D(comm)); - //UbSchedulerPtr rSch(new UbScheduler(10000,100000,30000000000));//(50000,50000,1000000)); - UbSchedulerPtr rSch(new UbScheduler(18000,268250,770000));//(50000,50000,1000000)); - RestartPostprocessor rp(grid, rSch, comm, pathnameRestart+"/checkpoints", RestartPostprocessor::BINARY); - - ////////////////////////////////////////////////////////////////////////// - - std::string opt; - - if(cstr!= NULL) - opt = std::string(cstr); - - if(/*(cstr== NULL)*/cstr!= NULL) - { - opt = std::string(cstr); - - if(myid==0) { - UBLOG(logINFO,"Restart step: " << opt); - UBLOG(logINFO, "Restart=:" << pathnameRestart); - } - - grid = rp.restart(UbSystem::stringTo<int>(opt)); - rp.reconnect(grid); - -// mu::Parser fctForcingX1, fctForcingX2, fctForcingX3; -// fctForcingX1.SetExpr("Fx1*dx"); -// fctForcingX1.DefineConst("Fx1", 0.6*5.0e-6); -// -// SetForcingBlockVisitor forcingVisitor(fctForcingX1, fctForcingX2, fctForcingX3); -// grid->accept(forcingVisitor); - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - - } - else - { - //bounding box - double g_minX1 = originX1; - double g_minX2 = originX2; - double g_minX3 = originX3; - - double g_maxX1 = originX1 + geoLength[0]; - double g_maxX2 = originX2 + geoLength[1]; - double g_maxX3 = originX3 + geoLength[2]; - - //set grid - grid->setDeltaX(coarseNodeDx); - grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - grid->setPeriodicX1(periodicx1); - grid->setPeriodicX2(periodicx2); - grid->setPeriodicX3(periodicx3); - - - 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", WbWriterVtkXmlASCII::getInstance()); - - GenBlocksGridVisitor genBlocks; - genBlocks.addGeoObject(gridCube); - grid->accept(genBlocks); - - - - //bottom and top solid bc - //iteractors - int bbOption1 = 1; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1)); - double geoOverlap = coarseNodeDx; - GbCuboid3DPtr bottomBCCuboid(new GbCuboid3D(originX1-geoOverlap, originX2-geoOverlap, originX3-geoOverlap, - originX1+geoLength[0]+coarseNodeDx, originX2+geoLength[1]+geoOverlap, originX3)); - if(myid == 0) GbSystem3D::writeGeoObject(bottomBCCuboid.get(), pathname+"/geo/bottomBCCuboid", WbWriterVtkXmlASCII::getInstance()); - D3Q27InteractorPtr bottomBCInteractor(new D3Q27Interactor(bottomBCCuboid,grid,bcObst,Interactor3D::SOLID)); - - GbCuboid3DPtr topBCCuboid(new GbCuboid3D(originX1-geoLength[0]-coarseNodeDx, originX2-geoOverlap, originX3+geoLength[2],//-coarseNodeDx*0.5, - originX1+geoLength[0]+coarseNodeDx, originX2+geoLength[1]+geoOverlap, originX3+geoLength[2]+geoOverlap)); - if(myid == 0) GbSystem3D::writeGeoObject(topBCCuboid.get(), pathname+"/geo/topBCCuboid", WbWriterVtkXmlASCII::getInstance()); - D3Q27InteractorPtr topBCInteractor(new D3Q27Interactor(topBCCuboid,grid,bcObst,Interactor3D::SOLID)); - //grid->addAndInitInteractor( bottomBCInteractor ); - // grid->addAndInitInteractor( topBCInteractor ); - ////////////////////////////////////////////////////////////////////////// - if(myid == 0) - { - UBLOG(logINFO, "*****************************************"); - UBLOG(logINFO, "* Parameters *"); - UBLOG(logINFO, "* Re ="<<Re); - UBLOG(logINFO, "* Ma ="<<Ma); - UBLOG(logINFO, "* uReal ="<<uReal); - UBLOG(logINFO, "* nueReal ="<<nueReal); - UBLOG(logINFO, "* nue ="<<nueLB); - UBLOG(logINFO, "* velocity ="<<uLB); - // UBLOG(logINFO, "* LX1 (world/LB)="<<kanallaengeSI<<"/"<<kanallaengeSI/coarseNodeDx); - // UBLOG(logINFO, "* LX2 (world/LB)="<<kanalbreiteSI<<"/"<<kanalbreiteSI/coarseNodeDx); - UBLOG(logINFO, "* LX3 (world/LB)="<<kanalhoeheSI<<"/"<<kanalhoeheSI/coarseNodeDx); - UBLOG(logINFO, "* cdx ="<<coarseNodeDx); - UBLOG(logINFO, "* fdx ="<<fineNodeDx); - UBLOG(logINFO, "* dx_base ="<<coarseNodeDx<<" == "<<coarseNodeDx); - UBLOG(logINFO, "* dx_refine ="<<fineNodeDx<<" == "<<fineNodeDx ); - UBLOG(logINFO, "* nx1/2/3 ="<<nx[0]<<"/"<<nx[1]<<"/"<<nx[2]); - UBLOG(logINFO, "* blocknx1/2/3 ="<<blocknx[0]<<"/"<<blocknx[1]<<"/"<<blocknx[2]); - UBLOG(logINFO, "* x2Periodic ="<<periodicx2); - UBLOG(logINFO, "* x3Periodic ="<<periodicx3); - UBLOG(logINFO, "*****************************************"); - UBLOGML(logINFO, "UnitConverter:"<<unitConverter->toString()); - UBLOG(logINFO, "*****************************************"); - } - - if(myid == 0) UBLOG(logINFO,"Refinement - start"); - - ////////////////////////////////////////////////////////////////////////// - // refine - ////////////////////////////////////////////////////////////////////////// - //GbCuboid3DPtr wallsX1X2maxRef1( new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , kanalhoeheSI*0.95 - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormax1(wallsX1X2maxRef1, 0,refineLevel-3); - //grid->accept(refineVisitormax1); - // - //GbCuboid3DPtr wallsX1X2minRef1(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , kanalhoeheSI*0.55 - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.47)); - // RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin1(wallsX1X2minRef1, 0,refineLevel-3); - // grid->accept(refineVisitormin1); - - // GbCuboid3DPtr wallsX1X2maxRef2(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , kanalhoeheSI - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.98)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormax2(wallsX1X2maxRef2, 0,refineLevel-2); - //grid->accept(refineVisitormax2); - // GbCuboid3DPtr wallsX1X2maxRef2(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , kanalhoeheSI - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.9)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormax2(wallsX1X2maxRef2, 0,refineLevel-2); - //grid->accept(refineVisitormax2); - - // GbCuboid3DPtr wallsX1X2maxRef3(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , kanalhoeheSI - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.9995)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormax3(wallsX1X2maxRef3, 0,refineLevel-1); - //grid->accept(refineVisitormax3); - - // GbCuboid3DPtr wallsX1X2minRefl3(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , originX3-3.0*geoOverlap - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.25)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitorminl3(wallsX1X2minRefl3, 0,refineLevel-3); - //grid->accept(refineVisitorminl3); - /////w�rfel unten version - // GbCuboid3DPtr wallsX1X2minRef2(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , originX3-3.0*geoOverlap - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.2)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin2(wallsX1X2minRef2, 0,refineLevel-2); - //grid->accept(refineVisitormin2); - - // GbCuboid3DPtr wallsX1X2minRef3(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , kanalhoeheSI*0.04 - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.18)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin3(wallsX1X2minRef3, 0,refineLevel-1); - //grid->accept(refineVisitormin3); - - // GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , kanalhoeheSI*0.09 - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.16)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin4(wallsX1X2minRef4, 0,refineLevel); - //grid->accept(refineVisitormin4); - - - - - /////w�rfel anfang version - // GbCuboid3DPtr wallsX1X2minRef2(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , originX3-3.0*geoOverlap - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.56)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin2(wallsX1X2minRef2, 0,refineLevel-2); - //grid->accept(refineVisitormin2); - - // GbCuboid3DPtr wallsX1X2minRef3(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , originX3-3.0*geoOverlap - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.55)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin3(wallsX1X2minRef3, 0,refineLevel-2); - //grid->accept(refineVisitormin3); - - // GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap ,kanalhoeheSI*0.49 - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.53)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin4(wallsX1X2minRef4, 0,refineLevel-1); - //grid->accept(refineVisitormin4); - - - /* GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , originX1-3.0*geoOverlap - , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.1)); - RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin4(wallsX1X2minRef4, 0,refineLevel-1); - grid->accept(refineVisitormin4);*/ - - ////GbCuboid3DPtr refine1PlatteCube(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , x3minMesh-H3 - //// , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3)); - ////RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP1(refine1PlatteCube, baseLevel, refineLevel-6); - ////grid->accept(refineAdapterP1); - - //GbCuboid3DPtr refine2PlatteCube(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , x3minMesh-H3*0.5 - // , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3)); - //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP2(refine2PlatteCube, baseLevel, refineLevel-5); - //grid->accept(refineAdapterP2); - - //GbCuboid3DPtr refine3PlatteCube(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , x3minMesh-H3*0.5 - // , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.5)); - //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP3(refine3PlatteCube, baseLevel, refineLevel-4); - //grid->accept(refineAdapterP3); - - //GbCuboid3DPtr refine4PlatteCube(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , x3minMesh+deltaX3Platte*0.0 - // , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.25)); - //if(myid == 0) GbSystem3D::writeGeoObject(refine4PlatteCube.get(), pathname+"/geo/refine4PlatteCube", WbWriterVtkXmlASCII::getInstance()); - //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP4(refine4PlatteCube, baseLevel, refineLevel-3); - //grid->accept(refineAdapterP4); - - //GbCuboid3DPtr refine5PlatteCube(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap ,x3minMesh+deltaX3Platte*0.1/* x3minMesh+deltaX3Platte*0.8*/ - // , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.00375)); - //if(myid == 0) GbSystem3D::writeGeoObject(refine5PlatteCube.get(), pathname+"/geo/refine5PlatteCube", WbWriterVtkXmlASCII::getInstance()); - //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP5(refine5PlatteCube, baseLevel, refineLevel-2); - //grid->accept(refineAdapterP5); - - - //GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , originX1-3.0*geoOverlap - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.1)); - - GbCuboid3DPtr wallsX1X2minRef3(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , originX3-3.0*geoOverlap - , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.6/*0.55*/)); - - GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap ,kanalhoeheSI*0.49 - , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.53)); - - GbCuboid3DPtr wallsX1X2maxRef2(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap ,kanalhoeheSI*0.9 - , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], originX3+geoOverlap+geoLength[2])); - - GbCuboid3DPtr wallsX1X2maxRef1(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap ,kanalhoeheSI*0.95 - , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], originX3+geoOverlap+geoLength[2])); - - if (refineLevel > 0) - { - - RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel); - refineHelper.addGbObject(wallsX1X2minRef3, refineLevel-1); - refineHelper.addGbObject(wallsX1X2minRef4, refineLevel); - refineHelper.addGbObject(wallsX1X2maxRef2, refineLevel-1); - refineHelper.addGbObject(wallsX1X2maxRef1, refineLevel); - - refineHelper.refine(); - if(myid == 0) UBLOG(logINFO,"Refinement - end"); - } - - ///interactoren - //int bbOption1 = 0; //0=simple Bounce Back, 1=quadr. BB - //D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1)); - ///////w�rfel unten version ende - //////////////////////////////////////////////////////////////////////////////// - ////////PM grid - //Tempor�r: - //double H=1.0; - - vector<D3Q27InteractorPtr> D3Q27InteractorPtrarray; - //////////////////////////////////////////////////////////////////////////////// - double inflowCubeDx = coarseNodeDx;///(double)(1<<inflowCubeLevel); - double dpCubes=(double)H/20.0;//100.0; //30zum testen 100real - double offsetZgrid=H+0.5*inflowCubeDx; - double epschoch1drittel= 0.928318; - double abstandIn=2.0*dpCubes; - double c1oAbst=1.0/abstandIn; - for (int Nflowdir=0;Nflowdir<((nx[0]*blocknx[0]*c1oAbst)*coarseNodeDx); Nflowdir++) - { - // for (int Nhorizon=((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5-2; Nhorizon<((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5-1-1; Nhorizon++) - // { - // for (int Nhorizon=0; Nhorizon<(((nx[2]*blocknx[2]+1)*c1oAbst)*coarseNodeDx)*0.1; Nhorizon++)//Nhorizon<((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5; Nhorizon++) - for (int Nhorizon=0; Nhorizon<(((nx[2]*blocknx[2]+1)*c1oAbst)*coarseNodeDx)*0.5-1; Nhorizon++)//Nhorizon<((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5; Nhorizon++) - - { - for (int Nspanw=0; Nspanw<((nx[1]*blocknx[1]*c1oAbst)*coarseNodeDx); Nspanw++) - { - // stringstream ss; - // ss<<"cubeH"<<Nflowdir<<"x"<<Nhorizon<<"x"<<Nspanw; - //// // //geoOrigin ist Mitte, nicht vordere Ecke -> korrigieren - // int Nflowdir=1; - //int Nhorizon=0; - //int Nspanw=1; - double xminCubes1=originX1+(Nflowdir*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1); - double xmaxCubes1=originX1+(Nflowdir*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1); - double xminCubes=std::max(xminCubes1,2.0*coarseNodeDx/pow(2.0,refineLevel)); - double xmaxCubes=std::min(xmaxCubes1,originX1+geoLength[0]-coarseNodeDx/pow(2.0,refineLevel)); - double yminCubes=std::max(originX2+(Nspanw*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1),2.0*coarseNodeDx/pow(2.0,refineLevel)); - double ymaxCubes=std::min(originX2+(Nspanw*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1),originX2+geoLength[1]-coarseNodeDx/pow(2.0,refineLevel)); - double zminCubes=std::max(originX3+(Nhorizon*abstandIn)+4.0*coarseNodeDx/pow(2.0,refineLevel-1),2.0*coarseNodeDx/pow(2.0,refineLevel)); - double zmaxCubes=std::min(originX3+(Nhorizon*abstandIn)+dpCubes+4.0*coarseNodeDx/pow(2.0,refineLevel-1),originX3+geoLength[2]-coarseNodeDx/pow(2.0,refineLevel)); - //// /*GbCuboid3D *rectTemp = new GbCuboid3D(originX1+(Nflowdir*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx, originX2+(Nspanw*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx, originX3+(Nhorizon*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx, - //// originX1+(Nflowdir*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx, originX2+(Nspanw*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx, originX3+(Nhorizon*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx ); - ////*/ - //// - GbCuboid3DPtr rectTemp(new GbCuboid3D(xminCubes, yminCubes, zminCubes, - xmaxCubes, ymaxCubes, zmaxCubes)); - //// - // ostringstream ostrcubes; - // ostrcubes<<pathname <<"/cubeH"<<Nflowdir<<"x"<<Nhorizon<<"x"<<Nspanw; - //// - //// - //// // GbSystem3D::writeGeoObject(rectTemp,outpath+cubeschar,WbWriterAvsASCII::getInstance()); - //// GbSystem3D::writeGeoObject(rectTemp,ostrcubes.str(),WbWriterAvsASCII::getInstance()); //?? - // ostrcubes.str(""); - // ostrcubes.clear(); - - //// boost::shared_ptr<D3Q19AMRInteractor> interactorTemp( new D3Q19AMRInteractor( rectTemp,new D3Q19NoSlipBCAdapter(),AMR3DInteractor::SOLID,ss.str()) ); - // // interactorService.addInteractor(interactorTemp); - D3Q27BoundaryConditionAdapterPtr cubeBCAdapter(new D3Q27NoSlipBCAdapter()); //D3Q27DensityBCAdapter(rhoInit)); - D3Q27InteractorPtr cubeInteractor( new D3Q27Interactor(rectTemp,grid,cubeBCAdapter,Interactor3D::SOLID)); - D3Q27InteractorPtrarray.push_back(cubeInteractor); - - - } - }} - //////////////// - //ende cubes - ////////// - //////////////////////////////////////////// - //METIS - MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B); - grid->accept( metisVisitor ); - - - //////////////////////////////////////////// - /////delete solid blocks - if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - start"); - SolidBlocksHelper sd(grid, comm); - - sd.addInteractor(topBCInteractor); - sd.addInteractor(bottomBCInteractor); - for(size_t i=0; i<D3Q27InteractorPtrarray.size(); ++i) - { - sd.addInteractor(D3Q27InteractorPtrarray[i]); - } - sd.deleteSolidBlocks(); - if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end"); - ////////////////////////////////////// - grid->accept( metisVisitor ); - - sd.setTransBlocks(); - - - unsigned long nob = grid->getNumberOfBlocks(); - unsigned long nod = nob * blocknx[0]*blocknx[1]*blocknx[2]; - unsigned long nod_real = nob * (blocknx[0]+3)*(blocknx[1]+3)*(blocknx[2]+3); - - double needMemAll = double(nod_real*(27*sizeof(double) + sizeof(int))); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - if(myid == 0) - { - UBLOG(logINFO,"Number of blocks = " << nob); - UBLOG(logINFO,"Number of nodes = " << nod); - UBLOG(logINFO,"Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO,"Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO,"Available memory per process = " << availMem << " bytes"); - } - - LBMKernel3DPtr kernel; - kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL)); - - // LBMKernel3DPtr kernel(new LBMKernelETD3Q27CascadedTI(blocknx[0], blocknx[1], blocknx[2])); - //LBMKernel3DPtr kernel(new LBMKernelETD3Q27BGK(blocknx[0], blocknx[1], blocknx[2],1)); - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - kernel->setBCProcessor(bcProc); - // //scheint neuerdings fuer absturz zu sorgen: - mu::Parser fctForcingX1; - fctForcingX1.SetExpr("Fx1*dx"); - fctForcingX1.DefineConst("Fx1", 0.6*5.0e-6);//9.99685e-7); - - kernel->setForcingX1(fctForcingX1); - kernel->setWithForcing(true); - - SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem); - - grid->accept(kernelVisitor); - - ////////////////////////////////// - //undef nodes - if (refineLevel > 0) - { - D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - ////////////////////////////////////////// - - grid->addAndInitInteractor( bottomBCInteractor ); - grid->addAndInitInteractor( topBCInteractor ); - for(size_t i=0; i<D3Q27InteractorPtrarray.size(); ++i) - { - grid->addAndInitInteractor( D3Q27InteractorPtrarray[i] ); - char numstr[21]; - sprintf(numstr, "%f", (double)i); - std::string pathObstCube = pathname+"/geo/obstBCCuboid"+ numstr; - if(myid == 0) GbSystem3D::writeGeoObject(D3Q27InteractorPtrarray[i]->getGbObject3D().get(), - /* rectTemp.get(),*/ pathObstCube, WbWriterVtkXmlASCII::getInstance()); - } - - - UbTimer timer; - timer.start(); - grid->accept( metisVisitor ); - - if(myid == 0) UBLOG(logINFO,"Write blocks - start"); - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm)); - if(myid == 0) ppblocks->update(0); - if(myid == 0) UBLOG(logINFO,"Write blocks - end"); - - - if(myid == 0) UBLOG(logINFO,"Write blocks - start"); - grid->accept( metisVisitor ); - if(myid == 0) ppblocks->update(1); - ppblocks.reset(); - if(myid == 0) UBLOG(logINFO,"Write blocks - end"); - - //inflow - double uLB2=uLB; - double raiseVelSteps = 0; - vector<D3Q27BCFunction> velcX1BCs,dummy; - - mu::Parser inflowProfile; - inflowProfile.SetExpr("uLB*0.9"); - - inflowProfile.DefineConst("uLB",uLB2); - velcX1BCs.push_back(D3Q27BCFunction(inflowProfile,raiseVelSteps,D3Q27BCFunction::INFCONST)); - - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - - //domain decomposition - - //initialization of decompositions - D3Q27ETInitDistributionsBlockVisitor initVisitor( nueLB,rhoInit); - initVisitor.setVx1(inflowProfile); - grid->accept(initVisitor); - - //Postrozess - //LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), - unitConverter, comm, true)); - - - - grid->doPostProcess(0); - ppgeo.reset(); - geoSch.reset(); - - if(myid == 0) UBLOG(logINFO,"Preprozess - end"); - - } - - - - UbSchedulerPtr visSch(new UbScheduler()); - //visSch->addSchedule(100,1,1000); - //visSch->addSchedule(1000,1000,10000); - //visSch->addSchedule(10000,10000,100000); - //visSch->addSchedule(20000,20000,800000); - //visSch->addSchedule(50,350000,350500); - //visSch->addSchedule(50,420000,420500); - //visSch->addSchedule(50000,420500,10000000); - visSch->addSchedule(2250,268250,592250); - UbSchedulerPtr resSch(new UbScheduler()); - resSch->addSchedule(20000,20,10000000); - // AverageValuesPostprocessor Avpp(grid, pathname + "/steps/stepAV", WbWriterVtkXmlBinary::getInstance(), visSch/*wann wird rausgeschrieben*/,resSch/*wann wird resettet*/,comm); - UbSchedulerPtr resSchRMS(new UbScheduler()); - resSchRMS->addSchedule(40000,420000,10000000); - UbSchedulerPtr resSchMeans(new UbScheduler()); - resSchMeans->addSchedule(40000,0,10000000); - UbSchedulerPtr stepAvSch(new UbScheduler()); - int averageInterval=20; - stepAvSch->addSchedule(averageInterval,0,10000000); - - double restart=10000; //?????????? - AverageValuesPostprocessor Avpp(grid, pathname + "/steps/stepAV", WbWriterVtkXmlBinary::getInstance(), stepAvSch/*wann wird gemittelt*/, averageInterval,visSch/*wann wird rausgeschrieben*/,resSchMeans,resSchRMS/*wann wird resettet*/,comm,restart); - - - D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), unitConverter, comm); - - UbSchedulerPtr nupsSch(new UbScheduler(10, 90050, 90080)); - NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm); - - - UbSchedulerPtr AdjForcSch(new UbScheduler()); - AdjForcSch->addSchedule(100,20,20000000); - D3Q27IntegrateValuesHelperPtr IntValHelp(new D3Q27IntegrateValuesHelper(grid, comm, - originX1, originX2, kanalhoeheSI*0.55/*0.501*/, - nx[0]*blockLengthx1, nx[1]*blockLengthx2, kanalhoeheSI*0.999)); - - double vxZiel=uLB; - //D3Q27AdjustForcingPostprocessor AdjForcPPPtr(grid, AdjForcSch,IntValHelp, vxZiel*0.6, comm);//da am 11.3.2013 velo um 1/0.6 zu hoch - D3Q27AdjustForcingPostprocessor AdjForcPPPtr(grid, AdjForcSch,IntValHelp, vxZiel, comm);//dies sollte zu Re=5500 fuehren.. - - UbSchedulerPtr visQSch(new UbScheduler()); - visQSch->addSchedule(10,90100,90130); - QKritPostprocessor QKritPtr(grid,pathname+"/steps/Qq",WbWriterVtkXmlBinary::getInstance(),visQSch, comm); - - mu::Parser decrViscFunc; - decrViscFunc.SetExpr("nue0+c0/(t+1)/(t+1)"); - decrViscFunc.DefineConst("nue0", nueLB); - decrViscFunc.DefineConst("c0", 0.1); - UbSchedulerPtr DecrViscSch(new UbScheduler()); - DecrViscSch->addSchedule(10,10,1000); - DecreaseViscosityPostprocessor decrViscPPPtr(grid, DecrViscSch,&decrViscFunc, comm); - - cout << "PID = " << myid << " Total Physical Memory (RAM): " << MemoryUtil::getTotalPhysMem()<<endl; - cout << "PID = " << myid << " Physical Memory currently used: " << MemoryUtil::getPhysMemUsed()<<endl; - cout << "PID = " << myid << " Physical Memory currently used by current process: " << MemoryUtil::getPhysMemUsedByMe()<<endl; - - double endTime = 520000;//20000001; - 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[]) -{ - - run(argv[1]); - - return 0; -} - diff --git a/apps/cpu/bKanal/bKanal.cpp b/apps/cpu/bKanal/bKanal.cpp deleted file mode 100644 index 33994ad706dc50ec1f1532f2b6b31fec84f4a520..0000000000000000000000000000000000000000 --- a/apps/cpu/bKanal/bKanal.cpp +++ /dev/null @@ -1,565 +0,0 @@ - - -#include <iostream> -#include <string> -#include <math.h> - -#include <sys/types.h> //mkdir rights -#include <sys/stat.h> //mkdir -#include <vfluids.h> - -using namespace std; - - -void run(const char *cstr) -{ - try - { - string pathname; - string pathnameRestart; - int numOfThreads =1; - bool logfile = false; - stringstream logFilename; - double availMem = 0; - - UbLog::reportingLevel() = logINFO; - - CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - string machine = string(cstr); - - if(machine == "my") - { - pathname = "d:/temp/BKanal"; - numOfThreads = 1; - logfile = false; - availMem = 10.0e9; - } - else if(machine == "Ludwig") - { - pathname = "/work/koskuche/SFB880/BKanal"; - pathnameRestart = "/work/koskuche/SFB880/BKanal"; - numOfThreads = 8; - availMem = 1.0e9; - logfile = true; - - if (myid==0) - { - const char* str = pathname.c_str(); -#if defined(__unix__) - int status=mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); -#endif - } - - if(myid ==0) - { - logFilename << pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt"; - } - - } - else throw UbException(UB_EXARGS, "unknown CAB_MACHINE"); - - if(myid ==0 && logfile) - { - UbLog::output_policy::setStream(logFilename.str()); - } - - UBLOG(logINFO,"Testcase BreugemChannel"); - - int baseLevel, refineLevel,nx[3],blocknx[3]; - double Re,velocity,rhoInit,vx1Init;//,vx2Init,vx3Init; - - ////////////////////////////////////////////////////////////////////////// - //physik - ////////////////////////////////////////////////////////////////////////// - Re = 5500;// 13286;//13286;//gemessen 18.98 m/s...*5.0 zum testen ob was passiert - velocity = 0.01; - vx1Init = 0.01; - rhoInit = 0.0; - SimulationParametersPtr param = SimulationParameters::getInstanz(); - - int H=200;//200;//392; - - // nx[0] =8;//ok mit 8// (int)(3.0*(double)H/8.0/8.0);//2;// (int)(0.3*(double)H/6.0/4.0);//das "/4" hier ist wegen der verfeinerung da! //l�nge - // nx[1] =8;//ok mit 8// (int)(2.0*(double)H/8.0/8.0);//2;// (int)(0.2*(double)H/6.0/4.0);// //breite - nx[2] = (int)(2.0*(double)H/5.0/8.0);// //h�he gebiet - - //(3/2/2)-ratio: - nx[1]=nx[2]; - nx[0]=15; - - blocknx[0] = 15;//10;//5; - blocknx[1] = 15;//10;//5; - blocknx[2] = 15;//10;//5; - - baseLevel = 0; - refineLevel = 2;//1;////3;//3 soll 1 test; - - ///////////////Weltabmessungen: - //double kanallaengeSI = ( 2.0*(double)H); - // double kanalbreiteSI = ( 1.0*(double)H); - double kanalhoeheSI = ( 2.0*(double)H); - - // double refinewidth1=kanalhoeheSI/10.0; - - double fineNodeDx = (kanalhoeheSI) / (double)( blocknx[2]*nx[2]*(1<<refineLevel)+1 ); //+1--> gitter liegt jeweils 0.5dx innerhalb - double coarseNodeDx = fineNodeDx * (double)(1<<refineLevel);//geowerte - - double blockLengthx1 = blocknx[0]*coarseNodeDx; //geowerte - double blockLengthx2 = blockLengthx1; - double blockLengthx3 = blockLengthx1; - - double originX1 = 0.0;//-50.0*propellerDurchmesser; //geowerte - double originX2 = 0.0;//-0.5*blockLengthx2*nx2; - double originX3 = 0.0;// minX3 + 0.5*fineNodeDx; - - double geoLength[] = { nx[0]*blockLengthx1, nx[1]*blockLengthx2, nx[2]*blockLengthx3}; - - bool periodicx1 = true; - bool periodicx2 = true; - bool periodicx3 = false; - - - //########################################################################## - //## physical parameters - //########################################################################## - double smagorinskiConstant = 0.18; - - - double rhoLB = 0.0; - - double rhoReal = 1.0; - double nueReal = 1;//0.000016;//0.015; - - double hReal = blocknx[2]*nx[2];//H*0.9;//0.0105;//<-m 1.05;//Plattendicke in cm(! cm nicht m !) - double uReal = Re*nueReal/hReal; - - //##Machzahl: - //#Ma = uReal/csReal - double csReal=343.0; - double Ma = uReal/csReal;//Ma-Real! - //double csReal = uReal/Ma; - double hLB = hReal/coarseNodeDx; - - //LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter(hReal, csReal, rhoReal, hLB)); - - LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter()); - double uLB = velocity; - double nuLB = (uLB*hLB)/Re; - - //double uLB = uReal * unitConverter->getFactorVelocityWToLb(); - //double nueLB = nueReal * unitConverter->getFactorViscosityWToLb(); - //double timestep = unitConverter->getFactorTimeLbToW(coarseNodeDx); - - //velocity = uLB; - // double viscosity =nueLB*1000.0; - - Grid3DPtr grid(new Grid3D(comm)); - - ////////////////////////////////////////////////////////////////////////// - //restart - UbSchedulerPtr rSch(new UbScheduler(10000,10000,10000000)); - RestartPostprocessor rp(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY); - grid = rp.restart(-1); - ////////////////////////////////////////////////////////////////////////// - - if (grid->getTimeStep() == 0) - { - //bounding box - double g_minX1 = originX1; - double g_minX2 = originX2; - double g_minX3 = originX3; - - double g_maxX1 = originX1 + geoLength[0]; - double g_maxX2 = originX2 + geoLength[1]; - double g_maxX3 = originX3 + geoLength[2]; - - //set grid - grid->setDeltaX(coarseNodeDx); - grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - grid->setPeriodicX1(periodicx1); - grid->setPeriodicX2(periodicx2); - grid->setPeriodicX3(periodicx3); - - - 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", WbWriterVtkXmlASCII::getInstance()); - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - - - //bottom and top solid bc - //iteractors - int bbOption1 = 1; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1)); - double geoOverlap = coarseNodeDx; - GbCuboid3DPtr bottomBCCuboid(new GbCuboid3D(originX1-geoOverlap, originX2-geoOverlap, originX3-geoOverlap, - originX1+geoLength[0]+coarseNodeDx, originX2+geoLength[1]+geoOverlap, originX3)); - if(myid == 0) GbSystem3D::writeGeoObject(bottomBCCuboid.get(), pathname+"/geo/bottomBCCuboid", WbWriterVtkXmlASCII::getInstance()); - D3Q27InteractorPtr bottomBCInteractor(new D3Q27Interactor(bottomBCCuboid,grid,bcObst,Interactor3D::SOLID)); - - GbCuboid3DPtr topBCCuboid(new GbCuboid3D(originX1-geoLength[0]-coarseNodeDx, originX2-geoOverlap, originX3+geoLength[2],//-coarseNodeDx*0.5, - originX1+geoLength[0]+coarseNodeDx, originX2+geoLength[1]+geoOverlap, originX3+geoLength[2]+geoOverlap)); - if(myid == 0) GbSystem3D::writeGeoObject(topBCCuboid.get(), pathname+"/geo/topBCCuboid", WbWriterVtkXmlASCII::getInstance()); - D3Q27InteractorPtr topBCInteractor(new D3Q27Interactor(topBCCuboid,grid,bcObst,Interactor3D::SOLID)); - //grid->addAndInitInteractor( bottomBCInteractor ); - // grid->addAndInitInteractor( topBCInteractor ); - ////////////////////////////////////////////////////////////////////////// - if(myid == 0) - { - UBLOG(logINFO, "*****************************************"); - UBLOG(logINFO, "* Parameters *"); - UBLOG(logINFO, "* Re ="<<Re); - UBLOG(logINFO, "* Ma ="<<Ma); - UBLOG(logINFO, "* uReal ="<<uReal); - UBLOG(logINFO, "* nueReal ="<<nueReal); - UBLOG(logINFO, "* nue ="<<nuLB); - UBLOG(logINFO, "* velocity ="<<uLB); - // UBLOG(logINFO, "* LX1 (world/LB)="<<kanallaengeSI<<"/"<<kanallaengeSI/coarseNodeDx); - // UBLOG(logINFO, "* LX2 (world/LB)="<<kanalbreiteSI<<"/"<<kanalbreiteSI/coarseNodeDx); - UBLOG(logINFO, "* LX3 (world/LB)="<<kanalhoeheSI<<"/"<<kanalhoeheSI/coarseNodeDx); - UBLOG(logINFO, "* cdx ="<<coarseNodeDx); - UBLOG(logINFO, "* fdx ="<<fineNodeDx); - UBLOG(logINFO, "* dx_base ="<<coarseNodeDx<<" == "<<coarseNodeDx); - UBLOG(logINFO, "* dx_refine ="<<fineNodeDx<<" == "<<fineNodeDx ); - UBLOG(logINFO, "* nx1/2/3 ="<<nx[0]<<"/"<<nx[1]<<"/"<<nx[2]); - UBLOG(logINFO, "* blocknx1/2/3 ="<<blocknx[0]<<"/"<<blocknx[1]<<"/"<<blocknx[2]); - UBLOG(logINFO, "* x2Periodic ="<<periodicx2); - UBLOG(logINFO, "* x3Periodic ="<<periodicx3); - UBLOG(logINFO, "*****************************************"); -/* UBLOGML(logINFO, "UnitConverter:"<<unitConverter->toString()); - UBLOG(logINFO, "*****************************************"); */ - } - - if(myid == 0) UBLOG(logINFO,"Refinement - start"); - - ////////////////////////////////////////////////////////////////////////// - // refine - ////////////////////////////////////////////////////////////////////////// - GbCuboid3DPtr wallsX1X2minRef3(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , originX3-3.0*geoOverlap - , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.6/*0.55*/)); - - GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap ,kanalhoeheSI*0.49 - , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.53)); - - GbCuboid3DPtr wallsX1X2maxRef2(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap ,kanalhoeheSI*0.9 - , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], originX3+geoOverlap+geoLength[2])); - - GbCuboid3DPtr wallsX1X2maxRef1(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap ,kanalhoeheSI*0.95 - , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], originX3+geoOverlap+geoLength[2])); - - if (refineLevel > 0) - { - - RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel); - refineHelper.addGbObject(wallsX1X2minRef3, refineLevel-1); - refineHelper.addGbObject(wallsX1X2minRef4, refineLevel); - refineHelper.addGbObject(wallsX1X2maxRef2, refineLevel-1); - refineHelper.addGbObject(wallsX1X2maxRef1, refineLevel); - - refineHelper.refine(); - if(myid == 0) UBLOG(logINFO,"Refinement - end"); - } - - ///interactoren - //int bbOption1 = 0; //0=simple Bounce Back, 1=quadr. BB - //D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1)); - ///////w�rfel unten version ende - //////////////////////////////////////////////////////////////////////////////// - ////////PM grid - //Tempor�r: - //double H=1.0; - - vector<D3Q27InteractorPtr> D3Q27InteractorPtrarray; - //////////////////////////////////////////////////////////////////////////////// - double inflowCubeDx = coarseNodeDx;///(double)(1<<inflowCubeLevel); - double dpCubes=(double)H/20.0;//100.0; //30zum testen 100real - double offsetZgrid=H+0.5*inflowCubeDx; - double epschoch1drittel= 0.928318; - double abstandIn=2.0*dpCubes; - double c1oAbst=1.0/abstandIn; - for (int Nflowdir=0;Nflowdir<((nx[0]*blocknx[0]*c1oAbst)*coarseNodeDx); Nflowdir++) - { - // for (int Nhorizon=((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5-2; Nhorizon<((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5-1-1; Nhorizon++) - // { - // for (int Nhorizon=0; Nhorizon<(((nx[2]*blocknx[2]+1)*c1oAbst)*coarseNodeDx)*0.1; Nhorizon++)//Nhorizon<((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5; Nhorizon++) - for (int Nhorizon=0; Nhorizon<(((nx[2]*blocknx[2]+1)*c1oAbst)*coarseNodeDx)*0.5-1; Nhorizon++)//Nhorizon<((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5; Nhorizon++) - - { - for (int Nspanw=0; Nspanw<((nx[1]*blocknx[1]*c1oAbst)*coarseNodeDx); Nspanw++) - { - // stringstream ss; - // ss<<"cubeH"<<Nflowdir<<"x"<<Nhorizon<<"x"<<Nspanw; - //// // //geoOrigin ist Mitte, nicht vordere Ecke -> korrigieren - // int Nflowdir=1; - //int Nhorizon=0; - //int Nspanw=1; - double xminCubes1=originX1+(Nflowdir*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1); - double xmaxCubes1=originX1+(Nflowdir*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1); - double xminCubes=std::max(xminCubes1,2.0*coarseNodeDx/pow(2.0,refineLevel)); - double xmaxCubes=std::min(xmaxCubes1,originX1+geoLength[0]-coarseNodeDx/pow(2.0,refineLevel)); - double yminCubes=std::max(originX2+(Nspanw*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1),2.0*coarseNodeDx/pow(2.0,refineLevel)); - double ymaxCubes=std::min(originX2+(Nspanw*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1),originX2+geoLength[1]-coarseNodeDx/pow(2.0,refineLevel)); - double zminCubes=std::max(originX3+(Nhorizon*abstandIn)+4.0*coarseNodeDx/pow(2.0,refineLevel-1),2.0*coarseNodeDx/pow(2.0,refineLevel)); - double zmaxCubes=std::min(originX3+(Nhorizon*abstandIn)+dpCubes+4.0*coarseNodeDx/pow(2.0,refineLevel-1),originX3+geoLength[2]-coarseNodeDx/pow(2.0,refineLevel)); - //// /*GbCuboid3D *rectTemp = new GbCuboid3D(originX1+(Nflowdir*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx, originX2+(Nspanw*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx, originX3+(Nhorizon*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx, - //// originX1+(Nflowdir*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx, originX2+(Nspanw*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx, originX3+(Nhorizon*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx ); - ////*/ - //// - GbCuboid3DPtr rectTemp(new GbCuboid3D(xminCubes, yminCubes, zminCubes, - xmaxCubes, ymaxCubes, zmaxCubes)); - //// - // ostringstream ostrcubes; - // ostrcubes<<pathname <<"/cubeH"<<Nflowdir<<"x"<<Nhorizon<<"x"<<Nspanw; - //// - //// - //// // GbSystem3D::writeGeoObject(rectTemp,outpath+cubeschar,WbWriterAvsASCII::getInstance()); - //// GbSystem3D::writeGeoObject(rectTemp,ostrcubes.str(),WbWriterAvsASCII::getInstance()); //?? - // ostrcubes.str(""); - // ostrcubes.clear(); - - //// boost::shared_ptr<D3Q19AMRInteractor> interactorTemp( new D3Q19AMRInteractor( rectTemp,new D3Q19NoSlipBCAdapter(),AMR3DInteractor::SOLID,ss.str()) ); - // // interactorService.addInteractor(interactorTemp); - D3Q27BoundaryConditionAdapterPtr cubeBCAdapter(new D3Q27NoSlipBCAdapter()); //D3Q27DensityBCAdapter(rhoInit)); - D3Q27InteractorPtr cubeInteractor( new D3Q27Interactor(rectTemp,grid,cubeBCAdapter,Interactor3D::SOLID)); - D3Q27InteractorPtrarray.push_back(cubeInteractor); - - - } - }} - //////////////// - //ende cubes - ////////// - //////////////////////////////////////////// - //METIS - Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B)); - - //////////////////////////////////////////// - /////delete solid blocks - if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - intHelper.addInteractor(topBCInteractor); - intHelper.addInteractor(bottomBCInteractor); - for(size_t i=0; i<D3Q27InteractorPtrarray.size(); ++i) - { - intHelper.addInteractor(D3Q27InteractorPtrarray[i]); - } - intHelper.selectBlocks(); - if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end"); - ////////////////////////////////////// - - //domain decomposition for threads - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - unsigned long nob = grid->getNumberOfBlocks(); - unsigned long nod = nob * blocknx[0]*blocknx[1]*blocknx[2]; - unsigned long nod_real = nob * (blocknx[0]+3)*(blocknx[1]+3)*(blocknx[2]+3); - - double needMemAll = double(nod_real*(27*sizeof(double) + sizeof(int))); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - if(myid == 0) - { - UBLOG(logINFO,"Number of blocks = " << nob); - UBLOG(logINFO,"Number of nodes = " << nod); - UBLOG(logINFO,"Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO,"Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO,"Available memory per process = " << availMem << " bytes"); - } - - LBMKernel3DPtr kernel; - kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL)); - - // LBMKernel3DPtr kernel(new LBMKernelETD3Q27CascadedTI(blocknx[0], blocknx[1], blocknx[2])); - //LBMKernel3DPtr kernel(new LBMKernelETD3Q27BGK(blocknx[0], blocknx[1], blocknx[2],1)); - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - kernel->setBCProcessor(bcProc); - // //scheint neuerdings fuer absturz zu sorgen: - mu::Parser fctForcingX1; - fctForcingX1.SetExpr("Fx1*dx"); - fctForcingX1.DefineConst("Fx1", 0.6*5.0e-6);//9.99685e-7); - - kernel->setForcingX1(fctForcingX1); - kernel->setWithForcing(true); - - SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem); - - grid->accept(kernelVisitor); - - ////////////////////////////////// - //undef nodes - if (refineLevel > 0) - { - D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - ////////////////////////////////////////// - intHelper.setBC(); - - for(size_t i=0; i<D3Q27InteractorPtrarray.size(); ++i) - { - grid->addAndInitInteractor( D3Q27InteractorPtrarray[i] ); - char numstr[21]; - sprintf(numstr, "%f", (double)i); - std::string pathObstCube = pathname+"/geo/obstBCCuboid"+ numstr; - if(myid == 0) GbSystem3D::writeGeoObject(D3Q27InteractorPtrarray[i]->getGbObject3D().get(), - /* rectTemp.get(),*/ pathObstCube, WbWriterVtkXmlASCII::getInstance()); - } - - UbTimer timer; - timer.start(); - grid->accept( metisVisitor ); - - if(myid == 0) UBLOG(logINFO,"Write blocks - start"); - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm)); - if(myid == 0) ppblocks->update(0); - if(myid == 0) UBLOG(logINFO,"Write blocks - end"); - - if(myid == 0) UBLOG(logINFO,"Write blocks - start"); - grid->accept( metisVisitor ); - if(myid == 0) ppblocks->update(1); - ppblocks.reset(); - if(myid == 0) UBLOG(logINFO,"Write blocks - end"); - - //inflow - double uLB2=uLB; - double raiseVelSteps = 0; - vector<D3Q27BCFunction> velcX1BCs,dummy; - - mu::Parser inflowProfile; - inflowProfile.SetExpr("uLB*0.9"); - - inflowProfile.DefineConst("uLB",uLB2); - velcX1BCs.push_back(D3Q27BCFunction(inflowProfile,raiseVelSteps,D3Q27BCFunction::INFCONST)); - - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - grid->accept( setConnsVisitor ); - - //domain decomposition - - //initialization of decompositions - D3Q27ETInitDistributionsBlockVisitor initVisitor( nuLB,rhoInit); - initVisitor.setVx1(inflowProfile); - grid->accept(initVisitor); - - //Postrozess - //LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), - unitConverter,true)); - - - - grid->doPostProcess(0); - ppgeo.reset(); - geoSch.reset(); - - if(myid == 0) UBLOG(logINFO,"Preprozess - end"); - - } - else - { - //set forcing - mu::Parser fctForcingX1, fctForcingX2, fctForcingX3; - fctForcingX1.SetExpr("Fx1*dx"); - fctForcingX1.DefineConst("Fx1", 0.6*5.0e-6); - SetForcingBlockVisitor forcingVisitor(fctForcingX1, fctForcingX2, fctForcingX3); - grid->accept(forcingVisitor); - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - grid->accept( setConnsVisitor ); - if(myid == 0) UBLOG(logINFO,"Restart - end"); - } - - - UbSchedulerPtr visSch(new UbScheduler()); - //visSch->addSchedule(100,1,1000); - //visSch->addSchedule(1000,1000,10000); - //visSch->addSchedule(10000,10000,100000); - //visSch->addSchedule(20000,20000,800000); - //visSch->addSchedule(50,350000,350500); - //visSch->addSchedule(50,420000,420500); - //visSch->addSchedule(50000,420500,10000000); - visSch->addSchedule(2250,140000,450001); - UbSchedulerPtr resSch(new UbScheduler()); - resSch->addSchedule(20000,20,10000000); - UbSchedulerPtr resSchRMS(new UbScheduler()); - resSchRMS->addSchedule(40000,420000,10000000); - UbSchedulerPtr resSchMeans(new UbScheduler()); - resSchMeans->addSchedule(40000,0,10000000); - UbSchedulerPtr stepAvSch(new UbScheduler()); - stepAvSch->addSchedule(20,0,10000000); - AverageValuesPostprocessor Avpp(grid, pathname + "/steps/stepAV", WbWriterVtkXmlBinary::getInstance(), - visSch/*wann wird rausgeschrieben*/, stepAvSch/*wann wird gemittelt*/, resSchMeans, resSchRMS/*wann wird resettet*/); - - D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), unitConverter, comm); - - UbSchedulerPtr nupsSch(new UbScheduler(10, 90050, 90080)); - NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm); - - - UbSchedulerPtr AdjForcSch(new UbScheduler()); - AdjForcSch->addSchedule(100,20,20000000); - D3Q27IntegrateValuesHelperPtr IntValHelp(new D3Q27IntegrateValuesHelper(grid, comm, - originX1, originX2, kanalhoeheSI*0.55/*0.501*/, - nx[0]*blockLengthx1, nx[1]*blockLengthx2, kanalhoeheSI*0.999)); - - double vxZiel=uLB; - //D3Q27AdjustForcingPostprocessor AdjForcPPPtr(grid, AdjForcSch,IntValHelp, vxZiel*0.6, comm);//da am 11.3.2013 velo um 1/0.6 zu hoch - D3Q27AdjustForcingPostprocessor AdjForcPPPtr(grid, AdjForcSch,IntValHelp, vxZiel, comm);//dies sollte zu Re=5500 fuehren.. - - UbSchedulerPtr visQSch(new UbScheduler()); - visQSch->addSchedule(10,90100,90130); - QCriterionPostprocessor QKritPtr(grid,pathname+"/steps/Qq",WbWriterVtkXmlBinary::getInstance(),visQSch, comm); - - mu::Parser decrViscFunc; - decrViscFunc.SetExpr("nue0+c0/(t+1)/(t+1)"); - decrViscFunc.DefineConst("nue0", nuLB); - decrViscFunc.DefineConst("c0", 0.1); - UbSchedulerPtr DecrViscSch(new UbScheduler()); - DecrViscSch->addSchedule(10,10,1000); - DecreaseViscosityPostprocessor decrViscPPPtr(grid, DecrViscSch,&decrViscFunc, comm); - - cout << "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()<<endl; - cout << "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()<<endl; - cout << "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()<<endl; - - double endTime = 2000000;//20000001; - 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[]) -{ - - run(argv[1]); - - return 0; -} - diff --git a/apps/cpu/bKanal/sKanal/bKanal.cpp b/apps/cpu/bKanal/sKanal/bKanal.cpp deleted file mode 100644 index 1048554fb5ffc1e91abc97cf2bbf7f4133533063..0000000000000000000000000000000000000000 --- a/apps/cpu/bKanal/sKanal/bKanal.cpp +++ /dev/null @@ -1,694 +0,0 @@ - - -#include <iostream> -#include <string> -#include <math.h> - -#include <sys/types.h> //mkdir rights -#include <sys/stat.h> //mkdir -#include <vfluids.h> - -using namespace std; - - -void run(const char *cstr) -{ - try - { - string machine = QUOTEME(CAB_MACHINE); - UBLOG(logINFO,"Testcase BreugemChannel"); - string pathname; - string pathnameRestart; - string pathGeo; - int numOfThreads =1; - bool logfile = false; - stringstream logFilename; - double availMem = 0; - - UbLog::reportingLevel() = logINFO; - - CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - if(machine == "PIPPINNEU") - { - - pathname = "f:/temp/breugemKb"; - //pathGeo = "c:/Data/plate"; - numOfThreads = 1; - logfile = false; - availMem = 3.0e9; - } - else if(machine == "M01" || machine == "M02") - { - pathname = "/work/koskuche/SFB880/BKanaltest0Ref2up1812Ratio322f5nx15RestartQ"; - pathnameRestart = "/work/koskuche/SFB880/BKanaltest0Ref2up1212Ratio322";//BKanaltest0Ref2up0612";//BKanaltest0Ref2up1012Out"; - //pathname = "/work/koskuche/SFB880/BKanaltestRe260000Out"; - //pathnameRestart = "/work/koskuche/SFB880/BKanaltestRe260000";//BKanaltest0Ref2up0612";//BKanaltest0Ref2up1012Out"; - - pathGeo = "/home/koskuche/data/plate"; - numOfThreads = 1; - availMem = 12.0e9; - logfile = true; - - if (myid==0) - { - const char* str = pathname.c_str(); -#if defined(__unix__) - int status=mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); -#endif - - } - - if(myid ==0) - { - logFilename << pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt"; - } - - } - else throw UbException(UB_EXARGS, "unknown CAB_MACHINE"); - - - - //if(myid ==0 && logfile) - //{ - UbLog::output_policy::setStream(logFilename.str()); - //} - - int baseLevel, refineLevel,nx[3],blocknx[3]; - double Re,velocity,rhoInit,vx1Init;//,vx2Init,vx3Init; - - ////////////////////////////////////////////////////////////////////////// - //physik - ////////////////////////////////////////////////////////////////////////// - Re = 5500;// 13286;//13286;//gemessen 18.98 m/s...*5.0 zum testen ob was passiert - velocity = 0.01; - vx1Init = 0.01; - rhoInit = 0.0; - SimulationParametersPtr param = SimulationParameters::getInstanz(); - - int H=200;//200;//392; - - // nx[0] =8;//ok mit 8// (int)(3.0*(double)H/8.0/8.0);//2;// (int)(0.3*(double)H/6.0/4.0);//das "/4" hier ist wegen der verfeinerung da! //l�nge - // nx[1] =8;//ok mit 8// (int)(2.0*(double)H/8.0/8.0);//2;// (int)(0.2*(double)H/6.0/4.0);// //breite - nx[2] = (int)(2.0*(double)H/5.0/8.0);// //h�he gebiet - - //(3/2/2)-ratio: - nx[1]=nx[2]; - nx[0]=15; - - blocknx[0] = 15;//10;//5; - blocknx[1] = 15;//10;//5; - blocknx[2] = 15;//10;//5; - - baseLevel = 0; - refineLevel = 2;//1;////3;//3 soll 1 test; - - - ///////////////Weltabmessungen: - //double kanallaengeSI = ( 2.0*(double)H); - // double kanalbreiteSI = ( 1.0*(double)H); - double kanalhoeheSI = ( 2.0*(double)H); - - // double refinewidth1=kanalhoeheSI/10.0; - - double fineNodeDx = (kanalhoeheSI) / (double)( blocknx[2]*nx[2]*(1<<refineLevel)+1 ); //+1--> gitter liegt jeweils 0.5dx innerhalb - double coarseNodeDx = fineNodeDx * (double)(1<<refineLevel);//geowerte - - double blockLengthx1 = blocknx[0]*coarseNodeDx; //geowerte - double blockLengthx2 = blockLengthx1; - double blockLengthx3 = blockLengthx1; - - double originX1 = 0.0;//-50.0*propellerDurchmesser; //geowerte - double originX2 = 0.0;//-0.5*blockLengthx2*nx2; - double originX3 = 0.0;// minX3 + 0.5*fineNodeDx; - - double geoLength[] = { nx[0]*blockLengthx1, nx[1]*blockLengthx2, nx[2]*blockLengthx3}; - - bool periodicx1 = true; - bool periodicx2 = true; - bool periodicx3 = false; - - - //########################################################################## - //## physical parameters - //########################################################################## - double smagorinskiConstant = 0.18; - - - double rhoLB = 0.0; - - double rhoReal = 1.0; - double nueReal = 1;//0.000016;//0.015; - - double hReal = blocknx[2]*nx[2];//H*0.9;//0.0105;//<-m 1.05;//Plattendicke in cm(! cm nicht m !) - double uReal = Re*nueReal/hReal; - - //##Machzahl: - //#Ma = uReal/csReal - double csReal=343.0; - double Ma = uReal/csReal;//Ma-Real! - //double csReal = uReal/Ma; - double hLB = hReal/coarseNodeDx; - - LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter(hReal, csReal, rhoReal, hLB)); - - double uLB = uReal * unitConverter->getFactorVelocityWToLb(); - double nueLB = nueReal * unitConverter->getFactorViscosityWToLb(); - double timestep = unitConverter->getFactorTimeLbToW(coarseNodeDx); - - velocity = uLB; - // double viscosity =nueLB*1000.0; - - Grid3DPtr grid(new Grid3D(comm)); - UbSchedulerPtr rSch(new UbScheduler(10000,100000,30000000000));//(50000,50000,1000000)); - RestartPostprocessor rp(grid, rSch, comm, pathnameRestart+"/checkpoints", RestartPostprocessor::BINARY); - - ////////////////////////////////////////////////////////////////////////// - - std::string opt; - - if(cstr!= NULL) - opt = std::string(cstr); - - if(/*(cstr== NULL)*/cstr!= NULL) - { - opt = std::string(cstr); - - if(myid==0) { - UBLOG(logINFO,"Restart step: " << opt); - UBLOG(logINFO, "Restart=:" << pathnameRestart); - } - - grid = rp.restart(UbSystem::stringTo<int>(opt)); - rp.reconnect(grid); - -// mu::Parser fctForcingX1, fctForcingX2, fctForcingX3; -// fctForcingX1.SetExpr("Fx1*dx"); -// fctForcingX1.DefineConst("Fx1", 0.6*5.0e-6); -// -// SetForcingBlockVisitor forcingVisitor(fctForcingX1, fctForcingX2, fctForcingX3); -// grid->accept(forcingVisitor); - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - - } - else - { - //bounding box - double g_minX1 = originX1; - double g_minX2 = originX2; - double g_minX3 = originX3; - - double g_maxX1 = originX1 + geoLength[0]; - double g_maxX2 = originX2 + geoLength[1]; - double g_maxX3 = originX3 + geoLength[2]; - - //set grid - grid->setDeltaX(coarseNodeDx); - grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - grid->setPeriodicX1(periodicx1); - grid->setPeriodicX2(periodicx2); - grid->setPeriodicX3(periodicx3); - - - 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", WbWriterVtkXmlASCII::getInstance()); - - GenBlocksGridVisitor genBlocks; - genBlocks.addGeoObject(gridCube); - grid->accept(genBlocks); - - - - //bottom and top solid bc - //iteractors - int bbOption1 = 1; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1)); - double geoOverlap = coarseNodeDx; - GbCuboid3DPtr bottomBCCuboid(new GbCuboid3D(originX1-geoOverlap, originX2-geoOverlap, originX3-geoOverlap, - originX1+geoLength[0]+coarseNodeDx, originX2+geoLength[1]+geoOverlap, originX3)); - if(myid == 0) GbSystem3D::writeGeoObject(bottomBCCuboid.get(), pathname+"/geo/bottomBCCuboid", WbWriterVtkXmlASCII::getInstance()); - D3Q27InteractorPtr bottomBCInteractor(new D3Q27Interactor(bottomBCCuboid,grid,bcObst,Interactor3D::SOLID)); - - GbCuboid3DPtr topBCCuboid(new GbCuboid3D(originX1-geoLength[0]-coarseNodeDx, originX2-geoOverlap, originX3+geoLength[2],//-coarseNodeDx*0.5, - originX1+geoLength[0]+coarseNodeDx, originX2+geoLength[1]+geoOverlap, originX3+geoLength[2]+geoOverlap)); - if(myid == 0) GbSystem3D::writeGeoObject(topBCCuboid.get(), pathname+"/geo/topBCCuboid", WbWriterVtkXmlASCII::getInstance()); - D3Q27InteractorPtr topBCInteractor(new D3Q27Interactor(topBCCuboid,grid,bcObst,Interactor3D::SOLID)); - //grid->addAndInitInteractor( bottomBCInteractor ); - // grid->addAndInitInteractor( topBCInteractor ); - ////////////////////////////////////////////////////////////////////////// - if(myid == 0) - { - UBLOG(logINFO, "*****************************************"); - UBLOG(logINFO, "* Parameters *"); - UBLOG(logINFO, "* Re ="<<Re); - UBLOG(logINFO, "* Ma ="<<Ma); - UBLOG(logINFO, "* uReal ="<<uReal); - UBLOG(logINFO, "* nueReal ="<<nueReal); - UBLOG(logINFO, "* nue ="<<nueLB); - UBLOG(logINFO, "* velocity ="<<uLB); - // UBLOG(logINFO, "* LX1 (world/LB)="<<kanallaengeSI<<"/"<<kanallaengeSI/coarseNodeDx); - // UBLOG(logINFO, "* LX2 (world/LB)="<<kanalbreiteSI<<"/"<<kanalbreiteSI/coarseNodeDx); - UBLOG(logINFO, "* LX3 (world/LB)="<<kanalhoeheSI<<"/"<<kanalhoeheSI/coarseNodeDx); - UBLOG(logINFO, "* cdx ="<<coarseNodeDx); - UBLOG(logINFO, "* fdx ="<<fineNodeDx); - UBLOG(logINFO, "* dx_base ="<<coarseNodeDx<<" == "<<coarseNodeDx); - UBLOG(logINFO, "* dx_refine ="<<fineNodeDx<<" == "<<fineNodeDx ); - UBLOG(logINFO, "* nx1/2/3 ="<<nx[0]<<"/"<<nx[1]<<"/"<<nx[2]); - UBLOG(logINFO, "* blocknx1/2/3 ="<<blocknx[0]<<"/"<<blocknx[1]<<"/"<<blocknx[2]); - UBLOG(logINFO, "* x2Periodic ="<<periodicx2); - UBLOG(logINFO, "* x3Periodic ="<<periodicx3); - UBLOG(logINFO, "*****************************************"); - UBLOGML(logINFO, "UnitConverter:"<<unitConverter->toString()); - UBLOG(logINFO, "*****************************************"); - } - - if(myid == 0) UBLOG(logINFO,"Refinement - start"); - - ////////////////////////////////////////////////////////////////////////// - // refine - ////////////////////////////////////////////////////////////////////////// - //GbCuboid3DPtr wallsX1X2maxRef1( new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , kanalhoeheSI*0.95 - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormax1(wallsX1X2maxRef1, 0,refineLevel-3); - //grid->accept(refineVisitormax1); - // - //GbCuboid3DPtr wallsX1X2minRef1(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , kanalhoeheSI*0.55 - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.47)); - // RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin1(wallsX1X2minRef1, 0,refineLevel-3); - // grid->accept(refineVisitormin1); - - // GbCuboid3DPtr wallsX1X2maxRef2(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , kanalhoeheSI - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.98)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormax2(wallsX1X2maxRef2, 0,refineLevel-2); - //grid->accept(refineVisitormax2); - // GbCuboid3DPtr wallsX1X2maxRef2(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , kanalhoeheSI - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.9)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormax2(wallsX1X2maxRef2, 0,refineLevel-2); - //grid->accept(refineVisitormax2); - - // GbCuboid3DPtr wallsX1X2maxRef3(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , kanalhoeheSI - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.9995)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormax3(wallsX1X2maxRef3, 0,refineLevel-1); - //grid->accept(refineVisitormax3); - - // GbCuboid3DPtr wallsX1X2minRefl3(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , originX3-3.0*geoOverlap - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.25)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitorminl3(wallsX1X2minRefl3, 0,refineLevel-3); - //grid->accept(refineVisitorminl3); - /////w�rfel unten version - // GbCuboid3DPtr wallsX1X2minRef2(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , originX3-3.0*geoOverlap - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.2)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin2(wallsX1X2minRef2, 0,refineLevel-2); - //grid->accept(refineVisitormin2); - - // GbCuboid3DPtr wallsX1X2minRef3(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , kanalhoeheSI*0.04 - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.18)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin3(wallsX1X2minRef3, 0,refineLevel-1); - //grid->accept(refineVisitormin3); - - // GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , kanalhoeheSI*0.09 - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.16)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin4(wallsX1X2minRef4, 0,refineLevel); - //grid->accept(refineVisitormin4); - - - - - /////w�rfel anfang version - // GbCuboid3DPtr wallsX1X2minRef2(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , originX3-3.0*geoOverlap - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.56)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin2(wallsX1X2minRef2, 0,refineLevel-2); - //grid->accept(refineVisitormin2); - - // GbCuboid3DPtr wallsX1X2minRef3(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , originX3-3.0*geoOverlap - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.55)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin3(wallsX1X2minRef3, 0,refineLevel-2); - //grid->accept(refineVisitormin3); - - // GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap ,kanalhoeheSI*0.49 - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.53)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin4(wallsX1X2minRef4, 0,refineLevel-1); - //grid->accept(refineVisitormin4); - - - /* GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , originX1-3.0*geoOverlap - , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.1)); - RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin4(wallsX1X2minRef4, 0,refineLevel-1); - grid->accept(refineVisitormin4);*/ - - ////GbCuboid3DPtr refine1PlatteCube(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , x3minMesh-H3 - //// , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3)); - ////RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP1(refine1PlatteCube, baseLevel, refineLevel-6); - ////grid->accept(refineAdapterP1); - - //GbCuboid3DPtr refine2PlatteCube(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , x3minMesh-H3*0.5 - // , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3)); - //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP2(refine2PlatteCube, baseLevel, refineLevel-5); - //grid->accept(refineAdapterP2); - - //GbCuboid3DPtr refine3PlatteCube(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , x3minMesh-H3*0.5 - // , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.5)); - //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP3(refine3PlatteCube, baseLevel, refineLevel-4); - //grid->accept(refineAdapterP3); - - //GbCuboid3DPtr refine4PlatteCube(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , x3minMesh+deltaX3Platte*0.0 - // , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.25)); - //if(myid == 0) GbSystem3D::writeGeoObject(refine4PlatteCube.get(), pathname+"/geo/refine4PlatteCube", WbWriterVtkXmlASCII::getInstance()); - //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP4(refine4PlatteCube, baseLevel, refineLevel-3); - //grid->accept(refineAdapterP4); - - //GbCuboid3DPtr refine5PlatteCube(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap ,x3minMesh+deltaX3Platte*0.1/* x3minMesh+deltaX3Platte*0.8*/ - // , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.00375)); - //if(myid == 0) GbSystem3D::writeGeoObject(refine5PlatteCube.get(), pathname+"/geo/refine5PlatteCube", WbWriterVtkXmlASCII::getInstance()); - //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP5(refine5PlatteCube, baseLevel, refineLevel-2); - //grid->accept(refineAdapterP5); - - - //GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , originX1-3.0*geoOverlap - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.1)); - - GbCuboid3DPtr wallsX1X2minRef3(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , originX3-3.0*geoOverlap - , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.6/*0.55*/)); - - GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap ,kanalhoeheSI*0.49 - , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.53)); - - GbCuboid3DPtr wallsX1X2maxRef2(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap ,kanalhoeheSI*0.9 - , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], originX3+geoOverlap+geoLength[2])); - - GbCuboid3DPtr wallsX1X2maxRef1(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap ,kanalhoeheSI*0.95 - , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], originX3+geoOverlap+geoLength[2])); - - if (refineLevel > 0) - { - - RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel); - refineHelper.addGbObject(wallsX1X2minRef3, refineLevel-1); - refineHelper.addGbObject(wallsX1X2minRef4, refineLevel); - refineHelper.addGbObject(wallsX1X2maxRef2, refineLevel-1); - refineHelper.addGbObject(wallsX1X2maxRef1, refineLevel); - - refineHelper.refine(); - if(myid == 0) UBLOG(logINFO,"Refinement - end"); - } - - ///interactoren - //int bbOption1 = 0; //0=simple Bounce Back, 1=quadr. BB - //D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1)); - ///////w�rfel unten version ende - //////////////////////////////////////////////////////////////////////////////// - ////////PM grid - //Tempor�r: - //double H=1.0; - - vector<D3Q27InteractorPtr> D3Q27InteractorPtrarray; - //////////////////////////////////////////////////////////////////////////////// - double inflowCubeDx = coarseNodeDx;///(double)(1<<inflowCubeLevel); - double dpCubes=(double)H/20.0;//100.0; //30zum testen 100real - double offsetZgrid=H+0.5*inflowCubeDx; - double epschoch1drittel= 0.928318; - double abstandIn=2.0*dpCubes; - double c1oAbst=1.0/abstandIn; - for (int Nflowdir=0;Nflowdir<((nx[0]*blocknx[0]*c1oAbst)*coarseNodeDx); Nflowdir++) - { - // for (int Nhorizon=((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5-2; Nhorizon<((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5-1-1; Nhorizon++) - // { - // for (int Nhorizon=0; Nhorizon<(((nx[2]*blocknx[2]+1)*c1oAbst)*coarseNodeDx)*0.1; Nhorizon++)//Nhorizon<((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5; Nhorizon++) - for (int Nhorizon=0; Nhorizon<(((nx[2]*blocknx[2]+1)*c1oAbst)*coarseNodeDx)*0.5-1; Nhorizon++)//Nhorizon<((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5; Nhorizon++) - - { - for (int Nspanw=0; Nspanw<((nx[1]*blocknx[1]*c1oAbst)*coarseNodeDx); Nspanw++) - { - // stringstream ss; - // ss<<"cubeH"<<Nflowdir<<"x"<<Nhorizon<<"x"<<Nspanw; - //// // //geoOrigin ist Mitte, nicht vordere Ecke -> korrigieren - // int Nflowdir=1; - //int Nhorizon=0; - //int Nspanw=1; - double xminCubes1=originX1+(Nflowdir*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1); - double xmaxCubes1=originX1+(Nflowdir*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1); - double xminCubes=std::max(xminCubes1,2.0*coarseNodeDx/pow(2.0,refineLevel)); - double xmaxCubes=std::min(xmaxCubes1,originX1+geoLength[0]-coarseNodeDx/pow(2.0,refineLevel)); - double yminCubes=std::max(originX2+(Nspanw*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1),2.0*coarseNodeDx/pow(2.0,refineLevel)); - double ymaxCubes=std::min(originX2+(Nspanw*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1),originX2+geoLength[1]-coarseNodeDx/pow(2.0,refineLevel)); - double zminCubes=std::max(originX3+(Nhorizon*abstandIn)+4.0*coarseNodeDx/pow(2.0,refineLevel-1),2.0*coarseNodeDx/pow(2.0,refineLevel)); - double zmaxCubes=std::min(originX3+(Nhorizon*abstandIn)+dpCubes+4.0*coarseNodeDx/pow(2.0,refineLevel-1),originX3+geoLength[2]-coarseNodeDx/pow(2.0,refineLevel)); - //// /*GbCuboid3D *rectTemp = new GbCuboid3D(originX1+(Nflowdir*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx, originX2+(Nspanw*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx, originX3+(Nhorizon*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx, - //// originX1+(Nflowdir*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx, originX2+(Nspanw*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx, originX3+(Nhorizon*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx ); - ////*/ - //// - GbCuboid3DPtr rectTemp(new GbCuboid3D(xminCubes, yminCubes, zminCubes, - xmaxCubes, ymaxCubes, zmaxCubes)); - //// - // ostringstream ostrcubes; - // ostrcubes<<pathname <<"/cubeH"<<Nflowdir<<"x"<<Nhorizon<<"x"<<Nspanw; - //// - //// - //// // GbSystem3D::writeGeoObject(rectTemp,outpath+cubeschar,WbWriterAvsASCII::getInstance()); - //// GbSystem3D::writeGeoObject(rectTemp,ostrcubes.str(),WbWriterAvsASCII::getInstance()); //?? - // ostrcubes.str(""); - // ostrcubes.clear(); - - //// boost::shared_ptr<D3Q19AMRInteractor> interactorTemp( new D3Q19AMRInteractor( rectTemp,new D3Q19NoSlipBCAdapter(),AMR3DInteractor::SOLID,ss.str()) ); - // // interactorService.addInteractor(interactorTemp); - D3Q27BoundaryConditionAdapterPtr cubeBCAdapter(new D3Q27NoSlipBCAdapter()); //D3Q27DensityBCAdapter(rhoInit)); - D3Q27InteractorPtr cubeInteractor( new D3Q27Interactor(rectTemp,grid,cubeBCAdapter,Interactor3D::SOLID)); - D3Q27InteractorPtrarray.push_back(cubeInteractor); - - - } - }} - //////////////// - //ende cubes - ////////// - //////////////////////////////////////////// - //METIS - MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B); - grid->accept( metisVisitor ); - - - //////////////////////////////////////////// - /////delete solid blocks - if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - start"); - SolidBlocksHelper sd(grid, comm); - - sd.addInteractor(topBCInteractor); - sd.addInteractor(bottomBCInteractor); - for(size_t i=0; i<D3Q27InteractorPtrarray.size(); ++i) - { - sd.addInteractor(D3Q27InteractorPtrarray[i]); - } - sd.deleteSolidBlocks(); - if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end"); - ////////////////////////////////////// - grid->accept( metisVisitor ); - - sd.setTransBlocks(); - - - unsigned long nob = grid->getNumberOfBlocks(); - unsigned long nod = nob * blocknx[0]*blocknx[1]*blocknx[2]; - unsigned long nod_real = nob * (blocknx[0]+3)*(blocknx[1]+3)*(blocknx[2]+3); - - double needMemAll = double(nod_real*(27*sizeof(double) + sizeof(int))); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - if(myid == 0) - { - UBLOG(logINFO,"Number of blocks = " << nob); - UBLOG(logINFO,"Number of nodes = " << nod); - UBLOG(logINFO,"Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO,"Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO,"Available memory per process = " << availMem << " bytes"); - } - - LBMKernel3DPtr kernel; - kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL)); - - // LBMKernel3DPtr kernel(new LBMKernelETD3Q27CascadedTI(blocknx[0], blocknx[1], blocknx[2])); - //LBMKernel3DPtr kernel(new LBMKernelETD3Q27BGK(blocknx[0], blocknx[1], blocknx[2],1)); - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - kernel->setBCProcessor(bcProc); - // //scheint neuerdings fuer absturz zu sorgen: - mu::Parser fctForcingX1; - fctForcingX1.SetExpr("Fx1*dx"); - fctForcingX1.DefineConst("Fx1", 0.6*5.0e-6);//9.99685e-7); - - kernel->setForcingX1(fctForcingX1); - kernel->setWithForcing(true); - - SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem); - - grid->accept(kernelVisitor); - - ////////////////////////////////// - //undef nodes - if (refineLevel > 0) - { - D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - ////////////////////////////////////////// - - grid->addAndInitInteractor( bottomBCInteractor ); - grid->addAndInitInteractor( topBCInteractor ); - for(size_t i=0; i<D3Q27InteractorPtrarray.size(); ++i) - { - grid->addAndInitInteractor( D3Q27InteractorPtrarray[i] ); - char numstr[21]; - sprintf(numstr, "%f", (double)i); - std::string pathObstCube = pathname+"/geo/obstBCCuboid"+ numstr; - if(myid == 0) GbSystem3D::writeGeoObject(D3Q27InteractorPtrarray[i]->getGbObject3D().get(), - /* rectTemp.get(),*/ pathObstCube, WbWriterVtkXmlASCII::getInstance()); - } - - - UbTimer timer; - timer.start(); - grid->accept( metisVisitor ); - - if(myid == 0) UBLOG(logINFO,"Write blocks - start"); - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm)); - if(myid == 0) ppblocks->update(0); - if(myid == 0) UBLOG(logINFO,"Write blocks - end"); - - - if(myid == 0) UBLOG(logINFO,"Write blocks - start"); - grid->accept( metisVisitor ); - if(myid == 0) ppblocks->update(1); - ppblocks.reset(); - if(myid == 0) UBLOG(logINFO,"Write blocks - end"); - - //inflow - double uLB2=uLB; - double raiseVelSteps = 0; - vector<D3Q27BCFunction> velcX1BCs,dummy; - - mu::Parser inflowProfile; - inflowProfile.SetExpr("uLB*0.9"); - - inflowProfile.DefineConst("uLB",uLB2); - velcX1BCs.push_back(D3Q27BCFunction(inflowProfile,raiseVelSteps,D3Q27BCFunction::INFCONST)); - - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - - //domain decomposition - - //initialization of decompositions - D3Q27ETInitDistributionsBlockVisitor initVisitor( nueLB,rhoInit); - initVisitor.setVx1(inflowProfile); - grid->accept(initVisitor); - - //Postrozess - //LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), - unitConverter, comm, true)); - - - - grid->doPostProcess(0); - ppgeo.reset(); - geoSch.reset(); - - if(myid == 0) UBLOG(logINFO,"Preprozess - end"); - - } - - - - UbSchedulerPtr visSch(new UbScheduler()); - //visSch->addSchedule(100,1,1000); - //visSch->addSchedule(1000,1000,10000); - //visSch->addSchedule(10000,10000,100000); - //visSch->addSchedule(20000,20000,800000); - //visSch->addSchedule(50,350000,350500); - //visSch->addSchedule(50,420000,420500); - //visSch->addSchedule(50000,420500,10000000); - visSch->addSchedule(2250,268250,450001); - UbSchedulerPtr resSch(new UbScheduler()); - resSch->addSchedule(20000,20,10000000); - // AverageValuesPostprocessor Avpp(grid, pathname + "/steps/stepAV", WbWriterVtkXmlBinary::getInstance(), visSch/*wann wird rausgeschrieben*/,resSch/*wann wird resettet*/,comm); - UbSchedulerPtr resSchRMS(new UbScheduler()); - resSchRMS->addSchedule(40000,420000,10000000); - UbSchedulerPtr resSchMeans(new UbScheduler()); - resSchMeans->addSchedule(40000,0,10000000); - UbSchedulerPtr stepAvSch(new UbScheduler()); - int averageInterval=20; - stepAvSch->addSchedule(averageInterval,0,10000000); - - double restart=10000; //?????????? - AverageValuesPostprocessor Avpp(grid, pathname + "/steps/stepAV", WbWriterVtkXmlBinary::getInstance(), stepAvSch/*wann wird gemittelt*/, averageInterval,visSch/*wann wird rausgeschrieben*/,resSchMeans,resSchRMS/*wann wird resettet*/,comm,restart); - - - D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), unitConverter, comm); - - UbSchedulerPtr nupsSch(new UbScheduler(10, 90050, 90080)); - NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm); - - - UbSchedulerPtr AdjForcSch(new UbScheduler()); - AdjForcSch->addSchedule(100,20,20000000); - D3Q27IntegrateValuesHelperPtr IntValHelp(new D3Q27IntegrateValuesHelper(grid, comm, - originX1, originX2, kanalhoeheSI*0.55/*0.501*/, - nx[0]*blockLengthx1, nx[1]*blockLengthx2, kanalhoeheSI*0.999)); - - double vxZiel=uLB; - //D3Q27AdjustForcingPostprocessor AdjForcPPPtr(grid, AdjForcSch,IntValHelp, vxZiel*0.6, comm);//da am 11.3.2013 velo um 1/0.6 zu hoch - D3Q27AdjustForcingPostprocessor AdjForcPPPtr(grid, AdjForcSch,IntValHelp, vxZiel, comm);//dies sollte zu Re=5500 fuehren.. - - UbSchedulerPtr visQSch(new UbScheduler()); - visQSch->addSchedule(10,90100,90130); - QKritPostprocessor QKritPtr(grid,pathname+"/steps/Qq",WbWriterVtkXmlBinary::getInstance(),visQSch, comm); - - mu::Parser decrViscFunc; - decrViscFunc.SetExpr("nue0+c0/(t+1)/(t+1)"); - decrViscFunc.DefineConst("nue0", nueLB); - decrViscFunc.DefineConst("c0", 0.1); - UbSchedulerPtr DecrViscSch(new UbScheduler()); - DecrViscSch->addSchedule(10,10,1000); - DecreaseViscosityPostprocessor decrViscPPPtr(grid, DecrViscSch,&decrViscFunc, comm); - - cout << "PID = " << myid << " Total Physical Memory (RAM): " << MemoryUtil::getTotalPhysMem()<<endl; - cout << "PID = " << myid << " Physical Memory currently used: " << MemoryUtil::getPhysMemUsed()<<endl; - cout << "PID = " << myid << " Physical Memory currently used by current process: " << MemoryUtil::getPhysMemUsedByMe()<<endl; - - double endTime = 2000000;//20000001; - 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[]) -{ - - run(argv[1]); - - return 0; -} - diff --git a/apps/cpu/bKanal2/CMakeLists.txt b/apps/cpu/bKanal2/CMakeLists.txt deleted file mode 100644 index c54f4ab348b51f05e4b16d498f1345e5c5cdbad0..0000000000000000000000000000000000000000 --- a/apps/cpu/bKanal2/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(bKanal2) - -INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(bKanal2 BINARY) diff --git a/apps/cpu/bKanal2/bKanal2.cpp b/apps/cpu/bKanal2/bKanal2.cpp deleted file mode 100644 index ec632612596d14a747b48500d7436bbf4876f081..0000000000000000000000000000000000000000 --- a/apps/cpu/bKanal2/bKanal2.cpp +++ /dev/null @@ -1,466 +0,0 @@ - - -#include <iostream> -#include <string> -#include <math.h> - -#include <sys/types.h> //mkdir rights -#include <sys/stat.h> //mkdir -#include <vfluids.h> - -using namespace std; - - -void run(const char *cstr) -{ - try - { - string pathname; - string pathnameRestart; - int numOfThreads =1; - bool logfile = false; - stringstream logFilename; - double availMem = 0; - - UbLog::reportingLevel() = logINFO; - - CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - string machine = string(cstr); - - if(machine == "my") - { - pathname = "d:/temp/BKanal"; - numOfThreads = 4; - logfile = false; - availMem = 10.0e9; - } - else if(machine == "Ludwig") - { - pathname = "/work/koskuche/SFB880/BKanal"; - pathnameRestart = "/work/koskuche/SFB880/BKanal"; - numOfThreads = 8; - availMem = 1.0e9; - logfile = true; - - if (myid==0) - { - const char* str = pathname.c_str(); -#if defined(__unix__) - int status=mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); -#endif - } - - if(myid ==0) - { - logFilename << pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt"; - } - - } - else throw UbException(UB_EXARGS, "unknown CAB_MACHINE"); - - if(myid ==0 && logfile) - { - UbLog::output_policy::setStream(logFilename.str()); - } - - UBLOG(logINFO,"Testcase BreugemChannel"); - - ////////////////////////////////////////////////////////////////////////// - //physik - ////////////////////////////////////////////////////////////////////////// - double Re = 5500; - double uLB = 0.1; - double rhoLB = 0.0; - - int blocknx[3]; - blocknx[0] = 20;//10;//5; - blocknx[1] = 20;//10;//5; - blocknx[2] = 20;//10;//5; - - int nx[3]; - nx[0] = 15; - nx[1] = 10; - nx[2] = 10; - - double coarseNodeDx = 1.0; - double H = (double)(nx[2]*blocknx[2])/2.0; - double hLB = H/coarseNodeDx; - double nuLB = (uLB*hLB)/Re; - - int baseLevel = 0; - int refineLevel = 0;//2;//1;////3;//3 soll 1 test; - - ///////////////Weltabmessungen: - double blockLengthx1 = blocknx[0]*coarseNodeDx; //geowerte - double blockLengthx2 = blockLengthx1; - double blockLengthx3 = blockLengthx1; - - double originX1 = 0.0; - double originX2 = 0.0; - double originX3 = 0.0; - - //bounding box - double g_minX1 = originX1; - double g_minX2 = originX2; - double g_minX3 = originX3; - - double g_maxX1 = originX1 + 3.0*H; - double g_maxX2 = originX2 + 2.0*H; - double g_maxX3 = originX3 + 2.0*H; - - //double geoLength[] = { nx[0]*blockLengthx1, nx[1]*blockLengthx2, nx[2]*blockLengthx3}; - - bool periodicx1 = true; - bool periodicx2 = true; - bool periodicx3 = false; - - LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter()); - - Grid3DPtr grid(new Grid3D(comm)); - - ////////////////////////////////////////////////////////////////////////// - //restart - UbSchedulerPtr rSch(new UbScheduler(10000,10000,10000000)); - RestartPostprocessor rp(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY); - grid = rp.restart(-1); - ////////////////////////////////////////////////////////////////////////// - - if (grid->getTimeStep() == 0) - { - - //set grid - grid->setDeltaX(coarseNodeDx); - grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - grid->setPeriodicX1(periodicx1); - grid->setPeriodicX2(periodicx2); - grid->setPeriodicX3(periodicx3); - - - 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", WbWriterVtkXmlASCII::getInstance()); - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - - - //bottom and top solid bc - //iteractors - int bbOption1 = 1; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1)); - double geoOverlap = coarseNodeDx; - GbCuboid3DPtr bottomBCCuboid(new GbCuboid3D(g_minX1-blockLengthx1, g_minX2-blockLengthx1, g_minX3-blockLengthx1, g_maxX1+blockLengthx1, g_maxX2+blockLengthx1, g_minX3)); - if(myid == 0) GbSystem3D::writeGeoObject(bottomBCCuboid.get(), pathname+"/geo/bottomBCCuboid", WbWriterVtkXmlASCII::getInstance()); - D3Q27InteractorPtr bottomBCInteractor(new D3Q27Interactor(bottomBCCuboid,grid,bcObst,Interactor3D::SOLID)); - - GbCuboid3DPtr topBCCuboid(new GbCuboid3D(g_minX1-blockLengthx1, g_minX2-blockLengthx1, g_maxX3, g_maxX1+blockLengthx1, g_maxX2+blockLengthx1, g_maxX3+blockLengthx1)); - if(myid == 0) GbSystem3D::writeGeoObject(topBCCuboid.get(), pathname+"/geo/topBCCuboid", WbWriterVtkXmlASCII::getInstance()); - D3Q27InteractorPtr topBCInteractor(new D3Q27Interactor(topBCCuboid,grid,bcObst,Interactor3D::SOLID)); - //grid->addAndInitInteractor( bottomBCInteractor ); - // grid->addAndInitInteractor( topBCInteractor ); - ////////////////////////////////////////////////////////////////////////// - if(myid == 0) - { - UBLOG(logINFO, "*****************************************"); - UBLOG(logINFO, "* Parameters *"); - UBLOG(logINFO, "* Re ="<<Re); - //UBLOG(logINFO, "* Ma ="<<Ma); - //UBLOG(logINFO, "* uReal ="<<uReal); - //UBLOG(logINFO, "* nueReal ="<<nueReal); - UBLOG(logINFO, "* nue ="<<nuLB); - UBLOG(logINFO, "* velocity ="<<uLB); - // UBLOG(logINFO, "* LX1 (world/LB)="<<kanallaengeSI<<"/"<<kanallaengeSI/coarseNodeDx); - // UBLOG(logINFO, "* LX2 (world/LB)="<<kanalbreiteSI<<"/"<<kanalbreiteSI/coarseNodeDx); - //UBLOG(logINFO, "* LX3 (world/LB)="<<kanalhoeheSI<<"/"<<kanalhoeheSI/coarseNodeDx); - UBLOG(logINFO, "* cdx ="<<coarseNodeDx); - //UBLOG(logINFO, "* fdx ="<<fineNodeDx); - UBLOG(logINFO, "* dx_base ="<<coarseNodeDx<<" == "<<coarseNodeDx); - //UBLOG(logINFO, "* dx_refine ="<<fineNodeDx<<" == "<<fineNodeDx ); - //UBLOG(logINFO, "* nx1/2/3 ="<<nx[0]<<"/"<<nx[1]<<"/"<<nx[2]); - UBLOG(logINFO, "* blocknx1/2/3 ="<<blocknx[0]<<"/"<<blocknx[1]<<"/"<<blocknx[2]); - UBLOG(logINFO, "* x2Periodic ="<<periodicx2); - UBLOG(logINFO, "* x3Periodic ="<<periodicx3); - UBLOG(logINFO, "* number of threads ="<<numOfThreads); - UBLOG(logINFO, "* number of processes ="<<comm->getNumberOfProcesses()); - UBLOG(logINFO, "*****************************************"); -/* UBLOGML(logINFO, "UnitConverter:"<<unitConverter->toString()); - UBLOG(logINFO, "*****************************************"); */ - } - - if(myid == 0) UBLOG(logINFO,"Refinement - start"); - - ////////////////////////////////////////////////////////////////////////// - // refine - ////////////////////////////////////////////////////////////////////////// - //GbCuboid3DPtr wallsX1X2minRef3(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , originX3-3.0*geoOverlap - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.6/*0.55*/)); - - //GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap ,kanalhoeheSI*0.49 - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.53)); - - //GbCuboid3DPtr wallsX1X2maxRef2(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap ,kanalhoeheSI*0.9 - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], originX3+geoOverlap+geoLength[2])); - - //GbCuboid3DPtr wallsX1X2maxRef1(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap ,kanalhoeheSI*0.95 - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], originX3+geoOverlap+geoLength[2])); - - //if (refineLevel > 0) - //{ - - // RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel); - // refineHelper.addGbObject(wallsX1X2minRef3, refineLevel-1); - // refineHelper.addGbObject(wallsX1X2minRef4, refineLevel); - // refineHelper.addGbObject(wallsX1X2maxRef2, refineLevel-1); - // refineHelper.addGbObject(wallsX1X2maxRef1, refineLevel); - - // refineHelper.refine(); - // if(myid == 0) UBLOG(logINFO,"Refinement - end"); - //} - - ///interactoren - //int bbOption1 = 0; //0=simple Bounce Back, 1=quadr. BB - //D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1)); - ///////w�rfel unten version ende - //////////////////////////////////////////////////////////////////////////////// - ////////PM grid - //Tempor�r: - //double H=1.0; - - vector<D3Q27InteractorPtr> D3Q27InteractorPtrarray; - //////////////////////////////////////////////////////////////////////////////// - double dpCubes=(double)H/20.0; - double distanceXY=dpCubes/2.0-coarseNodeDx*0.5; - double distanceZ=0; - - for (int x = 0; x<30; x++) - for (int y = 0; y<20; y++) - for (int z = 0; z<9; z++) - { - double xminCubes = originX1+distanceXY+2.0*dpCubes*x; - double yminCubes = originX2+distanceXY+2.0*dpCubes*y; - double zminCubes = originX3+distanceZ+2.0*dpCubes*z; - double xmaxCubes = xminCubes+dpCubes; - double ymaxCubes = yminCubes+dpCubes; - double zmaxCubes = zminCubes+dpCubes; - GbCuboid3DPtr rectTemp(new GbCuboid3D(xminCubes, yminCubes, zminCubes, xmaxCubes, ymaxCubes, zmaxCubes)); - D3Q27BoundaryConditionAdapterPtr cubeBCAdapter(new D3Q27NoSlipBCAdapter()); - D3Q27InteractorPtr cubeInteractor( new D3Q27Interactor(rectTemp,grid,cubeBCAdapter,Interactor3D::SOLID)); - D3Q27InteractorPtrarray.push_back(cubeInteractor); - } - - //////////////// - //ende cubes - ////////// - //////////////////////////////////////////// - //METIS - Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B)); - - //////////////////////////////////////////// - /////delete solid blocks - if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - intHelper.addInteractor(topBCInteractor); - intHelper.addInteractor(bottomBCInteractor); - for(size_t i=0; i<D3Q27InteractorPtrarray.size(); ++i) - { - intHelper.addInteractor(D3Q27InteractorPtrarray[i]); - } - intHelper.selectBlocks(); - if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end"); - ////////////////////////////////////// - - //domain decomposition for threads - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - if(myid == 0) UBLOG(logINFO,"Write blocks - start"); - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm)); - if(myid == 0) ppblocks->update(0); - if(myid == 0) UBLOG(logINFO,"Write blocks - end"); - - unsigned long nob = grid->getNumberOfBlocks(); - unsigned long nod = nob * blocknx[0]*blocknx[1]*blocknx[2]; - unsigned long nod_real = nob * (blocknx[0]+3)*(blocknx[1]+3)*(blocknx[2]+3); - - double needMemAll = double(nod_real*(27*sizeof(double) + sizeof(int))); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - if(myid == 0) - { - UBLOG(logINFO,"Number of blocks = " << nob); - UBLOG(logINFO,"Number of nodes = " << nod); - UBLOG(logINFO,"Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO,"Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO,"Available memory per process = " << availMem << " bytes"); - } - - LBMKernel3DPtr kernel; - kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL)); - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - kernel->setBCProcessor(bcProc); - - mu::Parser fctForcingX1; - fctForcingX1.SetExpr("Fx1*dx"); - fctForcingX1.DefineConst("Fx1", 0.6*5.0e-6);//9.99685e-7); - - kernel->setForcingX1(fctForcingX1); - kernel->setWithForcing(true); - - SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem); - grid->accept(kernelVisitor); - - ////////////////////////////////// - //undef nodes - if (refineLevel > 0) - { - D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - ////////////////////////////////////////// - intHelper.setBC(); - - for(size_t i=0; i<D3Q27InteractorPtrarray.size(); ++i) - { - grid->addAndInitInteractor( D3Q27InteractorPtrarray[i] ); - char numstr[21]; - sprintf(numstr, "%f", (double)i); - std::string pathObstCube = pathname+"/geo/obstBCCuboid"+ numstr; - if(myid == 0) GbSystem3D::writeGeoObject(D3Q27InteractorPtrarray[i]->getGbObject3D().get(), - /* rectTemp.get(),*/ pathObstCube, WbWriterVtkXmlASCII::getInstance()); - } - - - ppblocks.reset(); - - //inflow - mu::Parser inflowProfile; - inflowProfile.SetExpr("uLB*0.9"); - inflowProfile.DefineConst("uLB",uLB); - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - grid->accept( setConnsVisitor ); - - //initialization of decompositions - D3Q27ETInitDistributionsBlockVisitor initVisitor( nuLB,rhoLB); - initVisitor.setVx1(inflowProfile); - grid->accept(initVisitor); - - //Postrozess - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), - unitConverter,true)); - - ppgeo->update(0); - ppgeo.reset(); - geoSch.reset(); - - if(myid == 0) UBLOG(logINFO,"Preprozess - end"); - - } - else - { - //set forcing - mu::Parser fctForcingX1, fctForcingX2, fctForcingX3; - fctForcingX1.SetExpr("Fx1*dx"); - fctForcingX1.DefineConst("Fx1", 0.6*5.0e-6); - fctForcingX2.SetExpr("0.0"); - fctForcingX3.SetExpr("0.0"); - SetForcingBlockVisitor forcingVisitor(fctForcingX1, fctForcingX2, fctForcingX3); - grid->accept(forcingVisitor); - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - grid->accept( setConnsVisitor ); - if(myid == 0) UBLOG(logINFO,"Restart - end"); - } - - - UbSchedulerPtr visSch(new UbScheduler()); - visSch->addSchedule(100,100,1000); - visSch->addSchedule(1000,1000,10000); - visSch->addSchedule(10000,10000,100000); - //visSch->addSchedule(20000,20000,800000); - //visSch->addSchedule(50,350000,350500); - //visSch->addSchedule(50,420000,420500); - //visSch->addSchedule(50000,420500,10000000); - //visSch->addSchedule(2250,140000,450001); - //UbSchedulerPtr resSch(new UbScheduler()); - //resSch->addSchedule(20000,20,10000000); - //UbSchedulerPtr resSchRMS(new UbScheduler()); - //resSchRMS->addSchedule(40000,420000,10000000); - //UbSchedulerPtr resSchMeans(new UbScheduler()); - //resSchMeans->addSchedule(40000,0,10000000); - //UbSchedulerPtr stepAvSch(new UbScheduler()); - //stepAvSch->addSchedule(20,0,10000000); - //AverageValuesPostprocessor Avpp(grid, pathname + "/steps/stepAV", WbWriterVtkXmlBinary::getInstance(), - // visSch/*wann wird rausgeschrieben*/, stepAvSch/*wann wird gemittelt*/, resSchMeans, resSchRMS/*wann wird resettet*/); - - D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), unitConverter); - - UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); - NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm); - - - UbSchedulerPtr AdjForcSch(new UbScheduler()); - AdjForcSch->addSchedule(100,100,20000000); - //D3Q27IntegrateValuesHelperPtr IntValHelp(new D3Q27IntegrateValuesHelper(grid, comm, - // originX1, originX2, kanalhoeheSI*0.55/*0.501*/, - // nx[0]*blockLengthx1, nx[1]*blockLengthx2, kanalhoeheSI*0.999)); - D3Q27IntegrateValuesHelperPtr IntValHelp(new D3Q27IntegrateValuesHelper(grid, comm, - originX1, originX2, g_maxX3*0.55/*0.501*/, - g_maxX1, g_maxX2, g_maxX3*0.999)); - - double vxZiel=uLB; - //D3Q27AdjustForcingPostprocessor AdjForcPPPtr(grid, AdjForcSch,IntValHelp, vxZiel*0.6, comm);//da am 11.3.2013 velo um 1/0.6 zu hoch - D3Q27AdjustForcingPostprocessor AdjForcPPPtr(grid, AdjForcSch,IntValHelp, vxZiel, comm);//dies sollte zu Re=5500 fuehren.. - - UbSchedulerPtr visQSch(new UbScheduler()); - visQSch->addSchedule(10,90100,90130); - QCriterionPostprocessor QKritPtr(grid,pathname+"/steps/Qq",WbWriterVtkXmlBinary::getInstance(),visQSch, comm); - - //mu::Parser decrViscFunc; - //decrViscFunc.SetExpr("nue0+c0/(t+1)/(t+1)"); - //decrViscFunc.DefineConst("nue0", nuLB); - //decrViscFunc.DefineConst("c0", 0.1); - //UbSchedulerPtr DecrViscSch(new UbScheduler()); - //DecrViscSch->addSchedule(10,10,1000); - //DecreaseViscosityPostprocessor decrViscPPPtr(grid, DecrViscSch,&decrViscFunc, comm); - - cout << "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()<<endl; - cout << "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()<<endl; - cout << "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()<<endl; - - double endTime = 2000000;//20000001; - 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[]) -{ - - run(argv[1]); - - return 0; -} - diff --git a/apps/cpu/bKanalAv/CMakeLists.txt b/apps/cpu/bKanalAv/CMakeLists.txt deleted file mode 100644 index 5ea13434aa29131f70b73a83f385085e5995e85f..0000000000000000000000000000000000000000 --- a/apps/cpu/bKanalAv/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(bKanalAv) - -INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(bKanalAv BINARY) diff --git a/apps/cpu/bKanalAv/bKanal.cpp b/apps/cpu/bKanalAv/bKanal.cpp deleted file mode 100644 index 27bf3c1a61f1d429e60a057a74479ad306098826..0000000000000000000000000000000000000000 --- a/apps/cpu/bKanalAv/bKanal.cpp +++ /dev/null @@ -1,738 +0,0 @@ - - -#include <iostream> -#include <string> -#include <math.h> - -#include <sys/types.h> //mkdir rights -#include <sys/stat.h> //mkdir -#include <vfluids.h> - -using namespace std; - - -void run(const char *cstr) -{ - try - { - string machine = QUOTEME(CAB_MACHINE); - UBLOG(logINFO,"Testcase BreugemChannel"); - string pathname; - string pathnameRestart; - string pathGeo; - int numOfThreads =1; - bool logfile = false; - stringstream logFilename; - double availMem = 0; - - UbLog::reportingLevel() = logINFO; - - CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - - pathname = "./"; - //pathnameRestart = "/gfs1/work/niivfcpu/scratch/kucher/BKanaltest";//BKanaltest0Ref2up0612";//BKanaltest0Ref2up1012Out"; - //pathname = "/work/koskuche/SFB880/BKanaltestRe260000Out"; - //pathnameRestart = "/work/koskuche/SFB880/BKanaltestRe260000";//BKanaltest0Ref2up0612";//BKanaltest0Ref2up1012Out"; - - //pathGeo = "/home/koskuche/data/plate"; - numOfThreads = 1; - availMem = 64.0e9; - logfile = true; - -// if (myid==0) -// { -// const char* str = pathname.c_str(); -//#if defined(__unix__) -// int status=mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); -//#endif -// -// } -// -// if(myid ==0) -// { -// logFilename << pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt"; -// } - - - - - //if(myid ==0 && logfile) - //{ - UbLog::output_policy::setStream(logFilename.str()); - //} - - int baseLevel, refineLevel,nx[3],blocknx[3]; - double Re,velocity,rhoInit,vx1Init;//,vx2Init,vx3Init; - - ////////////////////////////////////////////////////////////////////////// - //physik - ////////////////////////////////////////////////////////////////////////// - Re = 5500;// 13286;//13286;//gemessen 18.98 m/s...*5.0 zum testen ob was passiert - velocity = 0.01; - vx1Init = 0.01; - rhoInit = 0.0; - SimulationParametersPtr param = SimulationParameters::getInstanz(); - - int H=200;//200;//392; - - // nx[0] =8;//ok mit 8// (int)(3.0*(double)H/8.0/8.0);//2;// (int)(0.3*(double)H/6.0/4.0);//das "/4" hier ist wegen der verfeinerung da! //l�nge - // nx[1] =8;//ok mit 8// (int)(2.0*(double)H/8.0/8.0);//2;// (int)(0.2*(double)H/6.0/4.0);// //breite - nx[2] = (int)(2.0*(double)H/5.0/8.0);// //h�he gebiet - - //(3/2/2)-ratio: - nx[1]=nx[2]; - nx[0]=15; - - blocknx[0] = 15;//10;//5; - blocknx[1] = 15;//10;//5; - blocknx[2] = 15;//10;//5; - - baseLevel = 0; - refineLevel = 2;//1;////3;//3 soll 1 test; - - - ///////////////Weltabmessungen: - //double kanallaengeSI = ( 2.0*(double)H); - // double kanalbreiteSI = ( 1.0*(double)H); - double kanalhoeheSI = ( 2.0*(double)H); - - // double refinewidth1=kanalhoeheSI/10.0; - - double fineNodeDx = (kanalhoeheSI) / (double)( blocknx[2]*nx[2]*(1<<refineLevel)+1 ); //+1--> gitter liegt jeweils 0.5dx innerhalb - double coarseNodeDx = fineNodeDx * (double)(1<<refineLevel);//geowerte - - double blockLengthx1 = blocknx[0]*coarseNodeDx; //geowerte - double blockLengthx2 = blockLengthx1; - double blockLengthx3 = blockLengthx1; - - double originX1 = 0.0;//-50.0*propellerDurchmesser; //geowerte - double originX2 = 0.0;//-0.5*blockLengthx2*nx2; - double originX3 = 0.0;// minX3 + 0.5*fineNodeDx; - - double geoLength[] = { nx[0]*blockLengthx1, nx[1]*blockLengthx2, nx[2]*blockLengthx3}; - - bool periodicx1 = true; - bool periodicx2 = true; - bool periodicx3 = false; - - - //########################################################################## - //## physical parameters - //########################################################################## - double smagorinskiConstant = 0.18; - - - double rhoLB = 0.0; - - double rhoReal = 1.0; - double nueReal = 1;//0.000016;//0.015; - - double hReal = blocknx[2]*nx[2];//H*0.9;//0.0105;//<-m 1.05;//Plattendicke in cm(! cm nicht m !) - double uReal = Re*nueReal/hReal; - - //##Machzahl: - //#Ma = uReal/csReal - double csReal=343.0; - double Ma = uReal/csReal;//Ma-Real! - //double csReal = uReal/Ma; - double hLB = hReal/coarseNodeDx; - - LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter(hReal, csReal, rhoReal, hLB)); - - double uLB = uReal * unitConverter->getFactorVelocityWToLb(); - double nueLB = nueReal * unitConverter->getFactorViscosityWToLb(); - double timestep = unitConverter->getFactorTimeLbToW(coarseNodeDx); - - velocity = uLB; - // double viscosity =nueLB*1000.0; - - Grid3DPtr grid(new Grid3D(comm)); - //UbSchedulerPtr rSch(new UbScheduler(10000,100000,30000000000));//(50000,50000,1000000)); - //UbSchedulerPtr rSch(new UbScheduler(18000,268250,770000));//(50000,50000,1000000)); - //RestartPostprocessor rp(grid, rSch, comm, pathnameRestart+"/checkpoints", RestartPostprocessor::BINARY); - - ////////////////////////////////////////////////////////////////////////// - - std::string opt; - -// if(cstr!= NULL) -// opt = std::string(cstr); -// -// if(/*(cstr== NULL)*/cstr!= NULL) -// { -// opt = std::string(cstr); -// -// if(myid==0) { -// UBLOG(logINFO,"Restart step: " << opt); -// UBLOG(logINFO, "Restart=:" << pathnameRestart); -// } -// -// grid = rp.restart(UbSystem::stringTo<int>(opt)); -// rp.reconnect(grid); -// -//// mu::Parser fctForcingX1, fctForcingX2, fctForcingX3; -//// fctForcingX1.SetExpr("Fx1*dx"); -//// fctForcingX1.DefineConst("Fx1", 0.6*5.0e-6); -//// -//// SetForcingBlockVisitor forcingVisitor(fctForcingX1, fctForcingX2, fctForcingX3); -//// grid->accept(forcingVisitor); -// -// //set connectors -// D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); -// D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); -// grid->accept( setConnsVisitor ); -// -// } -// else -// { - //bounding box - double g_minX1 = originX1; - double g_minX2 = originX2; - double g_minX3 = originX3; - - double g_maxX1 = originX1 + geoLength[0]; - double g_maxX2 = originX2 + geoLength[1]; - double g_maxX3 = originX3 + geoLength[2]; - - //set grid - grid->setDeltaX(coarseNodeDx); - grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - grid->setPeriodicX1(periodicx1); - grid->setPeriodicX2(periodicx2); - grid->setPeriodicX3(periodicx3); - - - 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", WbWriterVtkXmlASCII::getInstance()); - - //GenBlocksGridVisitor genBlocks; - //genBlocks.addGeoObject(gridCube); - //grid->accept(genBlocks); - - - - //bottom and top solid bc - //iteractors - int bbOption1 = 1; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1)); - double geoOverlap = coarseNodeDx; - GbCuboid3DPtr bottomBCCuboid(new GbCuboid3D(originX1-geoOverlap, originX2-geoOverlap, originX3-geoOverlap, - originX1+geoLength[0]+coarseNodeDx, originX2+geoLength[1]+geoOverlap, originX3)); - if(myid == 0) GbSystem3D::writeGeoObject(bottomBCCuboid.get(), pathname+"/geo/bottomBCCuboid", WbWriterVtkXmlASCII::getInstance()); - D3Q27InteractorPtr bottomBCInteractor(new D3Q27Interactor(bottomBCCuboid,grid,bcObst,Interactor3D::SOLID)); - - GbCuboid3DPtr topBCCuboid(new GbCuboid3D(originX1-geoLength[0]-coarseNodeDx, originX2-geoOverlap, originX3+geoLength[2],//-coarseNodeDx*0.5, - originX1+geoLength[0]+coarseNodeDx, originX2+geoLength[1]+geoOverlap, originX3+geoLength[2]+geoOverlap)); - if(myid == 0) GbSystem3D::writeGeoObject(topBCCuboid.get(), pathname+"/geo/topBCCuboid", WbWriterVtkXmlASCII::getInstance()); - D3Q27InteractorPtr topBCInteractor(new D3Q27Interactor(topBCCuboid,grid,bcObst,Interactor3D::SOLID)); - //grid->addAndInitInteractor( bottomBCInteractor ); - // grid->addAndInitInteractor( topBCInteractor ); - ////////////////////////////////////////////////////////////////////////// - if(myid == 0) - { - UBLOG(logINFO, "*****************************************"); - UBLOG(logINFO, "* Parameters *"); - UBLOG(logINFO, "* Re ="<<Re); - UBLOG(logINFO, "* Ma ="<<Ma); - UBLOG(logINFO, "* uReal ="<<uReal); - UBLOG(logINFO, "* nueReal ="<<nueReal); - UBLOG(logINFO, "* nue ="<<nueLB); - UBLOG(logINFO, "* velocity ="<<uLB); - // UBLOG(logINFO, "* LX1 (world/LB)="<<kanallaengeSI<<"/"<<kanallaengeSI/coarseNodeDx); - // UBLOG(logINFO, "* LX2 (world/LB)="<<kanalbreiteSI<<"/"<<kanalbreiteSI/coarseNodeDx); - UBLOG(logINFO, "* LX3 (world/LB)="<<kanalhoeheSI<<"/"<<kanalhoeheSI/coarseNodeDx); - UBLOG(logINFO, "* cdx ="<<coarseNodeDx); - UBLOG(logINFO, "* fdx ="<<fineNodeDx); - UBLOG(logINFO, "* dx_base ="<<coarseNodeDx<<" == "<<coarseNodeDx); - UBLOG(logINFO, "* dx_refine ="<<fineNodeDx<<" == "<<fineNodeDx ); - UBLOG(logINFO, "* nx1/2/3 ="<<nx[0]<<"/"<<nx[1]<<"/"<<nx[2]); - UBLOG(logINFO, "* blocknx1/2/3 ="<<blocknx[0]<<"/"<<blocknx[1]<<"/"<<blocknx[2]); - UBLOG(logINFO, "* x2Periodic ="<<periodicx2); - UBLOG(logINFO, "* x3Periodic ="<<periodicx3); - UBLOG(logINFO, "*****************************************"); - UBLOGML(logINFO, "UnitConverter:"<<unitConverter->toString()); - UBLOG(logINFO, "*****************************************"); - } - - if(myid == 0) UBLOG(logINFO,"Refinement - start"); - - ////////////////////////////////////////////////////////////////////////// - // refine - ////////////////////////////////////////////////////////////////////////// - //GbCuboid3DPtr wallsX1X2maxRef1( new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , kanalhoeheSI*0.95 - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormax1(wallsX1X2maxRef1, 0,refineLevel-3); - //grid->accept(refineVisitormax1); - // - //GbCuboid3DPtr wallsX1X2minRef1(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , kanalhoeheSI*0.55 - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.47)); - // RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin1(wallsX1X2minRef1, 0,refineLevel-3); - // grid->accept(refineVisitormin1); - - // GbCuboid3DPtr wallsX1X2maxRef2(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , kanalhoeheSI - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.98)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormax2(wallsX1X2maxRef2, 0,refineLevel-2); - //grid->accept(refineVisitormax2); - // GbCuboid3DPtr wallsX1X2maxRef2(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , kanalhoeheSI - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.9)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormax2(wallsX1X2maxRef2, 0,refineLevel-2); - //grid->accept(refineVisitormax2); - - // GbCuboid3DPtr wallsX1X2maxRef3(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , kanalhoeheSI - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.9995)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormax3(wallsX1X2maxRef3, 0,refineLevel-1); - //grid->accept(refineVisitormax3); - - // GbCuboid3DPtr wallsX1X2minRefl3(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , originX3-3.0*geoOverlap - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.25)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitorminl3(wallsX1X2minRefl3, 0,refineLevel-3); - //grid->accept(refineVisitorminl3); - /////w�rfel unten version - // GbCuboid3DPtr wallsX1X2minRef2(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , originX3-3.0*geoOverlap - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.2)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin2(wallsX1X2minRef2, 0,refineLevel-2); - //grid->accept(refineVisitormin2); - - // GbCuboid3DPtr wallsX1X2minRef3(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , kanalhoeheSI*0.04 - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.18)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin3(wallsX1X2minRef3, 0,refineLevel-1); - //grid->accept(refineVisitormin3); - - // GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , kanalhoeheSI*0.09 - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.16)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin4(wallsX1X2minRef4, 0,refineLevel); - //grid->accept(refineVisitormin4); - - - - - /////w�rfel anfang version - // GbCuboid3DPtr wallsX1X2minRef2(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , originX3-3.0*geoOverlap - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.56)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin2(wallsX1X2minRef2, 0,refineLevel-2); - //grid->accept(refineVisitormin2); - - // GbCuboid3DPtr wallsX1X2minRef3(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , originX3-3.0*geoOverlap - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.55)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin3(wallsX1X2minRef3, 0,refineLevel-2); - //grid->accept(refineVisitormin3); - - // GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap ,kanalhoeheSI*0.49 - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.53)); - //RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin4(wallsX1X2minRef4, 0,refineLevel-1); - //grid->accept(refineVisitormin4); - - - /* GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , originX1-3.0*geoOverlap - , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.1)); - RefineCrossAndInsideGbObjectBlockVisitor refineVisitormin4(wallsX1X2minRef4, 0,refineLevel-1); - grid->accept(refineVisitormin4);*/ - - ////GbCuboid3DPtr refine1PlatteCube(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , x3minMesh-H3 - //// , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3)); - ////RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP1(refine1PlatteCube, baseLevel, refineLevel-6); - ////grid->accept(refineAdapterP1); - - //GbCuboid3DPtr refine2PlatteCube(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , x3minMesh-H3*0.5 - // , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3)); - //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP2(refine2PlatteCube, baseLevel, refineLevel-5); - //grid->accept(refineAdapterP2); - - //GbCuboid3DPtr refine3PlatteCube(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , x3minMesh-H3*0.5 - // , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.5)); - //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP3(refine3PlatteCube, baseLevel, refineLevel-4); - //grid->accept(refineAdapterP3); - - //GbCuboid3DPtr refine4PlatteCube(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , x3minMesh+deltaX3Platte*0.0 - // , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.25)); - //if(myid == 0) GbSystem3D::writeGeoObject(refine4PlatteCube.get(), pathname+"/geo/refine4PlatteCube", WbWriterVtkXmlASCII::getInstance()); - //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP4(refine4PlatteCube, baseLevel, refineLevel-3); - //grid->accept(refineAdapterP4); - - //GbCuboid3DPtr refine5PlatteCube(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap ,x3minMesh+deltaX3Platte*0.1/* x3minMesh+deltaX3Platte*0.8*/ - // , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.00375)); - //if(myid == 0) GbSystem3D::writeGeoObject(refine5PlatteCube.get(), pathname+"/geo/refine5PlatteCube", WbWriterVtkXmlASCII::getInstance()); - //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP5(refine5PlatteCube, baseLevel, refineLevel-2); - //grid->accept(refineAdapterP5); - - - //GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , originX1-3.0*geoOverlap - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.1)); - - GbCuboid3DPtr wallsX1X2minRef3(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , originX3-3.0*geoOverlap - , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.6/*0.55*/)); - - GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap ,kanalhoeheSI*0.49 - , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.53)); - - GbCuboid3DPtr wallsX1X2maxRef2(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap ,kanalhoeheSI*0.9 - , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], originX3+geoOverlap+geoLength[2])); - - GbCuboid3DPtr wallsX1X2maxRef1(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap ,kanalhoeheSI*0.95 - , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], originX3+geoOverlap+geoLength[2])); - - //if (refineLevel > 0) - //{ - - // RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel); - // refineHelper.addGbObject(wallsX1X2minRef3, refineLevel-1); - // refineHelper.addGbObject(wallsX1X2minRef4, refineLevel); - // refineHelper.addGbObject(wallsX1X2maxRef2, refineLevel-1); - // refineHelper.addGbObject(wallsX1X2maxRef1, refineLevel); - - // refineHelper.refine(); - // if(myid == 0) UBLOG(logINFO,"Refinement - end"); - //} - - ///interactoren - //int bbOption1 = 0; //0=simple Bounce Back, 1=quadr. BB - //D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1)); - ///////w�rfel unten version ende - //////////////////////////////////////////////////////////////////////////////// - ////////PM grid - //Tempor�r: - //double H=1.0; - - //vector<D3Q27InteractorPtr> D3Q27InteractorPtrarray; - - double newDx = fineNodeDx;///2.0; - int geoNX1=(int)(600.0/newDx)-1; - int geoNX2=(int)(400.0/newDx)-1; - int geoNX3=(int)((398.0+newDx*2)/newDx); - GbVoxelMatrix3D geoMatrix(geoNX1,geoNX2,geoNX3,0); - geoMatrix.setVoxelMatrixDelta(newDx, newDx, newDx); - double m_minX1 = 0 - newDx/2.0; - double m_minX2 = 0 - newDx/2.0; - double m_minX3 = 0.666 + newDx/2.0; - geoMatrix.setVoxelMatrixMininum(m_minX1, m_minX2, m_minX3); - - //geoMatrix.writeToVTKImageDataASCII(pathname + "/geo/geoMatrix"); - //return; - - CoordinateTransformation3D trafo(m_minX1, m_minX2, m_minX3, newDx, newDx, newDx); - - //////////////////////////////////////////////////////////////////////////////// - double inflowCubeDx = coarseNodeDx;///(double)(1<<inflowCubeLevel); - double dpCubes=(double)H/20.0;//100.0; //30zum testen 100real - double offsetZgrid=H+0.5*inflowCubeDx; - double epschoch1drittel= 0.928318; - double abstandIn=2.0*dpCubes; - double c1oAbst=1.0/abstandIn; - - UBLOG(logINFO,"cubes:start"); - - for (int Nflowdir=0;Nflowdir<((nx[0]*blocknx[0]*c1oAbst)*coarseNodeDx); Nflowdir++) - { - // for (int Nhorizon=((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5-2; Nhorizon<((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5-1-1; Nhorizon++) - // { - // for (int Nhorizon=0; Nhorizon<(((nx[2]*blocknx[2]+1)*c1oAbst)*coarseNodeDx)*0.1; Nhorizon++)//Nhorizon<((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5; Nhorizon++) - for (int Nhorizon=0; Nhorizon<(((nx[2]*blocknx[2]+1)*c1oAbst)*coarseNodeDx)*0.5-1; Nhorizon++)//Nhorizon<((nx[2]*blocknx[2]*c1oAbst)*coarseNodeDx)*0.5; Nhorizon++) - - { - for (int Nspanw=0; Nspanw<((nx[1]*blocknx[1]*c1oAbst)*coarseNodeDx); Nspanw++) - { - // stringstream ss; - // ss<<"cubeH"<<Nflowdir<<"x"<<Nhorizon<<"x"<<Nspanw; - //// // //geoOrigin ist Mitte, nicht vordere Ecke -> korrigieren - // int Nflowdir=1; - //int Nhorizon=0; - //int Nspanw=1; - double xminCubes1=originX1+(Nflowdir*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1); - double xmaxCubes1=originX1+(Nflowdir*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1); - double xminCubes=std::max(xminCubes1,2.0*coarseNodeDx/pow(2.0,refineLevel)); - double xmaxCubes=std::min(xmaxCubes1,originX1+geoLength[0]-coarseNodeDx/pow(2.0,refineLevel)); - double yminCubes=std::max(originX2+(Nspanw*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1),2.0*coarseNodeDx/pow(2.0,refineLevel)); - double ymaxCubes=std::min(originX2+(Nspanw*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx+3.0*coarseNodeDx/pow(2.0,refineLevel-1),originX2+geoLength[1]-coarseNodeDx/pow(2.0,refineLevel)); - double zminCubes=std::max(originX3+(Nhorizon*abstandIn)+4.0*coarseNodeDx/pow(2.0,refineLevel-1),2.0*coarseNodeDx/pow(2.0,refineLevel)); - double zmaxCubes=std::min(originX3+(Nhorizon*abstandIn)+dpCubes+4.0*coarseNodeDx/pow(2.0,refineLevel-1),originX3+geoLength[2]-coarseNodeDx/pow(2.0,refineLevel)); - //// /*GbCuboid3D *rectTemp = new GbCuboid3D(originX1+(Nflowdir*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx, originX2+(Nspanw*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx, originX3+(Nhorizon*abstandIn)-0.5*dpCubes+0.5*inflowCubeDx, - //// originX1+(Nflowdir*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx, originX2+(Nspanw*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx, originX3+(Nhorizon*abstandIn)+0.5*dpCubes+0.5*inflowCubeDx ); - ////*/ - //// - //GbCuboid3DPtr rectTemp(new GbCuboid3D(xminCubes, yminCubes, zminCubes, xmaxCubes, ymaxCubes, zmaxCubes)); - - double x1min = trafo.transformForwardToX1Coordinate( xminCubes, yminCubes, zminCubes ); - double x2min = trafo.transformForwardToX2Coordinate( xminCubes, yminCubes, zminCubes ); - double x3min = trafo.transformForwardToX3Coordinate( xminCubes, yminCubes, zminCubes ); - - int ix1min, ix2min, ix3min; - - if (x1min-(int)x1min>.9999999999) ix1min=(int)x1min+1;else ix1min=(int)x1min; - if (x2min-(int)x2min>.9999999999) ix2min=(int)x2min+1;else ix2min=(int)x2min; - if (x3min-(int)x3min>.9999999999) ix3min=(int)x3min+1;else ix3min=(int)x3min; - - double x1max = trafo.transformForwardToX1Coordinate( xmaxCubes, ymaxCubes, zmaxCubes ); - double x2max = trafo.transformForwardToX2Coordinate( xmaxCubes, ymaxCubes, zmaxCubes ); - double x3max = trafo.transformForwardToX3Coordinate( xmaxCubes, ymaxCubes, zmaxCubes ); - - int ix1max, ix2max, ix3max; - - if (x1max-(int)x1max>.9999999999) ix1max=(int)x1max+1;else ix1max=(int)x1max; - if (x2max-(int)x2max>.9999999999) ix2max=(int)x2max+1;else ix2max=(int)x2max; - if (x3max-(int)x3max>.9999999999) ix3max=(int)x3max+1;else ix3max=(int)x3max; - - for (int z = ix3min+1; z <= ix3max; z++) - for (int y = ix2min+1; y <= ix2max; y++) - for (int x = ix1min+1; x <= ix1max; x++) - { - geoMatrix(x,y,z)=GbVoxelMatrix3D::SOLID; - } - - - //// - // ostringstream ostrcubes; - // ostrcubes<<pathname <<"/cubeH"<<Nflowdir<<"x"<<Nhorizon<<"x"<<Nspanw; - //// - //// - //// // GbSystem3D::writeGeoObject(rectTemp,outpath+cubeschar,WbWriterAvsASCII::getInstance()); - //// GbSystem3D::writeGeoObject(rectTemp,ostrcubes.str(),WbWriterAvsASCII::getInstance()); //?? - // ostrcubes.str(""); - // ostrcubes.clear(); - - //// boost::shared_ptr<D3Q19AMRInteractor> interactorTemp( new D3Q19AMRInteractor( rectTemp,new D3Q19NoSlipBCAdapter(),AMR3DInteractor::SOLID,ss.str()) ); - // // interactorService.addInteractor(interactorTemp); - //D3Q27BoundaryConditionAdapterPtr cubeBCAdapter(new D3Q27NoSlipBCAdapter()); //D3Q27DensityBCAdapter(rhoInit)); - //D3Q27InteractorPtr cubeInteractor( new D3Q27Interactor(rectTemp,grid,cubeBCAdapter,Interactor3D::SOLID)); - //D3Q27InteractorPtrarray.push_back(cubeInteractor); - - - } - }} - //////////////// - //ende cubes - ////////// - UBLOG(logINFO,"cubes:end"); - - UBLOG(logINFO,"write geo matrix:start"); - //geoMatrix.writeToLegacyVTKBinary(pathname + "/geo/geoMatrix"); - geoMatrix.writeToVTKImageDataASCII(pathname + "/geo/geoMatrix"); - UBLOG(logINFO,"write geo matrix:end"); - - //////////////////////////////////////////// - // //METIS - // MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B); - // grid->accept( metisVisitor ); - - - // //////////////////////////////////////////// - // /////delete solid blocks - // if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - start"); - // SolidBlocksHelper sd(grid, comm); - - // sd.addInteractor(topBCInteractor); - // sd.addInteractor(bottomBCInteractor); - // for(size_t i=0; i<D3Q27InteractorPtrarray.size(); ++i) - // { - // sd.addInteractor(D3Q27InteractorPtrarray[i]); - // } - // sd.deleteSolidBlocks(); - // if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end"); - // ////////////////////////////////////// - // grid->accept( metisVisitor ); - - // sd.setTransBlocks(); - - - // unsigned long nob = grid->getNumberOfBlocks(); - // unsigned long nod = nob * blocknx[0]*blocknx[1]*blocknx[2]; - // unsigned long nod_real = nob * (blocknx[0]+3)*(blocknx[1]+3)*(blocknx[2]+3); - - // double needMemAll = double(nod_real*(27*sizeof(double) + sizeof(int))); - // double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - // if(myid == 0) - // { - // UBLOG(logINFO,"Number of blocks = " << nob); - // UBLOG(logINFO,"Number of nodes = " << nod); - // UBLOG(logINFO,"Necessary memory = " << needMemAll << " bytes"); - // UBLOG(logINFO,"Necessary memory per process = " << needMem << " bytes"); - // UBLOG(logINFO,"Available memory per process = " << availMem << " bytes"); - // } - - // LBMKernel3DPtr kernel; - // kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL)); - - // // LBMKernel3DPtr kernel(new LBMKernelETD3Q27CascadedTI(blocknx[0], blocknx[1], blocknx[2])); - // //LBMKernel3DPtr kernel(new LBMKernelETD3Q27BGK(blocknx[0], blocknx[1], blocknx[2],1)); - // BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - // kernel->setBCProcessor(bcProc); - // // //scheint neuerdings fuer absturz zu sorgen: - // mu::Parser fctForcingX1; - // fctForcingX1.SetExpr("Fx1*dx"); - // fctForcingX1.DefineConst("Fx1", 0.6*5.0e-6);//9.99685e-7); - - // kernel->setForcingX1(fctForcingX1); - // kernel->setWithForcing(true); - - // SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem); - - // grid->accept(kernelVisitor); - - // ////////////////////////////////// - // //undef nodes - // if (refineLevel > 0) - // { - // D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - // grid->accept(undefNodesVisitor); - // } - // ////////////////////////////////////////// - - // grid->addAndInitInteractor( bottomBCInteractor ); - // grid->addAndInitInteractor( topBCInteractor ); - // for(size_t i=0; i<D3Q27InteractorPtrarray.size(); ++i) - // { - // grid->addAndInitInteractor( D3Q27InteractorPtrarray[i] ); - // char numstr[21]; - // sprintf(numstr, "%f", (double)i); - // std::string pathObstCube = pathname+"/geo/obstBCCuboid"+ numstr; - // if(myid == 0) GbSystem3D::writeGeoObject(D3Q27InteractorPtrarray[i]->getGbObject3D().get(), - // /* rectTemp.get(),*/ pathObstCube, WbWriterVtkXmlASCII::getInstance()); - // } - - - // UbTimer timer; - // timer.start(); - // grid->accept( metisVisitor ); - - // if(myid == 0) UBLOG(logINFO,"Write blocks - start"); - // BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm)); - // if(myid == 0) ppblocks->update(0); - // if(myid == 0) UBLOG(logINFO,"Write blocks - end"); - - - // if(myid == 0) UBLOG(logINFO,"Write blocks - start"); - // grid->accept( metisVisitor ); - // if(myid == 0) ppblocks->update(1); - // ppblocks.reset(); - // if(myid == 0) UBLOG(logINFO,"Write blocks - end"); - - // //inflow - // double uLB2=uLB; - // double raiseVelSteps = 0; - // vector<D3Q27BCFunction> velcX1BCs,dummy; - - // mu::Parser inflowProfile; - // inflowProfile.SetExpr("uLB*0.9"); - - // inflowProfile.DefineConst("uLB",uLB2); - // velcX1BCs.push_back(D3Q27BCFunction(inflowProfile,raiseVelSteps,D3Q27BCFunction::INFCONST)); - - - // //set connectors - // D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - // D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - // grid->accept( setConnsVisitor ); - - // //domain decomposition - - // //initialization of decompositions - // D3Q27ETInitDistributionsBlockVisitor initVisitor( nueLB,rhoInit); - // initVisitor.setVx1(inflowProfile); - // grid->accept(initVisitor); - - // //Postrozess - // //LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - - // UbSchedulerPtr geoSch(new UbScheduler(1)); - // D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - // new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), - // unitConverter, comm, true)); - - - - // grid->doPostProcess(0); - // ppgeo.reset(); - // geoSch.reset(); - - // if(myid == 0) UBLOG(logINFO,"Preprozess - end"); - - //} - - - - //UbSchedulerPtr visSch(new UbScheduler()); - ////visSch->addSchedule(100,1,1000); - ////visSch->addSchedule(1000,1000,10000); - ////visSch->addSchedule(10000,10000,100000); - ////visSch->addSchedule(20000,20000,800000); - ////visSch->addSchedule(50,350000,350500); - ////visSch->addSchedule(50,420000,420500); - ////visSch->addSchedule(50000,420500,10000000); - //visSch->addSchedule(2250,268250,592250); - //UbSchedulerPtr resSch(new UbScheduler()); - //resSch->addSchedule(20000,20,10000000); - //// AverageValuesPostprocessor Avpp(grid, pathname + "/steps/stepAV", WbWriterVtkXmlBinary::getInstance(), visSch/*wann wird rausgeschrieben*/,resSch/*wann wird resettet*/,comm); - //UbSchedulerPtr resSchRMS(new UbScheduler()); - //resSchRMS->addSchedule(40000,420000,10000000); - //UbSchedulerPtr resSchMeans(new UbScheduler()); - //resSchMeans->addSchedule(40000,0,10000000); - //UbSchedulerPtr stepAvSch(new UbScheduler()); - //int averageInterval=20; - //stepAvSch->addSchedule(averageInterval,0,10000000); - - //double restart=10000; //?????????? - //AverageValuesPostprocessor Avpp(grid, pathname + "/steps/stepAV", WbWriterVtkXmlBinary::getInstance(), stepAvSch/*wann wird gemittelt*/, averageInterval,visSch/*wann wird rausgeschrieben*/,resSchMeans,resSchRMS/*wann wird resettet*/,comm,restart); - - - //D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), unitConverter, comm); - - //UbSchedulerPtr nupsSch(new UbScheduler(10, 90050, 90080)); - //NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm); - - - //UbSchedulerPtr AdjForcSch(new UbScheduler()); - //AdjForcSch->addSchedule(100,20,20000000); - //D3Q27IntegrateValuesHelperPtr IntValHelp(new D3Q27IntegrateValuesHelper(grid, comm, - // originX1, originX2, kanalhoeheSI*0.55/*0.501*/, - // nx[0]*blockLengthx1, nx[1]*blockLengthx2, kanalhoeheSI*0.999)); - - //double vxZiel=uLB; - ////D3Q27AdjustForcingPostprocessor AdjForcPPPtr(grid, AdjForcSch,IntValHelp, vxZiel*0.6, comm);//da am 11.3.2013 velo um 1/0.6 zu hoch - //D3Q27AdjustForcingPostprocessor AdjForcPPPtr(grid, AdjForcSch,IntValHelp, vxZiel, comm);//dies sollte zu Re=5500 fuehren.. - - //UbSchedulerPtr visQSch(new UbScheduler()); - //visQSch->addSchedule(10,90100,90130); - //QKritPostprocessor QKritPtr(grid,pathname+"/steps/Qq",WbWriterVtkXmlBinary::getInstance(),visQSch, comm); - - //mu::Parser decrViscFunc; - //decrViscFunc.SetExpr("nue0+c0/(t+1)/(t+1)"); - //decrViscFunc.DefineConst("nue0", nueLB); - //decrViscFunc.DefineConst("c0", 0.1); - //UbSchedulerPtr DecrViscSch(new UbScheduler()); - //DecrViscSch->addSchedule(10,10,1000); - //DecreaseViscosityPostprocessor decrViscPPPtr(grid, DecrViscSch,&decrViscFunc, comm); - - //cout << "PID = " << myid << " Total Physical Memory (RAM): " << MemoryUtil::getTotalPhysMem()<<endl; - //cout << "PID = " << myid << " Physical Memory currently used: " << MemoryUtil::getPhysMemUsed()<<endl; - //cout << "PID = " << myid << " Physical Memory currently used by current process: " << MemoryUtil::getPhysMemUsedByMe()<<endl; - - //double endTime = 520000;//20000001; - //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[]) -{ - - run(argv[1]); - - return 0; -} - diff --git a/apps/cpu/bananas/CMakeLists.txt b/apps/cpu/bananas/CMakeLists.txt deleted file mode 100644 index 744322b5274e2dc924a40c3c7cd22169cd59338e..0000000000000000000000000000000000000000 --- a/apps/cpu/bananas/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(bananas) - -INCLUDE(${SOURCE_ROOT}/core/IncludsList.txt) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES core) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(bananas BINARY) diff --git a/apps/cpu/bananas/bananas.cpp b/apps/cpu/bananas/bananas.cpp deleted file mode 100644 index 7d8b05a97fbd611144e2916eb992659f39aa15a0..0000000000000000000000000000000000000000 --- a/apps/cpu/bananas/bananas.cpp +++ /dev/null @@ -1,457 +0,0 @@ -#include <iostream> -#include <string> - -#include "geometry3d/CoordinateTransformation3D.h" -#include "Grid3D.h" -#include "GenBlocksGridVisitor.h" -#include "geometry3d/GbSystem3D.h" -#include "geometry3d/GbCuboid3D.h" -#include "geometry3d/GbCylinder3D.h" -#include <geometry3d/GbSphere3D.h> -#include "basics/writer/WbWriterVtkXmlASCII.h" -#include "basics/writer/WbWriterVtkXmlBinary.h" -#include "RefineCrossAndInsideGbObjectBlockVisitor.h" -#include "RatioBlockVisitor.h" -#include "RatioSmoothBlockVisitor.h" -#include "OverlapBlockVisitor.h" -#include "RefineInterGbObjectsVisitor.h" -#include "RefineCrossAndInsideGbObjectBlockVisitor.h" -#include "SetKernelBlockVisitor.h" -#include "LBMKernelETD3Q27Cascaded.h" -#include "D3Q27MacroscopicQuantitiesPostprocessor.h" -#include "MPICommunicator.h" -#include "D3Q27ETBCProcessor.h" -#include "SimulationParameters.h" -#include "D3Q27SetUndefinedNodesBlockVisitor.h" -#include "SetInterpolationDirsBlockVisitor.h" -#include "D3Q27SetConnectorsBlockVisitor.h" -#include "NullCommunicator.h" -#include "D3Q27ETInitDistributionsBlockVisitor.h" -#include "CalculationManager.h" -#include "PQueuePartitioningGridVisitor.h" -#include "MetisPartitioningGridVisitor.h" -#include "D3Q27Interactor.h" -#include "D3Q27NoSlipBCAdapter.h" -#include "D3Q27VelocityBCAdapter.h" -#include "D3Q27DensityBCAdapter.h" -#include "D3Q27BoundaryConditionAdapter.h" -#include "StringUtil.hpp" -#include "D3Q27OffsetInterpolationProcessor.h" -#include "D3Q27CompactInterpolationProcessor.h" -#include "SyncBcBlockVisitor.h" -#include "geometry3d/creator/GbTriFaceMesh3DCreator.h" -#include "geometry3d/GbTriFaceMesh3D.h" -#include "D3Q27TriFaceMeshInteractor.h" -#include "basics/utilities/UbFileOutputASCII.h" -#include "basics/utilities/UbFileInputASCII.h" -#include "basics/utilities/UbFileInputBinary.h" -#include "basics/container/CbArray3D.h" -#include "geometry3d/GbVoxelMatrix3D.h" - -#define CONVEXHULL - -using namespace std; - -const int FLUID = 1; -const int SOLID = 15; - -////////////////////////////////////////////////////////////////////////// -void writeMatrixToVtkImageFile(const std::string& fileName, const CbArray3D <int>& geoMatrix, - double itsDeltaXWorld, double orgX1, double orgX2, double orgX3) -{ - UbFileOutputASCII out(fileName); - - int NX1 = (int)geoMatrix.getNX1(); - int NX2 = (int)geoMatrix.getNX2(); - int NX3 = (int)geoMatrix.getNX3(); - int nn = NX1*NX2*NX3; - out.writeLine("# vtk DataFile Version 3.0"); - out.writeLine(fileName); - out.writeLine("ASCII"); - out.writeLine("DATASET STRUCTURED_POINTS"); - out.writeString("DIMENSIONS"); - out.writeInteger(NX1); - out.writeInteger(NX2); - out.writeInteger(NX3); - out.writeLine(); - out.writeString("ORIGIN"); - out.writeDouble(orgX1); - out.writeDouble(orgX2); - out.writeDouble(orgX3); - out.writeLine(); - out.writeString("SPACING"); - out.writeDouble(itsDeltaXWorld); - out.writeDouble(itsDeltaXWorld); - out.writeDouble(itsDeltaXWorld); - out.writeLine(); - out.writeString("POINT_DATA"); - out.writeInteger(nn); - out.writeLine(); - out.writeLine("SCALARS Geo integer"); - out.writeLine("LOOKUP_TABLE default"); - - for(int k=0 ; k<NX3 ; k++){ - for(int j=0 ; j<NX2 ; j++){ - for(int i=0 ; i<NX1 ; i++){ - out.writeInteger( geoMatrix(i,j,k) ); - } - } - } -} -////////////////////////////////////////////////////////////////////////// -void readDimensionsFromFldFile(const std::string& fileName, int& d1, int& d2, int& d3) -{ - UbFileInputASCII in(fileName); - // read grid nx3 - int dim = in.readIntegerAfterString("ndim="); - - if (dim != 3) throw UbException(UB_EXARGS,"readGeoMatrixFromFldFile() - Wrong number of dimensions."); - - d1 = in.readIntegerAfterString("dim1="); - d2 = in.readIntegerAfterString("dim2="); - d3 = in.readIntegerAfterString("dim3="); -} -////////////////////////////////////////////////////////////////////////// -void readGeoMatrixFromFldFile(const std::string& fileName, GbVoxelMatrix3DPtr geoMatrix) -{ - UbFileInputASCII in(fileName); - // read grid nx3 - int dim = in.readIntegerAfterString("ndim="); - - if (dim != 3) throw UbException(UB_EXARGS,"readGeoMatrixFromFldFile() - Wrong number of dimensions."); - - int sizeX = in.readIntegerAfterString("dim1="); - int sizeY = in.readIntegerAfterString("dim2="); - int sizeZ = in.readIntegerAfterString("dim3="); - - std::string binFileName = in.readStringAfterString("variable 1 file="); - - //separate name from path - std::string path = fileName.substr( 0, fileName.find_last_of('//')+1 ); - - binFileName = path.append(binFileName); - - UbFileInputBinary binIn(binFileName); - - for (int i=0; i<2048; i++) - { - binIn.readChar(); - } - - int x, y, z, val; - - for(z=0; z<sizeZ; z++) - { - for(y=0; y<sizeY; y++) - { - for(x=0; x<sizeX; x++) - { - val = binIn.readChar(); - - if(x!=0 && x!=sizeX-1 && - y!=0 && y!=sizeY-1 && - z!=0 && z!=sizeZ-1 ) - { - if(val == 0) - { - (*geoMatrix)(x,y,z) = GbVoxelMatrix3D::SOLID; - } - } - } - } - } -} -////////////////////////////////////////////////////////////////////////// -void discretizeGeoObject(GbObject3DPtr geoObject, CbArray3D<int>& geoMatrix, double delta, double orgX1, double orgX2, double orgX3) -{ - int nx1 = (int)geoMatrix.getNX1(); - int nx2 = (int)geoMatrix.getNX2(); - int nx3 = (int)geoMatrix.getNX3(); - - for(int k=0 ; k<nx3 ; k++) - { - for(int j=0 ; j<nx2 ; j++) - { - for(int i=0 ; i<nx1 ; i++) - { - double x = orgX1 + i*delta; - double y = orgX2 + j*delta; - double z = orgX3 + k*delta; - if(geoObject->isPointInGbObject3D(x, y, z)) geoMatrix(i,j,k) = SOLID; - } - } - } -} -////////////////////////////////////////////////////////////////////////// -void writeGbVoxelMatrix3DtoVtuXmlASCII(const std::string& fileName, GbVoxelMatrix3DPtr voxelMatrix, - double worldDeltaX1, double worldDeltaX2, double worldDeltaX3, - int nx1, int nx2, int nx3) -{ - std::vector< UbTupleFloat3 > nodes; - std::vector<std::string > datanames; - std::vector<std::vector<double > > nodedata; - - datanames.resize(0); - datanames.push_back("Solid"); - nodes.resize(0); - nodedata.resize(datanames.size()); - - double orgX1 = voxelMatrix->getX1Minimum(); - double orgX2 = voxelMatrix->getX2Minimum(); - double orgX3 = voxelMatrix->getX3Minimum(); - - int index = 0; - double x1KO,x2KO,x3KO; - - for (int x3=0; x3<nx3;x3++){ - for (int x2=0; x2<nx2;x2++){ - for(int x1=0; x1<nx1;x1++) - { - x1KO = orgX1 + worldDeltaX1*(double)x1; - x2KO = orgX2 + worldDeltaX2*(double)x2; - x3KO = orgX3 + worldDeltaX3*(double)x3; - nodes.push_back( makeUbTuple(float(x1KO), float(x2KO), float(x3KO)) ); - nodedata[0].push_back((*voxelMatrix)(x1,x2,x3)); - } - } - } - WbWriterVtkXmlASCII::getInstance()->writeNodesWithNodeData(fileName, nodes, datanames, nodedata); -} -////////////////////////////////////////////////////////////////////////// -void writeGbVoxelMatrix3DtoLegacyVTK(const std::string& fileName, GbVoxelMatrix3DPtr voxelMatrix, - double worldDeltaX1, double worldDeltaX2, double worldDeltaX3, - int nx1, int nx2, int nx3) -{ - UbFileOutputASCII out(fileName); - - int nn = nx1*nx2*nx3; - out.writeLine("# vtk DataFile Version 3.0"); - out.writeLine(fileName); - out.writeLine("ASCII"); - out.writeLine("DATASET STRUCTURED_POINTS"); - out.writeString("DIMENSIONS"); - out.writeInteger(nx1); - out.writeInteger(nx2); - out.writeInteger(nx3); - out.writeLine(); - out.writeString("ORIGIN"); - out.writeDouble(voxelMatrix->getX1Minimum()); - out.writeDouble(voxelMatrix->getX2Minimum()); - out.writeDouble(voxelMatrix->getX3Minimum()); - out.writeLine(); - out.writeString("SPACING"); - out.writeDouble(worldDeltaX1); - out.writeDouble(worldDeltaX2); - out.writeDouble(worldDeltaX3); - out.writeLine(); - out.writeString("POINT_DATA"); - out.writeInteger(nn); - out.writeLine(); - out.writeLine("SCALARS Geo integer"); - out.writeLine("LOOKUP_TABLE default"); - - for(int k=0 ; k<nx3 ; k++){ - for(int j=0 ; j<nx2 ; j++){ - for(int i=0 ; i<nx1 ; i++){ - out.writeInteger( (int)(*voxelMatrix)(i,j,k) ); - } - } - } -} -////////////////////////////////////////////////////////////////////////// -void run(const char *cstr) -{ - try - { - //string pathname = "c:/temp/bananas/out"; - //string pathnameGeo = "c:/temp/bananas/geo"; - - std::string opt; - if(cstr!= NULL) - opt = std::string(cstr); - else - { - UBLOG(logINFO,"no option: x, y or z"); - return; - } - - string pathnameGeo = "/home/koskuche/data/bananas"; - string pathname; - - if(opt == "z") pathname = "/work/koskuche/scratch/bananas/setupZ/out"; - - if(opt == "x") pathname = "/work/koskuche/scratch/bananas/setupX/out"; - - if(opt == "y") pathname = "/work/koskuche/scratch/bananas/setupY/out"; - - CommunicatorPtr comm(new MPICommunicator()); - - ////////////////////////////////////////////////////////////////////////// - // Geometries - ////////////////////////////////////////////////////////////////////////// - //bananas box geometry - UBLOG(logINFO,"Start read bananas box geometry"); - GbTriFaceMesh3DPtr bananaBox (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathnameGeo+"/Banana_boxD.stl","banana_box")); - UBLOG(logINFO,"Stop read bananas box geometry"); - bananaBox->rotate(90.0, 0.0, 0.0); //around Z - - double b_minX1 = bananaBox->getX1Minimum(); - double b_minX2 = bananaBox->getX2Minimum(); - double b_minX3 = bananaBox->getX3Minimum(); - - double b_maxX1 = bananaBox->getX1Maximum(); - double b_maxX2 = bananaBox->getX2Maximum(); - double b_maxX3 = bananaBox->getX3Maximum(); - - if(opt == "x") bananaBox->rotate(0.0, 0.0, -90.0); //around X - - if(opt == "y") bananaBox->rotate(0.0, -90.0, 0.0); //around Y - - UBLOG(logINFO,"Start write bananas box geometry"); - GbSystem3D::writeGeoObject(bananaBox.get(), pathname+"/banana_box", WbWriterVtkXmlASCII::getInstance()); - UBLOG(logINFO,"Stop write bananas box geometry"); - - //distances for bounding box - double dist_z = 0.12; - double dist_x = 0.26; - double dist_y = 0.195; - - double g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3; - - //bounding box of simulation - //setup1 - z - if(opt == "z") - { - g_minX1 = bananaBox->getX1Minimum(); - g_minX2 = bananaBox->getX2Minimum(); - g_minX3 = bananaBox->getX3Minimum()-dist_z; - - g_maxX1 = bananaBox->getX1Maximum(); - g_maxX2 = bananaBox->getX2Maximum(); - g_maxX3 = bananaBox->getX3Maximum()+dist_z*2.0; - } - - //setup2 - x - if(opt == "x") - { - g_minX1 = bananaBox->getX1Minimum(); - g_minX2 = bananaBox->getX2Minimum(); - g_minX3 = bananaBox->getX3Minimum()-dist_x; - - g_maxX1 = bananaBox->getX1Maximum(); - g_maxX2 = bananaBox->getX2Maximum(); - g_maxX3 = bananaBox->getX3Maximum()+dist_x*2.0; - } - - //setup3 - y - if(opt == "y") - { - g_minX1 = bananaBox->getX1Minimum(); - g_minX2 = bananaBox->getX2Minimum(); - g_minX3 = bananaBox->getX3Minimum()-dist_y; - - g_maxX1 = bananaBox->getX1Maximum(); - g_maxX2 = bananaBox->getX2Maximum(); - g_maxX3 = bananaBox->getX3Maximum()+dist_y*2.0; - } - - const double gridOriginX1 = g_minX1; - const double gridOriginX2 = g_minX2; - const double gridOriginX3 = g_minX3; - - //int gridNX1 = 170; - //int gridNX2 = 226; - //int gridNX3 = 104; - - const double dx = 2.20183486239e-3; //blockLentghX1/static_cast<double>(blocknx1); - - UBLOG(logINFO,"DeltaX = " << dx); - - CbArray3D<int> grid(int((g_maxX1-g_minX1)/dx)+1, int((g_maxX2-g_minX2)/dx)+1, int((g_maxX3-g_minX3)/dx)+1, FLUID); - - UBLOG(logINFO,"Start write geo matrix empty"); - writeMatrixToVtkImageFile(pathname + "/geo_matrix_empty.vtk", grid, dx, gridOriginX1, gridOriginX2, gridOriginX3); - UBLOG(logINFO,"Stop write geo matrix empty"); - -#ifdef BANANAS - //reed bananas - UBLOG(logINFO,"Start read bananas geometry"); - int d1, d2, d3; - readDimensionsFromFldFile(pathnameGeo + "/BANANA_8binn_Binear_A.fld", d1, d2, d3); - UBLOG(logINFO,"Dimensions of bananas geometry: " << d1 << ", " << d2 << ", " << d3); - GbVoxelMatrix3DPtr bananas(new GbVoxelMatrix3D(d1, d2, d3, float(GbVoxelMatrix3D::FLUID))); - readGeoMatrixFromFldFile(pathnameGeo + "/BANANA_8binn_Binear_A.fld", bananas); - UBLOG(logINFO,"Stop read bananas geometry"); - double bananasDx1 = (b_maxX1 - b_minX1) / float(d1); - double bananasDx2 = (b_maxX2 - b_minX2) / float(d2); - double bananasDx3 = (b_maxX3 - b_minX3) / float(d3); - bananas->setVoxelMatrixDelta(float(bananasDx1), float(bananasDx2), float(bananasDx3)); - bananas->setCenterCoordinates(bananaBox->getX1Centroid(), bananaBox->getX2Centroid(), bananaBox->getX3Centroid()); - bananas->setVoxelMatrixMininum(float(b_minX1), float(b_minX2), float(b_minX3)); - - bananas->rotate90aroundX(); - bananas->rotate90aroundY(); - //bananas->rotate90aroundX(); - - UBLOG(logINFO,"Start write bananas geometry"); - bananas->writeToLegacyVTK(pathname + "/bananas.vtk"); - UBLOG(logINFO,"Stop write bananas geometry"); -#endif - -#ifdef CONVEXHULL - UBLOG(logINFO,"Start read bananas box geometry"); - GbTriFaceMesh3DPtr bananaHull (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathnameGeo+"/convexhullASCII.stl","banana_hull")); - UBLOG(logINFO,"Stop read bananas box geometry"); - bananaHull->translate(0.0, 0.0, 5.0*dx); - if(opt == "x") bananaHull->rotateAroundPoint(bananaBox->getX1Centroid(), bananaBox->getX2Centroid(), bananaBox->getX3Centroid(), 0.0, 0.0, -90.0); //around X - if(opt == "y") bananaHull->rotateAroundPoint(bananaBox->getX1Centroid(), bananaBox->getX2Centroid(), bananaBox->getX3Centroid(), 0.0, -90.0, 0.0); //around Y - UBLOG(logINFO,"Start write banana hull geometry"); - GbSystem3D::writeGeoObject(bananaHull.get(), pathname+"/banana_hull", WbWriterVtkXmlASCII::getInstance()); - UBLOG(logINFO,"Stop write banana hull geometry"); -#endif - //////////////////////////////////////// - //return; - ///////////////////////////////////////// - - UBLOG(logINFO,"Start discretization of banana box"); - discretizeGeoObject(bananaBox, grid, dx, gridOriginX1, gridOriginX2, gridOriginX3); - UBLOG(logINFO,"Stop discretization of banana box"); - -#ifdef BANANAS - UBLOG(logINFO,"Start discretization of bananas"); - discretizeGeoObject(bananas, grid, dx, gridOriginX1, gridOriginX2, gridOriginX3); - UBLOG(logINFO,"Stop discretization of bananas"); -#endif - -#ifdef CONVEXHULL - UBLOG(logINFO,"Start discretization of banana hull"); - discretizeGeoObject(bananaHull, grid, dx, gridOriginX1, gridOriginX2, gridOriginX3); - UBLOG(logINFO,"Stop discretization of banana hull"); -#endif - - UBLOG(logINFO,"Start write geo matrix"); - writeMatrixToVtkImageFile(pathname + "/geo_matrix.vtk", grid, dx, gridOriginX1, gridOriginX2, gridOriginX3); - UBLOG(logINFO,"Stop write geo matrix"); - } - 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[]) -{ - - run(argv[1]); - - return 0; -} - diff --git a/apps/cpu/bananas2/CMakeLists.txt b/apps/cpu/bananas2/CMakeLists.txt deleted file mode 100644 index 2abcdd2b640f525b8e026592c641ef8921532bfb..0000000000000000000000000000000000000000 --- a/apps/cpu/bananas2/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(bananas2) - -INCLUDE(${SOURCE_ROOT}/core/IncludsList.txt) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES core) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(bananas2 BINARY) diff --git a/apps/cpu/bananas2/bananas2.cpp b/apps/cpu/bananas2/bananas2.cpp deleted file mode 100644 index 447e1702c72a8a193d21134f6f983eb9b10366cf..0000000000000000000000000000000000000000 --- a/apps/cpu/bananas2/bananas2.cpp +++ /dev/null @@ -1,633 +0,0 @@ -#include <iostream> -#include <string> - -#include "geometry3d/CoordinateTransformation3D.h" -#include "Grid3D.h" -#include "GenBlocksGridVisitor.h" -#include "geometry3d/GbSystem3D.h" -#include "geometry3d/GbCuboid3D.h" -#include "geometry3d/GbCylinder3D.h" -#include <geometry3d/GbSphere3D.h> -#include "basics/writer/WbWriterVtkXmlASCII.h" -#include "basics/writer/WbWriterVtkXmlBinary.h" -#include "RefineCrossAndInsideGbObjectBlockVisitor.h" -#include "RatioBlockVisitor.h" -#include "RatioSmoothBlockVisitor.h" -#include "OverlapBlockVisitor.h" -#include "RefineInterGbObjectsVisitor.h" -#include "RefineCrossAndInsideGbObjectBlockVisitor.h" -#include "SetKernelBlockVisitor.h" -#include "LBMKernelETD3Q27Cascaded.h" -#include "D3Q27MacroscopicQuantitiesPostprocessor.h" -#include "MPICommunicator.h" -#include "D3Q27ETBCProcessor.h" -#include "SimulationParameters.h" -#include "D3Q27SetUndefinedNodesBlockVisitor.h" -#include "SetInterpolationDirsBlockVisitor.h" -#include "D3Q27SetConnectorsBlockVisitor.h" -#include "NullCommunicator.h" -#include "D3Q27ETInitDistributionsBlockVisitor.h" -#include "CalculationManager.h" -#include "PQueuePartitioningGridVisitor.h" -#include "MetisPartitioningGridVisitor.h" -#include "D3Q27Interactor.h" -#include "D3Q27NoSlipBCAdapter.h" -#include "D3Q27VelocityBCAdapter.h" -#include "D3Q27DensityBCAdapter.h" -#include "D3Q27BoundaryConditionAdapter.h" -#include "StringUtil.hpp" -#include "D3Q27OffsetInterpolationProcessor.h" -#include "D3Q27CompactInterpolationProcessor.h" -#include "SyncBcBlockVisitor.h" -#include "geometry3d/creator/GbTriFaceMesh3DCreator.h" -#include "geometry3d/GbTriFaceMesh3D.h" -#include "D3Q27TriFaceMeshInteractor.h" -#include "basics/utilities/UbFileOutputASCII.h" -#include "basics/utilities/UbFileInputASCII.h" -#include "basics/utilities/UbFileInputBinary.h" -#include "basics/container/CbArray3D.h" -#include "geometry3d/GbVoxelMatrix3D.h" - - -/* - * The first 3 bits contain node type (fluid, inlet, etc.). - * The remaining 5 bits contain the unique geometry number - * in case of solid nodes. - * - * 0 0 0 0 0 | 0 0 0 - */ -#define getGeoType(geo) (geo & 0x7) /*= 00000111*/ -#define getNormal(geo) (geo >> 3) -#define setGeoType(dest, geo_type) dest = (dest & 0xF8) + geo_type -#define setGeoNormal(dest, geo_id) dest = (geo_id << 3) + getGeoType(dest) - -#define GEO_INVALID 0 -#define GEO_FLUID 1 -#define GEO_INLET 2 -#define GEO_HULL 3 //hull -#define GEO_FLUID_IN_HULL 4 //fluid inside hull -#define GEO_BANANAS 5 //bananas -#define GEO_BOX 6 //box - -#define NORMAL_POS_X1 1 -#define NORMAL_NEG_X1 2 - -#define NORMAL_POS_X2 3 -#define NORMAL_NEG_X2 4 - -#define NORMAL_POS_X3 5 -#define NORMAL_NEG_X3 6 - -#define CONVEXHULL - -using namespace std; - -typedef CbArray3D<int> VoxelMatrix; - -//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, ZERO -const int EX1[] = { 1, -1, 0, 0, 0, 0, 1, -1, 1, -1, 1, -1, 1, -1, 0, 0, 0, 0, 0 }; -const int EX2[] = { 0, 0, 1, -1, 0, 0, 1, -1, -1, 1, 0, 0, 0, 0, 1, -1, 1, -1, 0 }; -const int EX3[] = { 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 1, -1, -1, 1, 1, -1, -1, 1, 0 }; - -////////////////////////////////////////////////////////////////////////// -void writeMatrixToVtkImageFile(const std::string& fileName, const VoxelMatrix& geoMatrix, - double itsDeltaXWorld, double orgX1, double orgX2, double orgX3) -{ - UbFileOutputASCII out(fileName); - - int NX1 = (int)geoMatrix.getNX1(); - int NX2 = (int)geoMatrix.getNX2(); - int NX3 = (int)geoMatrix.getNX3(); - int nn = NX1*NX2*NX3; - out.writeLine("# vtk DataFile Version 3.0"); - out.writeLine(fileName); - out.writeLine("ASCII"); - out.writeLine("DATASET STRUCTURED_POINTS"); - out.writeString("DIMENSIONS"); - out.writeInteger(NX1); - out.writeInteger(NX2); - out.writeInteger(NX3); - out.writeLine(); - out.writeString("ORIGIN"); - out.writeDouble(orgX1); - out.writeDouble(orgX2); - out.writeDouble(orgX3); - out.writeLine(); - out.writeString("SPACING"); - out.writeDouble(itsDeltaXWorld); - out.writeDouble(itsDeltaXWorld); - out.writeDouble(itsDeltaXWorld); - out.writeLine(); - out.writeString("POINT_DATA"); - out.writeInteger(nn); - out.writeLine(); - out.writeLine("SCALARS Geo integer"); - out.writeLine("LOOKUP_TABLE default"); - - for(int k=0 ; k<NX3 ; k++){ - for(int j=0 ; j<NX2 ; j++){ - for(int i=0 ; i<NX1 ; i++){ - out.writeInteger( geoMatrix(i,j,k) ); - } - } - } -} -////////////////////////////////////////////////////////////////////////// -void readDimensionsFromFldFile(const std::string& fileName, int& d1, int& d2, int& d3) -{ - UbFileInputASCII in(fileName); - // read grid nx3 - int dim = in.readIntegerAfterString("ndim="); - - if (dim != 3) throw UbException(UB_EXARGS,"readGeoMatrixFromFldFile() - Wrong number of dimensions."); - - d1 = in.readIntegerAfterString("dim1="); - d2 = in.readIntegerAfterString("dim2="); - d3 = in.readIntegerAfterString("dim3="); -} -////////////////////////////////////////////////////////////////////////// -void readGeoMatrixFromFldFile(const std::string& fileName, GbVoxelMatrix3DPtr geoMatrix) -{ - UbFileInputASCII in(fileName); - // read grid nx3 - int dim = in.readIntegerAfterString("ndim="); - - if (dim != 3) throw UbException(UB_EXARGS,"readGeoMatrixFromFldFile() - Wrong number of dimensions."); - - int sizeX = in.readIntegerAfterString("dim1="); - int sizeY = in.readIntegerAfterString("dim2="); - int sizeZ = in.readIntegerAfterString("dim3="); - - std::string binFileName = in.readStringAfterString("variable 1 file="); - - //separate name from path - std::string path = fileName.substr( 0, fileName.find_last_of('//')+1 ); - - binFileName = path.append(binFileName); - - UbFileInputBinary binIn(binFileName); - - for (int i=0; i<2048; i++) - { - binIn.readChar(); - } - - int x, y, z, val; - - for(z=0; z<sizeZ; z++) - { - for(y=0; y<sizeY; y++) - { - for(x=0; x<sizeX; x++) - { - val = binIn.readChar(); - - if(x!=0 && x!=sizeX-1 && - y!=0 && y!=sizeY-1 && - z!=0 && z!=sizeZ-1 ) - { - if(val == 0) - { - (*geoMatrix)(x,y,z) = GbVoxelMatrix3D::SOLID; - } - } - } - } - } -} -////////////////////////////////////////////////////////////////////////// -void discretizeGeoObject(GbObject3DPtr geoObject, VoxelMatrix& geoMatrix, double delta, - double orgX1, double orgX2, double orgX3, - int inValue, int outValue, bool bothSides, - bool overwriteIn, bool overwriteOut, - int noInValue, int noOutValue) -{ - int nx1 = (int)geoMatrix.getNX1(); - int nx2 = (int)geoMatrix.getNX2(); - int nx3 = (int)geoMatrix.getNX3(); - - for(int k=0 ; k<nx3 ; k++) - { - for(int j=0 ; j<nx2 ; j++) - { - for(int i=0 ; i<nx1 ; i++) - { - double x = orgX1 + i*delta; - double y = orgX2 + j*delta; - double z = orgX3 + k*delta; - - int temp = 0; - int gm = geoMatrix(i,j,k); - - if(geoObject->isPointInGbObject3D(x, y, z)) - { - setGeoType(temp, inValue); - if (overwriteIn) - { - geoMatrix(i,j,k) = temp; - } - else - { - if(gm != noInValue) - { - geoMatrix(i,j,k) = temp; - } - } - } - else if(bothSides) - { - setGeoType(temp, outValue); - if (overwriteOut) - { - geoMatrix(i,j,k) = temp; - } - else - { - if(gm != noOutValue) - { - geoMatrix(i,j,k) = temp; - } - } - } - } - } - } -} -////////////////////////////////////////////////////////////////////////// -bool hasNeighbor(VoxelMatrix& geoMatrix, int x1, int x2, int x3) -{ - bool result = false; - for( int dir = 0; dir < 18; dir++) - { - int temp = geoMatrix(x1+EX1[dir], x2+EX2[dir], x3+EX3[dir]); - if(temp == GEO_BANANAS || temp == GEO_FLUID_IN_HULL) - { - result = true; - break; - } - } - return result; -} -////////////////////////////////////////////////////////////////////////// -void createHull(VoxelMatrix& geoMatrix) -{ - int nx1 = (int)geoMatrix.getNX1(); - int nx2 = (int)geoMatrix.getNX2(); - int nx3 = (int)geoMatrix.getNX3(); - - for(int k=1 ; k<nx3-1 ; k++) - { - for(int j=1 ; j<nx2-1 ; j++) - { - for(int i=1 ; i<nx1-1 ; i++) - { - int val = geoMatrix(i,j,k); - if(val == GEO_FLUID) - { - if(hasNeighbor(geoMatrix, i, j, k)) - { - int temp = 0; - setGeoType(temp, GEO_HULL); - geoMatrix(i,j,k) = temp; - } - } - } - } - } -} -////////////////////////////////////////////////////////////////////////// -void writeGbVoxelMatrix3DtoVtuXmlASCII(const std::string& fileName, GbVoxelMatrix3DPtr voxelMatrix, - double worldDeltaX1, double worldDeltaX2, double worldDeltaX3, - int nx1, int nx2, int nx3) -{ - std::vector< UbTupleFloat3 > nodes; - std::vector<std::string > datanames; - std::vector<std::vector<double > > nodedata; - - datanames.resize(0); - datanames.push_back("Solid"); - nodes.resize(0); - nodedata.resize(datanames.size()); - - double orgX1 = voxelMatrix->getX1Minimum(); - double orgX2 = voxelMatrix->getX2Minimum(); - double orgX3 = voxelMatrix->getX3Minimum(); - - int index = 0; - double x1KO,x2KO,x3KO; - - for (int x3=0; x3<nx3;x3++){ - for (int x2=0; x2<nx2;x2++){ - for(int x1=0; x1<nx1;x1++) - { - x1KO = orgX1 + worldDeltaX1*(double)x1; - x2KO = orgX2 + worldDeltaX2*(double)x2; - x3KO = orgX3 + worldDeltaX3*(double)x3; - nodes.push_back( makeUbTuple(float(x1KO), float(x2KO), float(x3KO)) ); - nodedata[0].push_back((*voxelMatrix)(x1,x2,x3)); - } - } - } - WbWriterVtkXmlASCII::getInstance()->writeNodesWithNodeData(fileName, nodes, datanames, nodedata); -} -////////////////////////////////////////////////////////////////////////// -void writeGbVoxelMatrix3DtoLegacyVTK(const std::string& fileName, GbVoxelMatrix3DPtr voxelMatrix, - double worldDeltaX1, double worldDeltaX2, double worldDeltaX3, - int nx1, int nx2, int nx3) -{ - UbFileOutputASCII out(fileName); - - int nn = nx1*nx2*nx3; - out.writeLine("# vtk DataFile Version 3.0"); - out.writeLine(fileName); - out.writeLine("ASCII"); - out.writeLine("DATASET STRUCTURED_POINTS"); - out.writeString("DIMENSIONS"); - out.writeInteger(nx1); - out.writeInteger(nx2); - out.writeInteger(nx3); - out.writeLine(); - out.writeString("ORIGIN"); - out.writeDouble(voxelMatrix->getX1Minimum()); - out.writeDouble(voxelMatrix->getX2Minimum()); - out.writeDouble(voxelMatrix->getX3Minimum()); - out.writeLine(); - out.writeString("SPACING"); - out.writeDouble(worldDeltaX1); - out.writeDouble(worldDeltaX2); - out.writeDouble(worldDeltaX3); - out.writeLine(); - out.writeString("POINT_DATA"); - out.writeInteger(nn); - out.writeLine(); - out.writeLine("SCALARS Geo integer"); - out.writeLine("LOOKUP_TABLE default"); - - for(int k=0 ; k<nx3 ; k++){ - for(int j=0 ; j<nx2 ; j++){ - for(int i=0 ; i<nx1 ; i++){ - out.writeInteger( (int)(*voxelMatrix)(i,j,k) ); - } - } - } -} -////////////////////////////////////////////////////////////////////////// -void setNormalsOnBoundary(int minX1, int minX2, int minX3, int maxX1, int maxX2, int maxX3, VoxelMatrix& matrix, int dir) -{ - for (int ix3 = minX3; ix3 <= maxX3; ix3++) - for (int ix2 = minX2; ix2 <= maxX2; ix2++) - for (int ix1 = minX1; ix1 <= maxX1; ix1++) - { - - int temp = 0; - temp = getGeoType(matrix(ix1, ix2, ix3)); - setGeoNormal(temp, dir); - matrix(ix1, ix2, ix3) = temp; - } -} -////////////////////////////////////////////////////////////////////////// -void run(const char *cstr) -{ - try - { - std::string opt; - if(cstr!= NULL) - opt = std::string(cstr); - else - { - UBLOG(logINFO,"no option: x, y or z"); - return; - } - - string pathnameGeo = "/home/koskuche/data/bananas"; - string pathname; - - if(opt == "z") pathname = "/work/koskuche/scratch/bananas2/setupZ"; - - if(opt == "x") pathname = "/work/koskuche/scratch/bananas2/setupX"; - - if(opt == "y") pathname = "/work/koskuche/scratch/bananas2/setupY"; - - CommunicatorPtr comm(new MPICommunicator()); - - ////////////////////////////////////////////////////////////////////////// - // Geometries - ////////////////////////////////////////////////////////////////////////// - //bananas box geometry - UBLOG(logINFO,"Start read bananas box geometry"); - GbTriFaceMesh3DPtr bananaBox (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathnameGeo+"/Banana_boxD.stl","banana_box")); - UBLOG(logINFO,"Stop read bananas box geometry"); - bananaBox->rotate(90.0, 0.0, 0.0); //around Z - - double b_minX1 = bananaBox->getX1Minimum(); - double b_minX2 = bananaBox->getX2Minimum(); - double b_minX3 = bananaBox->getX3Minimum(); - - double b_maxX1 = bananaBox->getX1Maximum(); - double b_maxX2 = bananaBox->getX2Maximum(); - double b_maxX3 = bananaBox->getX3Maximum(); - - if(opt == "x") bananaBox->rotate(0.0, 0.0, -90.0); //around X - - if(opt == "y") bananaBox->rotate(0.0, -90.0, 0.0); //around Y - - //after rotation for setup 2-3 - double bb_minX1 = bananaBox->getX1Minimum(); - double bb_minX2 = bananaBox->getX2Minimum(); - double bb_minX3 = bananaBox->getX3Minimum(); - - double bb_maxX1 = bananaBox->getX1Maximum(); - double bb_maxX2 = bananaBox->getX2Maximum(); - double bb_maxX3 = bananaBox->getX3Maximum(); - - UBLOG(logINFO,"Start write bananas box geometry"); - GbSystem3D::writeGeoObject(bananaBox.get(), pathname+"/banana_box", WbWriterVtkXmlASCII::getInstance()); - UBLOG(logINFO,"Stop write bananas box geometry"); - - //distances for bounding box - double dist_z = 0.022; - double site = 0.011; - - //bounding box of simulation - double g_minX1 = bananaBox->getX1Minimum()-site; - double g_minX2 = bananaBox->getX2Minimum()-site; - double g_minX3 = bananaBox->getX3Minimum()-dist_z*2.0; - - double g_maxX1 = bananaBox->getX1Maximum()+site; - double g_maxX2 = bananaBox->getX2Maximum()+site; - double g_maxX3 = bananaBox->getX3Maximum()+dist_z*2.0; - - const double gridOriginX1 = g_minX1; - const double gridOriginX2 = g_minX2; - const double gridOriginX3 = g_minX3; - - const double dx = 2.20183486239e-3; - UBLOG(logINFO,"DeltaX = " << dx); - - GbCuboid3DPtr addWall1 (new GbCuboid3D(g_minX1, g_minX2, bb_minX3, bb_minX1, g_maxX2, bb_minX3+2*dx)); - GbSystem3D::writeGeoObject(addWall1.get(), pathname+"/addWall1", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWall2 (new GbCuboid3D(bb_maxX1, g_minX2, bb_minX3, g_maxX1, g_maxX2, bb_minX3+2*dx)); - GbSystem3D::writeGeoObject(addWall2.get(), pathname+"/addWall2", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWall3 (new GbCuboid3D(g_minX1, g_minX2, bb_minX3, g_maxX1, bb_minX2, bb_minX3+2*dx)); - GbSystem3D::writeGeoObject(addWall3.get(), pathname+"/addWall3", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWall4 (new GbCuboid3D(g_minX1, bb_maxX2, bb_minX3, g_maxX1, g_maxX2, bb_minX3+2*dx)); - GbSystem3D::writeGeoObject(addWall4.get(), pathname+"/addWall4", WbWriterVtkXmlASCII::getInstance()); - - VoxelMatrix grid(int((g_maxX1-g_minX1)/dx)+1, int((g_maxX2-g_minX2)/dx)+1, int((g_maxX3-g_minX3)/dx)+1, GEO_FLUID); - - UBLOG(logINFO,"Start write geo matrix empty"); - writeMatrixToVtkImageFile(pathname + "/geo_matrix_empty.vtk", grid, dx, gridOriginX1, gridOriginX2, gridOriginX3); - UBLOG(logINFO,"Stop write geo matrix empty"); - -#ifdef CONVEXHULL - UBLOG(logINFO,"Start read bananas box geometry"); - GbTriFaceMesh3DPtr bananasHull (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathnameGeo+"/convexhullASCII.stl","banana_hull")); - UBLOG(logINFO,"Stop read bananas box geometry"); - double tr1 = bananasHull->getX3Minimum() - bananaBox->getX3Minimum(); - bananasHull->translate(0.0, 0.0, 5.0*dx); -#endif - - //reed bananas - UBLOG(logINFO,"Start read bananas geometry"); - int d1, d2, d3; - readDimensionsFromFldFile(pathnameGeo + "/BANANA_8binn_Binear_A.fld", d1, d2, d3); - UBLOG(logINFO,"Dimensions of bananas geometry: " << d1 << ", " << d2 << ", " << d3); - GbVoxelMatrix3DPtr bananas(new GbVoxelMatrix3D(d1, d2, d3, float(GbVoxelMatrix3D::FLUID))); - readGeoMatrixFromFldFile(pathnameGeo + "/BANANA_8binn_Binear_A.fld", bananas); - UBLOG(logINFO,"Stop read bananas geometry"); - double bananasDx1 = (b_maxX1 - b_minX1) / float(d1); - double bananasDx2 = (b_maxX2 - b_minX2) / float(d2); - double bananasDx3 = (b_maxX3 - b_minX3) / float(d3); - bananas->setVoxelMatrixDelta(float(bananasDx1), float(bananasDx2), float(bananasDx3)); - bananas->setCenterCoordinates(bananaBox->getX1Centroid(), bananaBox->getX2Centroid(), bananaBox->getX3Centroid()); - bananas->setVoxelMatrixMininum(float(b_minX1), float(b_minX2), float(b_minX3)); - - bananas->rotate90aroundY(); - bananas->rotate90aroundY(); - bananas->rotate90aroundZ(); - bananas->rotate90aroundZ(); - -#ifdef CONVEXHULL - std::cout << "translate bananas: " <<bananasHull->getX3Minimum() - bananas->getX3Minimum() - tr1<<"\n"; - bananas->translate(0.0, 0.0, bananasHull->getX3Minimum() - bananas->getX3Minimum() - tr1); - if(opt == "x") bananasHull->rotateAroundPoint(bananaBox->getX1Centroid(), bananaBox->getX2Centroid(), bananaBox->getX3Centroid(), 0.0, 0.0, -90.0); //around X - if(opt == "y") bananasHull->rotateAroundPoint(bananaBox->getX1Centroid(), bananaBox->getX2Centroid(), bananaBox->getX3Centroid(), 0.0, -90.0, 0.0); //around Y - UBLOG(logINFO,"Start write banana hull geometry"); - GbSystem3D::writeGeoObject(bananasHull.get(), pathname+"/banana_hull", WbWriterVtkXmlASCII::getInstance()); - UBLOG(logINFO,"Stop write banana hull geometry"); -#endif - - if(opt == "x") - { - bananas->rotate90aroundX(bananaBox->getX1Centroid(), bananaBox->getX2Centroid(), bananaBox->getX3Centroid()); - bananas->rotate90aroundX(bananaBox->getX1Centroid(), bananaBox->getX2Centroid(), bananaBox->getX3Centroid()); - bananas->rotate90aroundX(bananaBox->getX1Centroid(), bananaBox->getX2Centroid(), bananaBox->getX3Centroid()); - } - else if(opt == "y") - { - bananas->rotate90aroundY(bananaBox->getX1Centroid(), bananaBox->getX2Centroid(), bananaBox->getX3Centroid()); - bananas->rotate90aroundY(bananaBox->getX1Centroid(), bananaBox->getX2Centroid(), bananaBox->getX3Centroid()); - bananas->rotate90aroundY(bananaBox->getX1Centroid(), bananaBox->getX2Centroid(), bananaBox->getX3Centroid()); - } - - UBLOG(logINFO,"Start write bananas geometry"); - bananas->writeToLegacyVTK(pathname + "/bananas.vtk"); - UBLOG(logINFO,"Stop write bananas geometry"); - -#ifdef BANANAS - UBLOG(logINFO,"Start discretization of banana box"); - discretizeGeoObject(bananaBox, grid, dx, gridOriginX1, gridOriginX2, gridOriginX3, GEO_BOX); - UBLOG(logINFO,"Stop discretization of banana box"); - UBLOG(logINFO,"Start discretization of bananas"); - discretizeGeoObject(bananas, grid, dx, gridOriginX1, gridOriginX2, gridOriginX3, GEO_BANANAS); - UBLOG(logINFO,"Stop discretization of bananas"); -#endif - -#ifdef CONVEXHULL - UBLOG(logINFO,"Start discretization of bananas"); - discretizeGeoObject(bananas, grid, dx, gridOriginX1, gridOriginX2, gridOriginX3, GEO_BANANAS, GEO_FLUID, false, true, true, GEO_INVALID, GEO_INVALID); - UBLOG(logINFO,"Stop discretization of bananas"); - UBLOG(logINFO,"Start discretization of hull"); - discretizeGeoObject(bananasHull, grid, dx, gridOriginX1, gridOriginX2, gridOriginX3, GEO_FLUID_IN_HULL, GEO_FLUID, true, false, true, GEO_BANANAS, GEO_INVALID); - UBLOG(logINFO,"Stop discretization of hull"); - UBLOG(logINFO,"Start creation of hull film"); - createHull(grid); - UBLOG(logINFO,"Stop creation of hull film"); - UBLOG(logINFO,"Start discretization of banana box"); - discretizeGeoObject(bananaBox, grid, dx, gridOriginX1, gridOriginX2, gridOriginX3, GEO_BOX, GEO_FLUID, false, true, true, GEO_INVALID, GEO_INVALID); - UBLOG(logINFO,"Stop discretization of banana box"); -#endif - - UBLOG(logINFO,"Start discretization of add walls"); - discretizeGeoObject(addWall1, grid, dx, gridOriginX1, gridOriginX2, gridOriginX3, GEO_BOX, GEO_FLUID, false, true, true, GEO_INVALID, GEO_INVALID); - discretizeGeoObject(addWall2, grid, dx, gridOriginX1, gridOriginX2, gridOriginX3, GEO_BOX, GEO_FLUID, false, true, true, GEO_INVALID, GEO_INVALID); - discretizeGeoObject(addWall3, grid, dx, gridOriginX1, gridOriginX2, gridOriginX3, GEO_BOX, GEO_FLUID, false, true, true, GEO_INVALID, GEO_INVALID); - discretizeGeoObject(addWall4, grid, dx, gridOriginX1, gridOriginX2, gridOriginX3, GEO_BOX, GEO_FLUID, false, true, true, GEO_INVALID, GEO_INVALID); - UBLOG(logINFO,"Stop discretization of add walls"); - - UBLOG(logINFO,"Start set normals"); - int boxNX1 = int(bananaBox->getLengthX1() / dx); - int boxNX2 = int(bananaBox->getLengthX2() / dx); - int boxNX3 = int(bananaBox->getLengthX3() / dx); - - int minX1 = int((bb_minX1 - gridOriginX1) / dx)+1; - int minX2 = int((bb_minX2 - gridOriginX2) / dx)+1; - int minX3 = int((bb_minX3 - gridOriginX3) / dx)+1; - - int maxX1 = minX1 + boxNX1; - int maxX2 = minX2 + boxNX2; - int maxX3 = minX3 + boxNX3; - - UBLOG(logINFO,"minX1="<<minX1<<",minX2= "<<minX2<<",minX3="<<minX3); - UBLOG(logINFO,"maxX1="<<maxX1<<",maxX2= "<<maxX2<<",maxX3="<<maxX3); - - - for (int ix3 = 0; ix3 < grid.getNX3(); ix3++) - for (int ix2 = 0; ix2 < grid.getNX2(); ix2++) - for (int ix1 = 0; ix1 < grid.getNX1(); ix1++) - { - int temp = grid(ix1, ix2, ix3); - setGeoNormal(temp, 0); - grid(ix1, ix2, ix3) = temp; - } - - - setNormalsOnBoundary(minX1, minX2, minX3, minX1, maxX2, maxX3, grid, NORMAL_NEG_X1); - setNormalsOnBoundary(maxX1, minX2, minX3, maxX1, maxX2, maxX3, grid, NORMAL_POS_X1); - setNormalsOnBoundary(minX1, minX2, minX3, maxX1, minX2, maxX3, grid, NORMAL_NEG_X2); - setNormalsOnBoundary(minX1, maxX2, minX3, maxX1, maxX2, maxX3, grid, NORMAL_POS_X2); - setNormalsOnBoundary(minX1, minX2, minX3, maxX1, maxX2, minX3, grid, NORMAL_NEG_X3); - setNormalsOnBoundary(minX1, minX2, maxX3, maxX1, maxX2, maxX3, grid, NORMAL_POS_X3); - UBLOG(logINFO,"Stop set normals"); - - - UBLOG(logINFO,"Start write geo matrix"); - writeMatrixToVtkImageFile(pathname + "/geo_matrix.vtk", grid, dx, gridOriginX1, gridOriginX2, gridOriginX3); - UBLOG(logINFO,"Stop write geo matrix"); - } - 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[]) -{ - - run(argv[1]); - - return 0; -} - diff --git a/apps/cpu/bbone/CMakeLists.txt b/apps/cpu/bbone/CMakeLists.txt deleted file mode 100644 index 42a14bfafe227eae31150ee23d24d9c37622e501..0000000000000000000000000000000000000000 --- a/apps/cpu/bbone/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(bbone) - -INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(bbone BINARY) diff --git a/apps/cpu/bbone/bbone.cpp b/apps/cpu/bbone/bbone.cpp deleted file mode 100644 index 558ff4c9848bac363e4e01ad94fcd450745ea3de..0000000000000000000000000000000000000000 --- a/apps/cpu/bbone/bbone.cpp +++ /dev/null @@ -1,427 +0,0 @@ -#include <iostream> -#include <string> - -#include <vfluids.h> - -using namespace std; - - -void sbonepd(string configname) -{ - try - { - Configuration config; - config.load(configname); - - string pathname = config.getString("pathname"); - string pathGeo = config.getString("pathGeo"); - int numOfThreads = config.getInt("numOfThreads"); - string sampleFilename = config.getString("sampleFilename"); - int pmNX1 = config.getInt("pmNX1"); - int pmNX2 = config.getInt("pmNX2"); - int pmNX3 = config.getInt("pmNX3"); - double lthreshold = config.getDouble("lthreshold"); - double uthreshold = config.getDouble("uthreshold"); - double dp_real = config.getDouble("dp_real"); - string timeSeriesFile = config.getString("timeSeriesFile"); - double restartStep = config.getDouble("restartStep"); - double restartStepStart = config.getDouble("restartStepStart"); - double endTime = config.getDouble("endTime"); - double outTime = config.getDouble("outTime"); - double availMem = config.getDouble("availMem"); - double timeSeriesOutTime = config.getDouble("timeSeriesOutTime"); - bool logToFile = config.getBool("logToFile"); - double deltaT = config.getDouble("deltaT"); - - CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - if (logToFile) - { -#if defined(__unix__) - if (myid == 0) - { - const char* str = pathname.c_str(); - int status = 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()); - } - } - - - - if (myid == 0) UBLOG(logINFO, "Testcase big bone"); - - Grid3DPtr grid(new Grid3D(comm)); - double deltaVoxel = 11.658e-6; - - double dx = deltaVoxel; - - const int blocknx1 = 64; - const int blocknx2 = 64; - const int blocknx3 = 64; - - LBMReal rho_LB = 0.0; - //nueWasser = 1e-6 m^2/s - double nu_real = 1e-6; - LBMReal dt = deltaT; //1e-5; // s (frei gew�hlt) - //dx - frei gew�hlt - // - LBMReal nu_LB = nu_real / (dx*dx / dt); - - - //dp = 50000 Pa - 0 Pa = 50000 Pa - //rho wasser = 1000 kg*m^-3 - double rho_real = 1000; - //dp/rho = 50000/1000 = 50 m^2/s^2 - double dp_div_rho_real = dp_real / rho_real; - - double dp_LB = dp_div_rho_real / ((dx / dt)*(dx / dt)); - - double rhoLBinflow; - rhoLBinflow = dp_LB*3.0; - - double deltax = dx; - - LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - - const int baseLevel = 0; - const int refineLevel = 0; - - double coord[6]; - - ////////////////////////////////////////////////////////////////////////// - //restart - UbSchedulerPtr rSch(new UbScheduler(restartStep, restartStepStart)); - RestartPostprocessor rp(grid, rSch, comm, pathname, RestartPostprocessor::BINARY); - ////////////////////////////////////////////////////////////////////////// - - if (grid->getTimeStep() == 0) - { - if (myid == 0) UBLOG(logINFO, "Neustart.."); - - string boneFilename = pathGeo + sampleFilename; - - //int pmNX1 = 1164; //abmessung einzelbild in x-richtung - //int pmNX2 = 972; //abmessung einzelbild in y richtung - //int pmNX3 = 900; //anzahl der bilder - ////int pmNX3 = 10; //anzahl der bilder - //float lthreshold = 109.0; - //float uthreshold = 255.0; - - GbVoxelMatrix3DPtr bone(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold)); - bone->readMatrixFromRawFile<unsigned char>(boneFilename, GbVoxelMatrix3D::BigEndian); - bone->setVoxelMatrixDelta(deltaVoxel, deltaVoxel, deltaVoxel); - bone->setVoxelMatrixMininum(0.0, 0.0, 0.0); - - if (myid == 0) bone->writeToVTKImageDataASCII(pathname + "/geo/bone"); - - /////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////// - - double offset = 0.5e-3; - //bounding box - double g_minX1 = bone->getX1Minimum(); - double g_minX2 = bone->getX2Minimum(); - double g_minX3 = bone->getX3Minimum() - offset; - - double g_maxX1 = bone->getX1Maximum(); - double g_maxX2 = bone->getX2Maximum(); - double g_maxX3 = bone->getX3Maximum() + offset; - - double blockLength = (double)blocknx1*deltax; - - grid->setPeriodicX1(false); - grid->setPeriodicX2(false); - grid->setPeriodicX3(false); - grid->setDeltaX(deltax); - grid->setBlockNX(blocknx1, blocknx2, blocknx3); - - 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()); - - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - if (myid == 0) - { - UBLOG(logINFO, "Parameters:"); - UBLOG(logINFO, "rho_LB = " << rho_LB); - UBLOG(logINFO, "nu_LB = " << nu_LB); - UBLOG(logINFO, "dp_LB = " << dp_LB); - UBLOG(logINFO, "dx = " << dx << " m"); - UBLOG(logINFO, "dt = " << dt << " s"); - UBLOG(logINFO, "rho_real = " << rho_real << " kg*m^-3"); - UBLOG(logINFO, "nu_real = " << nu_real << " m^2/s"); - UBLOG(logINFO, "dp_real = " << dp_real << " Pa"); - - UBLOG(logINFO, "number of levels = " << refineLevel + 1); - UBLOG(logINFO, "numOfThreads = " << numOfThreads); - UBLOG(logINFO, "path = " << pathname); - UBLOG(logINFO, "Preprozess - start"); - } - - //cylinder - double radius = 0.0036; - double cx1 = 0.007; - double cx2 = 0.0046; - - GbObject3DPtr cylinder(new GbCylinder3D(cx1, cx2, g_minX3 - offset, cx1, cx2, g_maxX3 + offset, radius)); - GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/cylinder", WbWriterVtkXmlBinary::getInstance()); - - //inflow - GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 + blockLength, g_maxX2 + blockLength, g_minX3)); - if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname + "/geo/geoInflow", WbWriterVtkXmlASCII::getInstance()); - - //outflow - GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_maxX3, g_maxX1 + blockLength, g_maxX2 + blockLength, g_maxX3 + blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + "/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); - - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - - //bone interactor - int bcOptionBone = 1; //0=simple Bounce Back, 1=quadr. BB, 2=thin wall - D3Q27BoundaryConditionAdapterPtr bcBone(new D3Q27NoSlipBCAdapter(bcOptionBone)); - D3Q27InteractorPtr boneInt(new D3Q27Interactor(bone, grid, bcBone, Interactor3D::SOLID)); - - //wall interactors - int bcOptionWall = 1; //0=simple Bounce Back, 1=quadr. BB, 2=thin wall - D3Q27BoundaryConditionAdapterPtr bcWall(new D3Q27NoSlipBCAdapter(bcOptionWall)); - D3Q27InteractorPtr cylInt(new D3Q27Interactor(cylinder, grid, bcWall, Interactor3D::INVERSESOLID)); - - D3Q27BoundaryConditionAdapterPtr denBCAdapterInflow(new D3Q27DensityBCAdapter(rhoLBinflow)); - denBCAdapterInflow->setSecondaryBcOption(0); - D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoInflow, grid, denBCAdapterInflow, Interactor3D::SOLID)); - - //outflow - D3Q27BoundaryConditionAdapterPtr denBCAdapterOutflow(new D3Q27DensityBCAdapter(rho_LB)); - denBCAdapterOutflow->setSecondaryBcOption(0); - D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoOutflow, grid, denBCAdapterOutflow, Interactor3D::SOLID)); - - //////////////////////////////////////////// - //METIS - Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW)); - //////////////////////////////////////////// - //Zoltan - //Grid3DVisitorPtr zoltanVisitor(new ZoltanPartitioningGridVisitor(comm, D3Q27System::BSW, 1)); - ////////////////////////////////////////////////////////////////////////// - /////delete solid blocks - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - intHelper.addInteractor(boneInt); - intHelper.addInteractor(cylInt); - intHelper.addInteractor(inflowInt); - intHelper.addInteractor(outflowInt); - intHelper.selectBlocks(); - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end"); - ////////////////////////////////////// - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor); - grid->accept(setConnsVisitor); - - //domain decomposition for threads - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - ppblocks->update(0); - ppblocks.reset(); - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nodb = (blocknx1)* (blocknx2)* (blocknx3); - unsigned long nod = nob * (blocknx1)* (blocknx2)* (blocknx3); - unsigned long nodg = nob * (blocknx1 + gl) * (blocknx2 + gl) * (blocknx3 + gl); - double needMemAll = double(nodg*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - if (myid == 0) - { - UBLOG(logINFO, "Number of blocks = " << nob); - UBLOG(logINFO, "Number of nodes = " << nod); - 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*nodb); - } - UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); - } - - LBMKernel3DPtr kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx1, blocknx2, blocknx3, LBMKernelETD3Q27CCLB::NORMAL)); - - //BCProcessorPtr bcProc(new D3Q27ETForThinWallBCProcessor()); - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - BoundaryConditionPtr densityBC(new NonEqDensityBoundaryCondition()); - BoundaryConditionPtr noSlipBC(new NoSlipBoundaryCondition()); - bcProc->addBC(densityBC); - bcProc->addBC(noSlipBC); - kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nu_LB, availMem, needMem); - grid->accept(kernelVisitor); - - //BC - intHelper.setBC(); - - BoundaryConditionBlockVisitor bcVisitor; - grid->accept(bcVisitor); - - //Press*1.6e8+(14.76-coordsX)/3.5*5000 - //initialization of distributions - mu::Parser fct; - fct.SetExpr("(x3max-x3)/l*dp*3.0"); - fct.DefineConst("dp", dp_LB); - fct.DefineConst("x3max", g_maxX3); - fct.DefineConst("l", g_maxX3-g_minX3); - - D3Q27ETInitDistributionsBlockVisitor initVisitor(nu_LB, rho_LB); - initVisitor.setRho(fct); - //initVisitor.setVx1(fct); - //initVisitor.setVx1(0.0); - grid->accept(initVisitor); - - //Postrozess - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, true)); - ppgeo->update(0); - ppgeo.reset(); - - - coord[0] = bone->getX1Minimum(); - coord[1] = bone->getX2Minimum(); - coord[2] = bone->getX3Minimum();//cylinder->getX3Centroid(); - coord[3] = bone->getX1Maximum(); - coord[4] = bone->getX2Maximum(); - coord[5] = bone->getX3Maximum(); //cylinder->getX3Centroid(); - - //////////////////////////////////////////////////////// - FILE * pFile; - string str = pathname + "/checkpoints/coord.txt"; - pFile = fopen(str.c_str(), "w"); - fprintf(pFile, "%g\n", coord[0]); - fprintf(pFile, "%g\n", coord[1]); - fprintf(pFile, "%g\n", coord[2]); - fprintf(pFile, "%g\n", coord[3]); - fprintf(pFile, "%g\n", coord[4]); - fprintf(pFile, "%g\n", coord[5]); - fclose(pFile); - //////////////////////////////////////////////////////// - grid->addInteractor(inflowInt); - if (myid == 0) UBLOG(logINFO, "Preprozess - end"); - } - else - { - Grid3D::Interactor3DSet interactors = grid->getInteractors(); - interactors[0]->setGrid3D(grid); - boost::dynamic_pointer_cast<D3Q27Interactor>(interactors[0])->deleteBCAdapter(); - D3Q27BoundaryConditionAdapterPtr denBCAdapterFront(new D3Q27DensityBCAdapter(rhoLBinflow)); - boost::dynamic_pointer_cast<D3Q27Interactor>(interactors[0])->addBCAdapter(denBCAdapterFront); - interactors[0]->updateInteractor(); - - UBLOG(logINFO, "rhoLBinflow = "<<rhoLBinflow); - - BoundaryConditionBlockVisitor bcVisitor; - grid->accept(bcVisitor); - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor); - grid->accept(setConnsVisitor); - - //////////////////////////////////////////////////////// - FILE * pFile; - string str = pathname + "/checkpoints/coord.txt"; - pFile = fopen(str.c_str(), "r"); - fscanf(pFile, "%lg\n", &coord[0]); - fscanf(pFile, "%lg\n", &coord[1]); - fscanf(pFile, "%lg\n", &coord[2]); - fscanf(pFile, "%lg\n", &coord[3]); - fscanf(pFile, "%lg\n", &coord[4]); - fscanf(pFile, "%lg\n", &coord[5]); - fclose(pFile); - //////////////////////////////////////////////////////// - - if (myid == 0) UBLOG(logINFO, "Restart - end"); - } - UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); - NUPSCounterPostprocessor npr(grid, nupsSch, numOfThreads, comm); - - UbSchedulerPtr stepSch(new UbScheduler(outTime)); - //stepSch->addSchedule(10, 10, 10); - //stepSch->addSchedule(100, 100, 100); - //stepSch->addSchedule(1000, 1000, 1000); - //stepSch->addSchedule(100, 1500, 2000); - //stepSch->addSchedule(10000, 10000, 10000); - - D3Q27MacroscopicQuantitiesPostprocessor pp(grid, stepSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv); - - double dxd2 = deltax / 2.0; - D3Q27IntegrateValuesHelperPtr ih1(new D3Q27IntegrateValuesHelper(grid, comm, coord[0], coord[1], coord[2] - dxd2*10.0, - coord[3], coord[4], coord[2] - dxd2*10.0 - 2.0*dxd2)); - D3Q27IntegrateValuesHelperPtr ih2(new D3Q27IntegrateValuesHelper(grid, comm, coord[0], coord[1], coord[2], coord[3], coord[4], coord[5])); - D3Q27IntegrateValuesHelperPtr ih3(new D3Q27IntegrateValuesHelper(grid, comm, coord[0], coord[1], coord[5] + dxd2*10.0, - coord[3], coord[4], coord[5] + dxd2*10.0 + 2.0*dxd2)); - - if (myid == 0) GbSystem3D::writeGeoObject(ih1->getBoundingBox().get(), pathname + "/geo/ih1", WbWriterVtkXmlBinary::getInstance()); - if (myid == 0) GbSystem3D::writeGeoObject(ih2->getBoundingBox().get(), pathname + "/geo/ih2", WbWriterVtkXmlBinary::getInstance()); - if (myid == 0) GbSystem3D::writeGeoObject(ih3->getBoundingBox().get(), pathname + "/geo/ih3", WbWriterVtkXmlBinary::getInstance()); - - UbSchedulerPtr stepMV(new UbScheduler(timeSeriesOutTime)); - - TimeseriesPostprocessor tsp1(grid, stepMV, ih1, pathname+timeSeriesFile+"_1", comm); - TimeseriesPostprocessor tsp2(grid, stepMV, ih2, pathname+timeSeriesFile+"_2", comm); - TimeseriesPostprocessor tsp3(grid, stepMV, ih3, pathname+timeSeriesFile+"_3", comm); - - if (myid == 0) - { - UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - } - - CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, stepMV)); - if (myid == 0) UBLOG(logINFO, "Simulation-start"); - calculation->calculate(); - if (myid == 0) UBLOG(logINFO, "Simulation-end"); - } - catch (exception& e) - { - cerr << e.what() << endl << flush; - } - catch (string& s) - { - cerr << s << endl; - } - catch (...) - { - cerr << "unknown exception" << endl; - } - -} -////////////////////////////////////////////////////////////////////////// -int main(int argc, char* argv[]) -{ - - if (argv != NULL) - { - if (argv[1] != NULL) - sbonepd(string(argv[1])); - } - - return 0; -} diff --git a/apps/cpu/bbone/configBombadilBone.txt b/apps/cpu/bbone/configBombadilBone.txt deleted file mode 100644 index 880c0cce60766fc9c4d8327ed275a9bda0d072ba..0000000000000000000000000000000000000000 --- a/apps/cpu/bbone/configBombadilBone.txt +++ /dev/null @@ -1,46 +0,0 @@ -# -#Simulation parameters for determitatoin of permeability -#SBP120 - -pathname = d:/temp/bbone2 -pathGeo = d:/Data/Bone/BigBone -numOfThreads = 4 -availMem = 3e9 -logToFile = false - -#porous media -#rawFile = false -sampleFilename = /cyl_bone2.raw - -#diminsions [voxel] -pmNX1 = 1164 -pmNX2 = 972 -pmNX3 = 900 - -#threshold -lthreshold = 109 -uthreshold = 255 - -#diminsions [m] -#pmL1 = 1.87e-3 -#pmL2 = 1.87e-3 -#pmL3 = 1.87e-3 - -#grid -#blocknx = 30 -#nx3 = 5 -#blocknx = 50 -#nx3 = 10 -#spongeLayer=true - -#physic -dp_real = 1 - -timeSeriesFile = /timeseries/bone1 -timeSeriesOutTime = 10 - -restartStep = 20000 -restartStepStart=20000 - -endTime = 60000 -outTime = 100 diff --git a/apps/cpu/bbone/configLudwigBone.cfg b/apps/cpu/bbone/configLudwigBone.cfg deleted file mode 100644 index aee907cae82eccf522b8ed7d29cdca57a7e6f018..0000000000000000000000000000000000000000 --- a/apps/cpu/bbone/configLudwigBone.cfg +++ /dev/null @@ -1,33 +0,0 @@ -# -#Simulation parameters for determitatoin of permeability -#SBP120 - -pathname = /hpc3lustre/work/koskuche/Bone/BigBone2 -pathGeo = /hpc3lustre/work/koskuche/Bone/data/bbone -numOfThreads = 4 -availMem = 11e9 -logToFile = true - -#porous media -sampleFilename = /cyl_bone2.raw - -#diminsions [voxel] -pmNX1 = 1164 -pmNX2 = 972 -pmNX3 = 900 - -#threshold -lthreshold = 109 -uthreshold = 255 - -#physic -dp_real = 1 - -timeSeriesFile = /timeseries/bone1 -timeSeriesOutTime = 10 - -restartStep = 20000 -restartStepStart=20000 - -endTime = 60000 -outTime = 10000 diff --git a/apps/cpu/bond_test/CMakeLists.txt b/apps/cpu/bond_test/CMakeLists.txt deleted file mode 100644 index 1bb473c949127f4deedabd11f23e02f3478db7d5..0000000000000000000000000000000000000000 --- a/apps/cpu/bond_test/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(bond_test) - -INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(bond_test BINARY) diff --git a/apps/cpu/bond_test/bond_test.cpp b/apps/cpu/bond_test/bond_test.cpp deleted file mode 100644 index fd77c285f540034b8c1d432097c45d9d0c6e9a7c..0000000000000000000000000000000000000000 --- a/apps/cpu/bond_test/bond_test.cpp +++ /dev/null @@ -1,500 +0,0 @@ -#ifdef VF_BOND - -#include <iostream> -#include <string> - -#include <vfluids.h> - -#include "fbond.h" -#include "Version.h" - - -using namespace std; - -int agent_main(); -void simulation(const char *cstr); - -int main(int argc, char* argv[]) -{ - int returnval = 0; - try - { - bond::init(); - returnval = agent_main(); - bond::finalize(); - - //CommunicatorPtr comm(new BondCommunicator()); - //cout<<"Bundle ID = "<<comm->getBundleID()<<", MPI rank = "<<comm->getProcessID()<<", root = "<<comm->getRoot()<<endl; - - //if ( argv != NULL ) - //{ - // if (argc > 1) - // { - // simulation(argv[1]); - // } - // else - // { - // cout << "Configuration file must be set!: " << argv[0] << " <config file>" << endl << std::flush; - // } - //} - } - catch(std::runtime_error& e) - { - std::cerr<<"\nRUNTIME ERROR: "<<e.what()<<"\n"<<std::endl; - } - catch(...) - { - std::cerr<<"unknown error"<<std::endl; - } - return returnval; -} - - -int agent_main() -{ - cout<<"\n=== bond lib info:\n"<<bond::Version::info()<<"\n===\n\n"; - - // try to work around a bug in mpich (at least mpich2-1.4.1p1 and mpich2-1.5a1) - int _mpiInitialized = (int)false; - MPI_Initialized(&_mpiInitialized); - if(!_mpiInitialized) - MPI_Init(0, 0); - - int mpi_rank; - MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank); - int mpi_size; - MPI_Comm_size(MPI_COMM_WORLD, &mpi_size); - cout<<"I am process "<<bond::processID()<<" of "<<bond::processCount() - <<", bundle ID "<<bond::bundleID()<<" of "<<bond::bundleCount() - <<", MPI rank "<<mpi_rank<<" of "<<mpi_size<<"\n"; - - if(bond::processID() == 0) - { - try - { - Sleep(10000); - // send - vector<double> data(42); - data[0] = 123.1; - data[data.size()-1] = -999.1; - - int dst_rank = 1; - int msg_tag = 42; - cout<<"["<<bond::processID()<<"] nonblocking send ... "<<data[0]<<"..."<<data[data.size()-1]<<"\n"; - std::tr1::shared_ptr<bond::FutureSend> fus = bond::sendFuture(&data[0], data.size(), MPI_DOUBLE, dst_rank, msg_tag); - - vector<double> data2(42); - data2[0] = 123.2; - data2[data2.size()-1] = -999.2; - cout<<"["<<bond::processID()<<"] blocking send ... "<<data2[0]<<"..."<<data2[data.size()-1]<<"\n"; - bond::sendComplete(&data2[0], data2.size(), MPI_DOUBLE, dst_rank, msg_tag); - - //Sleep(10000); - - fus->complete(); - } - catch(std::runtime_error& e) - { - std::cerr<<"\nSEND ERROR: "<<e.what()<<"\n"<<std::endl; - } - } - else - { - try - { - // receive - vector<double> data(42); - int src_rank = 0; - cout<<"["<<bond::processID()<<"] nonblocking receive ...\n"; - int msg_tag = 42; - std::tr1::shared_ptr<bond::FutureReceive> fur = bond::receiveFuture(&data[0], data.size(), MPI_DOUBLE, src_rank, msg_tag); - - - //Sleep(10000); - - cout<<"["<<bond::processID()<<"] blocking receive ...\n"; - vector<double> data2(42); - bond::receiveComplete(&data2[0], data2.size(), MPI_DOUBLE, src_rank, msg_tag); - cout<<"received blocking "<<data2[0]<<"..."<<data2[data.size()-1]<<"\n"; - - - - fur->complete(); - cout<<"received nonblocking "<<data[0]<<"..."<<data[data.size()-1]<<"\n"; - } - catch(std::runtime_error& e) - { - std::cerr<<"\nRECEIVE ERROR: "<<e.what()<<"\n"<<std::endl; - } - } - - cout<<"process "<<bond::processID()<<" done\n"; - return 0; -} -////////////////////////////////////////////////////////////////////////// -void simulation(const char *cstr) -{ - try - { - ConfigFileReader cf(cstr); - if ( !cf.read() ) - { - std::string exceptionText = "Unable to read configuration file\n"; - throw exceptionText; - } - - //UbLog::reportingLevel() = logDEBUG5; - - string machine = QUOTEME(CAB_MACHINE); - string pathname = cf.getValue("path"); - int numOfThreads = UbSystem::stringTo<int>(cf.getValue("numOfThreads")); - double availMem = 0; - - CommunicatorPtr comm; - string comm_type = cf.getValue("comm"); - if(comm_type == "MPI") - comm = vf::parallel::MPICommunicator::getInstance(); - else if(comm_type == "BOND") - comm = BondCommunicator::getInstance(); - - int myid = comm->getProcessID(); - int mybundle = comm->getBundleID(); - int root = comm->getRoot(); - - //UbLog::reportingLevel() = logDEBUG5; - - if(machine == "BOMBADIL") - { - availMem = 3.0e9; - } - else if(machine == "M01" || machine == "M02") - { - availMem = 12.0e9; - - if(myid==root && mybundle==root) - { - stringstream logFilename; - logFilename << pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - } - else throw UbException(UB_EXARGS, "unknown CAB_MACHINE"); - - double dx = 1; - - const int blocknx1 = UbSystem::stringTo<int>(cf.getValue("blocknx1")); //16; - const int blocknx2 = UbSystem::stringTo<int>(cf.getValue("blocknx2"));//16; - const int blocknx3 = UbSystem::stringTo<int>(cf.getValue("blocknx3"));//16; - - const int gridNx1 = UbSystem::stringTo<int>(cf.getValue("gridNx1"));//3; - const int gridNx2 = UbSystem::stringTo<int>(cf.getValue("gridNx2"));//3; - const int gridNx3 = UbSystem::stringTo<int>(cf.getValue("gridNx3"));//3; - - - double L1 = gridNx1*blocknx1; - double L2, L3, H; - L2 = L3 = H = gridNx2*blocknx1; - - LBMReal radius = 7; - LBMReal uLB = 0.05; - LBMReal Re = 300.0; - LBMReal rhoLB = 0.0; - LBMReal l = L2 / dx; - LBMReal nueLB = (((4.0/9.0)*uLB)*2.0*(radius/dx))/Re; - - - LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - - const int baseLevel = 0; - const int refineLevel = UbSystem::stringTo<int>(cf.getValue("refineLevel")); - - //obstacle - GbObject3DPtr cylinder(new GbCylinder3D(L1*0.5, L2*0.5, 0, L1*0.5, L2*0.5, L3, radius)); - GbSystem3D::writeGeoObject(cylinder.get(),pathname + "/geo/cylinder", WbWriterVtkXmlBinary::getInstance()); - - D3Q27InteractorPtr cylinderInt; - - //bounding box - double d_minX1 = 0.0; - double d_minX2 = 0.0; - double d_minX3 = 0.0; - - double d_maxX1 = L1; - double d_maxX2 = L2; - double d_maxX3 = L3; - - double offs = dx; - - //double g_minX1 = d_minX1-offs-0.499999*dx; - double g_minX1 = d_minX1-offs; - double g_minX2 = d_minX2-offs; - double g_minX3 = d_minX3-offs; - - double g_maxX1 = d_maxX1+offs; - double g_maxX2 = d_maxX2+offs; - double g_maxX3 = d_maxX3+offs; - - double blockLength = blocknx1*dx; - - //refinement area - double off = 1; - GbObject3DPtr refineCube(new GbCuboid3D(cylinder->getX1Minimum()-off, cylinder->getX2Minimum()-off, cylinder->getX3Minimum(), - cylinder->getX1Maximum()+off, cylinder->getX2Maximum()+off, cylinder->getX3Maximum())); - - Grid3DPtr grid(new Grid3D(comm, blocknx1, blocknx2, blocknx3, gridNx1, gridNx2, gridNx3)); - - //grid->setPeriodicX1(true); - //grid->setPeriodicX2(true); - //grid->setPeriodicX3(true); - - - if(myid ==0) - { - UBLOG(logINFO,"Parameters:"); - UBLOG(logINFO,"L = " << L2/dx ); - UBLOG(logINFO,"v = " << uLB ); - UBLOG(logINFO,"rho = " << rhoLB ); - UBLOG(logINFO,"nue = " << nueLB ); - UBLOG(logINFO,"Re = " << Re ); - UBLOG(logINFO,"dx = " << dx ); - UBLOG(logINFO,"number of levels = " << refineLevel+1 ); - UBLOG(logINFO,"numOfThreads = " << numOfThreads ); - UBLOG(logINFO,"Preprozess - start"); - } - - if(myid ==0) GbSystem3D::writeGeoObject(refineCube.get(),pathname + "/geo/refineCube", WbWriterVtkXmlBinary::getInstance()); - - //walls - GbCuboid3DPtr addWallYmin (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_minX2, d_maxX3+4.0*blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname+"/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmin (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_minX3)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallYmax (new GbCuboid3D(d_minX1-4.0*blockLength, d_maxX2, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmax (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_maxX3, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance()); - - //inflow - GbCuboid3DPtr geoInflow (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_minX1, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname+"/geo/geoInflow", WbWriterVtkXmlASCII::getInstance()); - - //outflow - GbCuboid3DPtr geoOutflow (new GbCuboid3D(d_maxX1, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); - - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm)); - - if (refineLevel > 0) - { - if(myid == 0) UBLOG(logINFO,"Refinement - start"); - RefineCrossAndInsideGbObjectBlockVisitor refVisitor(refineCube, refineLevel); - grid->accept(refVisitor); - - RatioBlockVisitor ratioVisitor(refineLevel); - grid->accept(ratioVisitor); - - RatioSmoothBlockVisitor ratioSmoothVisitor(refineLevel); - grid->accept(ratioSmoothVisitor); - - OverlapBlockVisitor overlapVisitor(refineLevel); - grid->accept(overlapVisitor); - - std::vector<int> dirs; - D3Q27System::getLBMDirections(dirs); - SetInterpolationDirsBlockVisitor interDirsVisitor(dirs); - grid->accept(interDirsVisitor); - if(myid == 0) UBLOG(logINFO,"Refinement - end"); - } - - - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - - if(comm_type == "MPI") - { - MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B, true, numOfThreads); - grid->accept( metisVisitor ); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - } - else if(comm_type == "BOND") - { - MetisPartitioningWithBundlesGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B, true, numOfThreads); - grid->accept( metisVisitor ); - D3Q27BondSetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - setConnsVisitor.activate(); - } - - int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption)); - cylinderInt = D3Q27InteractorPtr ( new D3Q27Interactor(cylinder, grid, bcObst,Interactor3D::SOLID)); - - //walls - D3Q27InteractorPtr addWallYminInt(new D3Q27Interactor(addWallYmin, grid, bcObst,Interactor3D::SOLID)); - D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, bcObst,Interactor3D::SOLID)); - D3Q27InteractorPtr addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, bcObst,Interactor3D::SOLID)); - D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, bcObst,Interactor3D::SOLID)); - - mu::Parser fct; - fct.SetExpr("16*U*x2*x3*(H-x2)*(H-x3)/H^4"); - fct.DefineConst("U", uLB); - fct.DefineConst("H", H); - - //inflow - D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter (true, false ,false ,fct, 0, D3Q27BCFunction::INFCONST)); - velBCAdapter->setSecondaryBcOption(2); - D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr( new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID)); - - //outflow - D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB)); - D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr( new D3Q27Interactor(geoOutflow, grid, denBCAdapter,Interactor3D::SOLID)); - - //SolidBlocksHelper sd(grid, comm); - //sd.addInteractor(cylinderInt); - //sd.addInteractor(addWallYminInt); - //sd.addInteractor(addWallZminInt); - //sd.addInteractor(addWallYmaxInt); - //sd.addInteractor(addWallZmaxInt); - //sd.addInteractor(inflowInt); - //sd.addInteractor(outflowInt); - - //sd.deleteSolidBlocks(); - - //grid->accept( metisVisitor ); - - //grid->getBlock(0)->setBundle(0); - //grid->getBlock(0)->setRank(0); - //grid->getBlock(1)->setBundle(1); - //grid->getBlock(1)->setRank(1); - //grid->getBlock(2)->setBundle(0); - //grid->getBlock(2)->setRank(0); - //grid->getBlock(3)->setBundle(1); - //grid->getBlock(3)->setRank(1); - //grid->getBlock(4)->setBundle(0); - //grid->getBlock(4)->setRank(0); - //grid->getBlock(5)->setBundle(1); - //grid->getBlock(5)->setRank(1); - //grid->getBlock(6)->setBundle(1); - //grid->getBlock(6)->setRank(1); - //grid->getBlock(7)->setBundle(0); - //grid->getBlock(7)->setRank(0); - - ppblocks->update(0); - ppblocks.reset(); - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nod = nob * (blocknx1+gl) * (blocknx2+gl) * (blocknx3+gl); - - double needMemAll = double(nod*(27*sizeof(double) + sizeof(int) + sizeof(float)*4)); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - if(myid == 0) - { - UBLOG(logINFO,"Number of blocks = " << nob); - UBLOG(logINFO,"Number of nodes = " << nod); - UBLOG(logINFO,"Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO,"Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO,"Available memory per process = " << availMem << " bytes"); - } - - //LBMKernel3DPtr kernel(new LBMKernelETD3Q27Cascaded(blocknx1, blocknx2, blocknx3)); - //LBMKernel3DPtr kernel(new LBMKernelETD3Q27BGK(blocknx1, blocknx2, blocknx3, true)); - //option = 0 - ohne param., option = 1 - mit param. - int option = 0; - LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(blocknx1, blocknx2, blocknx3, LBMKernelETD3Q27CCLB::NORMAL)); - - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem); - grid->accept(kernelVisitor); - - if (refineLevel > 0) - { - D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - //walls - grid->addAndInitInteractor(addWallYminInt); - grid->addAndInitInteractor(addWallZminInt); - grid->addAndInitInteractor(addWallYmaxInt); - grid->addAndInitInteractor(addWallZmaxInt); - - //obstacle - //grid->addAndInitInteractor(cylinderInt); - - //inflow - grid->addAndInitInteractor(inflowInt); - - //outflow - grid->addAndInitInteractor(outflowInt); - - //initialization of distributions - D3Q27ETInitDistributionsBlockVisitor initVisitor(nueLB, rhoLB); - initVisitor.setVx1(fct); - grid->accept(initVisitor); - - //Postrozess - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv, true)); - ppgeo->update(0); - ppgeo.reset(); - - if(myid == 0) UBLOG(logINFO,"Preprozess - end"); - - //double outTime = 100.0; - UbSchedulerPtr stepSch(new UbScheduler()); - stepSch->addSchedule(100, 0, 1000); - //nodeSch->addSchedule(1000, 1000, 10000); - //nodeSch->addSchedule(10000, 10000, 50000); - //nodeSch->addSchedule(100, 100, 10000); - - D3Q27MacroscopicQuantitiesPostprocessor pp(grid, stepSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), conv, comm); - - UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); - NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm); - - UbSchedulerPtr visSch(new UbScheduler(10.0)); - double endTime = UbSystem::stringTo<int>(cf.getValue("endTime")); - //CalculatorPtr calc = CalculatorPtr(new FETOLCalculator()); - //CalculatorPtr calc = CalculatorPtr(new Calculator()); - //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, stepSch, calc)); - CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, stepSch)); - //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; - } - -} -#endif - - - - - - - - - - - diff --git a/apps/cpu/bond_test/start.bat b/apps/cpu/bond_test/start.bat deleted file mode 100644 index b824f13a4f7d5f3feb8f7084ea708a9e90b86127..0000000000000000000000000000000000000000 --- a/apps/cpu/bond_test/start.bat +++ /dev/null @@ -1,6 +0,0 @@ -@echo off -set FETOL_BUNDLE_INFO_PATH=c:\Projects\FETOL\dev\bond_config\YAML_Bond_ConfigFile.yaml -set FETOL_CLASSPATH=c:\Projects\FETOL\dev\fetol_bond\fetol_bond.jar - -set FETOL_BUNDLE_ID=%1 -call %2 \ No newline at end of file diff --git a/apps/cpu/bone/CMakeLists.txt b/apps/cpu/bone/CMakeLists.txt deleted file mode 100644 index 0677fd51b64a263a209cc16569ce62d3b2741ad3..0000000000000000000000000000000000000000 --- a/apps/cpu/bone/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(bone) - -INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(bone BINARY) diff --git a/apps/cpu/bone/bone.cpp b/apps/cpu/bone/bone.cpp deleted file mode 100644 index 17d0eca37975fa2cee87aa87f815d7237673111d..0000000000000000000000000000000000000000 --- a/apps/cpu/bone/bone.cpp +++ /dev/null @@ -1,568 +0,0 @@ -#include <iostream> -#include <string> -#include <math.h> - -#include <vfluids.h> - -using namespace std; - -void run(const char *cstr1, const char *cstr2) -{ - try - { - string pathname; - string pathGeo; - string pathLog; - int numOfThreads = 1; - bool logfile = false; - stringstream logFilename; - double availMem = 0; - - CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - string machine = string(cstr1); - - if(machine == "my") - { - pathname = "d:/temp/bone"; - pathGeo = "d:/Data/Bone/BigBone"; - pathLog = "d:/temp/bone"; - numOfThreads = 4; - logfile = false; - availMem = 15.0e9; - } - else if(machine == "Ludwig") - { - pathname = "/work/koskuche/SFB880/plate2Con"; - pathGeo = "/home/koskuche/data/plate"; - pathLog = pathname; - numOfThreads = 8; - availMem = 12.0e9;///8*numOfThreads; - logfile = true; - } - else if(machine == "HLRS") - { - pathname = "/univ_1/ws1/ws/xrmkuchr-plate3-0"; - pathGeo = "/zhome/academic/HLRS/xrm/xrmkuchr/data/plate"; - pathLog = "/zhome/academic/HLRS/xrm/xrmkuchr/work/plate"; - numOfThreads = 16; - availMem = 2.0e9; - logfile = true; - } - else if(machine == "HLRN") - { - pathname = "/gfs1/work/niivfcpu/scratch/plateEx"; - pathGeo = "/gfs1/work/niivfcpu/data/plate"; - pathLog = pathname; - numOfThreads = 24; - availMem = 64.0e9/24.0*numOfThreads; - logfile = true; - } - else throw UbException(UB_EXARGS, "unknown CAB_MACHINE"); - -#if defined(__unix__) - if (myid==0) - { - const char* str = pathLog.c_str(); - int status=mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); - } -#endif - - if(myid == 0 && logfile) - { - //UbLog::reportingLevel() = logDEBUG5; - logFilename << pathLog + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - - if(myid==0) UBLOG(logINFO,"Testcase bone"); - - string boneFilename = pathGeo + "/bone.raw"; - - int pmNX1=1800; //abmessung einzelbild in x-richtung - int pmNX2=972; //abmessung einzelbild in y richtung - int pmNX3=1164; //anzahl der bilder - float lthreshold = 27756.0; - float uthreshold = 65535.0; - - GbVoxelMatrix3DPtr pmMesh(new GbVoxelMatrix3D(pmNX1,pmNX2,pmNX3,0,lthreshold,uthreshold)); - pmMesh->readMatrixFromRawFile<unsigned short>(boneFilename, GbVoxelMatrix3D::BigEndian); - - double scaleFactor = 0.001; - double delta = 11.0*scaleFactor; - pmMesh->setVoxelMatrixDelta(delta, delta, delta); - - pmMesh->setVoxelMatrixMininum(0.0, 0.0, 0.0); - if(myid == 0) pmMesh->writeToLegacyVTKBinary(pathname+"/geo/bone"); - - /////////////////////////////////////////////////////// - return; - - - /////////////////Knotenabmessungen: - //int nx[3], blocknx[3]; - //nx[0] = 90;//240;//120;//60;//86;//43;//65;//50; //l�nge - //nx[1] = 2;//2;//6;///1;//5;// //breite - //nx[2] = 30;//64;//32;//18;//5;//15;//15; //h�he gebiet - //blocknx[0] = 16;//10;//6; - //blocknx[1] = 16;//10;//6; - //blocknx[2] = 16;//10;//6; - - //int baseLevel = 0; - //int refineLevel = 4; - - //double H = 600.0; // Kanalh�he [mm] - //double cdx = H/(double)(nx[2]*blocknx[2]); - //double fdx = cdx/double(1<<refineLevel); - - ////double h = 200.0; // gew�nschte Plattenh�he in Gitterpunkten - ////double fdx = plate->getLengthX3()/h; - ////double cdx = fdx*double(1<<refineLevel); - - //LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter()); - - //////////////////////////////////////////////////////////////////////////// - ////physik - //////////////////////////////////////////////////////////////////////////// - //double Re = 1133333.3333333335; - //double rhoLB = 0.0; - //double uLB = 0.1; - //double lReal = 1000; //Plattenl�nge in mm - //double nuLB = (uLB*(lReal/cdx))/Re; - - //int sizeSP=4; - //mu::Parser spongeLayer; - //spongeLayer.SetExpr("x1>=(sizeX-sizeSP)/dx ? (sizeX-(x1+1))/sizeSP/2.0 + 0.5 : 1.0"); - //spongeLayer.DefineConst("sizeX", nx[0]*blocknx[0]); - //spongeLayer.DefineConst("sizeSP", sizeSP*blocknx[0]); - - //Grid3DPtr grid(new Grid3D(comm)); - - //////////////////////////////////////////////////////////////////////////// - ////restart - //UbSchedulerPtr rSch(new UbScheduler(1000,1000,10000000)); - //RestartPostprocessor rp(grid, rSch, comm, pathname, RestartPostprocessor::BINARY); - //////////////////////////////////////////////////////////////////////////// - - //if (grid->getTimeStep() == 0) - //{ - - // if(myid==0) UBLOG(logINFO,"Neustart.."); - - // ////////////////////////////////////////////////////////////////////////// - // //Platte - // GbTriFaceMesh3DPtr plate (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(PlatteFilename,"Netz")); - // plate->rotate(90.0,0.0,0.0); //TriFacMesh-KO-System anders als LB-KO-System - // if(myid == 0) GbSystem3D::writeGeoObject( plate.get(), pathname+"/geo/platte", WbWriterVtkXmlBinary::getInstance() ); - // ////////////////////////////////////////////////////////////////////////// - // // Zackenband - // ////////////////////////////////////////////////////////////////////////// - // GbTriFaceMesh3DPtr meshBand1 (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand")); - // meshBand1->translate(-495, -700, -19.94); - // if(myid == 0) GbSystem3D::writeGeoObject( meshBand1.get(), pathname+"/geo/Band1", WbWriterVtkXmlASCII::getInstance() ); - // // Zackenband2 - // GbTriFaceMesh3DPtr meshBand2(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand2")); - // meshBand2->translate(-495, -705, -19.94); - // if(myid == 0) GbSystem3D::writeGeoObject( meshBand2.get(), pathname+"/geo/Band2", WbWriterVtkXmlASCII::getInstance() ); - // // Zackenband3 - // GbTriFaceMesh3DPtr meshBand3(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand3")); - // meshBand3->translate(-495, -700, -19.64); - // if(myid == 0) GbSystem3D::writeGeoObject( meshBand3.get(), pathname+"/geo/Band3", WbWriterVtkXmlASCII::getInstance() ); - // // Zackenband4 - // GbTriFaceMesh3DPtr meshBand4(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand4")); - // meshBand4->translate(-495, -705, -19.64); - // if(myid == 0) GbSystem3D::writeGeoObject( meshBand4.get(), pathname+"/geo/Band4", WbWriterVtkXmlASCII::getInstance() ); - // ////////////////////////////////////////////////////////////////////////// - - // double blockLengthx1 = blocknx[0]*cdx; //geowerte - // double blockLengthx2 = blockLengthx1; - // double blockLengthx3 = blockLengthx1; - - // double geoLength[] = { nx[0]*blockLengthx1, nx[1]*blockLengthx2, nx[2]*blockLengthx3}; - - // double originX1 = plate->getX1Minimum()-plate->getLengthX1()/4.0; - // double originX2 = plate->getX2Minimum(); - // double originX3 = plate->getX3Minimum()-299.5; - - - // bool periodicx1 = false; - // bool periodicx2 = true; - // bool periodicx3 = true; - - // //bounding box - // double g_minX1 = originX1; - // double g_minX2 = originX2; - // double g_minX3 = originX3; - - // double g_maxX1 = originX1 + geoLength[0]; - // double g_maxX2 = originX2 + geoLength[1]; - // double g_maxX3 = originX3 + geoLength[2];; - - - // //set grid - // grid->setDeltaX(cdx); - // grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - // grid->setPeriodicX1(periodicx1); - // grid->setPeriodicX2(periodicx2); - // grid->setPeriodicX3(periodicx3); - - // GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); - // gridCube->setCenterCoordinates(gridCube->getX1Centroid(),meshBand1->getX2Centroid(),gridCube->getX3Centroid()); - // if(myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance()); - - // originX2 = gridCube->getX2Minimum(); - // g_minX2 = originX2; - // g_maxX2 = originX2 + geoLength[1]; - - // GenBlocksGridVisitor genBlocks(gridCube); - // grid->accept(genBlocks); - - // ////////////////////////////////////////////////////////////////////////// - // if(myid == 0) - // { - // UBLOG(logINFO, "*****************************************"); - // UBLOG(logINFO, "* Parameters *"); - // UBLOG(logINFO, "* Re ="<<Re); - // UBLOG(logINFO, "* nuLB ="<<nuLB); - // UBLOG(logINFO, "* uLB ="<<uLB); - // UBLOG(logINFO, "* cdx ="<<cdx); - // UBLOG(logINFO, "* fdx ="<<fdx); - // double Hzb = 0.6/fdx; - // UBLOG(logINFO, "* Height of Zackenband ="<<Hzb); - // UBLOG(logINFO, "* Re on Zackenband ="<<(uLB*Hzb)/(nuLB*double(1<<refineLevel))); - // UBLOG(logINFO, "* nx1/2/3 ="<<nx[0]<<"/"<<nx[1]<<"/"<<nx[2]); - // UBLOG(logINFO, "* blocknx1/2/3 ="<<blocknx[0]<<"/"<<blocknx[1]<<"/"<<blocknx[2]); - // UBLOG(logINFO, "* x1Periodic ="<<periodicx1); - // UBLOG(logINFO, "* x2Periodic ="<<periodicx2); - // UBLOG(logINFO, "* x3Periodic ="<<periodicx3); - // UBLOG(logINFO, "* number of levels ="<<refineLevel+1); - // UBLOG(logINFO, "* path ="<<pathname); - - // UBLOG(logINFO, "*****************************************"); - // UBLOG(logINFO, "* number of threads ="<<numOfThreads); - // UBLOG(logINFO, "* number of processes ="<<comm->getNumberOfProcesses()); - // UBLOG(logINFO, "*****************************************"); - // UBLOG(logINFO, "*****************************************"); - // } - // ////////////////////////////////////////////////////////////////////////// - - - // ////////////////////////////////////////////////////////////////////////// - // //refinement - // GbCuboid3DPtr refinePlatteBox(new GbCuboid3D(plate->getX1Minimum(), plate->getX2Minimum(), plate->getX3Minimum()+(plate->getX3Maximum()-plate->getX3Minimum())/2.0, - // plate->getX1Maximum()+40.0, plate->getX2Maximum(), plate->getX3Maximum())); - // if(myid == 0) GbSystem3D::writeGeoObject( refinePlatteBox.get(), pathname+"/geo/refinePlatteBox", WbWriterVtkXmlASCII::getInstance() ); - - // if (refineLevel > 0) - // { - // if(myid == 0) UBLOG(logINFO,"Refinement - start"); - // RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel); - // refineHelper.addGbObject(refinePlatteBox, refineLevel); - // refineHelper.refine(); - // if(myid == 0) UBLOG(logINFO,"Refinement - end"); - // } - - // ///////////////////////////////////////////////// - // ///interactoren - // int bbOption1 = 1; //0=simple Bounce Back, 1=quadr. BB - // D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1)); - // D3Q27TriFaceMeshInteractorPtr triPlateInteractor( new D3Q27TriFaceMeshInteractor(plate, grid, bcObst,Interactor3D::SOLID)); - // D3Q27TriFaceMeshInteractorPtr triBand1Interactor( new D3Q27TriFaceMeshInteractor( meshBand1, grid, bcObst,Interactor3D::SOLID, Interactor3D::EDGES) ); - // D3Q27TriFaceMeshInteractorPtr triBand2Interactor( new D3Q27TriFaceMeshInteractor( meshBand2, grid, bcObst,Interactor3D::SOLID, Interactor3D::EDGES) ); - // D3Q27TriFaceMeshInteractorPtr triBand3Interactor( new D3Q27TriFaceMeshInteractor( meshBand3, grid, bcObst,Interactor3D::SOLID, Interactor3D::EDGES) ); - // D3Q27TriFaceMeshInteractorPtr triBand4Interactor( new D3Q27TriFaceMeshInteractor( meshBand4, grid, bcObst,Interactor3D::SOLID, Interactor3D::EDGES) ); - - // //inflow - // GbCuboid3DPtr velBCCuboid(new GbCuboid3D(originX1-blockLengthx1, originX2-blockLengthx1, originX3-blockLengthx1, - // originX1, originX2+geoLength[1]+blockLengthx1, originX3+geoLength[2]+blockLengthx1)); - // if(myid == 0) GbSystem3D::writeGeoObject(velBCCuboid.get(), pathname+"/geo/velBCCuboid", WbWriterVtkXmlASCII::getInstance()); - // D3Q27InteractorPtr velBCInteractor(new D3Q27Interactor(velBCCuboid,grid,Interactor3D::SOLID)); - - // //inflow - // double raiseVelSteps = 0; - // vector<D3Q27BCFunction> velcX1BCs,dummy; - - // mu::Parser inflowProfile; - // inflowProfile.SetExpr("uLB"); - // inflowProfile.DefineConst("uLB",uLB); - // velcX1BCs.push_back(D3Q27BCFunction(inflowProfile,raiseVelSteps,D3Q27BCFunction::INFCONST)); - - // D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter (velcX1BCs,dummy,dummy)); - // velBCInteractor->addBCAdapter(velBCAdapter); - - // //outflow - // GbCuboid3DPtr densCuboid(new GbCuboid3D(originX1+geoLength[0], originX2-blockLengthx1, originX3-blockLengthx1, - // originX1+geoLength[0]+blockLengthx1, originX2+geoLength[1]+blockLengthx1, originX3+geoLength[2]+blockLengthx1 )); - // if(myid == 0) GbSystem3D::writeGeoObject(densCuboid.get(), pathname+"/geo/densCuboid", WbWriterVtkXmlASCII::getInstance()); - // D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB)); - // D3Q27InteractorPtr densInteractor( new D3Q27Interactor(densCuboid,grid,denBCAdapter,Interactor3D::SOLID) ); - - // //////////////////////////////////////////// - // //METIS - // Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B)); - - // //////////////////////////////////////////// - // /////delete solid blocks - // if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - start"); - // InteractorsHelper intHelper(grid, metisVisitor); - // intHelper.addInteractor(triPlateInteractor); - // intHelper.addInteractor(triBand1Interactor); - // intHelper.addInteractor(triBand2Interactor); - // intHelper.addInteractor(triBand3Interactor); - // intHelper.addInteractor(triBand4Interactor); - // intHelper.addInteractor(densInteractor); - // intHelper.addInteractor(velBCInteractor); - // intHelper.selectBlocks(); - // if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end"); - // ////////////////////////////////////// - - // //domain decomposition for threads - // if(numOfThreads > 1) - // { - // PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - // grid->accept(pqPartVisitor); - // } - - // if(myid == 0) - // { - // UBLOG(logINFO,"Write blocks - start"); - // BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - // ppblocks->update(0); - // UBLOG(logINFO,"Write blocks - end"); - // } - - // unsigned long nob = grid->getNumberOfBlocks(); - // unsigned long nod = nob * blocknx[0]*blocknx[1]*blocknx[2]; - // unsigned long nod_real = nob * (blocknx[0]+3)*(blocknx[1]+3)*(blocknx[2]+3); - // unsigned long nodb = (blocknx[0]) * (blocknx[1]) * (blocknx[2]); - - // double needMemAll = double(nod_real*(27*sizeof(double) + sizeof(int))); - // double needMem = needMemAll / double(comm->getNumberOfProcesses()); - // - // double nup = 0; - - // if(myid == 0) - // { - // UBLOG(logINFO,"Number of blocks = " << nob); - // UBLOG(logINFO,"Number of nodes = " << nod); - // 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*nodb); - // nup += nobl*nodb*double(1<<level); - // } - // UBLOG(logINFO,"Hypothetically time for calculation step for 120 nodes = " << nup/6.0e5/(120*8) << " s"); - // UBLOG(logINFO,"Necessary memory = " << needMemAll << " bytes"); - // UBLOG(logINFO,"Necessary memory per process = " << needMem << " bytes"); - // UBLOG(logINFO,"Available memory per process = " << availMem << " bytes"); - // UBLOG(logINFO,"Available memory per node/8.0 = " << (availMem/8.0) << " bytes"); - // } - - // ////////////////////////////////////////// - // //set connectors - // if(myid == 0) UBLOG(logINFO,"set connectors - start"); - // D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - // D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - // grid->accept( setConnsVisitor ); - // if(myid == 0) UBLOG(logINFO,"set connectors - end"); - - // //////////////////////////// - // LBMKernel3DPtr kernel; - // //kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL)); - - // //with sponge layer - // kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLBWithSpongeLayer(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL)); - // kernel->setWithSpongeLayer(true); - // kernel->setSpongeLayer(spongeLayer); - - // BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - // kernel->setBCProcessor(bcProc); - // SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem); - // grid->accept(kernelVisitor); - // ////////////////////////////////// - // //undef nodes - // if (refineLevel > 0) - // { - // D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - // grid->accept(undefNodesVisitor); - // } - - - // intHelper.setBC(); - - // //initialization of decompositions - // D3Q27ETInitDistributionsBlockVisitor initVisitor( nuLB,rhoLB); - // initVisitor.setVx1(uLB); - // grid->accept(initVisitor); - - // //Postprozess - // UbSchedulerPtr geoSch(new UbScheduler(1)); - // D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - // new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), - // unitConverter, true)); - // ppgeo->update(0); - // ppgeo.reset(); - // geoSch.reset(); - - // if(myid == 0) UBLOG(logINFO,"Preprozess - end"); - //} - //else - //{ - // //domain decomposition for threads - // if(numOfThreads > 1) - // { - // PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - // grid->accept(pqPartVisitor); - // } - // //set connectors - // //grid->setPeriodicX3(false); - // D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - // D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - // grid->accept( setConnsVisitor ); - // SetSpongeLayerBlockVisitor ssp(spongeLayer); - // grid->accept(ssp); - - // ////////////////////////////////////////////////////////////////////////// - // ////////////////////////////////////////////////////////////////////////// - // //Platte - // GbTriFaceMesh3DPtr plate (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(PlatteFilename,"Netz")); - // plate->rotate(90.0,0.0,0.0); //TriFacMesh-KO-System anders als LB-KO-System - // if(myid == 0) GbSystem3D::writeGeoObject( plate.get(), pathname+"/geo/platte", WbWriterVtkXmlBinary::getInstance() ); - // ////////////////////////////////////////////////////////////////////////// - // ////////////////////////////////////////////////////////////////////////// - // // Zackenband - // ////////////////////////////////////////////////////////////////////////// - // GbTriFaceMesh3DPtr meshBand1 (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand")); - // meshBand1->translate(-495, -700, -19.94); - // if(myid == 0) GbSystem3D::writeGeoObject( meshBand1.get(), pathname+"/geo/Band1", WbWriterVtkXmlASCII::getInstance() ); - - // double blockLengthx1 = blocknx[0]*cdx; //geowerte - // double blockLengthx2 = blockLengthx1; - // double blockLengthx3 = blockLengthx1; - - // double geoLength[] = { nx[0]*blockLengthx1, nx[1]*blockLengthx2, nx[2]*blockLengthx3}; - - // double originX1 = plate->getX1Minimum()-plate->getLengthX1()/4.0; - // double originX2 = plate->getX2Minimum(); - // double originX3 = plate->getX3Minimum()-299.5; - - // //bounding box - // double g_minX1 = originX1; - // double g_minX2 = originX2; - // double g_minX3 = originX3; - - // double g_maxX1 = originX1 + geoLength[0]; - // double g_maxX2 = originX2 + geoLength[1]; - // double g_maxX3 = originX3 + geoLength[2];; - - // GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); - // gridCube->setCenterCoordinates(gridCube->getX1Centroid(),meshBand1->getX2Centroid(),gridCube->getX3Centroid()); - // if(myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance()); - - // originX2 = gridCube->getX2Minimum(); - // g_minX2 = originX2; - // g_maxX2 = originX2 + geoLength[1]; - // //walls - // GbCuboid3DPtr addWallZmin (new GbCuboid3D(g_minX1-blockLengthx1, g_minX2-blockLengthx1, g_minX3-blockLengthx1, g_maxX1+blockLengthx1, g_maxX2+blockLengthx1, g_minX3)); - // if(myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - - // GbCuboid3DPtr addWallZmax (new GbCuboid3D(g_minX1-blockLengthx1, g_minX2-blockLengthx1, g_maxX3, g_maxX1+blockLengthx1, g_maxX2+blockLengthx1, g_maxX3+blockLengthx1)); - // if(myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance()); - - // //walls - // int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB - // D3Q27BoundaryConditionAdapterPtr slip(new D3Q27SlipBCAdapter(bbOption)); - // D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, slip,Interactor3D::SOLID)); - // D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, slip,Interactor3D::SOLID)); - - // SetSolidOrTransBlockVisitor v1(addWallZminInt, SetSolidOrTransBlockVisitor::TRANS); - // grid->accept(v1); - // addWallZminInt->initInteractor(); - // SetSolidOrTransBlockVisitor v2(addWallZmaxInt, SetSolidOrTransBlockVisitor::TRANS); - // grid->accept(v2); - // addWallZmaxInt->initInteractor(); - - // UbSchedulerPtr geoSch(new UbScheduler(1)); - // D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - // new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), - // unitConverter, true)); - // ppgeo->update(0); - // ppgeo.reset(); - // geoSch.reset(); - // ////////////////////////////////////////////////////////////////////////// - - // if(myid == 0) UBLOG(logINFO,"Restart - end"); - //} - //UbSchedulerPtr visSch(new UbScheduler()); - ////visSch->addSchedule(1,0,3); - ////visSch->addSchedule(100,100,1000); - ////visSch->addSchedule(1000,1000,5000); - ////visSch->addSchedule(5000,5000,100000); - ////visSch->addSchedule(100000,100000,10000000); - - //visSch->addSchedule(1000,1000,10000000); - - //D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), unitConverter); - - //UbSchedulerPtr resSchRMS(new UbScheduler()); - //resSchRMS->addSchedule(1000000,93000,10000000); - //UbSchedulerPtr resSchMeans(new UbScheduler()); - //resSchMeans->addSchedule(1000000,93000,10000000); - //UbSchedulerPtr stepAvSch(new UbScheduler()); - //int averageInterval=100; - //stepAvSch->addSchedule(averageInterval,0,10000000); - //AverageValuesPostprocessor Avpp(grid, pathname, WbWriterVtkXmlBinary::getInstance(), visSch/*wann wird rausgeschrieben*/, stepAvSch/*wann wird gemittelt*/, resSchMeans,resSchRMS/*wann wird resettet*/); - - //UbSchedulerPtr nupsSch(new UbScheduler(10, 10, 30)); - //nupsSch->addSchedule(500,500,1e6); - //NUPSCounterPostprocessor npr(grid, nupsSch, numOfThreads, comm); - - //UbSchedulerPtr emSch(new UbScheduler(10)); - //EmergencyExitPostprocessor empr(grid, emSch, pathname, RestartPostprocessorPtr(&rp), comm); - - //if(myid == 0) - //{ - // UBLOG(logINFO,"PID = " << myid << " Total Physical Memory (RAM): " << MemoryUtil::getTotalPhysMem()); - // UBLOG(logINFO,"PID = " << myid << " Physical Memory currently used: " << MemoryUtil::getPhysMemUsed()); - // UBLOG(logINFO,"PID = " << myid << " Physical Memory currently used by current process: " << MemoryUtil::getPhysMemUsedByMe()); - //} - - //string lastStep = string(cstr2); - //double endTime = UbSystem::stringTo<double>(lastStep); - //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[]) -{ - if (argc == 1) - { - cout<<"Command line argument isn't specified!"<<endl; - cout<<"plate2 <machine name>"<<endl; - return 1; - } - run(argv[1], argv[2]); - - return 0; -} - diff --git a/apps/cpu/f16Test/CMakeLists.txt b/apps/cpu/f16Test/CMakeLists.txt deleted file mode 100644 index f8cfe5f4bb024c2cf4036b54a67d378fdc37721e..0000000000000000000000000000000000000000 --- a/apps/cpu/f16Test/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(f16test) - -INCLUDE(${APPS_ROOT}/IncludsList.cmake) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(f16test BINARY) diff --git a/apps/cpu/f16Test/F16BombadilTestSmall.cfg b/apps/cpu/f16Test/F16BombadilTestSmall.cfg deleted file mode 100644 index c0ee5662e270b6450e8d3dc0bb6bda4617512cce..0000000000000000000000000000000000000000 --- a/apps/cpu/f16Test/F16BombadilTestSmall.cfg +++ /dev/null @@ -1,55 +0,0 @@ -pathOut = d:/temp/f16Small -pathGeo = d:/Projects/SFB880/DLR-F16/A1_Forschungsdaten_Profilgeometrie_STL_CATIA_Rossian -#fngFileWhole = f16-ascii.stl -#fngFileWhole = grundgeometrie-direkter-export.stl -#fngFileWhole = grundgeometrie-mittel.stl - -fngFileWhole = cylinder.ASCII.stl - -fngFileBodyPart = f16-body-part-ascii.stl -fngFileTrailingEdge = f16-trailing-edge-ascii.stl -zigZagTape = 2zackenbaender0.stl - -numOfThreads = 2 -availMem = 10e9 -refineLevel = 8 -#blockNx = 8 4 8 -blockNx = 21 6 13 -#blockNx = 294 12 247 -uLB = 0.1 - -#x1min x1max x2min x2max x3min x3max [m] -#boundingBox = -0.90 1.20 0.035 0.065 -0.65 0.65 -#boundingBox = -0.1 0.60 0.035 0.065 -0.3 0.3 -#boundingBox = -10e-3 310e-3 0.035 0.065 -21e-3 21e-3 - -boundingBox = -0.255 0.27 0.035 0.065 -0.17 0.155 - -#deltaXfine = 0.005 #level 0 -#deltaXfine = 0.0025 #level 1 -#deltaXfine = 0.00125 #level 2 -#deltaXfine = 0.000625 #level 3 -#deltaXfine = 0.0003125 #level 4 -#deltaXfine = 0.00015625 #level 5 -#deltaXfine = 0.000078125 #level 6 -#deltaXfine = 0.0000390625 #level 7 -deltaXfine = 0.00001953125 #level 8 - - -refineDistance = 0.3 - -restartStep = 10 -restartStepStart = 10 - -outTime = 1 -endTime = 10 - -logToFile = false - -porousTralingEdge = false - -thinWall = false - -testBox=false - -nupsStep = 1 1 10000000 \ No newline at end of file diff --git a/apps/cpu/f16Test/f16test.cpp b/apps/cpu/f16Test/f16test.cpp deleted file mode 100644 index 32f424bdbcd8c2fa9f9596147757dc63f2c0b684..0000000000000000000000000000000000000000 --- a/apps/cpu/f16Test/f16test.cpp +++ /dev/null @@ -1,659 +0,0 @@ -#include <iostream> -#include <string> - -#include <boost/pointer_cast.hpp> - -#include "VirtualFluids.h" - -using namespace std; - -double rangeRandom1() -{ - return (2.0*rand())/RAND_MAX-1.0; -} - -void run(string configname) -{ - try - { - vf::basics::ConfigurationFile config; - config.load(configname); - - string pathOut = config.getString("pathOut"); - string pathGeo = config.getString("pathGeo"); - string fngFileWhole = config.getString("fngFileWhole"); - string fngFileTrailingEdge = config.getString("fngFileTrailingEdge"); - string fngFileBodyPart = config.getString("fngFileBodyPart"); - string zigZagTape = config.getString("zigZagTape"); - int numOfThreads = config.getInt("numOfThreads"); - vector<int> blockNx = config.getVector<int>("blockNx"); - vector<double> boundingBox = config.getVector<double>("boundingBox"); - double uLB = config.getDouble("uLB"); - double restartStep = config.getDouble("restartStep"); - double restartStepStart = config.getDouble("restartStepStart"); - double endTime = config.getDouble("endTime"); - double outTime = config.getDouble("outTime"); - double availMem = config.getDouble("availMem"); - int refineLevel = config.getInt("refineLevel"); - bool logToFile = config.getBool("logToFile"); - bool porousTralingEdge = config.getBool("porousTralingEdge"); - double deltaXfine = config.getDouble("deltaXfine")*1000.0; - bool thinWall = config.getBool("thinWall"); - double refineDistance = config.getDouble("refineDistance"); - vector<double> nupsStep = config.getVector<double>("nupsStep"); - - SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - if (logToFile) - { -#if defined(__unix__) - if (myid == 0) - { - const char* str = pathOut.c_str(); - mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); - } -#endif - - if (myid == 0) - { - stringstream logFilename; - logFilename << pathOut + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - } - - - double g_minX1 = boundingBox[0]*1000.0; - double g_minX2 = boundingBox[2]*1000.0; - double g_minX3 = boundingBox[4]*1000.0; - - double g_maxX1 = boundingBox[1]*1000.0; - double g_maxX2 = boundingBox[3]*1000.0; - double g_maxX3 = boundingBox[5]*1000.0; - - ////////////////////////////////////////////////////////////////////////// - double deltaXcoarse = deltaXfine*(double)(1 << refineLevel); - //double nx2_temp = floor((g_maxX2 - g_minX2) / (deltaXcoarse*(double)blockNx[0])); - - //deltaXcoarse = (g_maxX2 - g_minX2) / (nx2_temp*(double)blockNx[0]); - //UBLOG(logINFO, "nx2_temp:"<<nx2_temp); - //g_maxX2 -= 0.5* deltaXcoarse; - ////////////////////////////////////////////////////////////////////////// - double blockLength = (double)blockNx[0] * deltaXcoarse; - - //########################################################################## - //## physical parameters - //########################################################################## - double Re = 1;//e6; - - double rhoLB = 0.0; - double rhoReal = 1.2041; //(kg/m3) - double nueReal = 153.5e-7; //m^2/s - - double lReal = 3.0;//m - double uReal = Re*nueReal / lReal; - - //##Machzahl: - //#Ma = uReal/csReal - double Ma = 0.15;//Ma-Real! - //double csReal = uReal / Ma; - //double hLB = lReal / deltaXcoarse; - - //LBMUnitConverter unitConverter(lReal, csReal, rhoReal, hLB); - - //double u_LB = uReal * unitConverter.getFactorVelocityWToLb(); - //double nu_LB = nueReal * unitConverter.getFactorViscosityWToLb(); - double l_LB = 300 / deltaXcoarse; - double nuLB = (uLB*l_LB) / Re; //0.005; - //double nuLB = 0.005; - - SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter()); - - const int baseLevel = 0; - - //////////////////////////////////////////////////////////////////////// - //Grid - ////////////////////////////////////////////////////////////////////////// - SPtr<Grid3D> grid(new Grid3D(comm)); - grid->setDeltaX(deltaXcoarse); - grid->setBlockNX(blockNx[0], blockNx[1], blockNx[2]); - - SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); - //gridCube->setCenterCoordinates(geo->getX1Centroid(), geo->getX2Centroid(), geo->getX3Centroid()); - if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathOut + "/geo/gridCube", WbWriterVtkXmlASCII::getInstance()); - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - grid->setPeriodicX1(false); - grid->setPeriodicX2(true); - grid->setPeriodicX3(false); - - //BC adapters - SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter()); - if (thinWall) - { - noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new ThinWallNoSlipBCAlgorithm())); - } - else - { - noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm())); - } - - SPtr<BCAdapter> slipBCAdapter(new SlipBCAdapter()); - slipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new SlipBCAlgorithm())); - - mu::Parser fct; - fct.SetExpr("U"); - fct.DefineConst("U", uLB); - SPtr<BCAdapter> velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); - velBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NonReflectingOutflowBCAlgorithm())); - - SPtr<BCAdapter> denBCAdapter(new DensityBCAdapter(rhoLB)); - denBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NonReflectingOutflowBCAlgorithm())); - - BoundaryConditionsBlockVisitor bcVisitor; - bcVisitor.addBC(noSlipBCAdapter); - bcVisitor.addBC(slipBCAdapter); - bcVisitor.addBC(velBCAdapter); - bcVisitor.addBC(denBCAdapter); - - ////////////////////////////////////////////////////////////////////////// - //restart - SPtr<UbScheduler> rSch(new UbScheduler(restartStep, restartStep)); - RestartCoProcessor rp(grid, rSch, comm, pathOut, RestartCoProcessor::TXT); - ////////////////////////////////////////////////////////////////////////// - - - if (grid->getTimeStep() == 0) - { - if (myid == 0) - { - UBLOG(logINFO, "Parameters:"); - UBLOG(logINFO, "* Re = "<<Re); - UBLOG(logINFO, "* Ma = "<<Ma); - UBLOG(logINFO, "* velocity (uReal) = "<<uReal<<" m/s"); - UBLOG(logINFO, "* viscosity (nuReal) = "<<nueReal<<" m^2/s"); - UBLOG(logINFO, "* velocity LB (uLB) = "<<uLB); - UBLOG(logINFO, "* viscosity LB (nuLB) = "<<nuLB); - UBLOG(logINFO, "* dx_base = "<<deltaXcoarse/1000.0<<" m"); - UBLOG(logINFO, "* dx_refine = "<<deltaXfine/1000.0<<" m"); - UBLOG(logINFO, "* number of levels = " << refineLevel + 1); - UBLOG(logINFO, "* number of threads = " << numOfThreads); - UBLOG(logINFO, "* number of processes = " << comm->getNumberOfProcesses()); - UBLOG(logINFO, "Preprozess - start"); - } - - SPtr<GbTriFaceMesh3D> fngMeshWhole; - SPtr<GbTriFaceMesh3D> fngMeshBodyPart; - SPtr<GbTriFaceMesh3D> fngMeshTrailingEdge; - if (porousTralingEdge) - { - if (myid==0) UBLOG(logINFO, "Read fngFileBodyPart:start"); - fngMeshBodyPart = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+fngFileBodyPart, "fngMeshBody", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); - if (myid==0) UBLOG(logINFO, "Read fngFileBodyPart:end"); - fngMeshBodyPart->rotate(0.0, 0.5, 0.0); - if (myid==0) GbSystem3D::writeGeoObject(fngMeshBodyPart.get(), pathOut+"/geo/fngMeshBody", WbWriterVtkXmlBinary::getInstance()); - - if (myid==0) UBLOG(logINFO, "Read fngFileTrailingEdge:start"); - fngMeshTrailingEdge = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+fngFileTrailingEdge, "fngMeshTrailingEdge", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); - if (myid==0) UBLOG(logINFO, "Read fngFileTrailingEdge:end"); - fngMeshTrailingEdge->rotate(0.0, 0.5, 0.0); - fngMeshTrailingEdge->translate(0,0,1.3); - if (myid==0) GbSystem3D::writeGeoObject(fngMeshTrailingEdge.get(), pathOut+"/geo/fngMeshTrailingEdge", WbWriterVtkXmlBinary::getInstance()); - } - else - { - if (myid==0) UBLOG(logINFO, "Read fngFileWhole:start"); - fngMeshWhole = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+fngFileWhole, "fngMeshWhole", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); - if (myid==0) UBLOG(logINFO, "Read fngFileWhole:end"); - fngMeshWhole->rotate(0.0, 0.5, 0.0); - if (myid==0) GbSystem3D::writeGeoObject(fngMeshWhole.get(), pathOut+"/geo/fngMeshWhole", WbWriterVtkXmlBinary::getInstance()); - } - - ////////////////////////////////////////////////////////////////////////// - // Zackenband - ////////////////////////////////////////////////////////////////////////// - //top - ////////////////////////////////////////////////////////////////////////// - //if (myid==0) UBLOG(logINFO, "Read zigZagTape:start"); - //string ZckbndFilename = pathGeo+"/"+zigZagTape; - //SPtr<GbTriFaceMesh3D> meshBand1(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape1")); - //meshBand1->rotate(0.0, 5, 0.0); - //meshBand1->translate(15, 0, -12.850); - //if (myid==0) GbSystem3D::writeGeoObject(meshBand1.get(), pathOut+"/geo/zigZagTape1", WbWriterVtkXmlASCII::getInstance()); - //// Zackenband2 - //SPtr<GbTriFaceMesh3D> meshBand2(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape2")); - //meshBand2->rotate(0.0, 5, 0.0); - //meshBand2->translate(15, 5, -12.850); - //if (myid==0) GbSystem3D::writeGeoObject(meshBand2.get(), pathOut+"/geo/zigZagTape2", WbWriterVtkXmlASCII::getInstance()); - ////// Zackenband3 - ////SPtr<GbTriFaceMesh3D> meshBand3(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape3")); - ////meshBand3->rotate(0.0, 5, 0.0); - ////meshBand3->translate(15, 0, -12.35); - ////if (myid==0) GbSystem3D::writeGeoObject(meshBand3.get(), pathOut+"/geo/zigZagTape3", WbWriterVtkXmlASCII::getInstance()); - ////// Zackenband4 - ////SPtr<GbTriFaceMesh3D> meshBand4(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape4")); - ////meshBand4->rotate(0.0, 5, 0.0); - ////meshBand4->translate(15, 5, -12.35); - ////if (myid==0) GbSystem3D::writeGeoObject(meshBand4.get(), pathOut+"/geo/zigZagTape4", WbWriterVtkXmlASCII::getInstance()); - - ////bottom - //SPtr<GbTriFaceMesh3D> meshBand5(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape5")); - //meshBand5->rotate(0.0, -1, 0.0); - //meshBand5->rotate(0.0, 0.0,180.0); - //meshBand5->translate(30, 0, -37.3); - //if (myid==0) GbSystem3D::writeGeoObject(meshBand5.get(), pathOut+"/geo/zigZagTape5", WbWriterVtkXmlASCII::getInstance()); - //// Zackenband6 - //SPtr<GbTriFaceMesh3D> meshBand6(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape6")); - //meshBand6->rotate(0.0, -1, 0.0); - //meshBand6->rotate(0.0, 0.0, 180.0); - //meshBand6->translate(30, 5, -37.3); - //if (myid==0) GbSystem3D::writeGeoObject(meshBand6.get(), pathOut+"/geo/zigZagTape6", WbWriterVtkXmlASCII::getInstance()); - ////// Zackenband7 - ////SPtr<GbTriFaceMesh3D> meshBand7(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape7")); - ////meshBand7->rotate(0.0, 5, 0.0); - ////meshBand7->translate(15, 0, -12.35); - ////if (myid==0) GbSystem3D::writeGeoObject(meshBand7.get(), pathOut+"/geo/zigZagTape7", WbWriterVtkXmlASCII::getInstance()); - ////// Zackenband8 - ////SPtr<GbTriFaceMesh3D> meshBan8(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "zigZagTape8")); - ////meshBan8->rotate(0.0, 5, 0.0); - ////meshBan8->translate(15, 5, -12.35); - ////if (myid==0) GbSystem3D::writeGeoObject(meshBan8.get(), pathOut+"/geo/zigZagTape8", WbWriterVtkXmlASCII::getInstance()); - //if (myid==0) UBLOG(logINFO, "Read zigZagTape:end"); - - ////////////////////////////////////////////////////////////////////////// - - SPtr<Interactor3D> fngIntrWhole; - SPtr<Interactor3D> fngIntrBodyPart; - SPtr<Interactor3D> fngIntrTrailingEdge; - if (porousTralingEdge) - { - fngIntrBodyPart = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshBodyPart, grid, noSlipBCAdapter, Interactor3D::SOLID)); - fngIntrTrailingEdge = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshTrailingEdge, grid, noSlipBCAdapter, Interactor3D::SOLID)); - } - else - { - fngIntrWhole = SPtr<D3Q27TriFaceMeshInteractor>(new D3Q27TriFaceMeshInteractor(fngMeshWhole, grid, noSlipBCAdapter, Interactor3D::SOLID));//, Interactor3D::EDGES)); - } - - //SPtr<D3Q27TriFaceMeshInteractor> triBand1Interactor(new D3Q27TriFaceMeshInteractor(meshBand1, grid, noSlipBCAdapter, Interactor3D::SOLID));//, Interactor3D::EDGES)); - //SPtr<D3Q27TriFaceMeshInteractor> triBand2Interactor(new D3Q27TriFaceMeshInteractor(meshBand2, grid, noSlipBCAdapter, Interactor3D::SOLID));//, Interactor3D::EDGES)); - //SPtr<D3Q27TriFaceMeshInteractor> triBand3Interactor(new D3Q27TriFaceMeshInteractor(meshBand3, grid, noSlipBCAdapter, Interactor3D::SOLID));//, Interactor3D::EDGES)); - //SPtr<D3Q27TriFaceMeshInteractor> triBand4Interactor(new D3Q27TriFaceMeshInteractor(meshBand4, grid, noSlipBCAdapter, Interactor3D::SOLID));//, Interactor3D::EDGES)); - - - - if (refineLevel > 0 && myid == 0) - { - if (myid == 0) UBLOG(logINFO, "Refinement - start"); - //RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel); - //refineHelper.addGbObject(geo, refineLevel); - //refineHelper.refine(); - - //RefineAroundGbObjectHelper refineHelper1(grid, refineLevel-1, boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(geoIntr1), 0.0, 10.0, comm); - //refineHelper1.refine(); - //RefineAroundGbObjectHelper refineHelper2(grid, refineLevel, boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(geoIntr2), -1.0, 5.0, comm); - //refineHelper2.refine(); - - - int rank = grid->getRank(); - grid->setRank(0); - //boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(triBand1Interactor)->refineBlockGridToLevel(refineLevel, 0.0, refineDistance); - //boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(triBand2Interactor)->refineBlockGridToLevel(refineLevel, 0.0, refineDistance); - //boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(triBand3Interactor)->refineBlockGridToLevel(refineLevel, 0.0, refineDistance); - //boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(triBand4Interactor)->refineBlockGridToLevel(refineLevel, 0.0, refineDistance); - grid->setRank(rank); - - if (porousTralingEdge) - { - int rank = grid->getRank(); - grid->setRank(0); - boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(fngIntrBodyPart)->refineBlockGridToLevel(refineLevel, 0.0, refineDistance); - grid->setRank(rank); - } - else - { - int rank = grid->getRank(); - grid->setRank(0); - boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(fngIntrWhole)->refineBlockGridToLevel(refineLevel, 0.0, refineDistance); - grid->setRank(rank); - } - - - - //////////////////////////////////////////// - //METIS - //SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::KWAY)); - //////////////////////////////////////////// - /////delete solid blocks - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start"); - //InteractorsHelper intHelper(grid, metisVisitor); - //if (porousTralingEdge) - //{ - // intHelper.addInteractor(fngIntrBodyPart); - //} - //else - //{ - // intHelper.addInteractor(fngIntrWhole); - //} - ////////////////////////////////////////////////////////////////////////// - - //intHelper.selectBlocks(); - - if (porousTralingEdge) - { - SetSolidBlockVisitor v(fngIntrBodyPart, BlockType::SOLID); - grid->accept(v); - std::vector<SPtr<Block3D>>& sb = fngIntrBodyPart->getSolidBlockSet(); - for(SPtr<Block3D> block : sb) - { - grid->deleteBlock(block); - } - fngIntrBodyPart->removeSolidBlocks(); - fngIntrBodyPart->removeBcBlocks(); - } - else - { - SetSolidBlockVisitor v(fngIntrWhole, BlockType::SOLID); - grid->accept(v); - std::vector<SPtr<Block3D>>& sb = fngIntrWhole->getSolidBlockSet(); - for(SPtr<Block3D> block : sb) - { - grid->deleteBlock(block); - } - fngIntrWhole->removeSolidBlocks(); - fngIntrWhole->removeBcBlocks(); - } - - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end"); - ////////////////////////////////////// - - if (porousTralingEdge) - { - grid->setRank(0); - boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(fngIntrTrailingEdge)->refineBlockGridToLevel(refineLevel, -2.0, refineDistance); - grid->setRank(rank); - - //SPtr<GbObject3D> trailingEdgeCube(new GbCuboid3D(fngMeshTrailingEdge->getX1Minimum()-blockLength, fngMeshTrailingEdge->getX2Minimum(), fngMeshTrailingEdge->getX3Minimum()-blockLength/2.0, - // fngMeshTrailingEdge->getX1Maximum()+blockLength, fngMeshTrailingEdge->getX2Maximum(), fngMeshTrailingEdge->getX3Maximum()+blockLength/2.0)); - //if (myid == 0) GbSystem3D::writeGeoObject(trailingEdgeCube.get(), pathOut + "/geo/trailingEdgeCube", WbWriterVtkXmlASCII::getInstance()); - - //RefineCrossAndInsideGbObjectBlockVisitor refVisitor(trailingEdgeCube, refineLevel); - //grid->accept(refVisitor); - } - - RatioBlockVisitor ratioVisitor(refineLevel); - CheckRatioBlockVisitor checkRatio(refineLevel); - int count = 0; - - do { - grid->accept(ratioVisitor); - checkRatio.resetState(); - grid->accept(checkRatio); - if (myid == 0) UBLOG(logINFO, "count ="<<count++<<" state="<<checkRatio.getState()); - } while (!checkRatio.getState()); - - //RatioSmoothBlockVisitor ratioSmoothVisitor(refineLevel); - //grid->accept(ratioSmoothVisitor); - - { - WriteBlocksSPtr<CoProcessor> ppblocks(new WriteBlocksCoProcessor(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm)); - ppblocks->process(0); - ppblocks.reset(); - } - - OverlapBlockVisitor overlapVisitor(refineLevel, false); - grid->accept(overlapVisitor); - - //std::vector<int> dirs; - //for (int i = D3Q27System::E; i <= D3Q27System::TS; i++) - //{ - // dirs.push_back(i); - //} - //SetInterpolationDirsBlockVisitor interDirsVisitor(dirs); - //grid->accept(interDirsVisitor); - - if (myid == 0) UBLOG(logINFO, "Refinement - end"); - } - - grid->updateDistributedBlocks(comm); - - - //return; - - std::vector<int> dirs; - for (int i = D3Q27System::E; i<=D3Q27System::TS; i++) - { - dirs.push_back(i); - } - SetInterpolationDirsBlockVisitor interDirsVisitor(dirs); - grid->accept(interDirsVisitor); - - //walls - GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3)); - if (myid==0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathOut+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if (myid==0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathOut+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance()); - - - - //wall interactors - SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, slipBCAdapter, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, slipBCAdapter, Interactor3D::SOLID)); - //SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, noSlipBCAdapter, Interactor3D::SOLID)); - //SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - //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(), pathOut+"/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(), pathOut+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); - - //inflow - SPtr<D3Q27Interactor> inflowIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID)); - - //outflow - SPtr<D3Q27Interactor> outflowIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, denBCAdapter, Interactor3D::SOLID)); - - //////////////////////////////////////////// - //METIS - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::KWAY)); - //////////////////////////////////////////// - /////delete solid blocks - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - intHelper.addInteractor(inflowIntr); - intHelper.addInteractor(outflowIntr); - intHelper.addInteractor(addWallZminInt); - intHelper.addInteractor(addWallZmaxInt); - //intHelper.addInteractor(triBand1Interactor); - //intHelper.addInteractor(triBand2Interactor); - //intHelper.addInteractor(triBand3Interactor); - //intHelper.addInteractor(triBand4Interactor); - - if (porousTralingEdge) - { - intHelper.addInteractor(fngIntrBodyPart); - //intHelper.addInteractor(fngIntrTrailingEdge); - } - else - { - intHelper.addInteractor(fngIntrWhole); - } - - ////////////////////////////////////////////////////////////////////////// - intHelper.selectBlocks(); - - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end"); - ////////////////////////////////////// - - WriteBlocksSPtr<CoProcessor> ppblocks(new WriteBlocksCoProcessor(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm)); - ppblocks->process(1); - 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"); - } - - SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulantLBMKernel(blockNx[0], blockNx[1], blockNx[2], CompressibleCumulantLBMKernel::NORMAL)); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel(blockNx[0], blockNx[1], blockNx[2], IncompressibleCumulantLBMKernel::NORMAL)); - - SPtr<BCProcessor> bcProc; - - if (thinWall) - { - bcProc = SPtr<BCProcessor>(new ThinWallBCProcessor()); - } - else - { - bcProc = SPtr<BCProcessor>(new BCProcessor()); - } - - kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem); - grid->accept(kernelVisitor); - - if (refineLevel > 0) - { - SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - //BC - intHelper.setBC(); - - grid->accept(bcVisitor); - - //initialization of distributions - mu::Parser inflowProfileVx1, inflowProfileVx2, inflowProfileVx3; - inflowProfileVx1.SetExpr("U*rangeRandom1()"); - inflowProfileVx1.DefineConst("U", uLB); - inflowProfileVx1.DefineFun("rangeRandom1", rangeRandom1); - inflowProfileVx2.SetExpr("0.1*U*rangeRandom1()"); - inflowProfileVx2.DefineConst("U", uLB); - inflowProfileVx2.DefineFun("rangeRandom1", rangeRandom1); - inflowProfileVx3.SetExpr("0.1*U*rangeRandom1()"); - inflowProfileVx3.DefineConst("U", uLB); - inflowProfileVx3.DefineFun("rangeRandom1", rangeRandom1); - - InitDistributionsBlockVisitor initVisitor(nuLB, rhoLB); - //initVisitor.setVx1(fct); - //initVisitor.setVx1(inflowProfileVx1); - //initVisitor.setVx2(inflowProfileVx2); - //initVisitor.setVx3(inflowProfileVx3); - //initVisitor.setNu(nuLB); - grid->accept(initVisitor); - - ////set connectors - InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - //InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator()); - SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - grid->accept(setConnsVisitor); - - //domain decomposition for threads - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - //Postrozess - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - WriteBoundaryConditionsSPtr<CoProcessor> ppgeo( - new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - ppgeo->process(0); - ppgeo.reset(); - - if (myid == 0) UBLOG(logINFO, "Preprozess - end"); - } - else - { - InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - grid->accept(setConnsVisitor); - - //domain decomposition for threads - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - grid->accept(bcVisitor); - } - - SPtr<UbScheduler> nupsSch(new UbScheduler(nupsStep[0], nupsStep[1], nupsStep[2])); - NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); - - SPtr<UbScheduler> stepSch(new UbScheduler(outTime)); - - WriteMacroscopicQuantitiesCoProcessor pp(grid, stepSch, pathOut, WbWriterVtkXmlBinary::getInstance(), conv,comm); - - if (myid == 0) - { - UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - } - - const SPtr<ConcreteCalculatorFactory> calculatorFactory = std::make_shared<ConcreteCalculatorFactory>(stepSch); - CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, calculatorFactory, CalculatorType::HYBRID)); - //CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, stepSch, CalculationManager::PrePostBc)); - //calculation->setTimeAveragedValuesCoProcessor(tav); - 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[]) -{ - - if (argv != NULL) - { - if (argv[1] != NULL) - { - run(string(argv[1])); - } - else - { - cout << "Configuration file must be set!: " << argv[0] << " <config file>" << endl << std::flush; - } - } - - return 0; -} - diff --git a/apps/cpu/fetol_demo/CMakeLists.txt b/apps/cpu/fetol_demo/CMakeLists.txt deleted file mode 100644 index c0c5a123ce7efead3757eac4c52af02ea26cb4f3..0000000000000000000000000000000000000000 --- a/apps/cpu/fetol_demo/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(fetol_demo) - -INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids ${FETOL_RELEASE_LIBRARY}) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(fetol_demo BINARY) diff --git a/apps/cpu/fetol_demo/fetol_demo.cpp b/apps/cpu/fetol_demo/fetol_demo.cpp deleted file mode 100644 index a4cf176cdd8f12dc005c405ac4a067d7aecdce7d..0000000000000000000000000000000000000000 --- a/apps/cpu/fetol_demo/fetol_demo.cpp +++ /dev/null @@ -1,306 +0,0 @@ -#include <vfluids.h> - -#include <fbond.h> -#include <Version.h> - -#include <JM.h> - -using namespace std; - -using namespace fetol; - -//////////////////////////////////////////////////////////////////////// -void chanel(const char *cstr) -{ - try - { - string machine = QUOTEME(CAB_MACHINE); - string pathname; - int numOfThreads = 1; - double availMem = 0; - - UBLOG(logINFO,"Communicator-init::strat"); - CommunicatorPtr comm = FETOLCommunicator::getInstance(); - UBLOG(logINFO,"Communicator-init::end"); - - int myid = comm->getProcessID(); - int mybundle = comm->getBundleID(); - int root = comm->getRoot(); - int myrank = boost::dynamic_pointer_cast<FETOLCommunicator>(comm)->getMPIRank(); - - UBLOG(logINFO,"myid = " << myid ); - UBLOG(logINFO,"mybundle = " << mybundle ); - UBLOG(logINFO,"myrank = " << myrank ); - - JM::init(mybundle, myrank); - - //UbLog::reportingLevel() = logDEBUG5; - - if(machine == "BOMBADIL") - { - pathname = "d:/temp/fetol_demo"; - availMem = 3.0e9; - } - else if(machine == "M01" || machine == "M02") - { - //pathname = "/work/koskuche/scratch/fetol_demo"; - - pathname = string(cstr); - availMem = 1.5e9; - - if(myid==root && mybundle==root) - { - stringstream logFilename; - logFilename << pathname + "/log/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - } - else throw UbException(UB_EXARGS, "unknown CAB_MACHINE"); - - LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - - double dx = 1; - - const int blocknx1 = 40; - const int blocknx2 = 40; - const int blocknx3 = 40; - - const int gridNx1 = 4; - const int gridNx2 = 2; - const int gridNx3 = 2; - - double L1 = gridNx1*blocknx1; - double L2, L3, H; - L2 = H = gridNx2*blocknx1; - L3 = gridNx3*blocknx1; - - LBMReal radius = 7; - LBMReal uLB = 0.1; - LBMReal Re = 3000.0; - LBMReal rhoLB = 0.0; - LBMReal l = L2 / dx; - LBMReal nueLB = (uLB*2.0*radius)/Re; - - Grid3DPtr grid(new Grid3D(comm)); - grid->setDeltaX(dx); - grid->setBlockNX(blocknx1, blocknx2, blocknx3); - - //UBLOG(logINFO,"Restart:start"); - UbSchedulerPtr restartSch(new UbScheduler(1000, 1000, 100000)); - RestartPostprocessor rp(grid, restartSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY); - grid = rp.restart(-1); - //UBLOG(logINFO,"Restart:end"); - - if (grid->getTimeStep() == 0) - { - - const int baseLevel = 0; - const int refineLevel = 0; - - //obstacle - GbObject3DPtr sphere(new GbSphere3D(L1/4.0, L2*0.5, L3*0.5, radius)); - GbSystem3D::writeGeoObject(sphere.get(),pathname + "/geo/sphere", WbWriterVtkXmlBinary::getInstance()); - - D3Q27InteractorPtr sphereInt; - - //bounding box - double d_minX1 = 0.0; - double d_minX2 = 0.0; - double d_minX3 = 0.0; - - double d_maxX1 = L1; - double d_maxX2 = L2; - double d_maxX3 = L3; - - double blockLength = blocknx1*dx; - - GbObject3DPtr gridCube(new GbCuboid3D(d_minX1, d_minX2, d_minX3, d_maxX1, d_maxX2, d_maxX3)); - if(myid ==0) GbSystem3D::writeGeoObject(gridCube.get(),pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - if(myid ==0) - { - UBLOG(logINFO,"Parameters:"); - UBLOG(logINFO,"L = " << L2/dx ); - UBLOG(logINFO,"v = " << uLB ); - UBLOG(logINFO,"rho = " << rhoLB ); - UBLOG(logINFO,"nue = " << nueLB ); - UBLOG(logINFO,"Re = " << Re ); - UBLOG(logINFO,"dx = " << dx ); - UBLOG(logINFO,"number of levels = " << refineLevel+1 ); - UBLOG(logINFO,"numOfThreads = " << numOfThreads ); - UBLOG(logINFO,"Preprozess - start"); - } - - //walls - GbCuboid3DPtr addWallYmin (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_minX2, d_maxX3+4.0*blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname+"/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmin (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_minX3)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallYmax (new GbCuboid3D(d_minX1-4.0*blockLength, d_maxX2, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmax (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_maxX3, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance()); - - //inflow - GbCuboid3DPtr geoInflow (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_minX1, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname+"/geo/geoInflow", WbWriterVtkXmlASCII::getInstance()); - - //outflow - GbCuboid3DPtr geoOutflow (new GbCuboid3D(d_maxX1, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); - - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm)); - - //sphere - int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption)); - sphereInt = D3Q27InteractorPtr ( new D3Q27Interactor(sphere, grid, bcObst,Interactor3D::SOLID)); - - //walls - D3Q27InteractorPtr addWallYminInt(new D3Q27Interactor(addWallYmin, grid, bcObst,Interactor3D::SOLID)); - D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, bcObst,Interactor3D::SOLID)); - D3Q27InteractorPtr addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, bcObst,Interactor3D::SOLID)); - D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, bcObst,Interactor3D::SOLID)); - - mu::Parser fct; - fct.SetExpr("16*U*x2*x3*(H-x2)*(H-x3)/H^4"); - fct.DefineConst("U", uLB); - fct.DefineConst("H", H); - - //inflow - D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter (true, false ,false ,fct, 0, D3Q27BCFunction::INFCONST)); - velBCAdapter->setSecondaryBcOption(2); - D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr( new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID)); - - //outflow - D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB)); - 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(sphereInt); - intHelper.addInteractor(addWallYminInt); - intHelper.addInteractor(addWallZminInt); - intHelper.addInteractor(addWallYmaxInt); - intHelper.addInteractor(addWallZmaxInt); - intHelper.addInteractor(inflowInt); - intHelper.addInteractor(outflowInt); - intHelper.selectBlocks(); - - ppblocks->update(0); - ppblocks.reset(); - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27OffsetInterpolationProcessor()); - FETOLSetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nod = nob * (blocknx1+gl) * (blocknx2+gl) * (blocknx3+gl); - - double needMemAll = double(nod*(27*sizeof(double) + sizeof(int) + sizeof(float)*4)); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - if(myid == 0) - { - UBLOG(logINFO,"Number of blocks = " << nob); - UBLOG(logINFO,"Number of nodes = " << nod); - UBLOG(logINFO,"Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO,"Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO,"Available memory per process = " << availMem << " bytes"); - } - - LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(blocknx1, blocknx2, blocknx3, LBMKernelETD3Q27CCLB::NORMAL)); - - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem); - grid->accept(kernelVisitor); - - intHelper.setBC(); - - //initialization of distributions - D3Q27ETInitDistributionsBlockVisitor initVisitor(nueLB, rhoLB); - initVisitor.setVx1(fct); - grid->accept(initVisitor); - - //Postrozess - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv, true)); - ppgeo->update(0); - ppgeo.reset(); - - if(myid == 0) UBLOG(logINFO,"Preprozess - end"); - } - else - { - UBLOG(logINFO,"SetConnectors - start, id="<<myid); - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27OffsetInterpolationProcessor()); - FETOLSetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - - UBLOG(logINFO,"SetConnectors - end, id="<<myid); - } - - UbSchedulerPtr stepSch(new UbScheduler()); - stepSch->addSchedule(1000, 0, 1000000); - D3Q27MacroscopicQuantitiesPostprocessor pp(grid, stepSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), conv); - - //UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); - //NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm); - - double endTime = 100000; - CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, stepSch, CalculationManager::FETOL)); - - if(myid == 0) - UBLOG(logINFO,"Simulation-start"); - - calculation->calculate(); - - if(myid == 0) - UBLOG(logINFO,"Simulation-end"); - - JM::finalize(); - } - 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[]) -{ - if ( argv != NULL ) - { - if (argc > 1) - { - chanel(argv[1]); - } - else - { - cout << "Configuration file must be set!: " << argv[0] << " <config file>" << endl << std::flush; - } - } -} - diff --git a/apps/cpu/insitu_demo/CMakeLists.txt b/apps/cpu/insitu_demo/CMakeLists.txt deleted file mode 100644 index df3d4879adb9e4736fbd393a251b123aa2ede6a5..0000000000000000000000000000000000000000 --- a/apps/cpu/insitu_demo/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(insitu_demo) - -INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids ${FETOL_RELEASE_LIBRARY}) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(insitu_demo BINARY) diff --git a/apps/cpu/insitu_demo/config.txt b/apps/cpu/insitu_demo/config.txt deleted file mode 100644 index 0d4b199937822e5235e280e9c8522b0cc7eefc00..0000000000000000000000000000000000000000 --- a/apps/cpu/insitu_demo/config.txt +++ /dev/null @@ -1,24 +0,0 @@ -#Ordner für Simulationsergebnisse -path=d:/temp/insitu_demo - -#Verfügbare Arbeitsspeicher in Byte -memory=12e9 - -#Pfad zum Metafile -metafile=d:/Data/insituDemo/metafile.csv - -#Ausgabezeitschritt -outstep=1 - -#maximale Anzahl Simulationszeitschritte -endstep=10000 - -#Blockauflösung in Knoten -blocknx1=8 -blocknx2=8 -blocknx3=8 - -#Gitterauflösung in Blöcken -gridnx1=10 -gridnx2=5 -gridnx3=5 \ No newline at end of file diff --git a/apps/cpu/insitu_demo/insitu_demo.cpp b/apps/cpu/insitu_demo/insitu_demo.cpp deleted file mode 100644 index bd5f150191f2b9a63a1b7532d8f91b8f068d089a..0000000000000000000000000000000000000000 --- a/apps/cpu/insitu_demo/insitu_demo.cpp +++ /dev/null @@ -1,329 +0,0 @@ -#include <vfluids.h> - -using namespace std; - - -//////////////////////////////////////////////////////////////////////// -void chanel(const char *cstr1) -{ - try - { - - string machine = QUOTEME(CAB_MACHINE); - string pathname; - int numOfThreads = 6; - double availMem = 0; - - //CommunicatorPtr comm = FETOLCommunicator::getInstance(); - CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance(); - - int myid = comm->getProcessID(); - int mybundle = comm->getBundleID(); - int root = comm->getRoot(); - - if(machine == "BOMBADIL") - { - pathname = "d:/temp/insitu_demo"; - availMem = 3.0e9; - } - else if(machine == "M01" || machine == "M02") - { - pathname = "/work/koskuche/scratch/fetol_demo"; - availMem = 1.5e9; - - if(myid==root && mybundle==root) - { - stringstream logFilename; - logFilename << pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(mybundle)+".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - } - else throw UbException(UB_EXARGS, "unknown CAB_MACHINE"); - - ConfigFileReader cf(cstr1); - if ( !cf.read() ) - { - std::string exceptionText = "Unable to read configuration file\n"; - throw exceptionText; - } - - - pathname = cf.getValue("path"); - availMem = UbSystem::stringTo<double>(cf.getValue("memory")); - string metafile = cf.getValue("metafile"); - double outstep = UbSystem::stringTo<double>(cf.getValue("outstep")); - double endstep = UbSystem::stringTo<double>(cf.getValue("endstep")); - - LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - - double dx = 1; - - const int blocknx1 = UbSystem::stringTo<int>(cf.getValue("blocknx1")); //16; - const int blocknx2 = UbSystem::stringTo<int>(cf.getValue("blocknx2"));//16; - const int blocknx3 = UbSystem::stringTo<int>(cf.getValue("blocknx3"));//16; - - const int gridNx1 = UbSystem::stringTo<int>(cf.getValue("gridnx1"));//3; - const int gridNx2 = UbSystem::stringTo<int>(cf.getValue("gridnx2"));//3; - const int gridNx3 = UbSystem::stringTo<int>(cf.getValue("gridnx3"));//3; - - double L1 = gridNx1*blocknx1; - double L2, L3, H; - L2 = H = gridNx2*blocknx1; - L3 = gridNx3*blocknx1; - - LBMReal radius = 7; - LBMReal uLB = 0.01; - LBMReal Re = 3000.0; - LBMReal rhoLB = 0.0; - LBMReal l = L2 / dx; - LBMReal nueLB = (((4.0/9.0)*uLB)*2.0*(radius/dx))/Re; - - Grid3DPtr grid(new Grid3D(comm)); - grid->setDeltaX(dx); - grid->setBlockNX(blocknx1, blocknx2, blocknx3); - - //UbSchedulerPtr restartSch(new UbScheduler(10000, 10000, 100000)); - //RestartPostprocessor rp(grid, restartSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY); - //grid = rp.restart(-1); - - if (grid->getTimeStep() == 0) - { - - const int baseLevel = 0; - const int refineLevel = 0; - - //obstacle - GbObject3DPtr cylinder(new GbCylinder3D(L1*0.5, L2*0.5, 0, L1*0.5, L2*0.5, L3, radius)); - GbSystem3D::writeGeoObject(cylinder.get(),pathname + "/geo/cylinder", WbWriterVtkXmlBinary::getInstance()); - - D3Q27InteractorPtr cylinderInt; - - //bounding box - double d_minX1 = 0.0; - double d_minX2 = 0.0; - double d_minX3 = 0.0; - - double d_maxX1 = L1; - double d_maxX2 = L2; - double d_maxX3 = L3; - - - double blockLength = blocknx1*dx; - - //refinement area - double off = 1; - GbObject3DPtr refineCube(new GbCuboid3D(cylinder->getX1Minimum()-off, cylinder->getX2Minimum()-off, cylinder->getX3Minimum(), - cylinder->getX1Maximum()+off, cylinder->getX2Maximum()+off, cylinder->getX3Maximum())); - - GbObject3DPtr gridCube(new GbCuboid3D(d_minX1, d_minX2, d_minX3, d_maxX1, d_maxX2, d_maxX3)); - if(myid ==0) GbSystem3D::writeGeoObject(gridCube.get(),pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - if(myid ==0) - { - UBLOG(logINFO,"Parameters:"); - UBLOG(logINFO,"L = " << L2/dx ); - UBLOG(logINFO,"v = " << uLB ); - UBLOG(logINFO,"rho = " << rhoLB ); - UBLOG(logINFO,"nue = " << nueLB ); - UBLOG(logINFO,"Re = " << Re ); - UBLOG(logINFO,"dx = " << dx ); - UBLOG(logINFO,"number of levels = " << refineLevel+1 ); - UBLOG(logINFO,"numOfThreads = " << numOfThreads ); - UBLOG(logINFO,"Preprozess - start"); - } - - if(myid ==0) GbSystem3D::writeGeoObject(refineCube.get(),pathname + "/geo/refineCube", WbWriterVtkXmlBinary::getInstance()); - - //walls - GbCuboid3DPtr addWallYmin (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_minX2, d_maxX3+4.0*blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname+"/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmin (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_minX3)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallYmax (new GbCuboid3D(d_minX1-4.0*blockLength, d_maxX2, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmax (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_maxX3, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance()); - - //inflow - GbCuboid3DPtr geoInflow (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_minX1, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname+"/geo/geoInflow", WbWriterVtkXmlASCII::getInstance()); - - //outflow - GbCuboid3DPtr geoOutflow (new GbCuboid3D(d_maxX1, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); - - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm)); - - if (refineLevel > 0) - { - if(myid == 0) UBLOG(logINFO,"Refinement - start"); - RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel); - refineHelper.addGbObject(refineCube, 1); - refineHelper.refine(); - if(myid == 0) UBLOG(logINFO,"Refinement - end"); - } - - int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption)); - cylinderInt = D3Q27InteractorPtr ( new D3Q27Interactor(cylinder, grid, bcObst,Interactor3D::SOLID)); - - //walls - D3Q27InteractorPtr addWallYminInt(new D3Q27Interactor(addWallYmin, grid, bcObst,Interactor3D::SOLID)); - D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, bcObst,Interactor3D::SOLID)); - D3Q27InteractorPtr addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, bcObst,Interactor3D::SOLID)); - D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, bcObst,Interactor3D::SOLID)); - - mu::Parser fct; - fct.SetExpr("16*U*x2*x3*(H-x2)*(H-x3)/H^4"); - fct.DefineConst("U", uLB); - fct.DefineConst("H", H); - - //inflow - D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter (true, false ,false ,fct, 0, D3Q27BCFunction::INFCONST)); - velBCAdapter->setSecondaryBcOption(2); - D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr( new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID)); - - //outflow - D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB)); - 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(addWallYminInt); - intHelper.addInteractor(addWallZminInt); - intHelper.addInteractor(addWallYmaxInt); - intHelper.addInteractor(addWallZmaxInt); - intHelper.addInteractor(inflowInt); - intHelper.addInteractor(outflowInt); - intHelper.selectBlocks(); - - ppblocks->update(0); - ppblocks.reset(); - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27OffsetInterpolationProcessor()); - //FETOLSetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - - //domain decomposition for threads - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nod = nob * (blocknx1+gl) * (blocknx2+gl) * (blocknx3+gl); - - double needMemAll = double(nod*(27*sizeof(double) + sizeof(int) + sizeof(float)*4)); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - if(myid == 0) - { - UBLOG(logINFO,"Number of blocks = " << nob); - UBLOG(logINFO,"Number of nodes = " << nod); - UBLOG(logINFO,"Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO,"Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO,"Available memory per process = " << availMem << " bytes"); - } - - //LBMKernel3DPtr kernel(new LBMKernelETD3Q27Cascaded(blocknx1, blocknx2, blocknx3)); - //LBMKernel3DPtr kernel(new LBMKernelETD3Q27BGK(blocknx1, blocknx2, blocknx3, true)); - //option = 0 - ohne param., option = 1 - mit param. - //int option = 0; - LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(blocknx1, blocknx2, blocknx3, LBMKernelETD3Q27CCLB::NORMAL)); - - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem); - grid->accept(kernelVisitor); - - if (refineLevel > 0) - { - D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - intHelper.setBC(); - - //initialization of distributions - D3Q27ETInitDistributionsBlockVisitor initVisitor(nueLB, rhoLB); - //initVisitor.setVx1(fct); - grid->accept(initVisitor); - - //Postrozess - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv, true)); - ppgeo->update(0); - ppgeo.reset(); - - if(myid == 0) UBLOG(logINFO,"Preprozess - end"); - } - else - { - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27OffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - } - - UbSchedulerPtr stepSch(new UbScheduler(outstep)); - //D3Q27MacroscopicQuantitiesPostprocessor pp(grid, stepSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), conv); - - InSituVTKPostprocessor isp(grid, stepSch, metafile, conv); - //isp.update(0); - - UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); - NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm); - - CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endstep, stepSch)); - - 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[]) -{ - if ( argv != NULL ) - { - if (argc > 1) - { - chanel(argv[1]); - } - else - { - cout << "Configuration file must be set!: " << argv[0] << " <config file>" << endl << std::flush; - } - } - - return 0; -} - diff --git a/apps/cpu/insitu_demoserver/CMakeLists.txt b/apps/cpu/insitu_demoserver/CMakeLists.txt deleted file mode 100644 index b7fd3816c02e55f9636069005f5143a3e801f269..0000000000000000000000000000000000000000 --- a/apps/cpu/insitu_demoserver/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(insitu_demoserver) - -INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids ${FETOL_RELEASE_LIBRARY}) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(insitu_demoserver BINARY) diff --git a/apps/cpu/insitu_demoserver/insitu_demoserver.cpp b/apps/cpu/insitu_demoserver/insitu_demoserver.cpp deleted file mode 100644 index c52d50fcd4567e994f2dfcf912dfac37d149f439..0000000000000000000000000000000000000000 --- a/apps/cpu/insitu_demoserver/insitu_demoserver.cpp +++ /dev/null @@ -1,229 +0,0 @@ -#define vtkRenderingCore_AUTOINIT 4(vtkInteractionStyle,vtkRenderingFreeType,vtkRenderingFreeTypeOpenGL,vtkRenderingOpenGL) -#define vtkRenderingVolume_AUTOINIT 1(vtkRenderingVolumeOpenGL) - -#include "vtkActor.h" -#include "vtkContourFilter.h" -#include "vtkDataSetMapper.h" -#include "vtkDebugLeaks.h" -#include "vtkDoubleArray.h" -#include "vtkPolyData.h" -#include "vtkPolyDataMapper.h" -#include "vtkRectilinearGrid.h" -#include "vtkRegressionTestImage.h" -#include "vtkRenderWindow.h" -#include "vtkOpenGLRenderer.h" -#include "vtkSocketCommunicator.h" -#include "vtkSocketController.h" -#include "vtkStructuredGrid.h" -#include "vtkImageData.h" -#include "vtkUnstructuredGrid.h" -#include "vtkCamera.h" -#include "vtkImageActor.h" -#include <vtkXMLUnstructuredGridWriter.h> -#include "vtkRenderWindowInteractor.h" -#include "vtkOpenGLActor.h" -#include "vtkSmartPointer.h" -#include "vtkInteractorStyleTrackballCamera.h" -#include <vtkProperty.h> -#include <vtkPointData.h> -#include <vtkPlane.h> -#include <vtkCutter.h> - -#include <boost/thread.hpp> - -#define VTK_CREATE(type, name) \ - vtkSmartPointer<type> name = vtkSmartPointer<type>::New() - - -static const int scMsgLength = 10; - -static void CleanUp(vtkSmartPointer<vtkSocketCommunicator> vtkNotUsed(comm), - vtkSmartPointer<vtkSocketController> vtkNotUsed(contr)) -{ - // This will close the connection as well as delete - // the communicator - // Deleting no longer necessary with smart pointers. - // comm->Delete(); - // contr->Delete(); -} - -using namespace std; - -vtkSmartPointer<vtkSocketController> contr; -vtkSmartPointer<vtkSocketCommunicator> comm; - -void receive(vtkSmartPointer<vtkUnstructuredGrid> ugrid, vtkSmartPointer<vtkDataSetMapper> umapper, vtkSmartPointer<vtkRenderWindow> renWin) -{ - int step; - while (true) - { - if (!comm->Receive(&step, 1, 1, 11)) - { - cerr << "Server error: Error receiving data." << endl; - CleanUp(comm, contr); - return; - } - - cout << "step: "<<step<<"\n"; - - if (!comm->Receive(ugrid, 1, 9)) - { - cerr << "Client error: Error receiving data." << endl; - CleanUp(comm, contr); - return; - } - double range[2]; - ugrid->GetPointData()->GetArray("Vx")->GetRange(range); - umapper->SetScalarRange(range); - umapper->Update(); - //renWin->Render(); - } -} - -//////////////////////////////////////////////////////////////////////// -void server() -{ - try - { - contr = vtkSmartPointer<vtkSocketController>::New(); - contr->Initialize(); - - comm = vtkSmartPointer<vtkSocketCommunicator>::New(); - - string hostname = "localhost"; - int port=11111; - - // Establish connection - if (!comm->WaitForConnection(port)) - { - cerr << "Server error: Wait timed out or could not initialize socket." << endl; - return; - } - - // Test receiving vtkDataObject - VTK_CREATE(vtkUnstructuredGrid, ugrid); - - int step; - - if (!comm->Receive(&step, 1, 1, 11)) - { - cerr << "Server error: Error receiving data." << endl; - CleanUp(comm, contr); - return; - } - - cout << "step: "<<step<<"\n"; - - if (!comm->Receive(ugrid, 1, 9)) - { - cerr << "Client error: Error receiving data." << endl; - CleanUp(comm, contr); - return; - } - - vtkSmartPointer<vtkXMLUnstructuredGridWriter> writer = vtkSmartPointer<vtkXMLUnstructuredGridWriter>::New(); - writer->SetInput(ugrid); - writer->SetFileName("test.vtu"); - writer->SetDataModeToAscii(); - writer->Update(); - - //vtkPlane - vtkSmartPointer<vtkPlane> plane = vtkPlane::New(); - plane->SetNormal(0.0, 1.0, 0.0); - plane->SetOrigin(40, 19.5, 19.5); - - //Cut - vtkSmartPointer<vtkCutter> planeCut = vtkCutter::New(); - planeCut->SetInput(ugrid); - planeCut->SetCutFunction(plane); - planeCut->Update(); - - VTK_CREATE(vtkDataSetMapper, umapper); - //umapper->SetInput(planeCut->GetOutput()); - umapper->SetInput(ugrid); - - umapper->SetScalarModeToUsePointFieldData(); - umapper->SetColorModeToMapScalars(); - umapper->ScalarVisibilityOn(); - double range[2]; - //planeCut->GetOutput()->GetPointData()->GetArray("Vx")->GetRange(range); - ugrid->GetPointData()->GetArray("Vx")->GetRange(range); - umapper->SetScalarRange(range); - umapper->SelectColorArray("Vx"); - - VTK_CREATE(vtkActor, uactor); - uactor->SetMapper(umapper); - - VTK_CREATE(vtkRenderer, ren); - ren->AddActor(uactor); - ren->SetBackground( 0.1, 0.2, 0.4 ); - - VTK_CREATE(vtkRenderWindow, renWin); - renWin->SetSize(1024,800); - renWin->AddRenderer(ren); - - //while (true) - //{ - // if (!comm->Receive(&step, 1, 1, 11)) - // { - // cerr << "Server error: Error receiving data." << endl; - // CleanUp(comm, contr); - // return; - // } - - // cout << "step: "<<step<<"\n"; - - // if (!comm->Receive(ugrid, 1, 9)) - // { - // cerr << "Client error: Error receiving data." << endl; - // CleanUp(comm, contr); - // return; - // } - - // //writer->Update(); - // - // planeCut->Update(); - // planeCut->GetOutput()->GetPointData()->GetArray("Vx")->GetRange(range); - // umapper->SetScalarRange(range); - // umapper->Update(); - // renWin->Render(); - //} - - boost::thread t(boost::bind( &receive, ugrid, umapper,renWin)); - - vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New(); - iren->SetRenderWindow(renWin); - - vtkInteractorStyleTrackballCamera *style = vtkInteractorStyleTrackballCamera::New(); - iren->SetInteractorStyle(style); - - iren->Initialize(); - iren->Start(); - - iren->Delete(); - style->Delete(); - - CleanUp(comm, contr); - - } - 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[]) -{ - server(); -} - diff --git a/apps/cpu/micropart/CMakeLists.txt b/apps/cpu/micropart/CMakeLists.txt deleted file mode 100644 index 09ebee3c8a5bde68b98a6ac6fcde15b747e28a10..0000000000000000000000000000000000000000 --- a/apps/cpu/micropart/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(micropart) - -INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(mcpart BINARY) diff --git a/apps/cpu/micropart/mcpart.cpp b/apps/cpu/micropart/mcpart.cpp deleted file mode 100644 index 1003102e83bb5e221eeb6db3749652ef481fdb98..0000000000000000000000000000000000000000 --- a/apps/cpu/micropart/mcpart.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#include "micropartTestQs3.hpp" -//#include "micropartSetup1.hpp" -//#include "micropartSetup2.hpp" -//#include "orifice.hpp" - -int main(int argc, char* argv[]) -{ - micropartTestQs3(argv[1]); - //runSetup1(argv[1]); - //runSetup2(argv[1]); - //orifice(argv[1]); - return 0; -} - diff --git a/apps/cpu/micropart/micropartSetup1.hpp b/apps/cpu/micropart/micropartSetup1.hpp deleted file mode 100644 index 843ec702cf017c04f6ed68cba306dfb211d95f49..0000000000000000000000000000000000000000 --- a/apps/cpu/micropart/micropartSetup1.hpp +++ /dev/null @@ -1,451 +0,0 @@ -#include <iostream> -#include <string> -#include <map> -#include "RefineCrossAndInsideGbObjectBlockVisitor.h" -#include "RatioBlockVisitor.h" -#include "RatioSmoothBlockVisitor.h" -#include "OverlapBlockVisitor.h" -#include "SetInterpolationDirsBlockVisitor.h" -#include "geometry3d/GbSystem3D.h" -#include "geometry3d/GbCuboid3D.h" -#include "geometry3d/GbCylinder3D.h" -#include "geometry3d/GbSphere3D.h" -#include "BlocksPostprocessor.h" -#include "Grid3D.h" -#include "Patch3D.h" -#include "Patch3DSystem.h" -#include "Block3D.h" -#include "LBMKernelETD3Q27Cascaded.h" -#include "LBMKernelETD3Q27BGK.h" -#include "CalculationManager.h" -#include "D3Q27SetConnectorsBlockVisitor.h" -#include "D3Q27ETInitDistributionsBlockVisitor.h" -#include "D3Q27Interactor.h" -#include "D3Q27NoSlipBCAdapter.h" -#include "D3Q27VelocityBCAdapter.h" -#include "D3Q27DensityBCAdapter.h" -#include "SimulationParameters.h" -#include "Communicator.h" -#include "MPICommunicator.h" -#include "SimpleGeometricPartitioner.h" -#include "D3Q27MacroscopicQuantitiesPostprocessor.h" -#include "D3Q27ETBCProcessor.h" -#include "D3Q27TriFaceMeshInteractor.h" -#include "ConfigFileReader.h" -#include "StringUtil.hpp" -#include "D3Q27PressureDifferencePostprocessor.h" -#include "D3Q27IntegrateValuesHelper.h" -#include "LBMUnitConverter.h" -#include "NUPSCounterPostprocessor.h" -#include "PQueuePartitioningGridVisitor.h" -#include "SetKernelBlockVisitor.h" -#include "GenBlocksGridVisitor.h" -#include "D3Q27PathLinePostprocessor.h" -#include "D3Q27SetUndefinedNodesBlockVisitor.h" - // -#include "basics/writer/WbWriterVtkXmlBinary.h" -#include "basics/writer/WbWriterVtkXmlASCII.h" -#include "geometry3d/creator/GbTriFaceMesh3DCreator.h" -#include "geometry3d/GbTriFaceMesh3D.h" -#include "D3Q27System.h" -#include <basics/transmitter/TbTransmitterMpiPool.h> -#include "MathUtil.hpp" -#include "D3Q27OffsetInterpolationProcessor.h" -#include "SolidBlocksHelper.h" -#include "MetisPartitioningGridVisitor.h" -#include "RestartPostprocessor.h" -#include "LBMKernelETD3Q27CCLB.h" -#include "D3Q27IncompressibleOffsetInterpolationProcessor.h" - -using namespace std; - -void runSetup1(const char *cstr) -{ - try - { - CommunicatorPtr comm(new MPICommunicator()); - int myid = comm->getProcessID(); - int numprocs = comm->getNumberOfProcesses(); - - string machine = QUOTEME(CAB_MACHINE); - string pathname; - double availMem = 0; - string geoFile; - int numOfThreads = 1; - - if(machine == "BOMBADIL") - { - pathname = "c:/temp/micropart"; - availMem = 3.0e9; - //geoFile = "c:/Data/micropart/DK19_7_02_Martin.stl"; - //geoFile = "c:/Data/micropart/ktoolcav.stl"; - //geoFile = "c:/Data/micropart/boxN.stl"; - //geoFile = "c:/Data/bananas/Banana_boxD.stl"; - } - else if(machine == "M01" || machine == "M02") - { - pathname = "/work/koskuche/scratch/micropart_s1"; - //pathname = "/work/koskuche/scratch/micropart2"; - availMem = 12.0e9; - geoFile = "/home/koskuche/data/micropart/DK19_7_02_Martin.stl"; - - numOfThreads = 1; - if(myid ==0) - { - stringstream logFilename; - logFilename << pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - } - else throw UbException(UB_EXARGS, "unknown CAB_MACHINE"); - - UbLog::reportingLevel() = logINFO; - //UbLog::reportingLevel() = logDEBUG1; - - int nodePerBlockX1 = 8; //Anzahl an Knoten pro Block - int nodePerBlockX2 = 8;//(int)16; - int nodePerBlockX3 = 8;//(int)16; - - double bH = nodePerBlockX1; //gewuenschte Rand- und Blockbreite - - //Simulation Parameters - - double sf = 1.0; - double endTime = 160001*sf; - //length [m] - double lSI = 0.067; - //length [LB] - double lLB = 30; - - double dx = 0.0134;//lSI/lLB; - - double left_offset = 0.5; - double right_offset = 0.5;//2*0.5 - double front_offset = 0.15; - double back_offset = 0.15; - double top_offset = 0.0; - double bottom_offset = 0.07; - - LBMReal vLB = 0.016103/sf; - LBMReal Re; - LBMReal rhoLB = 0.0; - LBMReal nueLB = 0.0000249/sf;//(vLB*lLB)/Re; - Re = (vLB*(0.303/dx))/nueLB; - const int baseLevel = 0; - const int refineLevel = 5; - LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - - ////////////////////////////////////////////////////////////////////////// - GbObject3DPtr refineCube1(new GbCuboid3D(-0.2222890,-0.52993, -0.141754, 0.578916113,0.6089970,0.0446053)); - if(myid == 0) GbSystem3D::writeGeoObject(refineCube1.get(), pathname+"/geo/refineCube1", WbWriterVtkXmlASCII::getInstance()); - - GbObject3DPtr refineCube2(new GbCuboid3D(-0.16,-0.05, -0.141754, 0.2,0.05,0.0446053)); - if(myid == 0) GbSystem3D::writeGeoObject(refineCube2.get(), pathname+"/geo/refineCube2", WbWriterVtkXmlASCII::getInstance()); - ////////////////////////////////////////////////////////////////////////// - - Grid3DPtr grid(new Grid3D()); - - UbSchedulerPtr rSch(new UbScheduler()); - rSch->addSchedule(20000, 20000, endTime-1); - RestartPostprocessorPtr rp(new RestartPostprocessor(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY)); - - std::string opt; - - if(cstr!= NULL) - opt = std::string(cstr); - - if/*(cstr== NULL)*/(cstr!= NULL) - { - opt = std::string(cstr); - - if(myid==0) UBLOG(logINFO,"Restart step: " << opt); - - grid = rp->restart(UbSystem::stringTo<int>(opt)); - rp->reconnect(); - - if(myid ==0) UBLOG(logINFO,"TimeStep = " <<grid->getTimeStep()); - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - - //domain decomposition - //PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - //grid->accept(pqPartVisitor); - } - else - { - if(myid ==0) - { - UBLOG(logINFO,"L = " <<lLB ); - UBLOG(logINFO,"v = " <<vLB ); - UBLOG(logINFO,"rho = " <<rhoLB ); - UBLOG(logINFO,"nue = " << nueLB ); - UBLOG(logINFO,"Re = " << Re ); - UBLOG(logINFO,"Preprozess - start"); - } - - - //////////////////////////////////////////////////////////////////////// - //Grid - ////////////////////////////////////////////////////////////////////////// - grid->setDeltaX(dx); - grid->setBlockNX(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2); - - //////////////////////////////////////////////////////////////////////////// - //// Geometrie - //////////////////////////////////////////////////////////////////////////// - //GbTriFaceMesh3DPtr geo (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(geoFile,"geo")); - - //if(myid == 0) GbSystem3D::writeGeoObject(geo.get(), pathname+"/geo/geo", WbWriterVtkXmlASCII::getInstance()); - - //////////////////////////////////////////////////////////////////////////// - //// Randgeometrien erstellen - //////////////////////////////////////////////////////////////////////////// - - GbCuboid3DPtr plate1 = GbCuboid3DPtr( new GbCuboid3D( -7.5, -1.515e-1, -6.831e-2, 7.5, 1.515e-1, 0.0 )); - - GbCuboid3DPtr plate2 = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, -16.51e-1, -16.831e-2, 1.5e-1, -1.6e-2, 1.0 )); - GbCuboid3DPtr plate3 = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, 1.6e-2, -16.831e-2, 1.5e-1, 16.515e-1, 1.0 )); - - GbCuboid3DPtr plate1_1 = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, -1.0e-1, 7.5, 2.515e-1, -6.831e-2 )); - GbCuboid3DPtr plate1_2 = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, -0.0000001, 7.5, 2.515e-1, 1.0e-1 )); - //GbCuboid3DPtr plate1_3 = GbCuboid3DPtr( new GbCuboid3D( -7.5, 1.515e-1, -6.831e-2, 7.5, 2.515e-1, 0.0 )); - GbCuboid3DPtr plate1_3 = GbCuboid3DPtr( new GbCuboid3D( -7.5, 1.515e-1, -9.831e-2, 7.5, 2.515e-1, 0.06 )); - GbCuboid3DPtr plate1_4 = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, 0.0, 7.5, -1.515e-1, -1.0e-1 )); - - GbCuboid3DPtr inflow = GbCuboid3DPtr( new GbCuboid3D( -8.0, -1.0, -1.0, -7.5, 1.0, 1.0 )); - GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( 7.5, -1.0, -1.0, 8.0, 1.0, 1.0 )); - - if(myid == 0) - { - GbSystem3D::writeGeoObject(plate2.get(),pathname+"/geo/plate2", WbWriterVtkXmlASCII::getInstance()); - GbSystem3D::writeGeoObject(plate3.get(),pathname+"/geo/plate3", WbWriterVtkXmlASCII::getInstance()); - - GbSystem3D::writeGeoObject(plate1_1.get(),pathname+"/geo/plate1_1", WbWriterVtkXmlASCII::getInstance()); - GbSystem3D::writeGeoObject(plate1_2.get(),pathname+"/geo/plate1_2", WbWriterVtkXmlASCII::getInstance()); - GbSystem3D::writeGeoObject(plate1_3.get(),pathname+"/geo/plate1_3", WbWriterVtkXmlASCII::getInstance()); - GbSystem3D::writeGeoObject(plate1_4.get(),pathname+"/geo/plate1_4", WbWriterVtkXmlASCII::getInstance()); - - GbSystem3D::writeGeoObject(inflow.get(),pathname+"/geo/inflow", WbWriterVtkXmlASCII::getInstance()); - GbSystem3D::writeGeoObject(outflow.get(),pathname+"/geo/outflow", WbWriterVtkXmlASCII::getInstance()); - } - - double shiftForMG=grid->getDeltaX(refineLevel)*nodePerBlockX1 / 3.0*1.5; - - GbObject3DPtr gridCube(new GbCuboid3D(plate1->getX1Minimum()-shiftForMG, plate1->getX2Minimum()-shiftForMG, plate1->getX3Minimum()-shiftForMG, - plate1->getX1Maximum()+shiftForMG, - plate1->getX2Maximum()+shiftForMG, - plate1->getX3Maximum()+shiftForMG)); - - GenBlocksGridVisitor genBlocks; - genBlocks.addGeoObject(gridCube); - grid->accept(genBlocks); - - if (refineLevel > 0) - { - if(myid == 0) UBLOG(logINFO,"Refinement - start"); - RefineCrossAndInsideGbObjectBlockVisitor refVisitor1(refineCube1, baseLevel, refineLevel-3); - grid->accept(refVisitor1); - - RefineCrossAndInsideGbObjectBlockVisitor refVisitor2(refineCube2, baseLevel, refineLevel-1); - grid->accept(refVisitor2); - - RatioBlockVisitor ratioVisitor(refineLevel); - grid->accept(ratioVisitor); - - RatioSmoothBlockVisitor ratioSmoothVisitor(refineLevel); - grid->accept(ratioSmoothVisitor); - - OverlapBlockVisitor overlapVisitor(refineLevel); - grid->accept(overlapVisitor); - - std::vector<int> dirs; - D3Q27System::getLBMDirections(dirs); - SetInterpolationDirsBlockVisitor interDirsVisitor(dirs); - grid->accept(interDirsVisitor); - if(myid == 0) UBLOG(logINFO,"Refinement - end"); - } - - ////////////////////////////////////////////////////////////////////////// - //INTERAKTOREN SETZEN (=Randbedingungen) - ////////////////////////////////////////////////////////////////////////// - //oben/unten = Haftrand - int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption)); - //D3Q27TriFaceMeshInteractorPtr geoInt = D3Q27TriFaceMeshInteractorPtr( new D3Q27TriFaceMeshInteractor(geo, grid, D3Q27BoundaryConditionAdapterPtr(new D3Q27NoSlipBCAdapter(bbOption)),Interactor3D::SOLID)); - //geoInt->setUseHalfSpaceCheck(true); - //geoInt->setRegardPointInObjectTest(true); - - //D3Q27InteractorPtr plate1Int(new D3Q27Interactor(plate1, grid, bcObst,Interactor3D::INVERSESOLID)); - D3Q27InteractorPtr plate2Int(new D3Q27Interactor(plate2, grid, bcObst,Interactor3D::SOLID)); - D3Q27InteractorPtr plate3Int(new D3Q27Interactor(plate3, grid, bcObst,Interactor3D::SOLID)); - - D3Q27InteractorPtr plate1_1Int(new D3Q27Interactor(plate1_1, grid, bcObst,Interactor3D::SOLID)); - D3Q27InteractorPtr plate1_2Int(new D3Q27Interactor(plate1_2, grid, bcObst,Interactor3D::SOLID)); - D3Q27InteractorPtr plate1_3Int(new D3Q27Interactor(plate1_3, grid, bcObst,Interactor3D::SOLID)); - D3Q27InteractorPtr plate1_4Int(new D3Q27Interactor(plate1_4, grid, bcObst,Interactor3D::SOLID)); - - //links: geschwindigkeits-einfluss - //Velocity-BC - ////////////////////////////////////////////////////////////////////////// - mu::Parser fct; - fct.DefineConst("vx1" , vLB*9.0/4.0); - fct = Utilities::getDuctParaboloidX(plate1->getX2Centroid(), plate1->getX2Maximum() - plate1->getX2Minimum(), plate1->getX3Centroid(), plate1->getX3Minimum() - plate1->getX3Maximum(), vLB*9.0/4.0); - //fct.SetExpr("vx1"); - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - D3Q27BoundaryConditionAdapterPtr velBCAdapter = D3Q27BoundaryConditionAdapterPtr(new D3Q27VelocityBCAdapter (true, false ,false ,fct, 0, D3Q27BCFunction::INFCONST)); - // velBCAdapter->setSecondaryBcOption(2); - D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr( new D3Q27Interactor(inflow, grid, velBCAdapter, Interactor3D::SOLID)); - - //rechts: druckrand - //Density-BC - //fuer Kompressibles Modell rho = 1.0 - D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB)); - denBCAdapter->setSecondaryBcOption(1); - D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr( new D3Q27Interactor(outflow, grid, denBCAdapter,Interactor3D::SOLID)); - - MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B); - //MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelIntersected, D3Q27System::B, true, numOfThreads); - grid->accept( metisVisitor ); - - SolidBlocksHelper sd(grid, comm); - //sd.addInteractor(geoInt); - sd.addInteractor(inflowInt); - sd.addInteractor(outflowInt); - sd.addInteractor(plate1_1Int); - sd.addInteractor(plate1_2Int); - sd.addInteractor(plate1_3Int); - sd.addInteractor(plate1_4Int); - sd.addInteractor(plate2Int); - sd.addInteractor(plate3Int); - sd.deleteSolidBlocks(); - - grid->accept( metisVisitor ); - - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm)); - ppblocks->update(0); - ppblocks.reset(); - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nod_temp = nob * (nodePerBlockX1+gl) * (nodePerBlockX2+gl) * (nodePerBlockX3+gl); - unsigned long nod = nob * (nodePerBlockX1) * (nodePerBlockX2) * (nodePerBlockX3); - double needMemAll = double(nod_temp*(27*sizeof(double) + sizeof(int) + sizeof(float)*4)); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - if(myid == 0) - { - UBLOG(logINFO,"Number of blocks = " << nob); - UBLOG(logINFO,"Number of nodes = " << nod); - UBLOG(logINFO,"Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO,"Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO,"Available memory per process = " << availMem << " bytes"); - } - - //LBMKernel3DPtr kernel(new LBMKernelETD3Q27Cascaded(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2)); - //option = 0 - ohne param., option = 1 - mit param. - int option = 0; - LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2, option)); - - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem); - grid->accept(kernelVisitor); - - { - D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - //canal - //grid->addAndInitInteractor(geoInt); - grid->addAndInitInteractor(plate1_1Int); - grid->addAndInitInteractor(plate1_2Int); - grid->addAndInitInteractor(plate1_3Int); - grid->addAndInitInteractor(plate1_4Int); - grid->addAndInitInteractor(plate2Int); - grid->addAndInitInteractor(plate3Int); - - //inflow - grid->addAndInitInteractor(inflowInt); - - //outflow - grid->addAndInitInteractor(outflowInt); - - ////////////////////////////////////////////////////////////////////////// - //connectoren setzen: - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - ////////////////////////////////////////////////////////////////////////// - //domain decomposition - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - ////////////////////////////////////////////////////////////////////////// - //Stroemungsfeld initialisieren - ////////////////////////////////////////////////////////////////////////// - D3Q27ETInitDistributionsBlockVisitor initVisitor(rhoLB); //1.0 - //initVisitor.setVx1(0.0); - grid->accept(initVisitor); - - //if(myid == 0) - //{ - // //Abst�nde "q" als Linien rausschreiben - // std::vector< UbTupleFloat3 > nodes; - // std::vector< UbTupleInt2 > lines; - // geoInt->addQsLineSet(nodes, lines); - // WbWriterVtkXmlBinary::getInstance()->writeLines(pathname+"/grid/qs",nodes,lines); - //} - - if(myid == 0) UBLOG(logINFO,"Preprozess - end"); - - } - ////////////////////////////////////////////////////////////////////////// - //Set Postprozessors - ////////////////////////////////////////////////////////////////////////// - { - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessor ppgeo(grid,geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv, comm, true); - grid->doPostProcess(0); - } - - UbSchedulerPtr nupsSch(new UbScheduler(1, 5, 10)); - NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm); - - double outTime = 2000; - UbSchedulerPtr stepSch(new UbScheduler(outTime)); - stepSch->addSchedule(100, 100, 100); - D3Q27MacroscopicQuantitiesPostprocessor pp(grid,stepSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), conv, comm); - ////////////////////////////////////////////////////////////////////////// - //PathLine - //UbSchedulerPtr plSch(new UbScheduler(10, 1500)); - //D3Q27PathLinePostprocessor pathLine(grid, pathname + "/pathLine", WbWriterVtkXmlASCII::getInstance(), conv, plSch, comm, -0.3285474538, 0.09692341,-0.0376166666, nueLB, iProcessor); - ////////////////////////////////////////////////////////////////////////// - //Simulation - ////////////////////////////////////////////////////////////////////////// - - UbSchedulerPtr visSch(stepSch); - 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; - } - catch(std::string& s) - { - cerr << s << endl; - } - catch(...) - { - cerr << "unknown exception" << endl; - } - -} diff --git a/apps/cpu/micropart/micropartSetup2.hpp b/apps/cpu/micropart/micropartSetup2.hpp deleted file mode 100644 index 80eff1378c7c6a5cb8e4af6616d48cec286afd93..0000000000000000000000000000000000000000 --- a/apps/cpu/micropart/micropartSetup2.hpp +++ /dev/null @@ -1,444 +0,0 @@ -#include <iostream> -#include <string> -#include <map> -#include "RefineCrossAndInsideGbObjectBlockVisitor.h" -#include "RatioBlockVisitor.h" -#include "RatioSmoothBlockVisitor.h" -#include "OverlapBlockVisitor.h" -#include "SetInterpolationDirsBlockVisitor.h" -#include "geometry3d/GbSystem3D.h" -#include "geometry3d/GbCuboid3D.h" -#include "geometry3d/GbCylinder3D.h" -#include "geometry3d/GbSphere3D.h" -#include "BlocksPostprocessor.h" -#include "Grid3D.h" -#include "Patch3D.h" -#include "Patch3DSystem.h" -#include "Block3D.h" -#include "LBMKernelETD3Q27Cascaded.h" -#include "LBMKernelETD3Q27BGK.h" -#include "CalculationManager.h" -#include "D3Q27SetConnectorsBlockVisitor.h" -#include "D3Q27ETInitDistributionsBlockVisitor.h" -#include "D3Q27Interactor.h" -#include "D3Q27NoSlipBCAdapter.h" -#include "D3Q27VelocityBCAdapter.h" -#include "D3Q27DensityBCAdapter.h" -#include "SimulationParameters.h" -#include "Communicator.h" -#include "MPICommunicator.h" -#include "SimpleGeometricPartitioner.h" -#include "D3Q27MacroscopicQuantitiesPostprocessor.h" -#include "D3Q27ETBCProcessor.h" -#include "D3Q27TriFaceMeshInteractor.h" -#include "ConfigFileReader.h" -#include "StringUtil.hpp" -#include "D3Q27PressureDifferencePostprocessor.h" -#include "D3Q27IntegrateValuesHelper.h" -#include "LBMUnitConverter.h" -#include "NUPSCounterPostprocessor.h" -#include "PQueuePartitioningGridVisitor.h" -#include "SetKernelBlockVisitor.h" -#include "GenBlocksGridVisitor.h" -#include "D3Q27PathLinePostprocessor.h" -#include "D3Q27SetUndefinedNodesBlockVisitor.h" - // -#include "basics/writer/WbWriterVtkXmlBinary.h" -#include "basics/writer/WbWriterVtkXmlASCII.h" -#include "geometry3d/creator/GbTriFaceMesh3DCreator.h" -#include "geometry3d/GbTriFaceMesh3D.h" -#include "D3Q27System.h" -#include <basics/transmitter/TbTransmitterMpiPool.h> -#include "MathUtil.hpp" -#include "D3Q27OffsetInterpolationProcessor.h" -#include "SolidBlocksHelper.h" -#include "MetisPartitioningGridVisitor.h" -#include "RestartPostprocessor.h" -#include "D3Q27IncompressibleOffsetInterpolationProcessor.h" -#include "LBMKernelETD3Q27CCLB.h" - -using namespace std; - -void runSetup2(const char *cstr) -{ - try - { - CommunicatorPtr comm(new MPICommunicator()); - int myid = comm->getProcessID(); - int numprocs = comm->getNumberOfProcesses(); - - string machine = QUOTEME(CAB_MACHINE); - string pathname; - double availMem = 0; - string geoFile; - int numOfThreads = 1; - - if(machine == "BOMBADIL") - { - pathname = "c:/temp/micropart"; - availMem = 3.0e9; - //geoFile = "c:/Data/micropart/DK19_7_02_Martin.stl"; - //geoFile = "c:/Data/micropart/ktoolcav.stl"; - //geoFile = "c:/Data/micropart/boxN.stl"; - //geoFile = "c:/Data/bananas/Banana_boxD.stl"; - } - else if(machine == "M01" || machine == "M02") - { - pathname = "/work/koskuche/scratch/micropart2"; - availMem = 12.0e9; - //geoFile = "/home/koskuche/data/micropart/DK19_7_02_Martin.stl"; - - numOfThreads = 1; - if(myid ==0) - { - stringstream logFilename; - logFilename << pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - } - else throw UbException(UB_EXARGS, "unknown CAB_MACHINE"); - - UbLog::reportingLevel() = logINFO; - //UbLog::reportingLevel() = logDEBUG1; - - int nodePerBlockX1 = 16; //Anzahl an Knoten pro Block - int nodePerBlockX2 = 16;//(int)16; - int nodePerBlockX3 = 16;//(int)16; - - double bH = nodePerBlockX1; //gewuenschte Rand- und Blockbreite - - //Simulation Parameters - - //length [m] - double lSI = 0.067; - //length [LB] - double lLB = 30; - - double dx = 0.0134*0.5;//lSI/lLB; - - double left_offset = 0.5; - double right_offset = 0.5;//2*0.5 - double front_offset = 0.15; - double back_offset = 0.15; - double top_offset = 0.0; - double bottom_offset = 0.07; - - LBMReal vLB = 0.016103; - LBMReal Re; - LBMReal rhoLB = 0.0; - LBMReal nueLB = 0.0000249*2.0;//(vLB*lLB)/Re; - Re = (vLB*(0.303/dx))/nueLB; - const int baseLevel = 0; - const int refineLevel = 5; - LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - - ////////////////////////////////////////////////////////////////////////// - GbObject3DPtr refineCube1(new GbCuboid3D(-0.2222890,-0.52993, -0.141754, 0.578916113,0.6089970,0.0446053)); - if(myid == 0) GbSystem3D::writeGeoObject(refineCube1.get(), pathname+"/geo/refineCube1", WbWriterVtkXmlASCII::getInstance()); - - GbObject3DPtr refineCube2(new GbCuboid3D(-0.16,-0.05, -0.141754, 0.2,0.05,0.0446053)); - if(myid == 0) GbSystem3D::writeGeoObject(refineCube2.get(), pathname+"/geo/refineCube2", WbWriterVtkXmlASCII::getInstance()); - ////////////////////////////////////////////////////////////////////////// - - Grid3DPtr grid(new Grid3D()); - - UbSchedulerPtr rSch(new UbScheduler(1000, 1000)); - //RestartPostprocessorPtr rp(new RestartPostprocessor(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY)); - - std::string opt; - - if(cstr!= NULL) - opt = std::string(cstr); - - if/*(cstr== NULL)*/(cstr!= NULL) - { - opt = std::string(cstr); - - if(myid==0) UBLOG(logINFO,"Restart step: " << opt); - - //grid = rp->restart(UbSystem::stringTo<int>(opt)); - //rp->reconnect(); - grid->setTimeStep(UbSystem::stringTo<int>(opt)); - - if(myid ==0) UBLOG(logINFO,"TimeStep = " <<grid->getTimeStep()); - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - - //domain decomposition - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - } - else - { - if(myid ==0) - { - UBLOG(logINFO,"L = " <<lLB ); - UBLOG(logINFO,"v = " <<vLB ); - UBLOG(logINFO,"rho = " <<rhoLB ); - UBLOG(logINFO,"nue = " << nueLB ); - UBLOG(logINFO,"Re = " << Re ); - UBLOG(logINFO,"Preprozess - start"); - } - - - //////////////////////////////////////////////////////////////////////// - //Grid - ////////////////////////////////////////////////////////////////////////// - grid->setDeltaX(dx); - grid->setBlockNX(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2); - - //////////////////////////////////////////////////////////////////////////// - //// Geometrie - //////////////////////////////////////////////////////////////////////////// - //GbTriFaceMesh3DPtr geo (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(geoFile,"geo")); - - //if(myid == 0) GbSystem3D::writeGeoObject(geo.get(), pathname+"/geo/geo", WbWriterVtkXmlASCII::getInstance()); - - //////////////////////////////////////////////////////////////////////////// - //// Randgeometrien erstellen - //////////////////////////////////////////////////////////////////////////// - double shiftForMG=grid->getDeltaX(refineLevel)*nodePerBlockX1 / 3.0*2.0; - GbCuboid3DPtr plate1 = GbCuboid3DPtr( new GbCuboid3D( -7.5, -1.515e-1, -6.831e-2, 7.5, 1.515e-1, 0.0 )); - - GbCuboid3DPtr plate2 = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, -16.51e-1, -16.831e-2, 1.5e-1, -1.6e-2, 1.0 )); - GbCuboid3DPtr plate3 = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, 1.6e-2, -16.831e-2, 1.5e-1, 16.515e-1, 1.0 )); - - GbCuboid3DPtr plate1_1 = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, -1.0e-1, 7.5, 2.515e-1, -6.831e-2 )); - GbCuboid3DPtr plate1_2 = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, -0.0000001, 7.5, 2.515e-1, 1.0e-1 )); - GbCuboid3DPtr plate1_3 = GbCuboid3DPtr( new GbCuboid3D( -7.5, 1.515e-1, -6.831e-2, 7.5, 2.515e-1, 0.0 )); - GbCuboid3DPtr plate1_4 = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, 0.0, 7.5, -1.515e-1, -1.0e-1 )); - - GbCuboid3DPtr inflow = GbCuboid3DPtr( new GbCuboid3D( -8.0, -1.0, -1.0, -7.5, 1.0, 1.0 )); - GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( 7.5, -1.0, -1.0, 8.0, 1.0, 1.0 )); - - if(myid == 0) - { - GbSystem3D::writeGeoObject(plate1.get(),pathname+"/geo/plate1", WbWriterVtkXmlASCII::getInstance()); - GbSystem3D::writeGeoObject(plate2.get(),pathname+"/geo/plate2", WbWriterVtkXmlASCII::getInstance()); - GbSystem3D::writeGeoObject(plate3.get(),pathname+"/geo/plate3", WbWriterVtkXmlASCII::getInstance()); - - GbSystem3D::writeGeoObject(plate1_1.get(),pathname+"/geo/plate1_1", WbWriterVtkXmlASCII::getInstance()); - GbSystem3D::writeGeoObject(plate1_2.get(),pathname+"/geo/plate1_2", WbWriterVtkXmlASCII::getInstance()); - GbSystem3D::writeGeoObject(plate1_3.get(),pathname+"/geo/plate1_3", WbWriterVtkXmlASCII::getInstance()); - GbSystem3D::writeGeoObject(plate1_4.get(),pathname+"/geo/plate1_4", WbWriterVtkXmlASCII::getInstance()); - - GbSystem3D::writeGeoObject(inflow.get(),pathname+"/geo/inflow", WbWriterVtkXmlASCII::getInstance()); - GbSystem3D::writeGeoObject(outflow.get(),pathname+"/geo/outflow", WbWriterVtkXmlASCII::getInstance()); - } - - GbObject3DPtr gridCube(new GbCuboid3D(plate1->getX1Minimum()-shiftForMG, plate1->getX2Minimum()-shiftForMG, plate1->getX3Minimum()-shiftForMG, - plate1->getX1Maximum()+shiftForMG, - plate1->getX2Maximum()+shiftForMG, - plate1->getX3Maximum()+shiftForMG)); - - GenBlocksGridVisitor genBlocks; - genBlocks.addGeoObject(gridCube); - grid->accept(genBlocks); - - if (refineLevel > 0) - { - if(myid == 0) UBLOG(logINFO,"Refinement - start"); - RefineCrossAndInsideGbObjectBlockVisitor refVisitor1(refineCube1, baseLevel, refineLevel-3); - grid->accept(refVisitor1); - - RefineCrossAndInsideGbObjectBlockVisitor refVisitor2(refineCube2, baseLevel, refineLevel-1); - grid->accept(refVisitor2); - - RatioBlockVisitor ratioVisitor(refineLevel); - grid->accept(ratioVisitor); - - RatioSmoothBlockVisitor ratioSmoothVisitor(refineLevel); - grid->accept(ratioSmoothVisitor); - - OverlapBlockVisitor overlapVisitor(refineLevel); - grid->accept(overlapVisitor); - - std::vector<int> dirs; - D3Q27System::getLBMDirections(dirs); - SetInterpolationDirsBlockVisitor interDirsVisitor(dirs); - grid->accept(interDirsVisitor); - if(myid == 0) UBLOG(logINFO,"Refinement - end"); - } - - ////////////////////////////////////////////////////////////////////////// - //INTERAKTOREN SETZEN (=Randbedingungen) - ////////////////////////////////////////////////////////////////////////// - //oben/unten = Haftrand - int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption)); - //D3Q27TriFaceMeshInteractorPtr geoInt = D3Q27TriFaceMeshInteractorPtr( new D3Q27TriFaceMeshInteractor(geo, grid, D3Q27BoundaryConditionAdapterPtr(new D3Q27NoSlipBCAdapter(bbOption)),Interactor3D::SOLID)); - //geoInt->setUseHalfSpaceCheck(true); - //geoInt->setRegardPointInObjectTest(true); - - //D3Q27InteractorPtr plate1Int(new D3Q27Interactor(plate1, grid, bcObst,Interactor3D::INVERSESOLID)); - D3Q27InteractorPtr plate2Int(new D3Q27Interactor(plate2, grid, bcObst,Interactor3D::SOLID)); - D3Q27InteractorPtr plate3Int(new D3Q27Interactor(plate3, grid, bcObst,Interactor3D::SOLID)); - - D3Q27InteractorPtr plate1_1Int(new D3Q27Interactor(plate1_1, grid, bcObst,Interactor3D::SOLID)); - D3Q27InteractorPtr plate1_2Int(new D3Q27Interactor(plate1_2, grid, bcObst,Interactor3D::SOLID)); - D3Q27InteractorPtr plate1_3Int(new D3Q27Interactor(plate1_3, grid, bcObst,Interactor3D::SOLID)); - D3Q27InteractorPtr plate1_4Int(new D3Q27Interactor(plate1_4, grid, bcObst,Interactor3D::SOLID)); - - //links: geschwindigkeits-einfluss - //Velocity-BC - ////////////////////////////////////////////////////////////////////////// - mu::Parser fct; - fct.DefineConst("vx1" , vLB*9.0/4.0 ); - fct = Utilities::getDuctParaboloidX(plate1->getX2Centroid(), plate1->getX2Maximum() - plate1->getX2Minimum(), plate1->getX3Centroid(), plate1->getX3Minimum() - plate1->getX3Maximum(), vLB*9.0/4.0); - //fct.SetExpr("vx1"); - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - D3Q27BoundaryConditionAdapterPtr velBCAdapter = D3Q27BoundaryConditionAdapterPtr(new D3Q27VelocityBCAdapter (true, false ,false ,fct, 0, D3Q27BCFunction::INFCONST)); - velBCAdapter->setSecondaryBcOption(2); - D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr( new D3Q27Interactor(inflow, grid, velBCAdapter, Interactor3D::SOLID)); - - //rechts: druckrand - //Density-BC - //fuer Kompressibles Modell rho = 1.0 - D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB)); - denBCAdapter->setSecondaryBcOption(1); - D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr( new D3Q27Interactor(outflow, grid, denBCAdapter,Interactor3D::SOLID)); - - MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B); - grid->accept( metisVisitor ); - - SolidBlocksHelper sd(grid, comm); - //sd.addInteractor(geoInt); - sd.addInteractor(inflowInt); - sd.addInteractor(outflowInt); - sd.addInteractor(plate1_1Int); - sd.addInteractor(plate1_2Int); - sd.addInteractor(plate1_3Int); - sd.addInteractor(plate1_4Int); - sd.addInteractor(plate2Int); - sd.addInteractor(plate3Int); - sd.deleteSolidBlocks(); - - grid->accept( metisVisitor ); - - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm)); - ppblocks->update(0); - ppblocks.reset(); - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nod_temp = nob * (nodePerBlockX1+gl) * (nodePerBlockX2+gl) * (nodePerBlockX3+gl); - unsigned long nod = nob * (nodePerBlockX1) * (nodePerBlockX2) * (nodePerBlockX3); - double needMemAll = double(nod_temp*(27*sizeof(double) + sizeof(int) + sizeof(float)*4)); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - if(myid == 0) - { - UBLOG(logINFO,"Number of blocks = " << nob); - UBLOG(logINFO,"Number of nodes = " << nod); - UBLOG(logINFO,"Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO,"Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO,"Available memory per process = " << availMem << " bytes"); - } - - //LBMKernel3DPtr kernel(new LBMKernelETD3Q27Cascaded(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2)); - LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2)); - - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem); - grid->accept(kernelVisitor); - - if (refineLevel > 0) - { - D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - //canal - //grid->addAndInitInteractor(geoInt); - grid->addAndInitInteractor(plate1_1Int); - grid->addAndInitInteractor(plate1_2Int); - grid->addAndInitInteractor(plate1_3Int); - grid->addAndInitInteractor(plate1_4Int); - grid->addAndInitInteractor(plate2Int); - grid->addAndInitInteractor(plate3Int); - - //inflow - grid->addAndInitInteractor(inflowInt); - - //outflow - grid->addAndInitInteractor(outflowInt); - - ////////////////////////////////////////////////////////////////////////// - //connectoren setzen: - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - ////////////////////////////////////////////////////////////////////////// - //domain decomposition - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - ////////////////////////////////////////////////////////////////////////// - //Stroemungsfeld initialisieren - ////////////////////////////////////////////////////////////////////////// - D3Q27ETInitDistributionsBlockVisitor initVisitor(rhoLB); //1.0 - //initVisitor.setVx1(0.0); - grid->accept(initVisitor); - - //if(myid == 0) - //{ - // //Abst�nde "q" als Linien rausschreiben - // std::vector< UbTupleFloat3 > nodes; - // std::vector< UbTupleInt2 > lines; - // geoInt->addQsLineSet(nodes, lines); - // WbWriterVtkXmlBinary::getInstance()->writeLines(pathname+"/grid/qs",nodes,lines); - //} - - if(myid == 0) UBLOG(logINFO,"Preprozess - end"); - - } - ////////////////////////////////////////////////////////////////////////// - //Set Postprozessors - ////////////////////////////////////////////////////////////////////////// - { - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessor ppgeo(grid,geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv, comm, true); - grid->doPostProcess(0); - } - - UbSchedulerPtr nupsSch(new UbScheduler(1, 5, 10)); - NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm); - - double outTime = 2000; - UbSchedulerPtr stepSch(new UbScheduler(outTime)); - D3Q27MacroscopicQuantitiesPostprocessor pp(grid,stepSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), conv, comm); - ////////////////////////////////////////////////////////////////////////// - //PathLine - //UbSchedulerPtr plSch(new UbScheduler(10, 1500)); - //D3Q27PathLinePostprocessor pathLine(grid, pathname + "/pathLine", WbWriterVtkXmlASCII::getInstance(), conv, plSch, comm, -0.3285474538, 0.09692341,-0.0376166666, nueLB, iProcessor); - ////////////////////////////////////////////////////////////////////////// - //Simulation - ////////////////////////////////////////////////////////////////////////// - double endTime = 1000000; - UbSchedulerPtr visSch(stepSch); - 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; - } - catch(std::string& s) - { - cerr << s << endl; - } - catch(...) - { - cerr << "unknown exception" << endl; - } - -} diff --git a/apps/cpu/micropart/micropartTestQs.hpp b/apps/cpu/micropart/micropartTestQs.hpp deleted file mode 100644 index 0ee098948cfee79111ced71a403aac28c0cc3f5b..0000000000000000000000000000000000000000 --- a/apps/cpu/micropart/micropartTestQs.hpp +++ /dev/null @@ -1,380 +0,0 @@ -#include <iostream> -#include <string> -#include <map> -#include <vfluids.h> - - -using namespace std; - -void micropartTestQs(const char *cstr) -{ - try - { - CommunicatorPtr comm(new MPICommunicator()); - int myid = comm->getProcessID(); - int numprocs = comm->getNumberOfProcesses(); - - string machine = QUOTEME(CAB_MACHINE); - string pathname; - double availMem = 0; - string geoFile; - int numOfThreads = 3; - - if(machine == "BOMBADIL") - { - pathname = "c:/temp/micropart"; - availMem = 3.0e9; - //geoFile = "c:/Data/micropart/DK19_7_02_Martin.stl"; - geoFile = "d:/Data/micropart/E0019B_mit_Radien.stl"; - //geoFile = "c:/Data/micropart/boxN.stl"; - //geoFile = "c:/Data/bananas/Banana_boxD.stl"; - } - else if(machine == "M01" || machine == "M02") - { - pathname = "/work/koskuche/scratch/micropart3"; - //pathname = "/work/koskuche/scratch/micropart2"; - availMem = 12.0e9; - geoFile = "/home/koskuche/data/micropart/E0019B_mit_Radien_Inv_new_Box.stl"; - - numOfThreads = 8; - if(myid ==0) - { - stringstream logFilename; - logFilename << pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - } - else throw UbException(UB_EXARGS, "unknown CAB_MACHINE"); - - UbLog::reportingLevel() = logINFO; - //UbLog::reportingLevel() = logDEBUG1; - - int nodePerBlockX1 = 8; //Anzahl an Knoten pro Block - int nodePerBlockX2 = 8;//(int)16; - int nodePerBlockX3 = 8;//(int)16; - - double bH = nodePerBlockX1; //gewuenschte Rand- und Blockbreite - - //Simulation Parameters - - //length [m] - double lSI = 0.067; - //length [LB] - double lLB = 30; - - double dx = 5;//0.0134;//lSI/lLB; - - double left_offset = 0.5; - double right_offset = 0.5;//2*0.5 - double front_offset = 0.15; - double back_offset = 0.15; - double top_offset = 0.0; - double bottom_offset = 0.07; - - LBMReal vLB = 0.016103; - LBMReal Re; - LBMReal rhoLB = 0.0; - LBMReal nueLB = 0.0000249;//(vLB*lLB)/Re; - Re = (vLB*(0.303/dx))/nueLB; - const int baseLevel = 0; - const int refineLevel = 2; - LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - - double ft=1000.0; - ////////////////////////////////////////////////////////////////////////// - GbObject3DPtr refineCube1(new GbCuboid3D(-0.2222890*ft,-0.52993*ft, -0.141754*ft, /*0.578916113*ft*/275.0,0.6089970*ft,0.0446053*ft)); - if(myid == 0) GbSystem3D::writeGeoObject(refineCube1.get(), pathname+"/geo/refineCube1", WbWriterVtkXmlASCII::getInstance()); - - GbObject3DPtr refineCube2(new GbCuboid3D(-0.16*ft-10.0,-0.05*ft, -0.141754*ft, 0.2*ft+10.0,0.05*ft,0.0446053*ft)); - if(myid == 0) GbSystem3D::writeGeoObject(refineCube2.get(), pathname+"/geo/refineCube2", WbWriterVtkXmlASCII::getInstance()); - ////////////////////////////////////////////////////////////////////////// - - Grid3DPtr grid(new Grid3D()); - - UbSchedulerPtr rSch(new UbScheduler(1000, 1000)); - RestartPostprocessorPtr rp(new RestartPostprocessor(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY)); - - std::string opt; - - if(cstr!= NULL) - opt = std::string(cstr); - - if/*(cstr== NULL)*/(cstr!= NULL) - { - opt = std::string(cstr); - - if(myid==0) UBLOG(logINFO,"Restart step: " << opt); - - grid = rp->restart(UbSystem::stringTo<int>(opt)); - rp->reconnect(grid); - grid->setTimeStep(UbSystem::stringTo<int>(opt)); - - if(myid ==0) UBLOG(logINFO,"TimeStep = " <<grid->getTimeStep()); - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27OffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - - //domain decomposition - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - } - else - { - if(myid ==0) - { - UBLOG(logINFO,"L = " <<lLB ); - UBLOG(logINFO,"v = " <<vLB ); - UBLOG(logINFO,"rho = " <<rhoLB ); - UBLOG(logINFO,"nue = " << nueLB ); - UBLOG(logINFO,"Re = " << Re ); - UBLOG(logINFO,"Preprozess - start"); - } - - - //////////////////////////////////////////////////////////////////////// - //Grid - ////////////////////////////////////////////////////////////////////////// - grid->setDeltaX(dx); - grid->setBlockNX(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2); - - //////////////////////////////////////////////////////////////////////////// - //// Geometrie - //////////////////////////////////////////////////////////////////////////// - UBLOG(logINFO,"Read geometry: start"); - GbTriFaceMesh3DPtr geo (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(geoFile,"geo")); - UBLOG(logINFO,"Read geometry: end"); - if(myid == 0) GbSystem3D::writeGeoObject(geo.get(), pathname+"/geo/geo", WbWriterVtkXmlASCII::getInstance()); - - - //////////////////////////////////////////////////////////////////////////// - //// Randgeometrien erstellen - //////////////////////////////////////////////////////////////////////////// - double shiftForMG=grid->getDeltaX(refineLevel)*nodePerBlockX1 / 3.0*2.0; - - GbCuboid3DPtr inflow = GbCuboid3DPtr( new GbCuboid3D(geo->getX1Minimum()+9100.0, geo->getX2Minimum()-200.0, geo->getX3Minimum()-200.0, - geo->getX1Minimum()+10000.0, geo->getX2Maximum()+200.0, geo->getX3Maximum()+200.0)); - GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D(geo->getX1Maximum()-10000.0, geo->getX2Minimum()-200.0, geo->getX3Minimum()-200.0, - geo->getX1Maximum()-9100.0, geo->getX2Maximum()+200.0, geo->getX3Maximum()+200.0)); - - if(myid == 0) - { - GbSystem3D::writeGeoObject(inflow.get(),pathname+"/geo/inflow", WbWriterVtkXmlASCII::getInstance()); - GbSystem3D::writeGeoObject(outflow.get(),pathname+"/geo/outflow", WbWriterVtkXmlASCII::getInstance()); - } - - //GbObject3DPtr gridCube(new GbCuboid3D(geo->getX1Minimum()-(double)nodePerBlockX1*dx, geo->getX2Minimum()-(double)nodePerBlockX1*dx, geo->getX3Minimum()-(double)nodePerBlockX1*dx, - // geo->getX1Maximum()+(double)nodePerBlockX1*dx, - // geo->getX2Maximum()+(double)nodePerBlockX1*dx, - // geo->getX3Maximum()+(double)nodePerBlockX1*dx)); - - - shiftForMG=0.0; - GbObject3DPtr gridCube(new GbCuboid3D(geo->getX1Minimum()+10000.0, geo->getX2Minimum()-shiftForMG, -0.141754*ft/2.0/*geo->getX3Minimum()-shiftForMG*/, - geo->getX1Maximum()-10000.0, - geo->getX2Maximum()+shiftForMG, - geo->getX3Maximum()+shiftForMG)); - - if(myid == 0) GbSystem3D::writeGeoObject(gridCube.get(),pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance()); - - GenBlocksGridVisitor genBlocks; - genBlocks.addGeoObject(gridCube); - grid->accept(genBlocks); - - if (refineLevel > 0) - { - if(myid == 0) UBLOG(logINFO,"Refinement - start"); - //RefineCrossAndInsideGbObjectBlockVisitor refVisitor1(refineCube1, baseLevel, refineLevel-3); - //grid->accept(refVisitor1); - - RefineCrossAndInsideGbObjectBlockVisitor refVisitor2(refineCube1, refineLevel); - grid->accept(refVisitor2); - - RatioBlockVisitor ratioVisitor(refineLevel); - grid->accept(ratioVisitor); - - RatioSmoothBlockVisitor ratioSmoothVisitor(refineLevel); - grid->accept(ratioSmoothVisitor); - - OverlapBlockVisitor overlapVisitor(refineLevel); - grid->accept(overlapVisitor); - - std::vector<int> dirs; - D3Q27System::getLBMDirections(dirs); - SetInterpolationDirsBlockVisitor interDirsVisitor(dirs); - grid->accept(interDirsVisitor); - if(myid == 0) UBLOG(logINFO,"Refinement - end"); - } - - ////////////////////////////////////////////////////////////////////////// - //INTERAKTOREN SETZEN (=Randbedingungen) - ////////////////////////////////////////////////////////////////////////// - //oben/unten = Haftrand - int bbOption = 2; //0=simple Bounce Back, 1=quadr. BB, 2=quadr. BB 2nd choice - D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption)); - D3Q27TriFaceMeshInteractorPtr geoInt = D3Q27TriFaceMeshInteractorPtr( new D3Q27TriFaceMeshInteractor(geo, grid, D3Q27BoundaryConditionAdapterPtr(new D3Q27NoSlipBCAdapter(bbOption)),Interactor3D::INVERSESOLID)); - geoInt->setUseHalfSpaceCheck(true); - geoInt->setRegardPointInObjectTest(true); - - //links: geschwindigkeits-einfluss - //Velocity-BC - ////////////////////////////////////////////////////////////////////////// - mu::Parser fct; - fct.DefineConst("vx1" , vLB ); - //fct = MathUtil::getDuctParaboloidX(plate1->getX2Centroid(), plate1->getX2Maximum() - plate1->getX2Minimum(), plate1->getX3Centroid(), plate1->getX3Minimum() - plate1->getX3Maximum(), vLB*9.0/4.0); - fct.SetExpr("vx1"); - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - D3Q27BoundaryConditionAdapterPtr velBCAdapter = D3Q27BoundaryConditionAdapterPtr(new D3Q27VelocityBCAdapter (true, false ,false ,fct, 0, D3Q27BCFunction::INFCONST)); - velBCAdapter->setSecondaryBcOption(2); - D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr( new D3Q27Interactor(inflow, grid, velBCAdapter, Interactor3D::SOLID)); - //D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr( new D3Q27Interactor(inflow, grid, bcObst, Interactor3D::SOLID)); - - //rechts: druckrand - //Density-BC - //fuer Kompressibles Modell rho = 1.0 - D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr( new D3Q27Interactor(outflow, grid, D3Q27BoundaryConditionAdapterPtr(new D3Q27DensityBCAdapter(rhoLB)),Interactor3D::SOLID)); - //D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr( new D3Q27Interactor(outflow, grid, bcObst,Interactor3D::SOLID)); - - MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B); - grid->accept( metisVisitor ); - - SolidBlocksHelper sd(grid, comm); - sd.addInteractor(geoInt); - sd.addInteractor(inflowInt); - sd.addInteractor(outflowInt); - sd.deleteSolidBlocks(); - - grid->accept( metisVisitor ); - - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm)); - ppblocks->update(0); - ppblocks.reset(); - - UBLOG(logINFO,grid->getBlock(10,12,0,1)->toString()); - vector<Block3DPtr> blocks; - //grid->getNeighborBlocksForDirection(D3Q27System::W,10,12,0,1,3,blocks); - grid->getNeighborBlocksForDirection(D3Q27System::E,4,6,0,0,2,blocks); - BOOST_FOREACH(Block3DPtr b, blocks) - UBLOG(logINFO, b->toString()); - - - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nod_temp = nob * (nodePerBlockX1+gl) * (nodePerBlockX2+gl) * (nodePerBlockX3+gl); - unsigned long nod = nob * (nodePerBlockX1) * (nodePerBlockX2) * (nodePerBlockX3); - double needMemAll = double(nod_temp*(27*sizeof(double) + sizeof(int) + sizeof(float)*4)); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - if(myid == 0) - { - UBLOG(logINFO,"Number of blocks = " << nob); - UBLOG(logINFO,"Number of nodes = " << nod); - UBLOG(logINFO,"Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO,"Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO,"Available memory per process = " << availMem << " bytes"); - } - - - //LBMKernel3DPtr kernel(new LBMKernelETD3Q27Cascaded(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2)); - //LBMKernel3DPtr kernel(new LBMKernelETD3Q27BGK(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2, true)); - LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2,0)); - - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem); - grid->accept(kernelVisitor); - - if (refineLevel > 0) - { - D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - //canal - grid->addAndInitInteractor(geoInt); - - //inflow - grid->addAndInitInteractor(inflowInt); - - //outflow - grid->addAndInitInteractor(outflowInt); - - ////////////////////////////////////////////////////////////////////////// - //connectoren setzen: - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - ////////////////////////////////////////////////////////////////////////// - //domain decomposition - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - ////////////////////////////////////////////////////////////////////////// - //Stroemungsfeld initialisieren - ////////////////////////////////////////////////////////////////////////// - D3Q27ETInitDistributionsBlockVisitor initVisitor(rhoLB); //1.0 - //initVisitor.setVx1(0.0); - grid->accept(initVisitor); - - if(myid == 0) - { - //Abstände "q" als Linien rausschreiben - std::vector< UbTupleFloat3 > nodes; - std::vector< UbTupleInt2 > lines; - geoInt->addQsLineSet(nodes, lines); - WbWriterVtkXmlBinary::getInstance()->writeLines(pathname+"/grid/qs",nodes,lines); - } - - if(myid == 0) UBLOG(logINFO,"Preprozess - end"); - - } - ////////////////////////////////////////////////////////////////////////// - //Set Postprozessors - ////////////////////////////////////////////////////////////////////////// - { - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessor ppgeo(grid,geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv, comm, true); - grid->doPostProcess(0); - } - - - UbSchedulerPtr nupsSch(new UbScheduler(1, 5, 10)); - NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm); - - double outTime = 100; - UbSchedulerPtr visSch(new UbScheduler(outTime)); - //visSch->addSchedule(20, 1010, 1100); - D3Q27MacroscopicQuantitiesPostprocessor pp(grid,visSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), conv, comm); - ////////////////////////////////////////////////////////////////////////// - //PathLine - //UbSchedulerPtr plSch(new UbScheduler(10, 1500)); - //D3Q27PathLinePostprocessor pathLine(grid, pathname + "/pathLine", WbWriterVtkXmlASCII::getInstance(), conv, plSch, comm, -0.3285474538, 0.09692341,-0.0376166666, nueLB, iProcessor); - ////////////////////////////////////////////////////////////////////////// - //Simulation - ////////////////////////////////////////////////////////////////////////// - double endTime = 1000; - UbSchedulerPtr visSch1(new UbScheduler(1)); - 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; - } - catch(std::string& s) - { - cerr << s << endl; - } - catch(...) - { - cerr << "unknown exception" << endl; - } - -} - diff --git a/apps/cpu/micropart/micropartTestQs2.hpp b/apps/cpu/micropart/micropartTestQs2.hpp deleted file mode 100644 index ced24710a450e84c6baa6ce47c573245858fb6ee..0000000000000000000000000000000000000000 --- a/apps/cpu/micropart/micropartTestQs2.hpp +++ /dev/null @@ -1,592 +0,0 @@ -#include <iostream> -#include <string> -#include <map> -#include "RefineCrossAndInsideGbObjectBlockVisitor.h" -#include "RatioBlockVisitor.h" -#include "RatioSmoothBlockVisitor.h" -#include "OverlapBlockVisitor.h" -#include "SetInterpolationDirsBlockVisitor.h" -#include "geometry3d/GbSystem3D.h" -#include "geometry3d/GbCuboid3D.h" -#include "geometry3d/GbCylinder3D.h" -#include "geometry3d/GbSphere3D.h" -#include "BlocksPostprocessor.h" -#include "Grid3D.h" -#include "Patch3D.h" -#include "Patch3DSystem.h" -#include "Block3D.h" -#include "LBMKernelETD3Q27Cascaded.h" -#include "LBMKernelETD3Q27BGK.h" -#include "CalculationManager.h" -#include "D3Q27SetConnectorsBlockVisitor.h" -#include "D3Q27ETInitDistributionsBlockVisitor.h" -#include "D3Q27Interactor.h" -#include "D3Q27NoSlipBCAdapter.h" -#include "D3Q27VelocityBCAdapter.h" -#include "D3Q27DensityBCAdapter.h" -#include "SimulationParameters.h" -#include "Communicator.h" -#include "MPICommunicator.h" -#include "SimpleGeometricPartitioner.h" -#include "D3Q27MacroscopicQuantitiesPostprocessor.h" -#include "D3Q27ETBCProcessor.h" -#include "D3Q27TriFaceMeshInteractor.h" -#include "ConfigFileReader.h" -#include "StringUtil.hpp" -#include "D3Q27PressureDifferencePostprocessor.h" -#include "D3Q27IntegrateValuesHelper.h" -#include "LBMUnitConverter.h" -#include "NUPSCounterPostprocessor.h" -#include "PQueuePartitioningGridVisitor.h" -#include "SetKernelBlockVisitor.h" -#include "GenBlocksGridVisitor.h" -#include "D3Q27PathLinePostprocessorMcpart.h" -#include "D3Q27SetUndefinedNodesBlockVisitor.h" - // -#include "basics/writer/WbWriterVtkXmlBinary.h" -#include "basics/writer/WbWriterVtkXmlASCII.h" -#include "geometry3d/creator/GbTriFaceMesh3DCreator.h" -#include "geometry3d/GbTriFaceMesh3D.h" -#include "D3Q27System.h" -#include <basics/transmitter/TbTransmitterMpiPool.h> -#include "MathUtil.hpp" -#include "D3Q27OffsetInterpolationProcessor.h" -#include "SolidBlocksHelper.h" -#include "MetisPartitioningGridVisitor.h" -#include "RestartPostprocessor.h" -#include "D3Q27IncompressibleOffsetInterpolationProcessor.h" -#include "LBMKernelETD3Q27CCLB.h" -#include "AverageValuesPostprocessor.h" -#include <vfluids.h> -using namespace std; - -void micropartTestQs2(const char *cstr) -{ - try - { - CommunicatorPtr comm(new MPICommunicator()); - int myid = comm->getProcessID(); - int numprocs = comm->getNumberOfProcesses(); - - string machine = QUOTEME(CAB_MACHINE); - string pathname; - double availMem = 0; - string geoFile; - int numOfThreads = 1; - - if(machine == "EHSAN1491") - { - pathname = "/work/ehsan/micropart"; - availMem = 3.0e9; - int numOfThreads = 1; - //geoFile = "c:/Data/micropart/DK19_7_02_Martin.stl"; - //geoFile = "c:/Data/micropart/ktoolcav.stl"; - //geoFile = "c:/Data/micropart/boxN.stl"; - geoFile = "C:/Users/ehsan/Desktop/meshparticles/E0019B_mit_Radien.stl"; - } - else if(machine == "M01" || machine == "M02") - { - pathname = "/work/koskuche/scratch/mcpart/out"; - availMem = 12.0e9/8.0; - geoFile = "/work/ehsan/data/E0019B_mit_Radien.stl"; - //geoFile = "/home/koskuche/data/micropart/DK19_7_02_Martin.stl"; - - numOfThreads = 1; - if(myid ==0) - { - stringstream logFilename; - logFilename << pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - } - else throw UbException(UB_EXARGS, "unknown CAB_MACHINE"); - - UbLog::reportingLevel() = logINFO; - //UbLog::reportingLevel() = logDEBUG1; - - int nodePerBlockX1 =16; //Anzahl an Knoten pro Block - int nodePerBlockX2 =16;//(int)16; - int nodePerBlockX3 =8;//8; //(int)16; - - double bH = nodePerBlockX1; //gewuenschte Rand- und Blockbreite - - //Simulation Parameters - const int baseLevel = 0; - const int refineLevel =4; - //length [m] - double lSI = 219;//223.2; - //length [LB] - double lLB = 30; - - double dx =lSI/lLB; - - double left_offset = 10700;//*0.5; - double right_offset = 107000;//0.5;//2*0.5 - double front_offset = 750;//0.15; - double back_offset = 750;//0.15; - double top_offset = 250;//0.0; - double bottom_offset =750;// 70;//0.07; - - LBMReal vLB =0.00016103/5.0*sqrt(2.0);//0.00016103; - LBMReal Re; - LBMReal rhoLB = 0.0; - LBMReal nueLB = 0.0000249;//(vLB*lLB)/Re; - Re = (vLB*(500/dx))/nueLB; - double dp_Ph=200.0*100000;// - double dp_lb=dp_Ph*0.001*(nueLB*dx)*(nueLB*dx);//nue_ph=10e-6 and dx is in micrometer - // LBMReal nueLB = 0.000016103; - // LBMReal Re=15000; - // LBMReal rhoLB = 0.0; - // LBMReal vLB =nueLB*Re/(500.0/dx); - // // Re = (vLB*(0.303/dx))/nueLB; - // //Re = (vLB*lLB)/nueLB; - - // LBMReal rhoWord = 1e-15;//kg/micrometre^3;//1000.0; - // LBMReal nueRE = 1e6;//micromter^2/s;//0.000001; - // LBMReal vWorld=300*1e6;//micrometer/s;//nueRE*Re/ (lSI*4.0/9.0); - LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - //conv->init(lSI*1e-6,30000,rhoWord,vWorld,lLB,1.0/*rhoLB*/,vLB); - - - ////////////////////////////////////////////////////////////////////////// - GbObject3DPtr refineCube1(new GbCuboid3D(-500.0+5.0/*-354.0*/,-957.0/*-280.0*/,-684.0/* -72.0*/, 4100/*370.0*/,957.0/*354.0*/,70.0));//-530.0,-280.0, -72.0, 530.0,354.0,70.0)); - if(myid == 0) GbSystem3D::writeGeoObject(refineCube1.get(), pathname+"/geo/refineCube1", WbWriterVtkXmlASCII::getInstance()); - - GbObject3DPtr refineCube2(new GbCuboid3D(-230.0,-90.0, -684.0/*-72.0*/, 600,100.0,70.0)); - if(myid == 0) GbSystem3D::writeGeoObject(refineCube2.get(), pathname+"/geo/refineCube2", WbWriterVtkXmlASCII::getInstance()); - - GbObject3DPtr refineCube3(new GbCuboid3D(-350.0,-957.0/*-120.0*/,-684.0/*-684.0*//* -72.0*/, 1700,957.0/*120.0*/,70.0)); - if(myid == 0) GbSystem3D::writeGeoObject(refineCube3.get(), pathname+"/geo/refineCube3", WbWriterVtkXmlASCII::getInstance()); - - GbObject3DPtr refineCube4(new GbCuboid3D(-170.0,-60.0, -684.0/*-72.0*/, 200,60.0,70.0)); - if(myid == 0) GbSystem3D::writeGeoObject(refineCube4.get(), pathname+"/geo/refineCube4", WbWriterVtkXmlASCII::getInstance()); - - GbObject3DPtr refineCubeInlet(new GbCuboid3D(-10600.0,-600.0, -600.0/*-72.0*/, -9000,600.0,60.0)); - if(myid == 0) GbSystem3D::writeGeoObject(refineCubeInlet.get(), pathname+"/geo/refineCubeInlet", WbWriterVtkXmlASCII::getInstance()); - - GbObject3DPtr refineCubeOutlet(new GbCuboid3D(9000,-600.0, -600.0/*-72.0*/,10550.0 ,600.0,60.0)); - if(myid == 0) GbSystem3D::writeGeoObject(refineCubeOutlet.get(), pathname+"/geo/refineCubeOutlet", WbWriterVtkXmlASCII::getInstance()); - ////////////////////////////////////////////////////////////////////////// - D3Q27TriFaceMeshInteractorPtr geoInt; - ///////////////// - //Grid3DPtr grid(new Grid3D()); - Grid3DPtr grid(new Grid3D(comm)); - - UbSchedulerPtr rSch(new UbScheduler()); - rSch->addSchedule(100, 200, 20000); - RestartPostprocessorPtr rp(new RestartPostprocessor(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY)); - - std::string opt; - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - - if(cstr!= NULL) - opt = std::string(cstr); - - if/*(cstr== NULL)*/(cstr!= NULL) - { - if(myid==0) UBLOG(logINFO,"Restart step: " << opt); - grid = rp->restart(UbSystem::stringTo<int>(opt)); - rp->reconnect(grid); - - // SetForcingBlockVisitor forcingVisitor(0.0, 0.0, 0.0); - // grid->accept(forcingVisitor); - - //D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - if(myid==0) UBLOG(logINFO,"Restart finish: " << opt); - - } - else - { - if(myid ==0) - { - UBLOG(logINFO,"L = " <<lLB ); - UBLOG(logINFO,"v = " <<vLB ); - UBLOG(logINFO,"rho = " <<rhoLB ); - UBLOG(logINFO,"nue = " << nueLB ); - UBLOG(logINFO,"dx = " << dx ); - UBLOG(logINFO,"Re = " << Re ); - UBLOG(logINFO,"dp_lb = " << dp_lb ); - UBLOG(logINFO,"Preprozess - start"); - } - - - //////////////////////////////////////////////////////////////////////// - //Grid - ////////////////////////////////////////////////////////////////////////// - grid->setDeltaX(dx); - grid->setBlockNX(nodePerBlockX1, nodePerBlockX2, nodePerBlockX3); - - //////////////////////////////////////////////////////////////////////////// - //// Geometrie - //////////////////////////////////////////////////////////////////////////// - GbTriFaceMesh3DPtr geo (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(geoFile,"geo")); - - if(myid == 0) GbSystem3D::writeGeoObject(geo.get(), pathname+"/geo/geo", WbWriterVtkXmlASCII::getInstance()); - - //////////////////////////////////////////////////////////////////////////// - //// Randgeometrien erstellen - //////////////////////////////////////////////////////////////////////////// - double shiftForMG=grid->getDeltaX(refineLevel)*nodePerBlockX1 / 3.0*2.0; - GbCuboid3DPtr plate1 = GbCuboid3DPtr( new GbCuboid3D( -7.5, -1.515e-1, -6.831e-2, 7.5, 1.515e-1, 0.0 )); - - GbCuboid3DPtr plate2 = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, -16.51e-1, -16.831e-2, 1.5e-1, -1.6e-2, 1.0 )); - GbCuboid3DPtr plate3 = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, 1.6e-2, -16.831e-2, 1.5e-1, 16.515e-1, 1.0 )); - - // GbCuboid3DPtr plate1_1 = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, -1.0e-1, 7.5, 2.515e-1, -6.831e-2 )); - // GbCuboid3DPtr plate1_2 = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, -0.0000001, 7.5, 2.515e-1, 1.0e-1 )); - // GbCuboid3DPtr plate1_3 = GbCuboid3DPtr( new GbCuboid3D( -7.5, 1.515e-1, -6.831e-2, 7.5, 2.515e-1, 0.0 )); - // GbCuboid3DPtr plate1_4 = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, 0.0, 7.5, -1.515e-1, -1.0e-1 )); - - // GbCuboid3DPtr inflow = GbCuboid3DPtr( new GbCuboid3D( -8.0, -1.0, -1.0, -7.5, 1.0, 1.0 )); - // GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( 7.5, -1.0, -1.0, 8.0, 1.0, 1.0 )); - - // GbCuboid3DPtr plate2 = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, -16.51e-1, -16.831e-2, 1.5e-1, -1.6e-2, 1.0 )); - // GbCuboid3DPtr plate3 = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, 1.6e-2, -16.831e-2, 1.5e-1, 16.515e-1, 1.0 )); - - // GbCuboid3DPtr plate1_1 = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, back_offset, -bottom_offset-bH*dx, right_offset+bH*dx, back_offset+bH*dx, top_offset+bH*dx )); - // GbCuboid3DPtr plate1_2 = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, -front_offset-bH*dx, -bottom_offset-bH*dx, right_offset+bH*dx, -front_offset, top_offset+bH*dx )); - // GbCuboid3DPtr plate1_3 = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, -front_offset-bH*dx, top_offset, right_offset+bH*dx, back_offset+bH*dx, top_offset+bH*dx+2.0*dx )); - // GbCuboid3DPtr plate1_4 = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, -front_offset-bH*dx, -bottom_offset-bH*dx, right_offset+bH*dx, back_offset+bH*dx, -bottom_offset )); - - //GbCuboid3DPtr inflow = GbCuboid3DPtr( new GbCuboid3D( -left_offset-5*bH*dx, -front_offset-5*bH*dx, -bottom_offset-5*bH*dx, -left_offset, back_offset+5*bH*dx, top_offset+5*bH*dx )); - //GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( right_offset, -front_offset-5*bH*dx, -bottom_offset-5*bH*dx, right_offset+5.0*bH*dx, back_offset+5*bH*dx, top_offset+5*bH*dx )); - GbCuboid3DPtr inflow = GbCuboid3DPtr( new GbCuboid3D( -11000.0,-600.0, -600.0, -9000.0, 600.0, -500 )); - GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( 9000,-600.0, -600.0, 11000.0, 600.0, -500)); - - - GbObject3DPtr gridCube(new GbCuboid3D(-10700.0/*inflow->getX1Maximum()-4.0*dx/*.5*shiftForMG*/,-550.0/*-270*/ , -550.0/*-70*/, - 10700.0/*outflow->getX1Minimum()+4.0*dx/*.5*shiftForMG*/, - 550.0/*270*/, - 23.0/*10.0*/)); - - GenBlocksGridVisitor genBlocks; - genBlocks.addGeoObject(gridCube); - grid->accept(genBlocks); - - if(myid == 0) - { - GbSystem3D::writeGeoObject(gridCube.get(),pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance()); - //GbSystem3D::writeGeoObject(plate2.get(),pathname+"/geo/plate2", WbWriterVtkXmlASCII::getInstance()); - //GbSystem3D::writeGeoObject(plate3.get(),pathname+"/geo/plate3", WbWriterVtkXmlASCII::getInstance()); - - // GbSystem3D::writeGeoObject(plate1_1.get(),pathname+"/geo/plate1_1", WbWriterVtkXmlASCII::getInstance()); - // GbSystem3D::writeGeoObject(plate1_2.get(),pathname+"/geo/plate1_2", WbWriterVtkXmlASCII::getInstance()); - // GbSystem3D::writeGeoObject(plate1_3.get(),pathname+"/geo/plate1_3", WbWriterVtkXmlASCII::getInstance()); - // GbSystem3D::writeGeoObject(plate1_4.get(),pathname+"/geo/plate1_4", WbWriterVtkXmlASCII::getInstance()); - - GbSystem3D::writeGeoObject(inflow.get(),pathname+"/geo/inflow", WbWriterVtkXmlASCII::getInstance()); - GbSystem3D::writeGeoObject(outflow.get(),pathname+"/geo/outflow", WbWriterVtkXmlASCII::getInstance()); - } - - - if (refineLevel > 0) - { - if(myid == 0) UBLOG(logINFO,"Refinement - start"); - RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel); - refineHelper.addGbObject(refineCube1, 1); - refineHelper.addGbObject(refineCube3, 2); - refineHelper.addGbObject(refineCube2, 3); - refineHelper.addGbObject(refineCube4, 4); - - refineHelper.addGbObject(refineCubeInlet, 1); - refineHelper.addGbObject(refineCubeOutlet, 1); - refineHelper.refine(); - if(myid == 0) UBLOG(logINFO,"Refinement - end"); - - - // RefineCrossAndInsideGbObjectBlockVisitor refVisitor1(refineCube1, refineLevel-4); - // grid->accept(refVisitor1); - - // RefineCrossAndInsideGbObjectBlockVisitor refVisitor3(refineCube3, refineLevel-3); - // grid->accept(refVisitor3); - - // RefineCrossAndInsideGbObjectBlockVisitor refVisitor2(refineCube2, refineLevel-2); - // grid->accept(refVisitor2); - - // RefineCrossAndInsideGbObjectBlockVisitor refVisitor4(refineCube4, refineLevel-1); - // grid->accept(refVisitor4); - - // RatioBlockVisitor ratioVisitor(refineLevel); - // grid->accept(ratioVisitor); - - // RatioSmoothBlockVisitor ratioSmoothVisitor(refineLevel); - // grid->accept(ratioSmoothVisitor); - - // OverlapBlockVisitor overlapVisitor(refineLevel); - // grid->accept(overlapVisitor); - - // std::vector<int> dirs; - // D3Q27System::getLBMDirections(dirs); - // SetInterpolationDirsBlockVisitor interDirsVisitor(dirs); - // grid->accept(interDirsVisitor); - // if(myid == 0) UBLOG(logINFO,"Refinement - end"); - } - - ////////////////////////////////////////////////////////////////////////// - //INTERAKTOREN SETZEN (=Randbedingungen) - ////////////////////////////////////////////////////////////////////////// - //oben/unten = Haftrand - int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption)); - geoInt = D3Q27TriFaceMeshInteractorPtr( new D3Q27TriFaceMeshInteractor(geo, grid, D3Q27BoundaryConditionAdapterPtr(new D3Q27NoSlipBCAdapter(bbOption)),Interactor3D::INVERSESOLID, Interactor3D::SIMPLE)); - geoInt->setUseHalfSpaceCheck(true); - geoInt->setRegardPointInObjectTest(true); - if(myid == 0) UBLOG(logINFO,"stl - end"); - //D3Q27InteractorPtr plate1Int(new D3Q27Interactor(plate1, grid, bcObst,Interactor3D::INVERSESOLID)); - // D3Q27InteractorPtr plate2Int(new D3Q27Interactor(plate2, grid, bcObst,Interactor3D::SOLID)); - // D3Q27InteractorPtr plate3Int(new D3Q27Interactor(plate3, grid, bcObst,Interactor3D::SOLID)); - - // D3Q27InteractorPtr plate1_1Int(new D3Q27Interactor(plate1_1, grid, bcObst,Interactor3D::SOLID)); - // D3Q27InteractorPtr plate1_2Int(new D3Q27Interactor(plate1_2, grid, bcObst,Interactor3D::SOLID)); - // D3Q27InteractorPtr plate1_3Int(new D3Q27Interactor(plate1_3, grid, bcObst,Interactor3D::SOLID)); - // D3Q27InteractorPtr plate1_4Int(new D3Q27Interactor(plate1_4, grid, bcObst,Interactor3D::SOLID)); - - //links: geschwindigkeits-einfluss - //Velocity-BC - ////////////////////////////////////////////////////////////////////////// - mu::Parser fct; - fct.DefineConst("vx1" , vLB*9.0/4.0 ); - //fct = MathUtil::getDuctParaboloidX(0, 250*2.0, -51.08/2, 51.08, vLB*9.0/4.0); - fct.SetExpr("vx1"); - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // D3Q27BoundaryConditionAdapterPtr velBCAdapter = D3Q27BoundaryConditionAdapterPtr(new D3Q27VelocityBCAdapter (false, false ,true ,fct, 0, D3Q27BCFunction::INFCONST)); - // velBCAdapter->setSecondaryBcOption(2); - // D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr( new D3Q27Interactor(inflow, grid, velBCAdapter, Interactor3D::SOLID)); - - D3Q27BoundaryConditionAdapterPtr denBCAdapterInlet(new D3Q27DensityBCAdapter(3.0*(dp_lb-rhoLB))); - denBCAdapterInlet->setSecondaryBcOption(1); - D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr( new D3Q27Interactor(inflow, grid, denBCAdapterInlet,Interactor3D::SOLID)); - - //rechts: druckrand - //Density-BC - //fuer Kompressibles Modell rho = 1.0 - D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB)); - denBCAdapter->setSecondaryBcOption(1); - D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr( new D3Q27Interactor(outflow, grid, denBCAdapter,Interactor3D::SOLID)); - - MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B); - grid->accept( metisVisitor ); - - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm)); - if(myid == 0) ppblocks->update(0); - - SolidBlocksHelper sd(grid, comm); - sd.addInteractor(geoInt); - sd.addInteractor(inflowInt); - sd.addInteractor(outflowInt); - // sd.addInteractor(plate1_1Int); - // sd.addInteractor(plate1_2Int); - // sd.addInteractor(plate1_3Int); - // sd.addInteractor(plate1_4Int); - // sd.addInteractor(plate2Int); - // sd.addInteractor(plate3Int); - if(myid == 0) UBLOG(logINFO,"line"<<__LINE__); - sd.deleteSolidBlocks(); - if(myid == 0) UBLOG(logINFO,"line"<<__LINE__); - grid->accept( metisVisitor ); - if(myid == 0) UBLOG(logINFO,"line"<<__LINE__); - - sd.setTransBlocks(); - if(myid == 0) UBLOG(logINFO,"line"<<__LINE__); - //BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm)); - if(myid == 0) ppblocks->update(1); - if(myid == 0) ppblocks.reset(); - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nod_temp = nob * (nodePerBlockX1+gl) * (nodePerBlockX2+gl) * (nodePerBlockX3+gl); - unsigned long nod = nob * (nodePerBlockX1) * (nodePerBlockX2) * (nodePerBlockX3); - double needMemAll = double(nod_temp*(27*sizeof(double) + sizeof(int) + sizeof(float)*4)); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - - if(myid == 0) - { - UBLOG(logINFO,"Number of blocks = " << nob); - UBLOG(logINFO,"Number of nodes = " << nod); - UBLOG(logINFO,"Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO,"Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO,"Available memory per process = " << availMem << " bytes"); - } - - //LBMKernel3DPtr kernel(new LBMKernelETD3Q27Cascaded(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2)); - //LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2)); - - int option = 0; - LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(nodePerBlockX1, nodePerBlockX2, nodePerBlockX3,option)); - - - - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem); - grid->accept(kernelVisitor); - - if (refineLevel > 0) - { - D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - if(myid == 0) UBLOG(logINFO,"intractor - start"); - //inflow - grid->addAndInitInteractor(inflowInt); - - //outflow - grid->addAndInitInteractor(outflowInt); - //canal - grid->addAndInitInteractor(geoInt); - // grid->addAndInitInteractor(plate1_1Int); - // grid->addAndInitInteractor(plate1_2Int); - // grid->addAndInitInteractor(plate1_3Int); - // grid->addAndInitInteractor(plate1_4Int); - // grid->addAndInitInteractor(plate2Int); - // grid->addAndInitInteractor(plate3Int); - - - - ////////////////////////////////////////////////////////////////////////// - //connectoren setzen: - - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - ////////////////////////////////////////////////////////////////////////// - //domain decomposition - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - ////////////////////////////////////////////////////////////////////////// - //Stroemungsfeld initialisieren - ////////////////////////////////////////////////////////////////////////// - D3Q27ETInitDistributionsBlockVisitor initVisitor(rhoLB); //1.0 - initVisitor.setVx1(0); - grid->accept(initVisitor); - - if(myid == 0) - { - //Abst�nde "q" als Linien rausschreiben - std::vector< UbTupleFloat3 > nodes; - std::vector< UbTupleInt2 > lines; - geoInt->addQsLineSet(nodes, lines); - WbWriterVtkXmlBinary::getInstance()->writeLines(pathname+"/grid/qs",nodes,lines); - } - - if(myid == 0) UBLOG(logINFO,"Preprozess - end"); - - //////////////////////// - //Set Postprozessors - ////////////////////////////////////////////////////////////////////////// - { - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessor ppgeo(grid,geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv, comm, true); - grid->doPostProcess(0); - } - - - } - - ////////////////////////////////////////////////////////////////////////// - // UbSchedulerPtr visSchAv(new UbScheduler()); - UbSchedulerPtr visSchAv(new UbScheduler(100,100)); - // visSchAv->addSchedule(100,10,1000); - // UbSchedulerPtr resSchAv(new UbScheduler()); - UbSchedulerPtr resSchAv(new UbScheduler(100,100)); - // resSchAv->addSchedule(20,20,1000); - AverageValuesPostprocessor Avpp(grid, pathname + "/Turbulence/stepAV", WbWriterVtkXmlBinary::getInstance(), visSchAv/*wann wird rausgeschrieben*/,resSchAv/*wann wird resettet*/,comm); - - D3Q27ShearStressPostprocessor shear(grid, pathname + "/shear/step", WbWriterVtkXmlBinary::getInstance(), visSchAv/*wann wird rausgeschrieben*/,resSchAv/*wann wird resettet*/,comm,iProcessor); - //D3Q27ShearStressPostprocessor shear(grid, pathname + "/shear/step", WbWriterVtkXmlBinary::getInstance(), visSchAv/*wann wird rausgeschrieben*/,resSchAv/*wann wird resettet*/,comm); - shear.addInteractor(geoInt); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - UbSchedulerPtr nupsSch(new UbScheduler(1, 5, 10)); - NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm); - - double outTime = 100.0; - UbSchedulerPtr stepSch(new UbScheduler(outTime)); - D3Q27MacroscopicQuantitiesPostprocessor pp(grid,stepSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), conv, comm); - ////////////////////////////////////////////////////////////////////////// - //PathLine - UbSchedulerPtr plSch(new UbScheduler(5000, 5000)); - const int numberofparticle=20; - - std::vector<UbTupleDouble3 > potisions; - double randomx[numberofparticle]; - double randomy[numberofparticle]; - double randomz[numberofparticle]; - double lowestx,highestx,lowesty,highesty,lowestz,highestz; - if(myid==0) - { - for(int i = 0; i < numberofparticle; i++) - { - double random; - lowestx =-10300.0; lowesty =-230; lowestz =-250; - highestx=-9792.0; highesty=-330; highestz=-250; - - double rangex=(highestx-lowestx),rangey=(highesty-lowesty),rangez=(highestz-lowestz); - randomx[i] = lowestx+(rangex*rand()/(RAND_MAX + 1.0)); - randomy[i] = lowesty+(rangey*rand()/(RAND_MAX + 1.0)); - randomz[i] = lowestz+(rangez*rand()/(RAND_MAX + 1.0)); - //val<1>(potisions[i])= 0.506983973456; - //val<2>(potisions[i]) = lowesty+(rangey*rand()/(RAND_MAX + 1.0)); - //val<3>(potisions[i]) = lowestz+(rangez*rand()/(RAND_MAX + 1.0)); - } - for (int i=0;i<comm->getNumberOfProcesses();i++) - { - if (i!=0) - { - MPI_Send(randomx,numberofparticle, MPI_DOUBLE_PRECISION,i,i,MPI_COMM_WORLD); - MPI_Send(randomy,numberofparticle, MPI_DOUBLE_PRECISION,i,i,MPI_COMM_WORLD); - MPI_Send(randomz,numberofparticle, MPI_DOUBLE_PRECISION,i,i,MPI_COMM_WORLD); - } - } - } - if (myid!=0) - { - MPI_Status status; - MPI_Recv(randomx,numberofparticle, MPI_DOUBLE_PRECISION,0,MPI_ANY_TAG,MPI_COMM_WORLD,&status); - MPI_Recv(randomy,numberofparticle, MPI_DOUBLE_PRECISION,0,MPI_ANY_TAG,MPI_COMM_WORLD,&status); - MPI_Recv(randomz,numberofparticle, MPI_DOUBLE_PRECISION,0,MPI_ANY_TAG,MPI_COMM_WORLD,&status); - } - for(int i = 0; i < numberofparticle; i++) - { - potisions.push_back( makeUbTuple(randomx[i],randomy[i],randomz[i]) ); - //val<1>(potisions[i])= 0.506983973456; - //val<2>(potisions[i]) = randomy[i]; - //val<3>(potisions[i]) = randomz[i]; - } - // UBLOG(logINFO,"Rank="<<myid<<" positions = " <<val<1>(potisions)<< " "<<val<2>(potisions)<<" "<< val<3>(potisions)); - // D3Q27InterpolationProcessorPtr iProcessor2; - // D3Q27PathLinePostprocessorMcpart pathLine(grid, pathname + "/pathLine/pathLine", WbWriterVtkXmlASCII::getInstance(), conv, plSch, comm,potisions, nueLB, iProcessor); - ////////////////////////////////////////////////////////////////////////// - //Simulation - ////////////////////////////////////////////////////////////////////////// - - double endTime = 1000.0; - UbSchedulerPtr visSch(stepSch); - 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; - } - catch(std::string& s) - { - cerr << s << endl; - } - catch(...) - { - cerr << "unknown exception" << endl; - } - -} diff --git a/apps/cpu/micropart/micropartTestQs3.hpp b/apps/cpu/micropart/micropartTestQs3.hpp deleted file mode 100644 index d8c870269b42929d5844bb516c79d091d6ab40ad..0000000000000000000000000000000000000000 --- a/apps/cpu/micropart/micropartTestQs3.hpp +++ /dev/null @@ -1,560 +0,0 @@ -#include <iostream> -#include <string> -#include <map> - -#include <vfluids.h> -using namespace std; - -void micropartTestQs3(const char *cstr) -{ - try - { - CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - int numprocs = comm->getNumberOfProcesses(); - - string machine = QUOTEME(CAB_MACHINE); - string pathname; - double availMem = 0; - string geoFile; - int numOfThreads = 1; - - if(machine == "BOMBADIL") - { - pathname = "d:/temp/micropart"; - availMem = 1.0e9; - int numOfThreads = 1; - geoFile = "d:/Data/micropart/E0019B_mit_Radien.stl"; - } - else if(machine == "M01" || machine == "M02") - { - // pathname = "/work/koskuche/scratch/mcpart/out"; - pathname = "/work/ehsan/orifice"; - availMem = 12.0e9; - geoFile = "d:/Data/micropart/E0019B_mit_Radien.stl"; - //geoFile = "/home/koskuche/data/micropart/DK19_7_02_Martin.stl"; - - numOfThreads = 1; - if(myid ==0) - { - stringstream logFilename; - logFilename << pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - } - else throw UbException(UB_EXARGS, "unknown CAB_MACHINE"); - - UbLog::reportingLevel() = logINFO; - //UbLog::reportingLevel() = logDEBUG1; - - int nodePerBlockX1 =16; //Anzahl an Knoten pro Block - int nodePerBlockX2 =16;//(int)16; - int nodePerBlockX3 =16;//8; //(int)16; - - double bH = nodePerBlockX1; //gewuenschte Rand- und Blockbreite - - - //Simulation Parameters - const int baseLevel = 0; - const int refineLevel = 5; - //length [m] - double lSI =217.35;// 216.75;//223.2; - //length [LB] - double lLB = 30; - - double dx =10;//lSI/lLB; - - double left_offset = 10700;//*0.5; - double right_offset = 107000;//0.5;//2*0.5 - double front_offset = 750;//0.15; - double back_offset = 750;//0.15; - double top_offset = 250;//0.0; - double bottom_offset =750;// 70;//0.07; - - LBMReal vLB =0.00016103/5.0*sqrt(2.0);//0.00016103; - LBMReal Re; - LBMReal rhoLB = 0.0; - LBMReal nueLB = 0.0000249;//(vLB*lLB)/Re; - Re = (vLB*(500/dx))/nueLB; - double dp_Ph=200.0*100000;// - //double dp_lb=dp_Ph*0.001*(nueLB)*(nueLB);//nue_ph=10e-6 and dx is in micrometer - LBMReal nue_Ph = 1e-6;// - double dt=/*(nue_Ph/nueLB)*/(nueLB/nue_Ph)*(dx*1e-6)*(dx*1e-6);//dt=nu_lb/nu_ph*dx*dx;//nue_ph=10e-6;dx is in micrometer; - double dp_lb=dp_Ph/1000*(dt*dt)/((dx*1e-6)*(dx*1e-6));//dp_lb=dp_ph/rho_ph*dt*dt/dx/dx - // LBMReal nueLB = 0.000016103; - // LBMReal Re=15000; - // LBMReal rhoLB = 0.0; - // LBMReal vLB =nueLB*Re/(500.0/dx); - // // Re = (vLB*(0.303/dx))/nueLB; - // //Re = (vLB*lLB)/nueLB; - - // LBMReal rhoWord = 1e-15;//kg/micrometre^3;//1000.0; - // LBMReal nueRE = 1e6;//micromter^2/s;//0.000001; - // LBMReal vWorld=300*1e6;//micrometer/s;//nueRE*Re/ (lSI*4.0/9.0); - LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - //conv->init(lSI*1e-6,30000,rhoWord,vWorld,lLB,1.0/*rhoLB*/,vLB); - - ////////////////////////////////////////////////////////////////////////// - GbObject3DPtr refineCube1(new GbCuboid3D(-500.0+5.0/*-354.0*/,-957.0/*-280.0*/,-684.0/* -72.0*/, 4100/*370.0*/,957.0/*354.0*/,70.0));//-530.0,-280.0, -72.0, 530.0,354.0,70.0)); - if(myid == 0) GbSystem3D::writeGeoObject(refineCube1.get(), pathname+"/geo/refineCube1", WbWriterVtkXmlASCII::getInstance()); - - GbObject3DPtr refineCube2(new GbCuboid3D(-280.0,-957.0/*-120.0*/,-684.0/*-684.0*//* -72.0*/, 500,957.0/*120.0*/,70.0)); - if(myid == 0) GbSystem3D::writeGeoObject(refineCube2.get(), pathname+"/geo/refineCube2", WbWriterVtkXmlASCII::getInstance()); - - GbObject3DPtr refineCube3(new GbCuboid3D(-350.0,-957.0/*-120.0*/,-684.0/*-684.0*//* -72.0*/, 1700,957.0/*120.0*/,70.0)); - if(myid == 0) GbSystem3D::writeGeoObject(refineCube3.get(), pathname+"/geo/refineCube3", WbWriterVtkXmlASCII::getInstance()); - - GbObject3DPtr refineCube4(new GbCuboid3D(-230.0,-150.0/*-120.0*/,-684.0, 225,150,957.0)); - if(myid == 0) GbSystem3D::writeGeoObject(refineCube4.get(), pathname+"/geo/refineCube4", WbWriterVtkXmlASCII::getInstance()); - - GbObject3DPtr refineCube5up(new GbCuboid3D(-147.0,-50,-5.0, 0.0,50.0,957.0)); - if(myid == 0) GbSystem3D::writeGeoObject(refineCube5up.get(), pathname+"/geo/refineCube5up", WbWriterVtkXmlASCII::getInstance()); - - GbObject3DPtr refineCube5down(new GbCuboid3D(-147.0,-50,-46.0, 0,50,-957.0)); - if(myid == 0) GbSystem3D::writeGeoObject(refineCube5down.get(), pathname+"/geo/refineCube5down", WbWriterVtkXmlASCII::getInstance()); - - GbObject3DPtr refineCubeInlet(new GbCuboid3D(-10600.0,-600.0, -600.0/*-72.0*/, -8000,600.0,60.0)); - if(myid == 0) GbSystem3D::writeGeoObject(refineCubeInlet.get(), pathname+"/geo/refineCubeInlet", WbWriterVtkXmlASCII::getInstance()); - - GbObject3DPtr refineCubeOutlet(new GbCuboid3D(8000,-600.0, -600.0/*-72.0*/,10550.0 ,600.0,60.0)); - if(myid == 0) GbSystem3D::writeGeoObject(refineCubeOutlet.get(), pathname+"/geo/refineCubeOutlet", WbWriterVtkXmlASCII::getInstance()); - ////////////////////////////////////////////////////////////////////////// - D3Q27TriFaceMeshInteractorPtr geoInt; - ///////////////// - //Grid3DPtr grid(new Grid3D()); - Grid3DPtr grid(new Grid3D(comm)); - - UbSchedulerPtr rSch(new UbScheduler()); - rSch->addSchedule(50000, 50000, 1000000000); - RestartPostprocessorPtr rp(new RestartPostprocessor(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY)); - - std::string opt; - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - - if(cstr!= NULL) - opt = std::string(cstr); - - if/*(cstr== NULL)*/(cstr!= NULL) - { - if(myid==0) UBLOG(logINFO,"Restart step: " << opt); - grid = rp->restart(UbSystem::stringTo<int>(opt)); - rp->reconnect(grid); - - // SetForcingBlockVisitor forcingVisitor(0.0, 0.0, 0.0); - // grid->accept(forcingVisitor); - - //D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - if(myid==0) UBLOG(logINFO,"Restart finish: " << opt); - - } - else - { - if(myid ==0) - { - UBLOG(logINFO,"L = " <<lLB ); - UBLOG(logINFO,"v = " <<vLB ); - UBLOG(logINFO,"rho = " <<rhoLB ); - UBLOG(logINFO,"nue = " << nueLB ); - UBLOG(logINFO,"dx = " << dx ); - UBLOG(logINFO,"Re = " << Re ); - UBLOG(logINFO,"dt = " << dt ); - UBLOG(logINFO,"dp_lb = " << dp_lb ); - UBLOG(logINFO,"refineLevel = " << refineLevel ); - UBLOG(logINFO,"Preprozess - start"); - } - - - //////////////////////////////////////////////////////////////////////// - //Grid - ////////////////////////////////////////////////////////////////////////// - grid->setDeltaX(dx); - grid->setBlockNX(nodePerBlockX1, nodePerBlockX2, nodePerBlockX3); - - //////////////////////////////////////////////////////////////////////////// - //// Geometrie - //////////////////////////////////////////////////////////////////////////// - GbTriFaceMesh3DPtr geo (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(geoFile,"geo")); - - if(myid == 0) GbSystem3D::writeGeoObject(geo.get(), pathname+"/geo/geo", WbWriterVtkXmlASCII::getInstance()); - - //////////////////////////////////////////////////////////////////////////// - //// Randgeometrien erstellen - //////////////////////////////////////////////////////////////////////////// - double shiftForMG=grid->getDeltaX(refineLevel)*nodePerBlockX1 / 3.0*2.0; - GbCuboid3DPtr plate1 = GbCuboid3DPtr( new GbCuboid3D( -7.5, -1.515e-1, -6.831e-2, 7.5, 1.515e-1, 0.0 )); - - GbCuboid3DPtr plate2 = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, -16.51e-1, -16.831e-2, 1.5e-1, -1.6e-2, 1.0 )); - GbCuboid3DPtr plate3 = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, 1.6e-2, -16.831e-2, 1.5e-1, 16.515e-1, 1.0 )); - - // GbCuboid3DPtr plate1_1 = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, -1.0e-1, 7.5, 2.515e-1, -6.831e-2 )); - // GbCuboid3DPtr plate1_2 = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, -0.0000001, 7.5, 2.515e-1, 1.0e-1 )); - // GbCuboid3DPtr plate1_3 = GbCuboid3DPtr( new GbCuboid3D( -7.5, 1.515e-1, -6.831e-2, 7.5, 2.515e-1, 0.0 )); - // GbCuboid3DPtr plate1_4 = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, 0.0, 7.5, -1.515e-1, -1.0e-1 )); - - // GbCuboid3DPtr inflow = GbCuboid3DPtr( new GbCuboid3D( -8.0, -1.0, -1.0, -7.5, 1.0, 1.0 )); - // GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( 7.5, -1.0, -1.0, 8.0, 1.0, 1.0 )); - - // GbCuboid3DPtr plate2 = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, -16.51e-1, -16.831e-2, 1.5e-1, -1.6e-2, 1.0 )); - // GbCuboid3DPtr plate3 = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, 1.6e-2, -16.831e-2, 1.5e-1, 16.515e-1, 1.0 )); - - // GbCuboid3DPtr plate1_1 = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, back_offset, -bottom_offset-bH*dx, right_offset+bH*dx, back_offset+bH*dx, top_offset+bH*dx )); - // GbCuboid3DPtr plate1_2 = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, -front_offset-bH*dx, -bottom_offset-bH*dx, right_offset+bH*dx, -front_offset, top_offset+bH*dx )); - // GbCuboid3DPtr plate1_3 = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, -front_offset-bH*dx, top_offset, right_offset+bH*dx, back_offset+bH*dx, top_offset+bH*dx+2.0*dx )); - // GbCuboid3DPtr plate1_4 = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, -front_offset-bH*dx, -bottom_offset-bH*dx, right_offset+bH*dx, back_offset+bH*dx, -bottom_offset )); - - //GbCuboid3DPtr inflow = GbCuboid3DPtr( new GbCuboid3D( -left_offset-5*bH*dx, -front_offset-5*bH*dx, -bottom_offset-5*bH*dx, -left_offset, back_offset+5*bH*dx, top_offset+5*bH*dx )); - //GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( right_offset, -front_offset-5*bH*dx, -bottom_offset-5*bH*dx, right_offset+5.0*bH*dx, back_offset+5*bH*dx, top_offset+5*bH*dx )); - - //GbCuboid3DPtr inflow = GbCuboid3DPtr( new GbCuboid3D( -11000.0,-600.0, -600.0, -9000.0, 600.0, -500 )); - //GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( 9000,-600.0, -600.0, 11000.0, 600.0, -500)); - - GbCuboid3DPtr inflow = GbCuboid3DPtr( new GbCuboid3D( -11000.0,-600.0, -600.0, -9000.0, 600.0, -480 )); - GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( 9000,-600.0, -600.0, 11000.0, 600.0, -480)); - GbObject3DPtr gridCube(new GbCuboid3D(-1.05e4, -500-140.0, -480.0-25.54, 1.05e4, 500.0, 0.0)); - - - - //GbObject3DPtr gridCube(new GbCuboid3D(-10700.0/*inflow->getX1Maximum()-4.0*dx/*.5*shiftForMG*/,-550.0/*-270*/ , -550.0/*-70*/, - // 10700.0/*outflow->getX1Minimum()+4.0*dx/*.5*shiftForMG*/, - // 550.0/*270*/, - // 23.0/*10.0*/)); - - - - //GbObject3DPtr gridCube(new GbCuboid3D(-1.05e4, -500.0, -500.0-0.54, 1.05e4, 500.0, 0.0-0.54)); - //GbObject3DPtr gridCube(new GbCuboid3D(-1.05e4, -500.0, -500.0, 1.05e4, 500.0, 0.0)); - - //double difX1 = geo->getX1Centroid() - gridCube->getX1Centroid(); - //double difX2 = geo->getX2Centroid() - gridCube->getX2Centroid(); - //double difX3 = geo->getX3Centroid() - gridCube->getX3Centroid(); - - ////GbObject3DPtr gridCubeCor(new GbCuboid3D(-1.05e4+difX1, -500.0+difX2, -500.0-0.54, 1.05e4+difX1, 500.0+difX2, 0.0-0.54)); - //GbObject3DPtr gridCubeCor(new GbCuboid3D(-1.05e4+difX1, -500.0+difX2, -500.0+difX3, 1.05e4+difX1, 500.0+difX2, 0.0+difX3)); - - GenBlocksGridVisitor genBlocks; - genBlocks.addGeoObject(gridCube); - grid->accept(genBlocks); - - if(myid == 0) - { - GbSystem3D::writeGeoObject(gridCube.get(),pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance()); - GbSystem3D::writeGeoObject(gridCube.get(),pathname+"/geo/gridCubeCor", WbWriterVtkXmlASCII::getInstance()); - //GbSystem3D::writeGeoObject(plate2.get(),pathname+"/geo/plate2", WbWriterVtkXmlASCII::getInstance()); - //GbSystem3D::writeGeoObject(plate3.get(),pathname+"/geo/plate3", WbWriterVtkXmlASCII::getInstance()); - - // GbSystem3D::writeGeoObject(plate1_1.get(),pathname+"/geo/plate1_1", WbWriterVtkXmlASCII::getInstance()); - // GbSystem3D::writeGeoObject(plate1_2.get(),pathname+"/geo/plate1_2", WbWriterVtkXmlASCII::getInstance()); - // GbSystem3D::writeGeoObject(plate1_3.get(),pathname+"/geo/plate1_3", WbWriterVtkXmlASCII::getInstance()); - // GbSystem3D::writeGeoObject(plate1_4.get(),pathname+"/geo/plate1_4", WbWriterVtkXmlASCII::getInstance()); - - GbSystem3D::writeGeoObject(inflow.get(),pathname+"/geo/inflow", WbWriterVtkXmlASCII::getInstance()); - GbSystem3D::writeGeoObject(outflow.get(),pathname+"/geo/outflow", WbWriterVtkXmlASCII::getInstance()); - } - - - if (refineLevel > 0) - { - if(myid == 0) UBLOG(logINFO,"Refinement - start"); - RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel); - refineHelper.addGbObject(refineCube1, 1); - refineHelper.addGbObject(refineCube3, 2); - refineHelper.addGbObject(refineCube2, 3); - refineHelper.addGbObject(refineCube4, 4); - - refineHelper.addGbObject(refineCube5up, 5); - refineHelper.addGbObject(refineCube5down, 5); - - refineHelper.addGbObject(refineCubeInlet, 1); - refineHelper.addGbObject(refineCubeOutlet, 1); - refineHelper.refine(); - if(myid == 0) UBLOG(logINFO,"Refinement - end"); - - - // RefineCrossAndInsideGbObjectBlockVisitor refVisitor1(refineCube1, refineLevel-4); - // grid->accept(refVisitor1); - - // RefineCrossAndInsideGbObjectBlockVisitor refVisitor3(refineCube3, refineLevel-3); - // grid->accept(refVisitor3); - - // RefineCrossAndInsideGbObjectBlockVisitor refVisitor2(refineCube2, refineLevel-2); - // grid->accept(refVisitor2); - - // RefineCrossAndInsideGbObjectBlockVisitor refVisitor4(refineCube4, refineLevel-1); - // grid->accept(refVisitor4); - - // RatioBlockVisitor ratioVisitor(refineLevel); - // grid->accept(ratioVisitor); - - // RatioSmoothBlockVisitor ratioSmoothVisitor(refineLevel); - // grid->accept(ratioSmoothVisitor); - - // OverlapBlockVisitor overlapVisitor(refineLevel); - // grid->accept(overlapVisitor); - - // std::vector<int> dirs; - // D3Q27System::getLBMDirections(dirs); - // SetInterpolationDirsBlockVisitor interDirsVisitor(dirs); - // grid->accept(interDirsVisitor); - // if(myid == 0) UBLOG(logINFO,"Refinement - end"); - } - - ////////////////////////////////////////////////////////////////////////// - //INTERAKTOREN SETZEN (=Randbedingungen) - ////////////////////////////////////////////////////////////////////////// - //oben/unten = Haftrand - int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption)); - geoInt = D3Q27TriFaceMeshInteractorPtr( new D3Q27TriFaceMeshInteractor(geo, grid, D3Q27BoundaryConditionAdapterPtr(new D3Q27NoSlipBCAdapter(bbOption)),Interactor3D::INVERSESOLID, Interactor3D::SIMPLE)); - geoInt->setUseHalfSpaceCheck(true); - geoInt->setRegardPointInObjectTest(true); - if(myid == 0) UBLOG(logINFO,"stl - end"); - //D3Q27InteractorPtr plate1Int(new D3Q27Interactor(plate1, grid, bcObst,Interactor3D::INVERSESOLID)); - // D3Q27InteractorPtr plate2Int(new D3Q27Interactor(plate2, grid, bcObst,Interactor3D::SOLID)); - // D3Q27InteractorPtr plate3Int(new D3Q27Interactor(plate3, grid, bcObst,Interactor3D::SOLID)); - - // D3Q27InteractorPtr plate1_1Int(new D3Q27Interactor(plate1_1, grid, bcObst,Interactor3D::SOLID)); - // D3Q27InteractorPtr plate1_2Int(new D3Q27Interactor(plate1_2, grid, bcObst,Interactor3D::SOLID)); - // D3Q27InteractorPtr plate1_3Int(new D3Q27Interactor(plate1_3, grid, bcObst,Interactor3D::SOLID)); - // D3Q27InteractorPtr plate1_4Int(new D3Q27Interactor(plate1_4, grid, bcObst,Interactor3D::SOLID)); - - //links: geschwindigkeits-einfluss - //Velocity-BC - ////////////////////////////////////////////////////////////////////////// - mu::Parser fct; - fct.DefineConst("vx1" , vLB*9.0/4.0 ); - //fct = MathUtil::getDuctParaboloidX(0, 250*2.0, -51.08/2, 51.08, vLB*9.0/4.0); - fct.SetExpr("vx1"); - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // D3Q27BoundaryConditionAdapterPtr velBCAdapter = D3Q27BoundaryConditionAdapterPtr(new D3Q27VelocityBCAdapter (false, false ,true ,fct, 0, D3Q27BCFunction::INFCONST)); - // velBCAdapter->setSecondaryBcOption(2); - // D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr( new D3Q27Interactor(inflow, grid, velBCAdapter, Interactor3D::SOLID)); - - D3Q27BoundaryConditionAdapterPtr denBCAdapterInlet(new D3Q27DensityBCAdapter(3.0*(dp_lb-rhoLB))); - denBCAdapterInlet->setSecondaryBcOption(1); - D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr( new D3Q27Interactor(inflow, grid, denBCAdapterInlet,Interactor3D::SOLID)); - - //rechts: druckrand - //Density-BC - //fuer Kompressibles Modell rho = 1.0 - D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB)); - denBCAdapter->setSecondaryBcOption(1); - D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr( new D3Q27Interactor(outflow, grid, denBCAdapter,Interactor3D::SOLID)); - - MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B); - grid->accept( metisVisitor ); - SolidBlocksHelper sd(grid, comm); - sd.addInteractor(geoInt); - sd.addInteractor(inflowInt); - sd.addInteractor(outflowInt); - // sd.addInteractor(plate1_1Int); - // sd.addInteractor(plate1_2Int); - // sd.addInteractor(plate1_3Int); - // sd.addInteractor(plate1_4Int); - // sd.addInteractor(plate2Int); - // sd.addInteractor(plate3Int); - if(myid == 0) UBLOG(logINFO,"line"<<__LINE__); - sd.deleteSolidBlocks(); - - if(myid == 0) UBLOG(logINFO,"line"<<__LINE__); - grid->accept( metisVisitor ); - sd.setTransBlocks(); - if(myid == 0) UBLOG(logINFO,"line"<<__LINE__); - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm)); - ppblocks->update(0); - ppblocks.reset(); - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nod_temp = nob * (nodePerBlockX1+gl) * (nodePerBlockX2+gl) * (nodePerBlockX3+gl); - unsigned long nod = nob * (nodePerBlockX1) * (nodePerBlockX2) * (nodePerBlockX3); - double needMemAll = double(nod_temp*(27*sizeof(double) + sizeof(int) + sizeof(float)*4)); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - - if(myid == 0) - { - UBLOG(logINFO,"Number of blocks = " << nob); - UBLOG(logINFO,"Number of nodes = " << nod); - UBLOG(logINFO,"Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO,"Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO,"Available memory per process = " << availMem << " bytes"); - } - - LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(nodePerBlockX1, nodePerBlockX2, nodePerBlockX3,LBMKernelETD3Q27CCLB::MAGIC)); - - - - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem); - grid->accept(kernelVisitor); - - if (refineLevel > 0) - { - D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - if(myid == 0) UBLOG(logINFO,"intractor - start"); - //inflow - grid->addAndInitInteractor(inflowInt); - - //outflow - grid->addAndInitInteractor(outflowInt); - //canal - grid->addAndInitInteractor(geoInt); - // grid->addAndInitInteractor(plate1_1Int); - // grid->addAndInitInteractor(plate1_2Int); - // grid->addAndInitInteractor(plate1_3Int); - // grid->addAndInitInteractor(plate1_4Int); - // grid->addAndInitInteractor(plate2Int); - // grid->addAndInitInteractor(plate3Int); - - - if(myid == 0) UBLOG(logINFO,"intractor - end"); - ////////////////////////////////////////////////////////////////////////// - //connectoren setzen: - - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - ////////////////////////////////////////////////////////////////////////// - //domain decomposition - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - ////////////////////////////////////////////////////////////////////////// - //Stroemungsfeld initialisieren - ////////////////////////////////////////////////////////////////////////// - D3Q27ETInitDistributionsBlockVisitor initVisitor(nueLB, rhoLB); //1.0 - initVisitor.setVx1(0); - grid->accept(initVisitor); - - // if(myid == 0) - // { - // //Abst�nde "q" als Linien rausschreiben - // std::vector< UbTupleFloat3 > nodes; - // std::vector< UbTupleInt2 > lines; - // geoInt->addQsLineSet(nodes, lines); - // WbWriterVtkXmlBinary::getInstance()->writeLines(pathname+"/grid/qs",nodes,lines); - // } - - if(myid == 0) UBLOG(logINFO,"Preprozess - end"); - - //////////////////////// - //Set Postprozessors - ////////////////////////////////////////////////////////////////////////// - { - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessor ppgeo(grid,geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv, comm, true); - //grid->doPostProcess(0); - grid->notifyObservers(0); - } - - - } - - ////////////////////////////////////////////////////////////////////////// - // UbSchedulerPtr visSchAv(new UbScheduler()); - UbSchedulerPtr visSchAv(new UbScheduler(100000,350000)); - // visSchAv->addSchedule(100,10,1000); - // UbSchedulerPtr resSchAv(new UbScheduler()); - UbSchedulerPtr resSchAv(new UbScheduler(100,10000000000)); - // resSchAv->addSchedule(20,20,1000); - AverageValuesPostprocessor Avpp(grid, pathname + "/Turbulence/stepAV", WbWriterVtkXmlBinary::getInstance(), visSchAv/*wann wird rausgeschrieben*/,resSchAv/*wann wird resettet*/,comm); - - D3Q27ShearStressPostprocessor shear(grid, pathname + "/shear/step", WbWriterVtkXmlBinary::getInstance(), visSchAv/*wann wird rausgeschrieben*/,resSchAv/*wann wird resettet*/); - // D3Q27ShearStressPostprocessor shear(grid, pathname + "/shear/step", WbWriterVtkXmlBinary::getInstance(), visSchAv/*wann wird rausgeschrieben*/,resSchAv/*wann wird resettet*/,comm); - shear.addInteractor(geoInt); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - UbSchedulerPtr nupsSch(new UbScheduler(1, 5, 10)); - NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm); - - double outTime = 10000.0; - UbSchedulerPtr stepSch(new UbScheduler(outTime)); - D3Q27MacroscopicQuantitiesPostprocessor pp(grid,stepSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), conv, comm); - ////////////////////////////////////////////////////////////////////////// - //PathLine - UbSchedulerPtr plSch(new UbScheduler(5000, 5000)); - const int numberofparticle=20; - - std::vector<UbTupleDouble3 > potisions; - double randomx[numberofparticle]; - double randomy[numberofparticle]; - double randomz[numberofparticle]; - double lowestx,highestx,lowesty,highesty,lowestz,highestz; - if(myid==0) - { - for(int i = 0; i < numberofparticle; i++) - { - double random; - lowestx =-10300.0; lowesty =-230; lowestz =-250; - highestx=-9792.0; highesty=-330; highestz=-250; - - double rangex=(highestx-lowestx),rangey=(highesty-lowesty),rangez=(highestz-lowestz); - randomx[i] = lowestx+(rangex*rand()/(RAND_MAX + 1.0)); - randomy[i] = lowesty+(rangey*rand()/(RAND_MAX + 1.0)); - randomz[i] = lowestz+(rangez*rand()/(RAND_MAX + 1.0)); - //val<1>(potisions[i])= 0.506983973456; - //val<2>(potisions[i]) = lowesty+(rangey*rand()/(RAND_MAX + 1.0)); - //val<3>(potisions[i]) = lowestz+(rangez*rand()/(RAND_MAX + 1.0)); - } - for (int i=0;i<comm->getNumberOfProcesses();i++) - { - if (i!=0) - { - MPI_Send(randomx,numberofparticle, MPI_DOUBLE_PRECISION,i,i,MPI_COMM_WORLD); - MPI_Send(randomy,numberofparticle, MPI_DOUBLE_PRECISION,i,i,MPI_COMM_WORLD); - MPI_Send(randomz,numberofparticle, MPI_DOUBLE_PRECISION,i,i,MPI_COMM_WORLD); - } - } - } - if (myid!=0) - { - MPI_Status status; - MPI_Recv(randomx,numberofparticle, MPI_DOUBLE_PRECISION,0,MPI_ANY_TAG,MPI_COMM_WORLD,&status); - MPI_Recv(randomy,numberofparticle, MPI_DOUBLE_PRECISION,0,MPI_ANY_TAG,MPI_COMM_WORLD,&status); - MPI_Recv(randomz,numberofparticle, MPI_DOUBLE_PRECISION,0,MPI_ANY_TAG,MPI_COMM_WORLD,&status); - } - for(int i = 0; i < numberofparticle; i++) - { - potisions.push_back( makeUbTuple(randomx[i],randomy[i],randomz[i]) ); - //val<1>(potisions[i])= 0.506983973456; - //val<2>(potisions[i]) = randomy[i]; - //val<3>(potisions[i]) = randomz[i]; - } - // UBLOG(logINFO,"Rank="<<myid<<" positions = " <<val<1>(potisions)<< " "<<val<2>(potisions)<<" "<< val<3>(potisions)); - // D3Q27InterpolationProcessorPtr iProcessor2; - // D3Q27PathLinePostprocessorMcpart pathLine(grid, pathname + "/pathLine/pathLine", WbWriterVtkXmlASCII::getInstance(), conv, plSch, comm,potisions, nueLB, iProcessor); - ////////////////////////////////////////////////////////////////////////// - //Simulation - ////////////////////////////////////////////////////////////////////////// - return; - - double endTime = 1000000000.0; - UbSchedulerPtr visSch(stepSch); - 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; - } - catch(std::string& s) - { - cerr << s << endl; - } - catch(...) - { - cerr << "unknown exception" << endl; - } - -} diff --git a/apps/cpu/micropart/miro.txt b/apps/cpu/micropart/miro.txt deleted file mode 100644 index 43d3eeae73400b365e06c879de9d869cef851fed..0000000000000000000000000000000000000000 --- a/apps/cpu/micropart/miro.txt +++ /dev/null @@ -1,585 +0,0 @@ -#include <iostream> -#include <string> -#include <map> -#include "RefineCrossAndInsideGbObjectBlockVisitor.h" -#include "RatioBlockVisitor.h" -#include "RatioSmoothBlockVisitor.h" -#include "OverlapBlockVisitor.h" -#include "SetInterpolationDirsBlockVisitor.h" -#include "geometry3d/GbSystem3D.h" -#include "geometry3d/GbCuboid3D.h" -#include "geometry3d/GbCylinder3D.h" -#include "geometry3d/GbSphere3D.h" -#include "BlocksPostprocessor.h" -#include "Grid3D.h" -#include "Patch3D.h" -#include "Patch3DSystem.h" -#include "Block3D.h" -#include "LBMKernelETD3Q27Cascaded.h" -#include "LBMKernelETD3Q27BGK.h" -#include "CalculationManager.h" -#include "D3Q27SetConnectorsBlockVisitor.h" -#include "D3Q27ETInitDistributionsBlockVisitor.h" -#include "D3Q27Interactor.h" -#include "D3Q27NoSlipBCAdapter.h" -#include "D3Q27VelocityBCAdapter.h" -#include "D3Q27DensityBCAdapter.h" -#include "SimulationParameters.h" -#include "Communicator.h" -#include "MPICommunicator.h" -#include "SimpleGeometricPartitioner.h" -#include "D3Q27MacroscopicQuantitiesPostprocessor.h" -#include "D3Q27ETBCProcessor.h" -#include "D3Q27TriFaceMeshInteractor.h" -#include "ConfigFileReader.h" -#include "StringUtil.hpp" -#include "D3Q27PressureDifferencePostprocessor.h" -#include "D3Q27IntegrateValuesHelper.h" -#include "LBMUnitConverter.h" -#include "NUPSCounterPostprocessor.h" -#include "PQueuePartitioningGridVisitor.h" -#include "SetKernelBlockVisitor.h" -#include "GenBlocksGridVisitor.h" -#include "D3Q27PathLinePostprocessorMcpart.h" -#include "D3Q27SetUndefinedNodesBlockVisitor.h" - // -#include "basics/writer/WbWriterVtkXmlBinary.h" -#include "basics/writer/WbWriterVtkXmlASCII.h" -#include "geometry3d/creator/GbTriFaceMesh3DCreator.h" -#include "geometry3d/GbTriFaceMesh3D.h" -#include "D3Q27System.h" -#include <basics/transmitter/TbTransmitterMpiPool.h> -#include "MathUtil.hpp" -#include "D3Q27OffsetInterpolationProcessor.h" -#include "SolidBlocksHelper.h" -#include "MetisPartitioningGridVisitor.h" -#include "RestartPostprocessor.h" -#include "D3Q27IncompressibleOffsetInterpolationProcessor.h" -#include "LBMKernelETD3Q27CCLB.h" -#include "AverageValuesPostprocessor.h" -#include <vfluids.h> -using namespace std; - -void micropartTestQs2(const char *cstr) -{ - try - { - CommunicatorPtr comm(new MPICommunicator()); - int myid = comm->getProcessID(); - int numprocs = comm->getNumberOfProcesses(); - - string machine = QUOTEME(CAB_MACHINE); - string pathname; - double availMem = 0; - string geoFile; - int numOfThreads = 1; - - if(machine == "EHSAN1491") - { - pathname = "/work/ehsan/micropart"; - availMem = 3.0e9; - int numOfThreads = 1; - //geoFile = "c:/Data/micropart/DK19_7_02_Martin.stl"; - //geoFile = "c:/Data/micropart/ktoolcav.stl"; - //geoFile = "c:/Data/micropart/boxN.stl"; - geoFile = "C:/Users/ehsan/Desktop/meshparticles/E0019B_mit_Radien.stl"; - } - else if(machine == "M01" || machine == "M02") - { - pathname = "/work/ehsan/micropart"; - availMem = 12.0e9; - geoFile = "/work/ehsan/data/E0019B_mit_Radien.stl"; - //geoFile = "/home/koskuche/data/micropart/DK19_7_02_Martin.stl"; - - numOfThreads = 1; - if(myid ==0) - { - stringstream logFilename; - logFilename << pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - } - else throw UbException(UB_EXARGS, "unknown CAB_MACHINE"); - - UbLog::reportingLevel() = logINFO; - //UbLog::reportingLevel() = logDEBUG1; - - int nodePerBlockX1 =16; //Anzahl an Knoten pro Block - int nodePerBlockX2 =16;//(int)16; - int nodePerBlockX3 =8;//8; //(int)16; - - double bH = nodePerBlockX1; //gewuenschte Rand- und Blockbreite - - //Simulation Parameters - const int baseLevel = 0; - const int refineLevel =4; - //length [m] - double lSI = 219;//223.2; - //length [LB] - double lLB = 30; - - double dx =lSI/lLB; - - double left_offset = 10700;//*0.5; - double right_offset = 107000;//0.5;//2*0.5 - double front_offset = 750;//0.15; - double back_offset = 750;//0.15; - double top_offset = 250;//0.0; - double bottom_offset =750;// 70;//0.07; - - LBMReal vLB =0.00016103/5.0*sqrt(2.0);//0.00016103; - LBMReal Re; - LBMReal rhoLB = 0.0; - LBMReal nueLB = 0.0000249;//(vLB*lLB)/Re; - Re = (vLB*(500/dx))/nueLB; - double dp_Ph=200.0*100000;// - double dp_lb=dp_Ph*0.001*(nueLB*dx)*(nueLB*dx);//nue_ph=10e-6 and dx is in micrometer - // LBMReal nueLB = 0.000016103; - // LBMReal Re=15000; - // LBMReal rhoLB = 0.0; - // LBMReal vLB =nueLB*Re/(500.0/dx); - // // Re = (vLB*(0.303/dx))/nueLB; - // //Re = (vLB*lLB)/nueLB; - - // LBMReal rhoWord = 1e-15;//kg/micrometre^3;//1000.0; - // LBMReal nueRE = 1e6;//micromter^2/s;//0.000001; - // LBMReal vWorld=300*1e6;//micrometer/s;//nueRE*Re/ (lSI*4.0/9.0); - LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - //conv->init(lSI*1e-6,30000,rhoWord,vWorld,lLB,1.0/*rhoLB*/,vLB); - - - ////////////////////////////////////////////////////////////////////////// - GbObject3DPtr refineCube1(new GbCuboid3D(-500.0+5.0/*-354.0*/,-957.0/*-280.0*/,-684.0/* -72.0*/, 4100/*370.0*/,957.0/*354.0*/,70.0));//-530.0,-280.0, -72.0, 530.0,354.0,70.0)); - if(myid == 0) GbSystem3D::writeGeoObject(refineCube1.get(), pathname+"/geo/refineCube1", WbWriterVtkXmlASCII::getInstance()); - - GbObject3DPtr refineCube2(new GbCuboid3D(-230.0,-90.0, -684.0/*-72.0*/, 600,100.0,70.0)); - if(myid == 0) GbSystem3D::writeGeoObject(refineCube2.get(), pathname+"/geo/refineCube2", WbWriterVtkXmlASCII::getInstance()); - - GbObject3DPtr refineCube3(new GbCuboid3D(-350.0,-957.0/*-120.0*/,-684.0/*-684.0*//* -72.0*/, 1700,957.0/*120.0*/,70.0)); - if(myid == 0) GbSystem3D::writeGeoObject(refineCube3.get(), pathname+"/geo/refineCube3", WbWriterVtkXmlASCII::getInstance()); - - GbObject3DPtr refineCube4(new GbCuboid3D(-170.0,-60.0, -684.0/*-72.0*/, 200,60.0,70.0)); - if(myid == 0) GbSystem3D::writeGeoObject(refineCube4.get(), pathname+"/geo/refineCube4", WbWriterVtkXmlASCII::getInstance()); - - GbObject3DPtr refineCubeInlet(new GbCuboid3D(-10600.0,-600.0, -600.0/*-72.0*/, -9000,600.0,60.0)); - if(myid == 0) GbSystem3D::writeGeoObject(refineCubeInlet.get(), pathname+"/geo/refineCubeInlet", WbWriterVtkXmlASCII::getInstance()); - - GbObject3DPtr refineCubeOutlet(new GbCuboid3D(9000,-600.0, -600.0/*-72.0*/,10550.0 ,600.0,60.0)); - if(myid == 0) GbSystem3D::writeGeoObject(refineCubeOutlet.get(), pathname+"/geo/refineCubeOutlet", WbWriterVtkXmlASCII::getInstance()); - ////////////////////////////////////////////////////////////////////////// - D3Q27TriFaceMeshInteractorPtr geoInt; - ///////////////// - //Grid3DPtr grid(new Grid3D()); - Grid3DPtr grid(new Grid3D(comm)); - - UbSchedulerPtr rSch(new UbScheduler()); - rSch->addSchedule(100, 200, 20000); - RestartPostprocessorPtr rp(new RestartPostprocessor(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY)); - - std::string opt; - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - - if(cstr!= NULL) - opt = std::string(cstr); - - if/*(cstr== NULL)*/(cstr!= NULL) - { - if(myid==0) UBLOG(logINFO,"Restart step: " << opt); - grid = rp->restart(UbSystem::stringTo<int>(opt)); - rp->reconnect(grid); - - // SetForcingBlockVisitor forcingVisitor(0.0, 0.0, 0.0); - // grid->accept(forcingVisitor); - - //D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - if(myid==0) UBLOG(logINFO,"Restart finish: " << opt); - - } - else - { - if(myid ==0) - { - UBLOG(logINFO,"L = " <<lLB ); - UBLOG(logINFO,"v = " <<vLB ); - UBLOG(logINFO,"rho = " <<rhoLB ); - UBLOG(logINFO,"nue = " << nueLB ); - UBLOG(logINFO,"dx = " << dx ); - UBLOG(logINFO,"Re = " << Re ); - UBLOG(logINFO,"dp_lb = " << dp_lb ); - UBLOG(logINFO,"Preprozess - start"); - } - - - //////////////////////////////////////////////////////////////////////// - //Grid - ////////////////////////////////////////////////////////////////////////// - grid->setDeltaX(dx); - grid->setBlockNX(nodePerBlockX1, nodePerBlockX2, nodePerBlockX3); - - //////////////////////////////////////////////////////////////////////////// - //// Geometrie - //////////////////////////////////////////////////////////////////////////// - GbTriFaceMesh3DPtr geo (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(geoFile,"geo")); - - if(myid == 0) GbSystem3D::writeGeoObject(geo.get(), pathname+"/geo/geo", WbWriterVtkXmlASCII::getInstance()); - - //////////////////////////////////////////////////////////////////////////// - //// Randgeometrien erstellen - //////////////////////////////////////////////////////////////////////////// - double shiftForMG=grid->getDeltaX(refineLevel)*nodePerBlockX1 / 3.0*2.0; - GbCuboid3DPtr plate1 = GbCuboid3DPtr( new GbCuboid3D( -7.5, -1.515e-1, -6.831e-2, 7.5, 1.515e-1, 0.0 )); - - GbCuboid3DPtr plate2 = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, -16.51e-1, -16.831e-2, 1.5e-1, -1.6e-2, 1.0 )); - GbCuboid3DPtr plate3 = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, 1.6e-2, -16.831e-2, 1.5e-1, 16.515e-1, 1.0 )); - - // GbCuboid3DPtr plate1_1 = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, -1.0e-1, 7.5, 2.515e-1, -6.831e-2 )); - // GbCuboid3DPtr plate1_2 = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, -0.0000001, 7.5, 2.515e-1, 1.0e-1 )); - // GbCuboid3DPtr plate1_3 = GbCuboid3DPtr( new GbCuboid3D( -7.5, 1.515e-1, -6.831e-2, 7.5, 2.515e-1, 0.0 )); - // GbCuboid3DPtr plate1_4 = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, 0.0, 7.5, -1.515e-1, -1.0e-1 )); - - // GbCuboid3DPtr inflow = GbCuboid3DPtr( new GbCuboid3D( -8.0, -1.0, -1.0, -7.5, 1.0, 1.0 )); - // GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( 7.5, -1.0, -1.0, 8.0, 1.0, 1.0 )); - - // GbCuboid3DPtr plate2 = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, -16.51e-1, -16.831e-2, 1.5e-1, -1.6e-2, 1.0 )); - // GbCuboid3DPtr plate3 = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, 1.6e-2, -16.831e-2, 1.5e-1, 16.515e-1, 1.0 )); - - // GbCuboid3DPtr plate1_1 = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, back_offset, -bottom_offset-bH*dx, right_offset+bH*dx, back_offset+bH*dx, top_offset+bH*dx )); - // GbCuboid3DPtr plate1_2 = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, -front_offset-bH*dx, -bottom_offset-bH*dx, right_offset+bH*dx, -front_offset, top_offset+bH*dx )); - // GbCuboid3DPtr plate1_3 = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, -front_offset-bH*dx, top_offset, right_offset+bH*dx, back_offset+bH*dx, top_offset+bH*dx+2.0*dx )); - // GbCuboid3DPtr plate1_4 = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, -front_offset-bH*dx, -bottom_offset-bH*dx, right_offset+bH*dx, back_offset+bH*dx, -bottom_offset )); - - //GbCuboid3DPtr inflow = GbCuboid3DPtr( new GbCuboid3D( -left_offset-5*bH*dx, -front_offset-5*bH*dx, -bottom_offset-5*bH*dx, -left_offset, back_offset+5*bH*dx, top_offset+5*bH*dx )); - //GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( right_offset, -front_offset-5*bH*dx, -bottom_offset-5*bH*dx, right_offset+5.0*bH*dx, back_offset+5*bH*dx, top_offset+5*bH*dx )); - GbCuboid3DPtr inflow = GbCuboid3DPtr( new GbCuboid3D( -11000.0,-600.0, -600.0, -9000.0, 600.0, -500 )); - GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( 9000,-600.0, -600.0, 11000.0, 600.0, -500)); - - - GbObject3DPtr gridCube(new GbCuboid3D(-10700.0/*inflow->getX1Maximum()-4.0*dx/*.5*shiftForMG*/,-550.0/*-270*/ , -550.0/*-70*/, - 10700.0/*outflow->getX1Minimum()+4.0*dx/*.5*shiftForMG*/, - 550.0/*270*/, - 23.0/*10.0*/)); - - GenBlocksGridVisitor genBlocks; - genBlocks.addGeoObject(gridCube); - grid->accept(genBlocks); - - if(myid == 0) - { - GbSystem3D::writeGeoObject(gridCube.get(),pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance()); - //GbSystem3D::writeGeoObject(plate2.get(),pathname+"/geo/plate2", WbWriterVtkXmlASCII::getInstance()); - //GbSystem3D::writeGeoObject(plate3.get(),pathname+"/geo/plate3", WbWriterVtkXmlASCII::getInstance()); - - // GbSystem3D::writeGeoObject(plate1_1.get(),pathname+"/geo/plate1_1", WbWriterVtkXmlASCII::getInstance()); - // GbSystem3D::writeGeoObject(plate1_2.get(),pathname+"/geo/plate1_2", WbWriterVtkXmlASCII::getInstance()); - // GbSystem3D::writeGeoObject(plate1_3.get(),pathname+"/geo/plate1_3", WbWriterVtkXmlASCII::getInstance()); - // GbSystem3D::writeGeoObject(plate1_4.get(),pathname+"/geo/plate1_4", WbWriterVtkXmlASCII::getInstance()); - - GbSystem3D::writeGeoObject(inflow.get(),pathname+"/geo/inflow", WbWriterVtkXmlASCII::getInstance()); - GbSystem3D::writeGeoObject(outflow.get(),pathname+"/geo/outflow", WbWriterVtkXmlASCII::getInstance()); - } - - - if (refineLevel > 0) - { - if(myid == 0) UBLOG(logINFO,"Refinement - start"); - RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel); - refineHelper.addGbObject(refineCube1, 1); - refineHelper.addGbObject(refineCube3, 2); - refineHelper.addGbObject(refineCube2, 3); - refineHelper.addGbObject(refineCube4, 4); - - refineHelper.addGbObject(refineCubeInlet, 1); - refineHelper.addGbObject(refineCubeOutlet, 1); - refineHelper.refine(); - if(myid == 0) UBLOG(logINFO,"Refinement - end"); - - - // RefineCrossAndInsideGbObjectBlockVisitor refVisitor1(refineCube1, refineLevel-4); - // grid->accept(refVisitor1); - - // RefineCrossAndInsideGbObjectBlockVisitor refVisitor3(refineCube3, refineLevel-3); - // grid->accept(refVisitor3); - - // RefineCrossAndInsideGbObjectBlockVisitor refVisitor2(refineCube2, refineLevel-2); - // grid->accept(refVisitor2); - - // RefineCrossAndInsideGbObjectBlockVisitor refVisitor4(refineCube4, refineLevel-1); - // grid->accept(refVisitor4); - - // RatioBlockVisitor ratioVisitor(refineLevel); - // grid->accept(ratioVisitor); - - // RatioSmoothBlockVisitor ratioSmoothVisitor(refineLevel); - // grid->accept(ratioSmoothVisitor); - - // OverlapBlockVisitor overlapVisitor(refineLevel); - // grid->accept(overlapVisitor); - - // std::vector<int> dirs; - // D3Q27System::getLBMDirections(dirs); - // SetInterpolationDirsBlockVisitor interDirsVisitor(dirs); - // grid->accept(interDirsVisitor); - // if(myid == 0) UBLOG(logINFO,"Refinement - end"); - } - - ////////////////////////////////////////////////////////////////////////// - //INTERAKTOREN SETZEN (=Randbedingungen) - ////////////////////////////////////////////////////////////////////////// - //oben/unten = Haftrand - int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption)); - geoInt = D3Q27TriFaceMeshInteractorPtr( new D3Q27TriFaceMeshInteractor(geo, grid, D3Q27BoundaryConditionAdapterPtr(new D3Q27NoSlipBCAdapter(bbOption)),Interactor3D::INVERSESOLID, Interactor3D::SIMPLE)); - geoInt->setUseHalfSpaceCheck(true); - geoInt->setRegardPointInObjectTest(true); - if(myid == 0) UBLOG(logINFO,"stl - end"); - //D3Q27InteractorPtr plate1Int(new D3Q27Interactor(plate1, grid, bcObst,Interactor3D::INVERSESOLID)); - // D3Q27InteractorPtr plate2Int(new D3Q27Interactor(plate2, grid, bcObst,Interactor3D::SOLID)); - // D3Q27InteractorPtr plate3Int(new D3Q27Interactor(plate3, grid, bcObst,Interactor3D::SOLID)); - - // D3Q27InteractorPtr plate1_1Int(new D3Q27Interactor(plate1_1, grid, bcObst,Interactor3D::SOLID)); - // D3Q27InteractorPtr plate1_2Int(new D3Q27Interactor(plate1_2, grid, bcObst,Interactor3D::SOLID)); - // D3Q27InteractorPtr plate1_3Int(new D3Q27Interactor(plate1_3, grid, bcObst,Interactor3D::SOLID)); - // D3Q27InteractorPtr plate1_4Int(new D3Q27Interactor(plate1_4, grid, bcObst,Interactor3D::SOLID)); - - //links: geschwindigkeits-einfluss - //Velocity-BC - ////////////////////////////////////////////////////////////////////////// - mu::Parser fct; - fct.DefineConst("vx1" , vLB*9.0/4.0 ); - //fct = MathUtil::getDuctParaboloidX(0, 250*2.0, -51.08/2, 51.08, vLB*9.0/4.0); - fct.SetExpr("vx1"); - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // D3Q27BoundaryConditionAdapterPtr velBCAdapter = D3Q27BoundaryConditionAdapterPtr(new D3Q27VelocityBCAdapter (false, false ,true ,fct, 0, D3Q27BCFunction::INFCONST)); - // velBCAdapter->setSecondaryBcOption(2); - // D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr( new D3Q27Interactor(inflow, grid, velBCAdapter, Interactor3D::SOLID)); - - D3Q27BoundaryConditionAdapterPtr denBCAdapterInlet(new D3Q27DensityBCAdapter(3.0*(dp_lb-rhoLB))); - denBCAdapterInlet->setSecondaryBcOption(1); - D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr( new D3Q27Interactor(inflow, grid, denBCAdapterInlet,Interactor3D::SOLID)); - - //rechts: druckrand - //Density-BC - //fuer Kompressibles Modell rho = 1.0 - D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB)); - denBCAdapter->setSecondaryBcOption(1); - D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr( new D3Q27Interactor(outflow, grid, denBCAdapter,Interactor3D::SOLID)); - - MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B); - grid->accept( metisVisitor ); - SolidBlocksHelper sd(grid, comm); - sd.addInteractor(geoInt); - sd.addInteractor(inflowInt); - sd.addInteractor(outflowInt); - // sd.addInteractor(plate1_1Int); - // sd.addInteractor(plate1_2Int); - // sd.addInteractor(plate1_3Int); - // sd.addInteractor(plate1_4Int); - // sd.addInteractor(plate2Int); - // sd.addInteractor(plate3Int); - if(myid == 0) UBLOG(logINFO,"line"<<__LINE__); - sd.deleteSolidBlocks(); - if(myid == 0) UBLOG(logINFO,"line"<<__LINE__); - grid->accept( metisVisitor ); -if(myid == 0) UBLOG(logINFO,"line"<<__LINE__); - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm)); - ppblocks->update(0); - ppblocks.reset(); - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nod_temp = nob * (nodePerBlockX1+gl) * (nodePerBlockX2+gl) * (nodePerBlockX3+gl); - unsigned long nod = nob * (nodePerBlockX1) * (nodePerBlockX2) * (nodePerBlockX3); - double needMemAll = double(nod_temp*(27*sizeof(double) + sizeof(int) + sizeof(float)*4)); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - - if(myid == 0) - { - UBLOG(logINFO,"Number of blocks = " << nob); - UBLOG(logINFO,"Number of nodes = " << nod); - UBLOG(logINFO,"Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO,"Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO,"Available memory per process = " << availMem << " bytes"); - } - - //LBMKernel3DPtr kernel(new LBMKernelETD3Q27Cascaded(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2)); - //LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2)); - - int option = 0; - LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(nodePerBlockX1, nodePerBlockX2, nodePerBlockX3,option)); - - - - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem); - grid->accept(kernelVisitor); - - if (refineLevel > 0) - { - D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - if(myid == 0) UBLOG(logINFO,"intractor - start"); - //inflow - grid->addAndInitInteractor(inflowInt); - - //outflow - grid->addAndInitInteractor(outflowInt); - //canal - grid->addAndInitInteractor(geoInt); - // grid->addAndInitInteractor(plate1_1Int); - // grid->addAndInitInteractor(plate1_2Int); - // grid->addAndInitInteractor(plate1_3Int); - // grid->addAndInitInteractor(plate1_4Int); - // grid->addAndInitInteractor(plate2Int); - // grid->addAndInitInteractor(plate3Int); - - - - ////////////////////////////////////////////////////////////////////////// - //connectoren setzen: - - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - ////////////////////////////////////////////////////////////////////////// - //domain decomposition - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - ////////////////////////////////////////////////////////////////////////// - //Stroemungsfeld initialisieren - ////////////////////////////////////////////////////////////////////////// - D3Q27ETInitDistributionsBlockVisitor initVisitor(rhoLB); //1.0 - initVisitor.setVx1(0); - grid->accept(initVisitor); - - if(myid == 0) - { - //Abst�nde "q" als Linien rausschreiben - std::vector< UbTupleFloat3 > nodes; - std::vector< UbTupleInt2 > lines; - geoInt->addQsLineSet(nodes, lines); - WbWriterVtkXmlBinary::getInstance()->writeLines(pathname+"/grid/qs",nodes,lines); - } - - if(myid == 0) UBLOG(logINFO,"Preprozess - end"); - - //////////////////////// - //Set Postprozessors - ////////////////////////////////////////////////////////////////////////// - { - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessor ppgeo(grid,geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv, comm, true); - grid->doPostProcess(0); - } - - - } - - ////////////////////////////////////////////////////////////////////////// - // UbSchedulerPtr visSchAv(new UbScheduler()); - UbSchedulerPtr visSchAv(new UbScheduler(100,100)); - // visSchAv->addSchedule(100,10,1000); - // UbSchedulerPtr resSchAv(new UbScheduler()); - UbSchedulerPtr resSchAv(new UbScheduler(100,100)); - // resSchAv->addSchedule(20,20,1000); - AverageValuesPostprocessor Avpp(grid, pathname + "/Turbulence/stepAV", WbWriterVtkXmlBinary::getInstance(), visSchAv/*wann wird rausgeschrieben*/,resSchAv/*wann wird resettet*/,comm); - - D3Q27ShearStressPostprocessor shear(grid, pathname + "/shear/step", WbWriterVtkXmlBinary::getInstance(), visSchAv/*wann wird rausgeschrieben*/,resSchAv/*wann wird resettet*/,comm,iProcessor); - // D3Q27ShearStressPostprocessor shear(grid, pathname + "/shear/step", WbWriterVtkXmlBinary::getInstance(), visSchAv/*wann wird rausgeschrieben*/,resSchAv/*wann wird resettet*/,comm); - shear.addInteractor(geoInt); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - UbSchedulerPtr nupsSch(new UbScheduler(1, 5, 10)); - NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm); - - double outTime = 100.0; - UbSchedulerPtr stepSch(new UbScheduler(outTime)); - D3Q27MacroscopicQuantitiesPostprocessor pp(grid,stepSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), conv, comm); - ////////////////////////////////////////////////////////////////////////// - //PathLine - UbSchedulerPtr plSch(new UbScheduler(5000, 5000)); - const int numberofparticle=20; - - std::vector<UbTupleDouble3 > potisions; - double randomx[numberofparticle]; - double randomy[numberofparticle]; - double randomz[numberofparticle]; - double lowestx,highestx,lowesty,highesty,lowestz,highestz; - if(myid==0) - { - for(int i = 0; i < numberofparticle; i++) - { - double random; - lowestx =-10300.0; lowesty =-230; lowestz =-250; - highestx=-9792.0; highesty=-330; highestz=-250; - - double rangex=(highestx-lowestx),rangey=(highesty-lowesty),rangez=(highestz-lowestz); - randomx[i] = lowestx+(rangex*rand()/(RAND_MAX + 1.0)); - randomy[i] = lowesty+(rangey*rand()/(RAND_MAX + 1.0)); - randomz[i] = lowestz+(rangez*rand()/(RAND_MAX + 1.0)); - //val<1>(potisions[i])= 0.506983973456; - //val<2>(potisions[i]) = lowesty+(rangey*rand()/(RAND_MAX + 1.0)); - //val<3>(potisions[i]) = lowestz+(rangez*rand()/(RAND_MAX + 1.0)); - } - for (int i=0;i<comm->getNumberOfProcesses();i++) - { - if (i!=0) - { - MPI_Send(randomx,numberofparticle, MPI_DOUBLE_PRECISION,i,i,MPI_COMM_WORLD); - MPI_Send(randomy,numberofparticle, MPI_DOUBLE_PRECISION,i,i,MPI_COMM_WORLD); - MPI_Send(randomz,numberofparticle, MPI_DOUBLE_PRECISION,i,i,MPI_COMM_WORLD); - } - } - } - if (myid!=0) - { - MPI_Status status; - MPI_Recv(randomx,numberofparticle, MPI_DOUBLE_PRECISION,0,MPI_ANY_TAG,MPI_COMM_WORLD,&status); - MPI_Recv(randomy,numberofparticle, MPI_DOUBLE_PRECISION,0,MPI_ANY_TAG,MPI_COMM_WORLD,&status); - MPI_Recv(randomz,numberofparticle, MPI_DOUBLE_PRECISION,0,MPI_ANY_TAG,MPI_COMM_WORLD,&status); - } - for(int i = 0; i < numberofparticle; i++) - { - potisions.push_back( makeUbTuple(randomx[i],randomy[i],randomz[i]) ); - //val<1>(potisions[i])= 0.506983973456; - //val<2>(potisions[i]) = randomy[i]; - //val<3>(potisions[i]) = randomz[i]; - } - // UBLOG(logINFO,"Rank="<<myid<<" positions = " <<val<1>(potisions)<< " "<<val<2>(potisions)<<" "<< val<3>(potisions)); - // D3Q27InterpolationProcessorPtr iProcessor2; - // D3Q27PathLinePostprocessorMcpart pathLine(grid, pathname + "/pathLine/pathLine", WbWriterVtkXmlASCII::getInstance(), conv, plSch, comm,potisions, nueLB, iProcessor); - ////////////////////////////////////////////////////////////////////////// - //Simulation - ////////////////////////////////////////////////////////////////////////// - - double endTime = 1000.0; - UbSchedulerPtr visSch(stepSch); - 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; - } - catch(std::string& s) - { - cerr << s << endl; - } - catch(...) - { - cerr << "unknown exception" << endl; - } - -} diff --git a/apps/cpu/micropart/orifice.hpp b/apps/cpu/micropart/orifice.hpp deleted file mode 100644 index 34028cad270bccd50d11ac61c2c515621ff767b6..0000000000000000000000000000000000000000 --- a/apps/cpu/micropart/orifice.hpp +++ /dev/null @@ -1,542 +0,0 @@ -#include <vfluids.h> -using namespace std; - -void orifice(const char *cstr) -{ - try - { - CommunicatorPtr comm(new MPICommunicator()); - int myid = comm->getProcessID(); - int numprocs = comm->getNumberOfProcesses(); - - string machine = QUOTEME(CAB_MACHINE); - string pathname; - double availMem = 0; - string geoFile; - int numOfThreads = 1; - - if(machine == "BOMBADIL") - { - // pathname = "/work/ehsan/orifice"; - pathname = "d:/temp/orifice"; - availMem = 6.0e9; - int numOfThreads = 1; - //geoFile = "c:/Data/micropart/DK19_7_02_Martin.stl"; - //geoFile = "c:/Data/micropart/ktoolcav.stl"; - //geoFile = "c:/Data/micropart/boxN.stl"; - geoFile = "d:/Data/Ehsan/orifice.stl"; - } - else if(machine == "M01" || machine == "M02") - { - // pathname = "/work/koskuche/scratch/mcpart/out"; - pathname = "/work/ehsan/orifice"; - availMem = 12.0e9; - geoFile = "/work/ehsan/data/orifice.stl"; - //geoFile = "/home/koskuche/data/micropart/DK19_7_02_Martin.stl"; - - numOfThreads = 1; - if(myid ==0) - { - stringstream logFilename; - logFilename << pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - } - else throw UbException(UB_EXARGS, "unknown CAB_MACHINE"); - - UbLog::reportingLevel() = logINFO; - //UbLog::reportingLevel() = logDEBUG1; - - int nodePerBlockX1 =8; //Anzahl an Knoten pro Block - int nodePerBlockX2 =8;//(int)16; - int nodePerBlockX3 =8;//8; //(int)16; - - double bH = nodePerBlockX1; //gewuenschte Rand- und Blockbreite - - //Simulation Parameters - const int baseLevel = 0; - const int refineLevel =1; - //length [m] - double lSI = 1.55;//223.2; - //length [LB] - double lLB = 15; - - - double dx =lSI/lLB *2; - - double left_offset = 0;//*0.5; - double right_offset = 159;//0.5;//2*0.5 - double front_offset = 750;//0.15; - double back_offset = 750;//0.15; - double top_offset = 250;//0.0; - double bottom_offset =750;// 70;//0.07; - - LBMReal vLB =0.00016103/5.0*sqrt(2.0);//0.00016103; - LBMReal Re; - LBMReal rhoLB = 0.0; - LBMReal nueLB = 0.0000249;//(vLB*lLB)/Re; - Re = (vLB*(500/dx))/nueLB; - double dp_Ph=200.0*100000;// - double dp_lb=dp_Ph*0.001*(nueLB*dx)*(nueLB*dx);//nue_ph=10e-6 and dx is in micrometer - // LBMReal nueLB = 0.000016103; - // LBMReal Re=15000; - // LBMReal rhoLB = 0.0; - // LBMReal vLB =nueLB*Re/(500.0/dx); - // // Re = (vLB*(0.303/dx))/nueLB; - // //Re = (vLB*lLB)/nueLB; - - // LBMReal rhoWord = 1e-15;//kg/micrometre^3;//1000.0; - // LBMReal nueRE = 1e6;//micromter^2/s;//0.000001; - // LBMReal vWorld=300*1e6;//micrometer/s;//nueRE*Re/ (lSI*4.0/9.0); - LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - //conv->init(lSI*1e-6,30000,rhoWord,vWorld,lLB,1.0/*rhoLB*/,vLB); - - - ////////////////////////////////////////////////////////////////////////// - GbObject3DPtr refineCube1(new GbCuboid3D(78.0,-1.0,-1.0, 81/*370.0*/,20.0/*354.0*/,20.0));//-530.0,-280.0, -72.0, 530.0,354.0,70.0)); - if(myid == 0) GbSystem3D::writeGeoObject(refineCube1.get(), pathname+"/geo/refineCube1", WbWriterVtkXmlASCII::getInstance()); - - // GbObject3DPtr refineCube2(new GbCuboid3D(-230.0,-90.0, -684.0/*-72.0*/, 600,100.0,70.0)); - // if(myid == 0) GbSystem3D::writeGeoObject(refineCube2.get(), pathname+"/geo/refineCube2", WbWriterVtkXmlASCII::getInstance()); - // - // GbObject3DPtr refineCube3(new GbCuboid3D(-350.0,-957.0/*-120.0*/,-684.0/*-684.0*//* -72.0*/, 1700,957.0/*120.0*/,70.0)); - // if(myid == 0) GbSystem3D::writeGeoObject(refineCube3.get(), pathname+"/geo/refineCube3", WbWriterVtkXmlASCII::getInstance()); - // - // GbObject3DPtr refineCube4(new GbCuboid3D(-170.0,-60.0, -684.0/*-72.0*/, 200,60.0,70.0)); - // if(myid == 0) GbSystem3D::writeGeoObject(refineCube4.get(), pathname+"/geo/refineCube4", WbWriterVtkXmlASCII::getInstance()); - // - // GbObject3DPtr refineCubeInlet(new GbCuboid3D(-10600.0,-600.0, -600.0/*-72.0*/, -9000,600.0,60.0)); - // if(myid == 0) GbSystem3D::writeGeoObject(refineCubeInlet.get(), pathname+"/geo/refineCubeInlet", WbWriterVtkXmlASCII::getInstance()); - // - //GbObject3DPtr refineCubeOutlet(new GbCuboid3D(9000,-600.0, -600.0/*-72.0*/,10550.0 ,600.0,60.0)); - // if(myid == 0) GbSystem3D::writeGeoObject(refineCubeOutlet.get(), pathname+"/geo/refineCubeOutlet", WbWriterVtkXmlASCII::getInstance()); - ////////////////////////////////////////////////////////////////////////// - D3Q27TriFaceMeshInteractorPtr geoInt; - ///////////////// - //Grid3DPtr grid(new Grid3D()); - Grid3DPtr grid(new Grid3D(comm)); - - UbSchedulerPtr rSch(new UbScheduler()); - rSch->addSchedule(100, 200, 20000); - RestartPostprocessorPtr rp(new RestartPostprocessor(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY)); - - std::string opt; - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - - if(cstr!= NULL) - opt = std::string(cstr); - - if/*(cstr== NULL)*/(cstr!= NULL) - { - if(myid==0) UBLOG(logINFO,"Restart step: " << opt); - grid = rp->restart(UbSystem::stringTo<int>(opt)); - rp->reconnect(grid); - - // SetForcingBlockVisitor forcingVisitor(0.0, 0.0, 0.0); - // grid->accept(forcingVisitor); - - //D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - if(myid==0) UBLOG(logINFO,"Restart finish: " << opt); - - } - else - { - if(myid ==0) - { - UBLOG(logINFO,"L = " <<lLB ); - UBLOG(logINFO,"v = " <<vLB ); - UBLOG(logINFO,"rho = " <<rhoLB ); - UBLOG(logINFO,"nue = " << nueLB ); - UBLOG(logINFO,"dx = " << dx ); - UBLOG(logINFO,"Re = " << Re ); - UBLOG(logINFO,"dp_lb = " << dp_lb ); - UBLOG(logINFO,"Preprozess - start"); - } - - - //////////////////////////////////////////////////////////////////////// - //Grid - ////////////////////////////////////////////////////////////////////////// - grid->setDeltaX(dx); - grid->setBlockNX(nodePerBlockX1, nodePerBlockX2, nodePerBlockX3); - - //////////////////////////////////////////////////////////////////////////// - //// Geometrie - //////////////////////////////////////////////////////////////////////////// - GbTriFaceMesh3DPtr geo (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(geoFile,"geo")); - - if(myid == 0) GbSystem3D::writeGeoObject(geo.get(), pathname+"/geo/geo", WbWriterVtkXmlASCII::getInstance()); - - //////////////////////////////////////////////////////////////////////////// - //// Randgeometrien erstellen - //////////////////////////////////////////////////////////////////////////// - double shiftForMG=grid->getDeltaX(refineLevel)*nodePerBlockX1 / 3.0*2.0; - GbCuboid3DPtr plate1 = GbCuboid3DPtr( new GbCuboid3D( -7.5, -1.515e-1, -6.831e-2, 7.5, 1.515e-1, 0.0 )); - - GbCuboid3DPtr plate2 = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, -16.51e-1, -16.831e-2, 1.5e-1, -1.6e-2, 1.0 )); - GbCuboid3DPtr plate3 = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, 1.6e-2, -16.831e-2, 1.5e-1, 16.515e-1, 1.0 )); - - // GbCuboid3DPtr plate1_1 = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, -1.0e-1, 7.5, 2.515e-1, -6.831e-2 )); - // GbCuboid3DPtr plate1_2 = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, -0.0000001, 7.5, 2.515e-1, 1.0e-1 )); - // GbCuboid3DPtr plate1_3 = GbCuboid3DPtr( new GbCuboid3D( -7.5, 1.515e-1, -6.831e-2, 7.5, 2.515e-1, 0.0 )); - // GbCuboid3DPtr plate1_4 = GbCuboid3DPtr( new GbCuboid3D( -7.5, -2.515e-1, 0.0, 7.5, -1.515e-1, -1.0e-1 )); - - // GbCuboid3DPtr inflow = GbCuboid3DPtr( new GbCuboid3D( -8.0, -1.0, -1.0, -7.5, 1.0, 1.0 )); - // GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( 7.5, -1.0, -1.0, 8.0, 1.0, 1.0 )); - - // GbCuboid3DPtr plate2 = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, -16.51e-1, -16.831e-2, 1.5e-1, -1.6e-2, 1.0 )); - // GbCuboid3DPtr plate3 = GbCuboid3DPtr( new GbCuboid3D( -1.5e-1, 1.6e-2, -16.831e-2, 1.5e-1, 16.515e-1, 1.0 )); - - // GbCuboid3DPtr plate1_1 = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, back_offset, -bottom_offset-bH*dx, right_offset+bH*dx, back_offset+bH*dx, top_offset+bH*dx )); - // GbCuboid3DPtr plate1_2 = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, -front_offset-bH*dx, -bottom_offset-bH*dx, right_offset+bH*dx, -front_offset, top_offset+bH*dx )); - // GbCuboid3DPtr plate1_3 = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, -front_offset-bH*dx, top_offset, right_offset+bH*dx, back_offset+bH*dx, top_offset+bH*dx+2.0*dx )); - // GbCuboid3DPtr plate1_4 = GbCuboid3DPtr( new GbCuboid3D( -left_offset-bH*dx, -front_offset-bH*dx, -bottom_offset-bH*dx, right_offset+bH*dx, back_offset+bH*dx, -bottom_offset )); - - //GbCuboid3DPtr inflow = GbCuboid3DPtr( new GbCuboid3D( -left_offset-5*bH*dx, -front_offset-5*bH*dx, -bottom_offset-5*bH*dx, -left_offset, back_offset+5*bH*dx, top_offset+5*bH*dx )); - //GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( right_offset, -front_offset-5*bH*dx, -bottom_offset-5*bH*dx, right_offset+5.0*bH*dx, back_offset+5*bH*dx, top_offset+5*bH*dx )); - GbCuboid3DPtr inflow = GbCuboid3DPtr( new GbCuboid3D( -5.0,-1.5, -1.5, 1.5, 20.0, 20.0 )); - GbCuboid3DPtr outflow = GbCuboid3DPtr( new GbCuboid3D( 157.50,-1.5, -1.5, 160.5, 20.0, 20.0)); - - - GbObject3DPtr gridCube(new GbCuboid3D(inflow->getX1Maximum()-4.0*dx,inflow->getX2Minimum()-4.0*dx ,inflow->getX3Minimum()-4.0*dx, - outflow->getX1Minimum()-4.0*dx,outflow->getX2Maximum()-4.0*dx ,outflow->getX3Maximum()-4.0*dx - )); - - GenBlocksGridVisitor genBlocks; - genBlocks.addGeoObject(gridCube); - grid->accept(genBlocks); - - if(myid == 0) - { - GbSystem3D::writeGeoObject(gridCube.get(),pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance()); - //GbSystem3D::writeGeoObject(plate2.get(),pathname+"/geo/plate2", WbWriterVtkXmlASCII::getInstance()); - //GbSystem3D::writeGeoObject(plate3.get(),pathname+"/geo/plate3", WbWriterVtkXmlASCII::getInstance()); - - // GbSystem3D::writeGeoObject(plate1_1.get(),pathname+"/geo/plate1_1", WbWriterVtkXmlASCII::getInstance()); - // GbSystem3D::writeGeoObject(plate1_2.get(),pathname+"/geo/plate1_2", WbWriterVtkXmlASCII::getInstance()); - // GbSystem3D::writeGeoObject(plate1_3.get(),pathname+"/geo/plate1_3", WbWriterVtkXmlASCII::getInstance()); - // GbSystem3D::writeGeoObject(plate1_4.get(),pathname+"/geo/plate1_4", WbWriterVtkXmlASCII::getInstance()); - - GbSystem3D::writeGeoObject(inflow.get(),pathname+"/geo/inflow", WbWriterVtkXmlASCII::getInstance()); - GbSystem3D::writeGeoObject(outflow.get(),pathname+"/geo/outflow", WbWriterVtkXmlASCII::getInstance()); - } - - - if (refineLevel > 0) - { - if(myid == 0) UBLOG(logINFO,"Refinement - start"); - RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel); - refineHelper.addGbObject(refineCube1, refineLevel); - // refineHelper.addGbObject(refineCube3, 2); - //refineHelper.addGbObject(refineCube2, 3); - //refineHelper.addGbObject(refineCube4, 4); - // - //refineHelper.addGbObject(refineCubeInlet, 1); - //refineHelper.addGbObject(refineCubeOutlet, 1); - refineHelper.refine(); - if(myid == 0) UBLOG(logINFO,"Refinement - end"); - - - // RefineCrossAndInsideGbObjectBlockVisitor refVisitor1(refineCube1, refineLevel-4); - // grid->accept(refVisitor1); - - // RefineCrossAndInsideGbObjectBlockVisitor refVisitor3(refineCube3, refineLevel-3); - // grid->accept(refVisitor3); - - // RefineCrossAndInsideGbObjectBlockVisitor refVisitor2(refineCube2, refineLevel-2); - // grid->accept(refVisitor2); - - // RefineCrossAndInsideGbObjectBlockVisitor refVisitor4(refineCube4, refineLevel-1); - // grid->accept(refVisitor4); - - // RatioBlockVisitor ratioVisitor(refineLevel); - // grid->accept(ratioVisitor); - - // RatioSmoothBlockVisitor ratioSmoothVisitor(refineLevel); - // grid->accept(ratioSmoothVisitor); - - // OverlapBlockVisitor overlapVisitor(refineLevel); - // grid->accept(overlapVisitor); - - // std::vector<int> dirs; - // D3Q27System::getLBMDirections(dirs); - // SetInterpolationDirsBlockVisitor interDirsVisitor(dirs); - // grid->accept(interDirsVisitor); - // if(myid == 0) UBLOG(logINFO,"Refinement - end"); - } - - ////////////////////////////////////////////////////////////////////////// - //INTERAKTOREN SETZEN (=Randbedingungen) - ////////////////////////////////////////////////////////////////////////// - //oben/unten = Haftrand - int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption)); - geoInt = D3Q27TriFaceMeshInteractorPtr( new D3Q27TriFaceMeshInteractor(geo, grid, D3Q27BoundaryConditionAdapterPtr(new D3Q27NoSlipBCAdapter(bbOption)),Interactor3D::INVERSESOLID, Interactor3D::SIMPLE)); - geoInt->setUseHalfSpaceCheck(true); - geoInt->setRegardPointInObjectTest(true); - if(myid == 0) UBLOG(logINFO,"stl - end"); - //D3Q27InteractorPtr plate1Int(new D3Q27Interactor(plate1, grid, bcObst,Interactor3D::INVERSESOLID)); - // D3Q27InteractorPtr plate2Int(new D3Q27Interactor(plate2, grid, bcObst,Interactor3D::SOLID)); - // D3Q27InteractorPtr plate3Int(new D3Q27Interactor(plate3, grid, bcObst,Interactor3D::SOLID)); - - // D3Q27InteractorPtr plate1_1Int(new D3Q27Interactor(plate1_1, grid, bcObst,Interactor3D::SOLID)); - // D3Q27InteractorPtr plate1_2Int(new D3Q27Interactor(plate1_2, grid, bcObst,Interactor3D::SOLID)); - // D3Q27InteractorPtr plate1_3Int(new D3Q27Interactor(plate1_3, grid, bcObst,Interactor3D::SOLID)); - // D3Q27InteractorPtr plate1_4Int(new D3Q27Interactor(plate1_4, grid, bcObst,Interactor3D::SOLID)); - - //links: geschwindigkeits-einfluss - //Velocity-BC - ////////////////////////////////////////////////////////////////////////// - mu::Parser fct; - fct.DefineConst("vx1" , vLB*9.0/4.0 ); - //fct = MathUtil::getDuctParaboloidX(0, 250*2.0, -51.08/2, 51.08, vLB*9.0/4.0); - fct.SetExpr("vx1"); - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - D3Q27BoundaryConditionAdapterPtr velBCAdapter = D3Q27BoundaryConditionAdapterPtr(new D3Q27VelocityBCAdapter (false, false ,true ,fct, 0, D3Q27BCFunction::INFCONST)); - // D3Q27BoundaryConditionAdapterPtr velBCAdapter = D3Q27BoundaryConditionAdapterPtr(new D3Q27VelocityBCAdapter (false, false ,true ,fct,fct,fct, 0, D3Q27BCFunction::INFCONST)); - // velBCAdapter->setSecondaryBcOption(2); - // D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr( new D3Q27Interactor(inflow, grid, velBCAdapter, Interactor3D::SOLID)); - - D3Q27BoundaryConditionAdapterPtr denBCAdapterInlet(new D3Q27DensityBCAdapter(3.0*(dp_lb-rhoLB))); - denBCAdapterInlet->setSecondaryBcOption(1); - D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr( new D3Q27Interactor(inflow, grid, denBCAdapterInlet,Interactor3D::SOLID)); - - //rechts: druckrand - //Density-BC - //fuer Kompressibles Modell rho = 1.0 - D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB)); - denBCAdapter->setSecondaryBcOption(1); - D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr( new D3Q27Interactor(outflow, grid, denBCAdapter,Interactor3D::SOLID)); - - MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B); - grid->accept( metisVisitor ); - - // BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm)); - // if(myid == 0) ppblocks->update(0); - - SolidBlocksHelper sd(grid, comm); - sd.addInteractor(geoInt); - sd.addInteractor(inflowInt); - sd.addInteractor(outflowInt); - // sd.addInteractor(plate1_1Int); - // sd.addInteractor(plate1_2Int); - // sd.addInteractor(plate1_3Int); - // sd.addInteractor(plate1_4Int); - // sd.addInteractor(plate2Int); - // sd.addInteractor(plate3Int); - if(myid == 0) UBLOG(logINFO,"line"<<__LINE__); - sd.deleteSolidBlocks(); - if(myid == 0) UBLOG(logINFO,"line"<<__LINE__); - grid->accept( metisVisitor ); - if(myid == 0) UBLOG(logINFO,"line"<<__LINE__); - - sd.setTransBlocks(); - if(myid == 0) UBLOG(logINFO,"line"<<__LINE__); - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm)); - if(myid == 0) ppblocks->update(0); - if(myid == 0) ppblocks.reset(); - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nod_temp = nob * (nodePerBlockX1+gl) * (nodePerBlockX2+gl) * (nodePerBlockX3+gl); - unsigned long nod = nob * (nodePerBlockX1) * (nodePerBlockX2) * (nodePerBlockX3); - double needMemAll = double(nod_temp*(27*sizeof(double) + sizeof(int) + sizeof(float)*4)); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - - if(myid == 0) - { - UBLOG(logINFO,"Number of blocks = " << nob); - UBLOG(logINFO,"Number of nodes = " << nod); - UBLOG(logINFO,"Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO,"Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO,"Available memory per process = " << availMem << " bytes"); - } - - //LBMKernel3DPtr kernel(new LBMKernelETD3Q27Cascaded(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2)); - //LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(nodePerBlockX1, nodePerBlockX2, nodePerBlockX2)); - - - int option = 0; - // LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(nodePerBlockX1, nodePerBlockX2, nodePerBlockX3,option)); - LBMKernel3DPtr kernel; - kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(nodePerBlockX1, nodePerBlockX2, nodePerBlockX3, LBMKernelETD3Q27CCLB::MAGIC)); - // - // kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(nodePerBlockX1, nodePerBlockX2, nodePerBlockX3, 1)); - - - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem); - grid->accept(kernelVisitor); - - if (refineLevel > 0) - { - D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - if(myid == 0) UBLOG(logINFO,"intractor - start"); - //inflow - grid->addAndInitInteractor(inflowInt); - - //outflow - grid->addAndInitInteractor(outflowInt); - //canal - grid->addAndInitInteractor(geoInt); - // grid->addAndInitInteractor(plate1_1Int); - // grid->addAndInitInteractor(plate1_2Int); - // grid->addAndInitInteractor(plate1_3Int); - // grid->addAndInitInteractor(plate1_4Int); - // grid->addAndInitInteractor(plate2Int); - // grid->addAndInitInteractor(plate3Int); - - - - ////////////////////////////////////////////////////////////////////////// - //connectoren setzen: - - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - ////////////////////////////////////////////////////////////////////////// - //domain decomposition - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - ////////////////////////////////////////////////////////////////////////// - //Stroemungsfeld initialisieren - ////////////////////////////////////////////////////////////////////////// - D3Q27ETInitDistributionsBlockVisitor initVisitor(rhoLB); //1.0 - initVisitor.setVx1(0); - initVisitor.setVx1(0); - - grid->accept(initVisitor); - - if(myid == 0) - { - //Abstände "q" als Linien rausschreiben - std::vector< UbTupleFloat3 > nodes; - std::vector< UbTupleInt2 > lines; - geoInt->addQsLineSet(nodes, lines); - WbWriterVtkXmlBinary::getInstance()->writeLines(pathname+"/grid/qs",nodes,lines); - } - - if(myid == 0) UBLOG(logINFO,"Preprozess - end"); - - //////////////////////// - //Set Postprozessors - ////////////////////////////////////////////////////////////////////////// - { - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessor ppgeo(grid,geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv, comm, true); - grid->doPostProcess(0); - } - - - } - - ////////////////////////////////////////////////////////////////////////// - // UbSchedulerPtr visSchAv(new UbScheduler()); - UbSchedulerPtr visSchAv(new UbScheduler(100,100)); - // visSchAv->addSchedule(100,10,1000); - // UbSchedulerPtr resSchAv(new UbScheduler()); - UbSchedulerPtr resSchAv(new UbScheduler(100,100)); - // resSchAv->addSchedule(20,20,1000); - AverageValuesPostprocessor Avpp(grid, pathname + "/Turbulence/stepAV", WbWriterVtkXmlBinary::getInstance(), visSchAv/*wann wird rausgeschrieben*/,resSchAv/*wann wird resettet*/,comm); - - D3Q27ShearStressPostprocessor shear(grid, pathname + "/shear/step", WbWriterVtkXmlBinary::getInstance(), visSchAv/*wann wird rausgeschrieben*/,resSchAv/*wann wird resettet*/,comm,iProcessor); - //D3Q27ShearStressPostprocessor shear(grid, pathname + "/shear/step", WbWriterVtkXmlBinary::getInstance(), visSchAv/*wann wird rausgeschrieben*/,resSchAv/*wann wird resettet*/,comm); - shear.addInteractor(geoInt); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - UbSchedulerPtr nupsSch(new UbScheduler(1, 5, 10)); - NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm); - - double outTime = 100.0; - UbSchedulerPtr stepSch(new UbScheduler(outTime)); - D3Q27MacroscopicQuantitiesPostprocessor pp(grid,stepSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), conv, comm); - ////////////////////////////////////////////////////////////////////////// - //PathLine - UbSchedulerPtr plSch(new UbScheduler(5000, 5000)); - const int numberofparticle=20; - - std::vector<UbTupleDouble3 > potisions; - double randomx[numberofparticle]; - double randomy[numberofparticle]; - double randomz[numberofparticle]; - double lowestx,highestx,lowesty,highesty,lowestz,highestz; - if(myid==0) - { - for(int i = 0; i < numberofparticle; i++) - { - double random; - lowestx =-10300.0; lowesty =-230; lowestz =-250; - highestx=-9792.0; highesty=-330; highestz=-250; - - double rangex=(highestx-lowestx),rangey=(highesty-lowesty),rangez=(highestz-lowestz); - randomx[i] = lowestx+(rangex*rand()/(RAND_MAX + 1.0)); - randomy[i] = lowesty+(rangey*rand()/(RAND_MAX + 1.0)); - randomz[i] = lowestz+(rangez*rand()/(RAND_MAX + 1.0)); - //val<1>(potisions[i])= 0.506983973456; - //val<2>(potisions[i]) = lowesty+(rangey*rand()/(RAND_MAX + 1.0)); - //val<3>(potisions[i]) = lowestz+(rangez*rand()/(RAND_MAX + 1.0)); - } - for (int i=0;i<comm->getNumberOfProcesses();i++) - { - if (i!=0) - { - MPI_Send(randomx,numberofparticle, MPI_DOUBLE_PRECISION,i,i,MPI_COMM_WORLD); - MPI_Send(randomy,numberofparticle, MPI_DOUBLE_PRECISION,i,i,MPI_COMM_WORLD); - MPI_Send(randomz,numberofparticle, MPI_DOUBLE_PRECISION,i,i,MPI_COMM_WORLD); - } - } - } - if (myid!=0) - { - MPI_Status status; - MPI_Recv(randomx,numberofparticle, MPI_DOUBLE_PRECISION,0,MPI_ANY_TAG,MPI_COMM_WORLD,&status); - MPI_Recv(randomy,numberofparticle, MPI_DOUBLE_PRECISION,0,MPI_ANY_TAG,MPI_COMM_WORLD,&status); - MPI_Recv(randomz,numberofparticle, MPI_DOUBLE_PRECISION,0,MPI_ANY_TAG,MPI_COMM_WORLD,&status); - } - for(int i = 0; i < numberofparticle; i++) - { - potisions.push_back( makeUbTuple(randomx[i],randomy[i],randomz[i]) ); - //val<1>(potisions[i])= 0.506983973456; - //val<2>(potisions[i]) = randomy[i]; - //val<3>(potisions[i]) = randomz[i]; - } - // UBLOG(logINFO,"Rank="<<myid<<" positions = " <<val<1>(potisions)<< " "<<val<2>(potisions)<<" "<< val<3>(potisions)); - // D3Q27InterpolationProcessorPtr iProcessor2; - // D3Q27PathLinePostprocessorMcpart pathLine(grid, pathname + "/pathLine/pathLine", WbWriterVtkXmlASCII::getInstance(), conv, plSch, comm,potisions, nueLB, iProcessor); - ////////////////////////////////////////////////////////////////////////// - //Simulation - ////////////////////////////////////////////////////////////////////////// - - double endTime = 1000.0; - UbSchedulerPtr visSch(stepSch); - 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; - } - catch(std::string& s) - { - cerr << s << endl; - } - catch(...) - { - cerr << "unknown exception" << endl; - } - -} \ No newline at end of file diff --git a/apps/cpu/micropart/setup.txt b/apps/cpu/micropart/setup.txt deleted file mode 100644 index 28a2ee7eab79679cb5a8d59a81565a8541699ba6..0000000000000000000000000000000000000000 --- a/apps/cpu/micropart/setup.txt +++ /dev/null @@ -1,5 +0,0 @@ -pathname = "/work/koskuche/scratch/micropart2"; -blocknx = 16 -double dx = 0.0134*0.5; -LBMReal nueLB = 0.0000249*2.0; -double outTime = 2000; \ No newline at end of file diff --git a/apps/cpu/mirror/CMakeLists.txt b/apps/cpu/mirror/CMakeLists.txt deleted file mode 100644 index b0ff5d5943e630b9544b7dfdcec5f4e780452db8..0000000000000000000000000000000000000000 --- a/apps/cpu/mirror/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(mirror) - -INCLUDE(${APPS_ROOT}/IncludsList.cmake) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(mirror BINARY) diff --git a/apps/cpu/mirror/mirror.cfg b/apps/cpu/mirror/mirror.cfg deleted file mode 100644 index f77377566f869e628ea29245133b22b1961140aa..0000000000000000000000000000000000000000 --- a/apps/cpu/mirror/mirror.cfg +++ /dev/null @@ -1,54 +0,0 @@ -pathOut = d:/temp/mirror5 -pathGeo = d:/Projects/Spiegelbenchmark/geometry -pathMesh = d:/Projects/Spiegelbenchmark/meshBoxes - -#geometry -SAE = SAE_GRUNDKOERPER_CFD_INPUT_VERFEINERT_in_m_SOLID.ASCII_D_0.8.stl - - -#refinement meshes -VRES0600_chopped = VRES0600_chopped.stl -VRES0700_chopped = VRES0700_chopped.stl -VRES0800_Fahrzeug = VRES0800_Fahrzeug.stl -#VRES0900 = VRES0900_Cube.stl -VRES1000_ASaeule = VRES1000_ASaeule.stl -VRES1000_Scheibe = VRES1000_Scheibe.stl -VRES1000_Spiegel = VRES1000_Spiegel.stl -VRES1100_Spiegel_fein = VRES1100_Spiegel_fein.stl - - -numOfThreads = 4 -availMem = 10e9 -refineLevel = 11 -#blockNx = 9 8 9 -blockNx = 14 8 10 - -#x1min x1max x2min x2max x3min x3max [m] -#bounding box -WTUNNEL1 = -35.8 37.4 -31.5 31.5 -0.177 32.8 - -#refinement cubes -VRES0100 = -18.4 24.5 -16.2 16.2 -0.187 16.5 -VRES0200 = -10.7 16.8 -8.56 8.56 -0.187 8.82 -VRES0300 = -6.9 13 -4.72 4.72 -0.187 4.98 -VRES0400 = -4.21 10.8 -2.8 2.8 -0.187 3.06 -VRES0500 = -2.87 8.74 -1.84 1.84 -0.187 2.1 -VRES0700 = -2.6 4.69 -1.25 1.25 -0.255 -0.125 -VRES0900 = -0.823 0.941 -1.15 -0.7 0.502 1.01 - -#deltaXcoarse = 4096e-3 #level 0 -deltaXcoarse = 2.048 #level 0 -deltaXfine = 1e-3 #level 11 - - -refineDistance = 0.3 - -restartStep = 1 -restartStepStart = 100 - -outTime = 1 -endTime = 10 - -logToFile = flase - -nupsStep = 1 1 10000000 \ No newline at end of file diff --git a/apps/cpu/mirror/mirror.cpp b/apps/cpu/mirror/mirror.cpp deleted file mode 100644 index 99ba78ff170513b6b8e92681b203f74dbc44e7d8..0000000000000000000000000000000000000000 --- a/apps/cpu/mirror/mirror.cpp +++ /dev/null @@ -1,572 +0,0 @@ -#include <iostream> -#include <string> - -#include "VirtualFluids.h" - -using namespace std; - -void run(string configname) -{ - try - { - vf::basics::ConfigurationFile config; - config.load(configname); - - string pathOut = config.getValue<string>("pathOut"); - string pathGeo = config.getValue<string>("pathGeo"); - string pathMesh = config.getValue<string>("pathMesh"); - int numOfThreads = config.getValue<int>("numOfThreads"); - vector<int> blockNx = config.getVector<int>("blockNx"); - double restartStep = config.getValue<double>("restartStep"); - double restartStepStart = config.getValue<double>("restartStepStart"); - double endTime = config.getValue<double>("endTime"); - double outTime = config.getValue<double>("outTime"); - double availMem = config.getValue<double>("availMem"); - int refineLevel = config.getValue<int>("refineLevel"); - bool logToFile = config.getValue<bool>("logToFile"); - double deltaXcoarse = config.getValue<double>("deltaXcoarse"); - double deltaXfine = config.getValue<double>("deltaXfine"); - double refineDistance = config.getValue<double>("refineDistance"); - vector<double> nupsStep = config.getVector<double>("nupsStep"); - - vector<double> WTUNNEL1 = config.getVector<double>("WTUNNEL1"); - vector<double> VRES0100 = config.getVector<double>("VRES0100"); - vector<double> VRES0200 = config.getVector<double>("VRES0200"); - vector<double> VRES0300 = config.getVector<double>("VRES0300"); - vector<double> VRES0400 = config.getVector<double>("VRES0400"); - vector<double> VRES0500 = config.getVector<double>("VRES0500"); - vector<double> VRES0700 = config.getVector<double>("VRES0700"); - vector<double> VRES0900 = config.getVector<double>("VRES0900"); - - string SAE = config.getValue<string>("SAE"); - string VRES0600_chopped = config.getValue<string>("VRES0600_chopped"); - string VRES0700_chopped = config.getValue<string>("VRES0700_chopped"); - string VRES0800_Fahrzeug = config.getValue<string>("VRES0800_Fahrzeug"); - //string VRES0900 = config.getValue<string>("VRES0900"); - string VRES1000_ASaeule = config.getValue<string>("VRES1000_ASaeule"); - string VRES1000_Scheibe = config.getValue<string>("VRES1000_Scheibe"); - string VRES1000_Spiegel = config.getValue<string>("VRES1000_Spiegel"); - string VRES1100_Spiegel_fein = config.getValue<string>("VRES1100_Spiegel_fein"); - - - SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - if (logToFile) - { -#if defined(__unix__) - if (myid==0) - { - const char* str = pathOut.c_str(); - mkdir(str, S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH); - } -#endif - - if (myid==0) - { - stringstream logFilename; - logFilename<<pathOut+"/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - } - - - double g_minX1 = WTUNNEL1[0]; - double g_minX2 = WTUNNEL1[2]; - double g_minX3 = WTUNNEL1[4]; - - double g_maxX1 = WTUNNEL1[1]; - double g_maxX2 = WTUNNEL1[3]; - double g_maxX3 = WTUNNEL1[5]; - - double blockLength = (double)blockNx[0]*deltaXcoarse; - - //########################################################################## - //## physical parameters - //########################################################################## - - - double rhoLB = 0.0; - double rhoReal = 1.2041; //(kg/m3) - double nueReal = 153.5e-7; //m^2/s - - double lReal = 2.048;//m - double uReal = 140.0/3.6; - - double Re = uReal*lReal/nueReal; - - //##Machzahl: - //#Ma = uReal/csReal - double Ma = 140.0/1236.0;//Ma-Real! - - double uLB = Ma*sqrt(1.0/3.0); - double nuLB = (uLB*1.0)/Re; - - SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter()); - - const int baseLevel = 0; - - //////////////////////////////////////////////////////////////////////// - //Grid - ////////////////////////////////////////////////////////////////////////// - SPtr<Grid3D> grid(new Grid3D(comm)); - grid->setDeltaX(deltaXcoarse); - grid->setBlockNX(blockNx[0], blockNx[1], blockNx[2]); - - SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); - if (myid==0) GbSystem3D::writeGeoObject(gridCube.get(), pathOut+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance()); - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - grid->setPeriodicX1(false); - grid->setPeriodicX2(false); - grid->setPeriodicX3(false); - - //BC adapters - SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter()); - noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm())); - - SPtr<BCAdapter> slipBCAdapter(new SlipBCAdapter()); - slipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new SlipBCAlgorithm())); - - mu::Parser fct; - fct.SetExpr("U"); - fct.DefineConst("U", uLB); - SPtr<BCAdapter> velBCAdapter(new VelocityBCAdapter(true, false, false, fct, 0, BCFunction::INFCONST)); - velBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityBCAlgorithm())); - - SPtr<BCAdapter> denBCAdapter(new DensityBCAdapter(rhoLB)); - denBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NonEqDensityBCAlgorithm())); - - BoundaryConditionsBlockVisitor bcVisitor; - bcVisitor.addBC(noSlipBCAdapter); - bcVisitor.addBC(slipBCAdapter); - bcVisitor.addBC(velBCAdapter); - bcVisitor.addBC(denBCAdapter); - - ////////////////////////////////////////////////////////////////////////// - //restart - - ////////////////////////////////////////////////////////////////////////// - - - if (grid->getTimeStep()==0) - { - if (myid==0) - { - UBLOG(logINFO, "Parameters:"); - UBLOG(logINFO, "* Re = "<<Re); - UBLOG(logINFO, "* Ma = "<<Ma); - UBLOG(logINFO, "* velocity (uReal) = "<<uReal<<" m/s"); - UBLOG(logINFO, "* viscosity (nuReal) = "<<nueReal<<" m^2/s"); - UBLOG(logINFO, "* velocity LB (uLB) = "<<uLB); - UBLOG(logINFO, "* viscosity LB (nuLB) = "<<nuLB); - UBLOG(logINFO, "* dx_base = "<<deltaXcoarse<<" m"); - UBLOG(logINFO, "* dx_refine = "<<deltaXfine<<" m"); - UBLOG(logINFO, "* number of levels = "<<refineLevel+1); - UBLOG(logINFO, "* number of threads = "<<numOfThreads); - UBLOG(logINFO, "* number of processes = "<<comm->getNumberOfProcesses()); - UBLOG(logINFO, "Preprozess - start"); - } - - GbCuboid3DPtr geoVRES0100(new GbCuboid3D(VRES0100[0], VRES0100[2], VRES0100[4], VRES0100[1], VRES0100[3], VRES0100[5])); - if (myid==0) GbSystem3D::writeGeoObject(geoVRES0100.get(), pathOut+"/geo/geoVRES0100", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr geoVRES0200(new GbCuboid3D(VRES0200[0], VRES0200[2], VRES0200[4], VRES0200[1], VRES0200[3], VRES0200[5])); - if (myid==0) GbSystem3D::writeGeoObject(geoVRES0200.get(), pathOut+"/geo/geoVRES0200", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr geoVRES0300(new GbCuboid3D(VRES0300[0], VRES0300[2], VRES0300[4], VRES0300[1], VRES0300[3], VRES0300[5])); - if (myid==0) GbSystem3D::writeGeoObject(geoVRES0300.get(), pathOut+"/geo/geoVRES0300", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr geoVRES0400(new GbCuboid3D(VRES0400[0], VRES0400[2], VRES0400[4], VRES0400[1], VRES0400[3], VRES0400[5])); - if (myid==0) GbSystem3D::writeGeoObject(geoVRES0400.get(), pathOut+"/geo/geoVRES0400", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr geoVRES0500(new GbCuboid3D(VRES0500[0], VRES0500[2], VRES0500[4], VRES0500[1], VRES0500[3], VRES0500[5])); - if (myid==0) GbSystem3D::writeGeoObject(geoVRES0500.get(), pathOut+"/geo/geoVRES0500", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr geoVRES0700(new GbCuboid3D(VRES0700[0], VRES0700[2], VRES0700[4], VRES0700[1], VRES0700[3], VRES0700[5])); - if (myid==0) GbSystem3D::writeGeoObject(geoVRES0700.get(), pathOut+"/geo/geoVRES0700", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr geoVRES0900(new GbCuboid3D(VRES0900[0], VRES0900[2], VRES0900[4], VRES0900[1], VRES0900[3], VRES0900[5])); - if (myid==0) GbSystem3D::writeGeoObject(geoVRES0900.get(), pathOut+"/geo/geoVRES0900", WbWriterVtkXmlASCII::getInstance()); - - SPtr<D3Q27Interactor> geoVRES0700Int(new D3Q27Interactor(geoVRES0700, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - //GEO - if (myid==0) UBLOG(logINFO, "Read geoSAE:start"); - SPtr<GbTriFaceMesh3D> geoSAE = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+SAE, "meshSAE", GbTriFaceMesh3D::KDTREE_SAHPLIT, true)); - if (myid==0) UBLOG(logINFO, "Read meshSAE:end"); - if (myid==0) GbSystem3D::writeGeoObject(geoSAE.get(), pathOut+"/geo/meshSAE", WbWriterVtkXmlBinary::getInstance()); - - SPtr<D3Q27TriFaceMeshInteractor> geoSAEInteractor(new D3Q27TriFaceMeshInteractor(geoSAE, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - - - if (myid==0) - { - ////////////////////////////////////////// - //meshes - if (myid==0) UBLOG(logINFO, "Read meshVRES0600:start"); - SPtr<GbTriFaceMesh3D> meshVRES0600 = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathMesh+"/"+VRES0600_chopped, "meshVRES0600", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); - if (myid==0) UBLOG(logINFO, "Read meshVRES0600:end"); - if (myid==0) GbSystem3D::writeGeoObject(meshVRES0600.get(), pathOut+"/geo/meshVRES0600", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27TriFaceMeshInteractor> meshVRES0600Interactor(new D3Q27TriFaceMeshInteractor(meshVRES0600, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - if (myid==0) UBLOG(logINFO, "Read meshVRES0700:start"); - SPtr<GbTriFaceMesh3D> meshVRES0700 = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathMesh+"/"+VRES0700_chopped, "meshVRES0700", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); - if (myid==0) UBLOG(logINFO, "Read meshVRES0700:end"); - if (myid==0) GbSystem3D::writeGeoObject(meshVRES0700.get(), pathOut+"/geo/meshVRES0700", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27TriFaceMeshInteractor> meshVRES0700Interactor(new D3Q27TriFaceMeshInteractor(meshVRES0700, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - if (myid==0) UBLOG(logINFO, "Read meshVRES0800:start"); - SPtr<GbTriFaceMesh3D> meshVRES0800 = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathMesh+"/"+VRES0800_Fahrzeug, "meshVRES0800", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); - if (myid==0) UBLOG(logINFO, "Read meshVRES0800:end"); - if (myid==0) GbSystem3D::writeGeoObject(meshVRES0800.get(), pathOut+"/geo/meshVRES0800", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27TriFaceMeshInteractor> meshVRES0800Interactor(new D3Q27TriFaceMeshInteractor(meshVRES0800, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - //if (myid==0) UBLOG(logINFO, "Read meshVRES0900:start"); - //SPtr<GbTriFaceMesh3D> meshVRES0900 = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathMesh+"/"+VRES0900, "meshVRES0900", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); - //if (myid==0) UBLOG(logINFO, "Read meshVRES0900:end"); - //if (myid==0) GbSystem3D::writeGeoObject(meshVRES0900.get(), pathOut+"/geo/meshVRES0900", WbWriterVtkXmlBinary::getInstance()); - //SPtr<D3Q27TriFaceMeshInteractor> meshVRES0900Interactor(new D3Q27TriFaceMeshInteractor(meshVRES0900, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - if (myid==0) UBLOG(logINFO, "Read meshVRES1000ASaeule:start"); - SPtr<GbTriFaceMesh3D> meshVRES1000ASaeule = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathMesh+"/"+VRES1000_ASaeule, "meshVRES1000ASaeule", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); - if (myid==0) UBLOG(logINFO, "Read meshVRES1000ASaeule:end"); - if (myid==0) GbSystem3D::writeGeoObject(meshVRES1000ASaeule.get(), pathOut+"/geo/meshVRES1000ASaeule", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27TriFaceMeshInteractor> meshVRES1000ASaeuleInteractor(new D3Q27TriFaceMeshInteractor(meshVRES1000ASaeule, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - if (myid==0) UBLOG(logINFO, "Read meshVRES1000Scheibe:start"); - SPtr<GbTriFaceMesh3D> meshVRES1000Scheibe = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathMesh+"/"+VRES1000_Scheibe, "meshVRES1000Scheibe", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); - if (myid==0) UBLOG(logINFO, "Read meshVRES1000Scheibe:end"); - if (myid==0) GbSystem3D::writeGeoObject(meshVRES1000Scheibe.get(), pathOut+"/geo/meshVRES1000Scheibe", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27TriFaceMeshInteractor> meshVRES1000ScheibeInteractor(new D3Q27TriFaceMeshInteractor(meshVRES1000Scheibe, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - if (myid==0) UBLOG(logINFO, "Read meshVRES1000Spiegel:start"); - SPtr<GbTriFaceMesh3D> meshVRES1000Spiegel = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathMesh+"/"+VRES1000_Spiegel, "meshSpiegel", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); - if (myid==0) UBLOG(logINFO, "Read meshVRES1000Spiegel:end"); - if (myid==0) GbSystem3D::writeGeoObject(meshVRES1000Spiegel.get(), pathOut+"/geo/meshVRES1000Spiegel", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27TriFaceMeshInteractor> meshVRES1000SpiegelInteractor(new D3Q27TriFaceMeshInteractor(meshVRES1000Spiegel, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - if (myid==0) UBLOG(logINFO, "Read meshVRES1100SpiegelFine:start"); - SPtr<GbTriFaceMesh3D> meshVRES1100SpiegelFine = SPtr<GbTriFaceMesh3D>(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathMesh+"/"+VRES1100_Spiegel_fein, "meshSpiegelFine", GbTriFaceMesh3D::KDTREE_SAHPLIT, false)); - if (myid==0) UBLOG(logINFO, "Read meshVRES1100SpiegelFine:end"); - if (myid==0) GbSystem3D::writeGeoObject(meshVRES1100SpiegelFine.get(), pathOut+"/geo/meshVRES1100SpiegelFine", WbWriterVtkXmlBinary::getInstance()); - SPtr<D3Q27TriFaceMeshInteractor> meshVRES1100SpiegelFineInteractor(new D3Q27TriFaceMeshInteractor(meshVRES1100SpiegelFine, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - UBLOG(logINFO, "Refinement - start"); - RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel, comm); - ////refineHelper.addGbObject(geoVRES0100, refineLevel-4); - //refineHelper.addGbObject(geoVRES0200, 1); - //refineHelper.addGbObject(geoVRES0300, 2); - //refineHelper.addGbObject(geoVRES0400, 3); - //refineHelper.addGbObject(geoVRES0500, 4); - //refineHelper.addGbObject(geoVRES0700, 7); - //refineHelper.addGbObject(geoVRES0900, 9); - //refineHelper.refine(); - - RefineCrossAndInsideGbObjectBlockVisitor geoVRES0200RefVisitor(geoVRES0200, 1); - grid->accept(geoVRES0200RefVisitor); - RefineCrossAndInsideGbObjectBlockVisitor geoVRES0300RefVisitor(geoVRES0300, 2); - grid->accept(geoVRES0300RefVisitor); - RefineCrossAndInsideGbObjectBlockVisitor geoVRES0400RefVisitor(geoVRES0400, 3); - grid->accept(geoVRES0400RefVisitor); - RefineCrossAndInsideGbObjectBlockVisitor geoVRES0500RefVisitor(geoVRES0500, 4); - grid->accept(geoVRES0500RefVisitor); - - - int rank = grid->getRank(); - grid->setRank(0); - meshVRES0600Interactor->refineBlockGridToLevel(5, 0.0, 0.0); - meshVRES0700Interactor->refineBlockGridToLevel(6, -0.6, 0.0); - - UBLOG(logINFO, "Refinement - geoVRES0700"); - RefineCrossAndInsideGbObjectBlockVisitor geoVRES0700RefVisitor(geoVRES0700, 7); - grid->accept(geoVRES0700RefVisitor); - - UBLOG(logINFO, "Refinement - geoSAEInteractor"); - meshVRES0800Interactor->refineBlockGridToLevel(8, -0.5, 0.0); - //geoSAEInteractor->refineBlockGridToLevel(8, 0.0, 0.1); - - //SetSolidOrTransBlockVisitor v(geoSAEInteractor, SetSolidOrTransBlockVisitor::SOLID); - //grid->accept(v); - //std::vector<SPtr<Block3D>>& sb = geoSAEInteractor->getSolidBlockSet(); - //BOOST_FOREACH(SPtr<Block3D> block, sb) - //{ - // grid->deleteBlock(block); - //} - //geoSAEInteractor->removeSolidBlocks(); - //geoSAEInteractor->removeTransBlocks(); - - UBLOG(logINFO, "Refinement - geoVRES0900RefVisitor"); - //meshVRES0900Interactor->refineBlockGridToLevel(9, 0.0, 0.0); - RefineCrossAndInsideGbObjectBlockVisitor geoVRES0900RefVisitor(geoVRES0900, 9); - grid->accept(geoVRES0900RefVisitor); - - UBLOG(logINFO, "Refinement - meshVRES1000ASaeuleInteractor"); - meshVRES1000ASaeuleInteractor->refineBlockGridToLevel(10, -0.1, 0.0); - - UBLOG(logINFO, "Refinement - meshVRES1000ScheibeInteractor"); - meshVRES1000ScheibeInteractor->refineBlockGridToLevel(10, -0.1, 0.0); - - UBLOG(logINFO, "Refinement - meshVRES1000SpiegelInteractor"); - meshVRES1000SpiegelInteractor->refineBlockGridToLevel(10, -0.12, 0.0); - - UBLOG(logINFO, "Refinement - meshVRES1100SpiegelFineInteractor"); - meshVRES1100SpiegelFineInteractor->refineBlockGridToLevel(11, -0.12, 0.0); - grid->setRank(rank); - - /////////////////////////////////////////////////////////// - ///BOX - //GbCuboid3DPtr geoBox1(new GbCuboid3D(-0.495, -0.8, 0.545, -0.045, -0.7, 0.795)); - //if (myid==0) GbSystem3D::writeGeoObject(geoBox1.get(), pathOut+"/geo/geoBox1", WbWriterVtkXmlASCII::getInstance()); - //CoarsenCrossAndInsideGbObjectBlockVisitor geoBox1Visitor(geoBox1, 11, 11); - //grid->accept(geoBox1Visitor); - ////////////////////////////////////////////////////////////////////////// - - - if (myid==0) - { - WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm); - ppblocks.process(0); - } - - RatioBlockVisitor ratioVisitor(refineLevel); - CheckRatioBlockVisitor checkRatio(refineLevel); - int count = 0; - - do { - UBLOG(logINFO, "Refinement - RatioBlockVisitor"); - grid->accept(ratioVisitor); - checkRatio.resetState(); - UBLOG(logINFO, "Refinement - CheckRatioBlockVisitor"); - grid->accept(checkRatio); - if (myid==0) UBLOG(logINFO, "count ="<<count++<<" state="<<checkRatio.getState()); - } while (!checkRatio.getState()); - - UBLOG(logINFO, "Refinement - OverlapBlockVisitor"); - OverlapBlockVisitor overlapVisitor(refineLevel, false); - grid->accept(overlapVisitor); - - if (myid==0) UBLOG(logINFO, "Refinement - end"); - - if (myid==0) - { - WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm); - ppblocks.process(1); - } - } - - grid->updateDistributedBlocks(comm); - - if (myid == 0) UBLOG(logINFO, "SetInterpolationDirsBlockVisitor"); - std::vector<int> dirs; - for (int i = D3Q27System::E; i<=D3Q27System::TS; i++) - { - dirs.push_back(i); - } - SetInterpolationDirsBlockVisitor interDirsVisitor(dirs); - grid->accept(interDirsVisitor); - - ////////////////////////////////////////////////////////////////////////// - - - //walls - GbCuboid3DPtr addWallYmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_minX2, g_maxX3+blockLength)); - if (myid==0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathOut+"/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallYmax(new GbCuboid3D(g_minX1-blockLength, g_maxX2, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if (myid==0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathOut+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance()); - - //wall interactors - SPtr<D3Q27Interactor> addWallYminInt(new D3Q27Interactor(addWallYmin, grid, slipBCAdapter, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, slipBCAdapter, Interactor3D::SOLID)); - - //walls - GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3)); - if (myid==0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathOut+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if (myid==0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathOut+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance()); - - //wall interactors - SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, slipBCAdapter, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, slipBCAdapter, Interactor3D::SOLID)); - - //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(), pathOut+"/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(), pathOut+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); - - //inflow - SPtr<D3Q27Interactor> inflowIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID)); - - //outflow - SPtr<D3Q27Interactor> outflowIntr = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, denBCAdapter, Interactor3D::SOLID)); - - //////////////////////////////////////////// - //METIS - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::KWAY)); - //////////////////////////////////////////// - /////delete solid blocks - if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - intHelper.addInteractor(inflowIntr); - intHelper.addInteractor(outflowIntr); - intHelper.addInteractor(addWallYminInt); - intHelper.addInteractor(addWallYmaxInt); - intHelper.addInteractor(addWallZminInt); - intHelper.addInteractor(addWallZmaxInt); - intHelper.addInteractor(geoVRES0700Int); - intHelper.addInteractor(geoSAEInteractor); - ////////////////////////////////////////////////////////////////////////// - intHelper.selectBlocks(); - - if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - end"); - ////////////////////////////////////// - - if (myid==0) - { - SPtr<CoProcessor> ppblocks(new WriteBlocksCoProcessor(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm)); - ppblocks->process(2); - 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"); - } - - SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulantLBMKernel(blockNx[0], blockNx[1], blockNx[2], CompressibleCumulantLBMKernel::NORMAL)); - - SPtr<BCProcessor> bcProc; - - bcProc = SPtr<BCProcessor>(new BCProcessor()); - - kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem); - grid->accept(kernelVisitor); - - if (refineLevel>0) - { - SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - //BC - intHelper.setBC(); - - grid->accept(bcVisitor); - - //initialization of distributions - InitDistributionsBlockVisitor initVisitor(nuLB, rhoLB); - initVisitor.setVx1(fct); - initVisitor.setNu(nuLB); - grid->accept(initVisitor); - - ////set connectors - InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - grid->accept(setConnsVisitor); - - //domain decomposition for threads - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - //Postrozess - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - SPtr<CoProcessor> ppgeo(new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - ppgeo->process(0); - ppgeo.reset(); - - if (myid==0) UBLOG(logINFO, "Preprozess - end"); - } - else - { - InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - grid->accept(setConnsVisitor); - - //domain decomposition for threads - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - grid->accept(bcVisitor); - } - - SPtr<UbScheduler> nupsSch(new UbScheduler(nupsStep[0], nupsStep[1], nupsStep[2])); - NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); - - SPtr<UbScheduler> stepSch(new UbScheduler(outTime)); - - WriteMacroscopicQuantitiesCoProcessor pp(grid, stepSch, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm); - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Total Physical Memory (RAM): "<<Utilities::getTotalPhysMem()); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used: "<<Utilities::getPhysMemUsed()); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()); - } - - const SPtr<ConcreteCalculatorFactory> calculatorFactory = std::make_shared<ConcreteCalculatorFactory>(stepSch); - CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, calculatorFactory, CalculatorType::HYBRID)); - 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[]) -{ - - if (argv!=NULL) - { - if (argv[1]!=NULL) - { - run(string(argv[1])); - } - else - { - cout<<"Configuration file must be set!: "<<argv[0]<<" <config file>"<<endl<<std::flush; - } - } - - return 0; -} - diff --git a/apps/cpu/mirror/mirrorV1.cfg b/apps/cpu/mirror/mirrorV1.cfg deleted file mode 100644 index f06bb8efb096a7328edf693cd50f060c9aa727fa..0000000000000000000000000000000000000000 --- a/apps/cpu/mirror/mirrorV1.cfg +++ /dev/null @@ -1,60 +0,0 @@ -pathOut = d:/temp/mirror5 -pathGeo = d:/Projects/Spiegelbenchmark/geometry -pathMesh = d:/Projects/Spiegelbenchmark/meshBoxes - -#geometry -SAE = SAE_GRUNDKOERPER_CFD_INPUT_VERFEINERT_in_m_SOLID.ASCII_D_0.8.stl - - -#refinement meshes -VRES0600_chopped = VRES0600_chopped.stl -VRES0700_chopped = VRES0700_chopped.stl -VRES0800_Fahrzeug = VRES0800_Fahrzeug.stl -#VRES0900 = VRES0900_Cube.stl -VRES1000_ASaeule = VRES1000_ASaeule.stl -VRES1000_Scheibe = VRES1000_Scheibe.stl -VRES1000_Spiegel = VRES1000_Spiegel.stl -VRES1100_Spiegel_fein = VRES1100_Spiegel_fein.stl - - -numOfThreads = 4 -availMem = 10e9 -refineLevel = 11 -#blockNx = 9 8 9 -blockNx = 5 5 5 - -#x1min x1max x2min x2max x3min x3max [m] -#bounding box -WTUNNEL1 = -35.8 37.4 -31.5 31.5 -0.177 32.8 - -#refinement cubes -VRES0100 = -18.4 24.5 -16.2 16.2 -0.187 16.5 -VRES0200 = -10.7 16.8 -8.56 8.56 -0.187 8.82 -VRES0300 = -6.9 13 -4.72 4.72 -0.187 4.98 -VRES0400 = -4.21 10.8 -2.8 2.8 -0.187 3.06 -VRES0500 = -2.87 8.74 -1.84 1.84 -0.187 2.1 -VRES0700 = -2.6 4.69 -1.25 1.25 -0.255 -0.125 -VRES0900 = -0.823 0.941 -1.15 -0.7 0.502 1.01 - -#deltaXcoarse = 4096e-3 #level 0 -deltaXcoarse = 2.048 #level 0 -deltaXfine = 1e-3 #level 11 - - -refineDistance = 0.3 - -restartStep = 1 -restartStepStart = 100 - -outTime = 1 -endTime = 10 - -logToFile = false - -porousTralingEdge = false - -thinWall = false - -testBox=false - -nupsStep = 1 1 10000000 \ No newline at end of file diff --git a/apps/cpu/musis/CMakeLists.txt b/apps/cpu/musis/CMakeLists.txt deleted file mode 100644 index 829e61a8a006ffb53e5c479224245bcc906b3175..0000000000000000000000000000000000000000 --- a/apps/cpu/musis/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(musis) - -INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(musis BINARY) diff --git a/apps/cpu/musis/config.txt b/apps/cpu/musis/config.txt deleted file mode 100644 index 33d618aa626333c2dea4d22cd69dc50056eac6f4..0000000000000000000000000000000000000000 --- a/apps/cpu/musis/config.txt +++ /dev/null @@ -1,46 +0,0 @@ -#number of threads -numOfThreads = 1 - -#block dimensions -blocknx1 = 12 -blocknx2 = 12 -blocknx3 = 12 - -#grid refinement -refineLevel = 2 -numBaseBlock_L1 = 1 - -#physical length -L1 = 0.07 -L2 = 0.07 -L3 = 0.4169 - -#material parameter -nueLB = 0.0016666666667 - -#Forcing -ForcingX1 = 1.0e-7 - -path = "J:/TBL/scratch/C100_DrySampleTest/" - -# musis sample -geoFile = "J:/TBL/TBL_Sw_Geos/C100/C100MulTest.geo.00000000.raw" -geoDimX1 = 78 -geoDimX2 = 78 -geoDimX3 = 45 - -#paraview visualization -outTime = 1.0 -endTime = 7.0 - -#retart parameters -restartDump = 3.0 - -#data measurement -calcBegin = 500.0 -calcEnd = 1000.0 -calcIntervall = 50.0 - - -#BGK=0, CLB=1, CCLB=2 -kernel = 2 \ No newline at end of file diff --git a/apps/cpu/musis/musis.cpp b/apps/cpu/musis/musis.cpp deleted file mode 100644 index 4ac78943b03b6f05a4ad172eea3820cd611c77b5..0000000000000000000000000000000000000000 --- a/apps/cpu/musis/musis.cpp +++ /dev/null @@ -1,474 +0,0 @@ -#include <iostream> -#include <string> - -#include <vfluids.h> - -using namespace std; - - -void run(const char *cstr1, const char *cstr2) -{ - - try - { - ConfigFileReader cf(cstr1); - if ( !cf.read() ) - { - std::string exceptionText = "Unable to read configuration file\n"; - throw exceptionText; - } - - string machine = QUOTEME(CAB_MACHINE); - string pathname = cf.getValue("path"); - int numOfThreads = UbSystem::stringTo<int>(cf.getValue("numOfThreads")); - double availMem = 0; - string geoFile; - - CommunicatorPtr comm(new MPICommunicator()); - int myid = comm->getProcessID(); - - int d1, d2, d3; // for reading musis sample - - if(machine == "BOMBADIL") - //if(machine == "YWANG") - { - //pathname = "J:/TBL/scratch/C100_DrySampleTest/"; - //geoFile = "J:/TBL/TBL_Sw_Geos/CS518/TBL_CS518_MulSim02.geo.00000000.raw"; - pathname = cf.getValue("path"); - geoFile = cf.getValue("geoFile"); - numOfThreads = UbSystem::stringTo<int>(cf.getValue("numOfThreads")); - - availMem = 3.0e9; - d1 = UbSystem::stringTo<int>(cf.getValue("geoDimX1"));; - d2 = UbSystem::stringTo<int>(cf.getValue("geoDimX2"));; - d3 = UbSystem::stringTo<int>(cf.getValue("geoDimX3"));; - } - else if(machine == "M01" || machine == "M02") - { - //pathname = "/hpc3lustre/work/wang/TBL/scratch/CS518_DrySampleTest/"; - //geoFile = "/hpc3lustre/work/wang/TBL/TBL_Sw_Geos/CS518.X2Y2Z1/TBL_CS518_MulSim02.geo.00030000.raw"; - //numOfThreads = 1; - pathname = cf.getValue("path"); - geoFile = cf.getValue("geoFile"); - numOfThreads = UbSystem::stringTo<int>(cf.getValue("numOfThreads")); - availMem = 12.0e9; - - if(myid ==0) - { - stringstream logFilename; - logFilename << pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - d1 = UbSystem::stringTo<int>(cf.getValue("geoDimX1"));; - d2 = UbSystem::stringTo<int>(cf.getValue("geoDimX2"));; - d3 = UbSystem::stringTo<int>(cf.getValue("geoDimX3"));; - } - else throw UbException(UB_EXARGS, "unknown CAB_MACHINE"); - - const int baseLevel = 0; - const int refineLevel = UbSystem::stringTo<int>(cf.getValue("refineLevel"));//2; - const int blocknx1 = UbSystem::stringTo<int>(cf.getValue("blocknx1"));//12; - const int blocknx2 = UbSystem::stringTo<int>(cf.getValue("blocknx1"));//12; - const int blocknx3 = UbSystem::stringTo<int>(cf.getValue("blocknx1"));//12; - - const int numBaseBlockL1 = UbSystem::stringTo<int>(cf.getValue("numBaseBlock_L1"));//1; - //////////////////////////////////////////////////////////////////////////// - //// Geometrie - //////////////////////////////////////////////////////////////////////////// - double L1 = UbSystem::stringTo<double>(cf.getValue("L1"));//0.07; //m - double L2 = UbSystem::stringTo<double>(cf.getValue("L2"));//0.07; //m - double L3 = UbSystem::stringTo<double>(cf.getValue("L3"));//0.0379 + 0.379; //m - double dx = L1/(blocknx1*numBaseBlockL1)/(pow(2.0,refineLevel)); //0.0379/272.0; //m - - LBMReal rhoReal = 1.0; //kg/m^3 - LBMReal uReal = 5.0; //m/s - LBMReal uLB = 0.1; - LBMReal nueLB = UbSystem::stringTo<double>(cf.getValue("nueLB"));//0.00166666666667; - LBMReal Re = 0.0; - LBMReal rhoLB = 0.0; - - //LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter(1.0, 1/sqrt(3.0)*(uReal/uLB), 1.0, 1.0/dx, dx*dx*dx)); - LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - - //bounding box - double d_minX1 = 0.0; - double d_minX2 = 0.0; - double d_minX3 = 0.0; - - double d_maxX1 = L1; - double d_maxX2 = L2; - double d_maxX3 = L3; - - double offs = 0.0; - - double g_minX1 = d_minX1-offs; - double g_minX2 = d_minX2-offs;; - double g_minX3 = d_minX3-offs; - - double g_maxX1 = d_maxX1+offs; - double g_maxX2 = d_maxX2+offs; - double g_maxX3 = d_maxX3+offs; - - double blockLength = blocknx1 * dx; - - Grid3DPtr grid(new Grid3D(comm)); - grid->setPeriodicX1(true); - grid->setPeriodicX2(true); - grid->setPeriodicX3(false); - grid->setDeltaX(pow(2.0,refineLevel)*dx); // for coarse - grid->setBlockNX(blocknx1, blocknx2, blocknx3); - - double restartDump = UbSystem::stringTo<double>(cf.getValue("restartDump")); - UbSchedulerPtr rSch(new UbScheduler(restartDump)); - RestartPostprocessorPtr rp(new RestartPostprocessor(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY)); - //UbSchedulerPtr emSch(new UbScheduler(1000, 1000)); - //EmergencyExitPostprocessor em(grid, emSch, pathname+"/checkpoints/emex.txt", rp, comm); - - std::string opt; - if(cstr2!= NULL) - opt = std::string(cstr2); - - LBMKernel3DPtr kernel; - double ForcingX1 = UbSystem::stringTo<double>(cf.getValue("ForcingX1")); - - mu::Parser fctForcingX1; - mu::Parser fctForcingX2; - mu::Parser fctForcingX3; - - fctForcingX2.SetExpr("0.0"); - fctForcingX3.SetExpr("0.0"); - fctForcingX1.SetExpr("c3*(tanh(c1*(x3-c2))+c4)*Fx1*dx"); - //fctForcingX1.SetExpr("Fx1*dx"); - fctForcingX1.DefineConst("Fx1", ForcingX1); - fctForcingX1.DefineConst("c1", 0.5); // incline - double ForcingLevel = 0.039/dx; - fctForcingX1.DefineConst("c2", ForcingLevel); // forcing switch level - fctForcingX1.DefineConst("c3", 0.5); // const always - fctForcingX1.DefineConst("c4", 1.0); // const always - if(myid == 0) UBLOG(logINFO,"Forcing Level = " << ForcingLevel ); - - if(cstr2!= NULL) - { - if(myid==0) UBLOG(logINFO,"Restart step: " << opt); - grid = rp->restart(UbSystem::stringTo<int>(opt)); - //rp->reconnect(grid); - - //Forcing setzen falls nötig - SetForcingBlockVisitor forcingVisitor(fctForcingX1,fctForcingX2,fctForcingX3); - grid->accept(forcingVisitor); - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - - ////domain decomposition //useful if pro mpi processor contains more than 1 thread - //PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - //grid->accept(pqPartVisitor); - - //int option = 0; - //LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(blocknx1, blocknx2, blocknx3, option)); - - - - } - else - { - if(myid ==0) - { - UBLOG(logINFO,"L = " << L1/dx ); - UBLOG(logINFO,"v = " << uLB ); - UBLOG(logINFO,"rho = " << rhoLB ); - UBLOG(logINFO,"nue = " << nueLB ); - UBLOG(logINFO,"Re = " << Re ); - UBLOG(logINFO,"dx = " << dx ); - //UBLOG(logINFO,conv->toString() ); - UBLOG(logINFO,"number of levels = " << refineLevel+1 ); - UBLOG(logINFO,"numOfThreads = " << numOfThreads ); - UBLOG(logINFO,"Preprozess - start"); - } - - // read musis geometry - //if(myid ==0) UBLOG(logINFO,"Read geometry: start"); - //GbVoxelMatrix3DPtr vmatrix(new GbVoxelMatrix3D(d1, d2, d3, float(GbVoxelMatrix3D::FLUID),8.0,8.0)); - - //vmatrix->readMatrixFromRawFile<char>(geoFile); - //if(myid ==0) UBLOG(logINFO,"Read geometry: end"); - - //vmatrix->setVoxelMatrixDelta(L1/(d1-1),L1/(d1-1),L1/(d1-1)); - - //if(myid ==0) UBLOG(logINFO,"Write geometry: start"); - //if(myid == 0) vmatrix->writeToLegacyVTK(pathname+"/geo/geo"); - //if(myid ==0) UBLOG(logINFO,"Write geometry: end"); - - // domain - 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()); - - //refinement area - GbObject3DPtr refineCube1(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3+8.0*0.0379)); - if(myid ==0) GbSystem3D::writeGeoObject(refineCube1.get(),pathname + "/geo/refineCube1", WbWriterVtkXmlBinary::getInstance()); - GbObject3DPtr refineCube2(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3+4.0*0.0379)); - if(myid ==0) GbSystem3D::writeGeoObject(refineCube2.get(),pathname + "/geo/refineCube2", WbWriterVtkXmlBinary::getInstance()); - - // walls - GbCuboid3DPtr addWallZmin (new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - GbCuboid3DPtr addWallZmax (new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance()); - - GenBlocksGridVisitor genBlocks; - genBlocks.addGeoObject(gridCube); - grid->accept(genBlocks); - - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm)); - - if (refineLevel > 0) - { - if(myid == 0) UBLOG(logINFO,"Refinement - start"); - RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel); - refineHelper.addGbObject(refineCube1, refineLevel-1); - refineHelper.addGbObject(refineCube2, refineLevel); - refineHelper.refine(); - if(myid == 0) UBLOG(logINFO,"Refinement - end"); - } - - MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B); - grid->accept( metisVisitor ); - - SolidBlocksHelper sd(grid, comm); - - int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr bc_noslip(new D3Q27NoSlipBCAdapter(bbOption)); - D3Q27BoundaryConditionAdapterPtr bc_slip(new D3Q27SlipBCAdapter(bbOption)); - // porous geometry - //D3Q27InteractorPtr geoInt = D3Q27InteractorPtr ( new D3Q27Interactor(vmatrix, grid, bc_noslip,Interactor3D::SOLID)); - - //mu::Parser fct; - //fct.DefineConst("U", uLB);//Vx - //fct.SetExpr("U"); - - //D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter (true, false ,false ,fct, 0, D3Q27BCFunction::INFCONST)); - - //walls - D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, bc_noslip,Interactor3D::SOLID)); - ////up velocity - //D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, velBCAdapter,Interactor3D::SOLID)); - //up slip - D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, bc_slip ,Interactor3D::SOLID)); - - //sd.addInteractor(geoInt); - sd.addInteractor(addWallZminInt); - sd.addInteractor(addWallZmaxInt); - - sd.deleteSolidBlocks(); - - grid->accept( metisVisitor ); - - - ppblocks->update(0); - ppblocks.reset(); - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nodb = (blocknx1) * (blocknx2) * (blocknx3); - unsigned long nod = nob * (blocknx1) * (blocknx2) * (blocknx3); - unsigned long nodg = nob * (blocknx1+gl) * (blocknx2+gl) * (blocknx3+gl); - double needMemAll = double(nod*(27*sizeof(double) + sizeof(int) + sizeof(float)*4)); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - if(myid == 0) - { - UBLOG(logINFO,"Number of blocks = " << nob); - UBLOG(logINFO,"Number of nodes = " << nod); - 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*nodb); - } - UBLOG(logINFO,"Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO,"Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO,"Available memory per process = " << availMem << " bytes"); - - } - - //LBMKernel3DPtr kernel(new LBMKernelETD3Q27Cascaded(blocknx1, blocknx2, blocknx3)); - //LBMKernel3DPtr kernel(new LBMKernelETD3Q27BGK(blocknx1, blocknx2, blocknx3, true)); - //option = 0 - ohne param., option = 1 - mit param. - //int option = 0; - //LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(blocknx1, blocknx2, blocknx3, option)); - - - int kernelType = UbSystem::stringTo<int>(cf.getValue("kernel")); - LBMKernel3DPtr kernel; - if (kernelType == 0) - { - rhoLB = 1.0; - kernel = LBMKernel3DPtr(new LBMKernelETD3Q27BGK(blocknx1, blocknx2, blocknx3, true)); - } - else if (kernelType == 1) - { - rhoLB = 1.0; - kernel = LBMKernel3DPtr(new LBMKernelETD3Q27Cascaded(blocknx1, blocknx2, blocknx3)); - } - else if (kernelType == 2) - { - rhoLB = 0.0; - kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx1, blocknx2, blocknx3, 0)); - //kernel = LBMKernel3DPtr(new LBMKernelESD3Q27CCLB(blocknx1, blocknx2, blocknx3, grid)); - //kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLBex(blocknx1, blocknx2, blocknx3, 0, grid)); - } - - kernel->setForcingX1(fctForcingX1); - kernel->setForcingX2(fctForcingX2); - kernel->setForcingX3(fctForcingX3); - kernel->setWithForcing(true); - - - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - kernel->setBCProcessor(bcProc); - - mu::Parser fctnueLB; - - SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem); - grid->accept(kernelVisitor); - - if (refineLevel > 0) - { - D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - // //walls - grid->addAndInitInteractor(addWallZminInt); - grid->addAndInitInteractor(addWallZmaxInt); - // porous geometry - //grid->addAndInitInteractor(geoInt); - - //initialization of distributions - D3Q27ETInitDistributionsBlockVisitor initVisitor(rhoLB); - //initVisitor.setVx1(0.0); - grid->accept(initVisitor); - - ////Postrozess - Measurement - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv, comm, true)); - ppgeo->update(0); - ppgeo.reset(); - - //if(myid == 0) UBLOG(logINFO,"Preprozess - end"); - } - - UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); - NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm); - - double calcBegin = UbSystem::stringTo<double>(cf.getValue("calcBegin"));//0.07; //m - double calcEnd = UbSystem::stringTo<double>(cf.getValue("calcEnd"));//0.07; //m - double calcIntervall = UbSystem::stringTo<double>(cf.getValue("calcIntervall"));//0.0379 + 0.379; //m - - /*UbSchedulerPtr TBL_Sch(new UbScheduler(calcIntervall,calcBegin,calcEnd)); - UbSchedulerPtr TBL_rSch(new UbScheduler(100000)); - TurbulentStrengthSurfaceRoughnessPostprocessor TBLpp(grid,pathname +"/results/TBL", TBL_Sch,TBL_rSch,comm); - */ - - double outTime = UbSystem::stringTo<double>(cf.getValue("outTime")); - UbSchedulerPtr stepSch(new UbScheduler(outTime)); - D3Q27MacroscopicQuantitiesPostprocessor pp(grid, stepSch, pathname + "/steps/step", WbWriterVtkXmlASCII::getInstance(), conv, comm); - - double fdx = grid->getDeltaX(grid->getFinestInitializedLevel()); - - //D3Q27IntegrateValuesHelperPtr h1(new D3Q27IntegrateValuesHelper(grid, comm, - // g_minX1, g_minX2, g_minX3, - // g_minX1+1.0*fdx, g_maxX2, g_maxX3)); - ////if(myid ==0) GbSystem3D::writeGeoObject(h1->getBoundingBox().get(),pathname + "/geo/iv1", WbWriterVtkXmlBinary::getInstance()); - //D3Q27IntegrateValuesHelperPtr h2(new D3Q27IntegrateValuesHelper(grid, comm, - // g_maxX1-1.0*fdx, g_minX2, g_minX3, - // g_maxX1, g_maxX2, g_maxX3)); - ////if(myid ==0) GbSystem3D::writeGeoObject(h2->getBoundingBox().get(),pathname + "/geo/iv2", WbWriterVtkXmlBinary::getInstance()); - //LBMReal rhoReal = rhoLB; - //LBMReal uReal = uLB; - //D3Q27PressureDifferencePostprocessor rhopp(grid, stepSch, pathname + "/results/rho_diff.txt", h1, h2, rhoReal, uReal, uLB, comm); - - //UbSchedulerPtr resSch(new UbScheduler(1000,10000,10000)); - //UbSchedulerPtr visSch(new UbScheduler(1,0,1)); - //AverageValuesPostprocessor TBLpp(grid, pathname + "/results/AvVelocity", WbWriterVtkXmlBinary::getInstance(), visSch, resSch, comm); - - - double endTime = UbSystem::stringTo<double>(cf.getValue("endTime"));;//10001.0; - - CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, stepSch)); - if(myid == 0) UBLOG(logINFO,"Simulation-start"); - calculation->calculate(); - if(myid == 0) UBLOG(logINFO,"Simulation-end"); - // - //double point1[3] = {0.45, 0.20, 0.205}; - //double point2[3] = {0.55, 0.20, 0.205}; - //D3Q27IntegrateValuesHelperPtr h1(new D3Q27IntegrateValuesHelper(grid, comm, - // point1[0]-1.0*fdx, point1[1]-1.0*fdx, point1[2]-1.0*fdx, - // point1[0], point1[1], point1[2])); - //if(myid ==0) GbSystem3D::writeGeoObject(h1->getBoundingBox().get(),pathname + "/geo/iv1", WbWriterVtkXmlBinary::getInstance()); - //D3Q27IntegrateValuesHelperPtr h2(new D3Q27IntegrateValuesHelper(grid, comm, - // point2[0], point2[1]-1.0*fdx, point2[2]-1.0*fdx, - // point2[0]+1.0*fdx, point2[1], point2[2])); - //if(myid ==0) GbSystem3D::writeGeoObject(h2->getBoundingBox().get(),pathname + "/geo/iv2", WbWriterVtkXmlBinary::getInstance()); - ////D3Q27PressureDifferencePostprocessor rhopp(grid, visSch, pathname + "/results/rho_diff.txt", h1, h2, conv, comm); - //D3Q27PressureDifferencePostprocessor rhopp(grid, visSch, pathname + "/results/rho_diff.txt", h1, h2, rhoReal, uReal, uLB, comm); - // - //double area = 2.0*radius*H; - //double v = 4.0*uLB/9.0; - //D3Q27ForcesPostprocessor fp(grid, visSch, pathname + "/results/forces.txt", comm, rhoLB, v, area, D3Q27ForcesPostprocessor::X, D3Q27ForcesPostprocessor::Y); - //fp.addInteractor(cylinderInt); - // - //UbSchedulerPtr nupsSch(new UbScheduler(10, 10, 40)); - //NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm); - - //double endTime = 40001.0; - //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[]) -{ - if ( argv != NULL ) - { - if (argc > 1) - { - run(argv[1], argv[2]); - } - else - { - cout << "Configuration file must be set!: " << argv[0] << " <config file>" << endl << std::flush; - } - } - - return 0; - -} - - - - diff --git a/apps/cpu/pChannel/CMakeLists.txt b/apps/cpu/pChannel/CMakeLists.txt deleted file mode 100644 index 8af2de6d0580e0ca5cc9a10591474ec378e2145a..0000000000000000000000000000000000000000 --- a/apps/cpu/pChannel/CMakeLists.txt +++ /dev/null @@ -1,5 +0,0 @@ -PROJECT(PChannel) - -INCLUDE(${APPS_ROOT}/IncludsList.cmake) - -vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core VirtualFluidsBasic FILES pChannel.cpp) diff --git a/apps/cpu/pChannel/configBombadilpChannel.cfg b/apps/cpu/pChannel/configBombadilpChannel.cfg deleted file mode 100644 index bdf03526079117aa448ab01cf92a990ce2c4f7c7..0000000000000000000000000000000000000000 --- a/apps/cpu/pChannel/configBombadilpChannel.cfg +++ /dev/null @@ -1,107 +0,0 @@ -# -#Simulation parameters for porous channel -# - -pathOut = d:/temp/ChannelFlow -pathGeo = d:/Projects/SFB880/GeometrienPoroeseMedien/isotrop/PA80-110 -numOfThreads = 4 -availMem = 14e9 -logToFile = false - -#porous media -#rawFile = false -sampleFilename = PA80-110_275x267x254_1mm.vti -#sampleFilename = PA80-110_1096x1062x254_4x4x1mm.vti -#sampleFilename = PA80-110_1096x1327x303.vti -#writeSample = true - -rawFile = false -#sampleFilename = PA80-110_1096x1327x1265.raw -#sampleFilename = PA80-110_1096x1327x423.vti -#sampleFilename = PA80-110_1096x1327x216.vti -#sampleFilename = PA80-110_1096x1327x303.vti -writeSample = false - -#diminsions [voxel] -pmNX = 275 267 254 -#pmNX = 1096 1327 1265 -#pmNX = 1096 1327 216 -#pmNX = 1096 1062 254 - -#threshold -lthreshold = 29041 -uthreshold = 65535 - -#deltas -voxelDeltaX = 3.6496350365e-6 3.76789751319e-6 3.95256916996e-6 - -#diminsions [m] -#pmL = 7.299270073e-4 7.53579502638e-4 7.90513833992e-4 - -#grid -# deltax = 0.0000144 -# blocknx = 32 20 20 - -#diminsions [m] -#pmL = 4e-3 5e-3 5e-3 -#pmL = 4e-3 5e-3 1.67e-3 -#pmL = 4e-3 5e-3 0.85e-3 - -#letzte -#pmL = 4e-3 5e-3 1.19e-3 - -#pmL = 4e-3 0.5e-3 1e-3 - -pmL = 1e-3 1e-3 1e-3 -#pmL = 4e-3 4e-3 1e-3 - -#grid -refineLevel = 0 -#deltaXfine = 10e-6 - - -#deltaXfine = 20e-6 -deltaXfine = 80e-6 #level 2 - - - -blocknx = 10 10 10 - -thinWall = false -changeQs = false - -#channelHigh = 0.002 - -#DLR-F15 -#channelHigh = 0.017 -channelHigh = 0.008 -#NACA 0012 -#channelHigh = 0.008 - -#channelHigh = 0.005 - -boundingBox = 0 0 0 0.024 0.008 0.009 - -#physic -# for DLRF-15 Re = 102000/2 -Re = 25000 -#real velocity is 54.95 m/s -u_LB = 0.1 - -newStart = true -restartStep = 230000 - -cpStep = 100 -cpStart = 100 - -averaging = false -averagingReset = false -timeAvStart = 21000000 -timeAvStop = 2100010000 - -outTime = 100 -endTime = 230000 - - -nupsStep = 10 10 10000000 - diff --git a/apps/cpu/pChannel/configHLRNpChannel.cfg b/apps/cpu/pChannel/configHLRNpChannel.cfg deleted file mode 100644 index f7e90bceedaba9a756f14fba62bf15db29fbbfa4..0000000000000000000000000000000000000000 --- a/apps/cpu/pChannel/configHLRNpChannel.cfg +++ /dev/null @@ -1,54 +0,0 @@ -# -#Simulation parameters for porous channel -# - -pathname = /gfs2/work/niikonst/scratch/pChannel2 -pathGeo = /gfs1/work/niikonst/data/materials -numOfThreads = 24 -availMem = 128e9 -logToFile = true - -#porous media -rawFile = false -#sampleFilename = /PA80-110_1096x1327x1265.raw -sampleFilename = PA80-110_1096x1327x303.vti -writeSample = false - -#diminsions [voxel] -#pmNX = 1096 1327 1265 -pmNX = 1096 1327 303 - -#threshold -lthreshold = 29041 -uthreshold = 65535 - -#deltas -voxelDeltaX = 3.6496350365e-6 3.76789751319e-6 3.95256916996e-6 - -#diminsions [m] -#pmL = 4e-3 5e-3 5e-3 -pmL = 4e-3 5e-3 1.19e-3 - -#grid -refineLevel = 2 -deltaXfine = 8.0e-6 -blocknx = 32 40 20 -lengthFactor = 2 -thinWall = true - -#DLR-F15 -channelHigh = 0.017 - -#physic -# for DLRF-15 Re = 102000/2 -Re = 51000 -#real velocity is 54.95 m/s -u_LB = 0.1 - -restartStep = 10000 -restartStepStart=10000 - -endTime = 80000 -outTime = 10000 - -nupsStep = 1000 1000 10000000 diff --git a/apps/cpu/pChannel/configLudwigpChannel.cfg b/apps/cpu/pChannel/configLudwigpChannel.cfg deleted file mode 100644 index 5500f300967d860ec6ab193d1d0b3dcbeccdfc5e..0000000000000000000000000000000000000000 --- a/apps/cpu/pChannel/configLudwigpChannel.cfg +++ /dev/null @@ -1,53 +0,0 @@ -# -#Simulation parameters for porous channel -# - -pathname = /hpc3lustre/work/koskuche/SFB880/pChannel -pathGeo = /hpc3lustre/work/koskuche/SFB880/Materials/PA80-110 -numOfThreads = 8 -availMem = 11e9 -logToFile = true - -#porous media -rawFile = false -#sampleFilename = /PA80-110_1096x1327x1265.raw -sampleFilename = PA80-110_1096x1327x303.vti -writeSample = false - -#diminsions [voxel] -#pmNX = 1096 1327 1265 -pmNX = 1096 1327 303 - -#threshold -lthreshold = 29041 -uthreshold = 65535 - -#deltas -voxelDeltaX = 3.6496350365e-6 3.76789751319e-6 3.95256916996e-6 - -#diminsions [m] -#pmL = 4e-3 5e-3 5e-3 -pmL = 4e-3 5e-3 1.19e-3 - -#grid -refineLevel = 2 -deltaXfine = 8.0e-6 -blocknx = 32 40 20 -lengthFactor = 2 -thinWall = true - -#DLR-F15 -channelHigh = 0.017 - -#physic -# for DLRF-15 Re = 102000/2 -Re = 51000 -#real velocity is 54.95 m/s -u_LB = 0.1 - -restartStep = 10000 -restartStepStart=10000 - -endTime = 80000 -outTime = 10000 - diff --git a/apps/cpu/pChannel/pChannel.cpp b/apps/cpu/pChannel/pChannel.cpp deleted file mode 100644 index d30b28d262fa8d09c1658452eb11496b5c5c61f9..0000000000000000000000000000000000000000 --- a/apps/cpu/pChannel/pChannel.cpp +++ /dev/null @@ -1,706 +0,0 @@ -#include <iostream> -#include <string> -#include "VirtualFluids.h" -#include <omp.h> -double rangeRandom(double M, double N) -{ - return M + (rand() / (RAND_MAX / (N - M))); -} - -double rangeRandom1() -{ - return (2.0*rand())/RAND_MAX - 1.0; -} - -//double rangeRandom(double M, double N) -//{ -// return rand() % (int)N+(int)M; -//} - - - -//#include <thread> - -using namespace std; - -std::vector<int> x1Nbr; -std::vector<int> x2Nbr; -std::vector<int> x3Nbr; - -std::vector<int> x1NbrTemp; -std::vector<int> x2NbrTemp; -std::vector<int> x3NbrTemp; - -//void findSolidNeighbor(SPtr<GbVoxelMatrix3D> voxelMatrix, int x1, int x2, int x3) -//{ -// for (int k3 = -1; k3<=1; k3++) -// { -// for (int k2 = -1; k2<=1; k2++) -// { -// for (int k1 = -1; k1<=1; k1++) -// { -// int j1 = x1+k1; -// int j2 = x2+k2; -// int j3 = x3+k3; -// if (j1>=0&&j1<nodesX1 && j2>=0&&j2<nodesX2 && j3>=0&&j3<nodesX3) -// { -// if ((*voxelMatrix)(j1, j2, j3)==GbVoxelMatrix3D::FLUID) -// { -// if (flagMatrix(j1, j2, j3)==0) -// { -// voxelMatrixTemp(j1, j2, j3) = GbVoxelMatrix3D::SOLID; -// flagMatrix(j1, j2, j3) = 1; -// x1NbrTemp.push_back(j1); -// x2NbrTemp.push_back(j2); -// x3NbrTemp.push_back(j3); -// } -// } -// } -// } -// } -// } -//} - -void changePorosity(SPtr<GbVoxelMatrix3D> sample, vector<int> pmNX) -{ - int minX1 = 0; - int minX2 = 0; - int minX3 = 0; - int maxX1 = pmNX[0]; - int maxX2 = pmNX[1]; - int maxX3 = pmNX[2]; - sample->calculateNumberOfSolidAndFluid(); - double nSolid = sample->getNumberOfSolid(); - double nFluid = sample->getNumberOfFluid(); - double porosityStart = nFluid/(nSolid+nFluid); - double porosityEnd = 0.5; - double porosityStep = (porosityEnd-porosityStart)/(double)maxX3; - double totallSliceVoxel = maxX1*maxX2; - vector<int> fluidThreshold; - - SPtr<GbVoxelMatrix3D> sampleTemp = SPtr<GbVoxelMatrix3D>(sample->clone()); - - int count=1; - - for (int ix3=minX3; ix3<maxX3; ix3++) - { - int cFluid = 0; - for (int ix2=minX2; ix2<maxX2; ix2++) - { - for (int ix1=minX1; ix1<maxX1; ix1++) - { - if ((*sample)(ix1, ix2, ix3) == GbVoxelMatrix3D::FLUID) - { - cFluid++; - } - } - } - double slicePorosity = (double)cFluid/totallSliceVoxel; - double porosityPercent = (porosityStep*(double)count)/slicePorosity; - fluidThreshold.push_back((totallSliceVoxel-(double)cFluid)*porosityPercent); - count++; - } - int solidCount = 0; - count=0; - - for (int ix3=minX3; ix3<maxX3; ix3++) - { - //while (fluidThreshold[count] > 0) - //{ - // int fTh = fluidThreshold[count]; - - int solidCount = 0; - for (int ix2=minX2; ix2<maxX2; ix2++) - { - for (int ix1=minX1; ix1<maxX1; ix1++) - { - if ((*sample)(ix1, ix2, ix3) == GbVoxelMatrix3D::SOLID) - { - bool flagSolid = true; - for (int k3 = -1; k3<=1; k3++) - { - for (int k2 = -1; k2<=1; k2++) - { - for (int k1 = -1; k1<=1; k1++) - { - int j1 = ix1+k1; - int j2 = ix2+k2; - int j3 = ix3;//+k3; - if (j1>=0&&j1<maxX1 && j2>=0&&j2<maxX2 && j3>=0&&j3<maxX3) - { - if ((*sample)(j1, j2, j3) == GbVoxelMatrix3D::FLUID) - { - flagSolid = flagSolid && false; - } - } - } - } - } - if (!flagSolid) - { - (*sample)(ix1, ix2, ix3)=GbVoxelMatrix3D::FLUID; - fluidThreshold[count]--; - solidCount++; - } - if ( fluidThreshold[count] == 0) - { - ix1=maxX1; - ix2=maxX2; - } - } - } - } - UBLOG(logINFO, "count = " << count); - UBLOG(logINFO, "fTh = " << fluidThreshold[count]); - UBLOG(logINFO, "solidCount = " << solidCount); - //sample = sampleTemp; - //sampleTemp = SPtr<GbVoxelMatrix3D>(sample->clone()); - - count++; - - } - - //} - //sampleTemp->writeToLegacyVTKBinary("d:/temp/ChannelFlow/geo/sampleTemp.vtk"); -} - -////////////////////////////////////////////////////////////////////////// -void run(string configname) -{ - try - { - vf::basics::ConfigurationFile config; - config.load(configname); - - string pathOut = config.getValue<string>("pathOut"); - string pathGeo = config.getValue<string>("pathGeo"); - int numOfThreads = config.getValue<int>("numOfThreads"); - string sampleFilename = config.getValue<string>("sampleFilename"); - vector<int> pmNX = config.getVector<int>("pmNX"); - double lthreshold = config.getValue<double>("lthreshold"); - double uthreshold = config.getValue<double>("uthreshold"); - vector<float> voxelDeltaX = config.getVector<float>("voxelDeltaX"); - vector<int> blocknx = config.getVector<int>("blocknx"); - double u_LB = config.getValue<double>("u_LB"); - double restartStep = config.getValue<double>("restartStep"); - double cpStep = config.getValue<double>("cpStep"); - double cpStart = config.getValue<double>("cpStart"); - double endTime = config.getValue<double>("endTime"); - double outTime = config.getValue<double>("outTime"); - double availMem = config.getValue<double>("availMem"); - bool rawFile = config.getValue<bool>("rawFile"); - bool logToFile = config.getValue<bool>("logToFile"); - bool writeSample = config.getValue<bool>("writeSample"); - vector<double> pmL = config.getVector<double>("pmL"); - double deltaXfine = config.getValue<double>("deltaXfine"); - int refineLevel = config.getValue<int>("refineLevel"); - bool thinWall = config.getValue<bool>("thinWall"); - double Re = config.getValue<double>("Re"); - double channelHigh = config.getValue<double>("channelHigh"); - bool changeQs = config.getValue<bool>("changeQs"); - double timeAvStart = config.getValue<double>("timeAvStart"); - double timeAvStop = config.getValue<double>("timeAvStop"); - bool averaging = config.getValue<bool>("averaging"); - bool averagingReset = config.getValue<bool>("averagingReset"); - bool newStart = config.getValue<bool>("newStart"); - vector<double> nupsStep = config.getVector<double>("nupsStep"); - vector<double> boundingBox = config.getVector<double>("boundingBox"); - - SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - if (logToFile) - { -#if defined(__unix__) - if (myid == 0) - { - const char* str = pathOut.c_str(); - mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); - } -#endif - - if (myid == 0) - { - stringstream logFilename; - logFilename << pathOut + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - } - - //Sleep(30000); - - if (myid == 0) UBLOG(logINFO, "Testcase porous channel"); - - SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter()); - - const int baseLevel = 0; - double deltaXcoarse = deltaXfine*(double)(1<<refineLevel); - - LBMReal rho_LB = 0.0; - double rhoReal = 1.2041; //(kg/m3) - double uReal = 48; //m/s - double lReal = 0.008;//m - double hLB = lReal / deltaXcoarse; - double Ma = 0.13;//Ma-Real! - double csReal = uReal / Ma; - LBMUnitConverter unitConverter(lReal, csReal, rhoReal, hLB); - if (myid==0) UBLOG(logINFO, unitConverter.toString()); - - //double coord[6]; - - vector<double> origin(3); - origin[0] = 0; - origin[1] = 0; - origin[2] = 0; - - //real velocity is 49.63 m/s - - SPtr<Grid3D> grid(new Grid3D(comm)); - - //BC adapters - SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter()); - noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm())); - - BoundaryConditionsBlockVisitor bcVisitor; - bcVisitor.addBC(noSlipBCAdapter); - - SPtr<BCProcessor> bcProc; - bcProc = SPtr<BCProcessor>(new BCProcessor()); - - SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel()); - - mu::Parser fctForcingX1; - fctForcingX1.SetExpr("Fx1"); - fctForcingX1.DefineConst("Fx1", 1.0e-6); - kernel->setWithForcing(true); - - kernel->setBCProcessor(bcProc); - - ////////////////////////////////////////////////////////////////////////// - //restart - SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStart)); - SPtr<MPIIORestartCoProcessor> restartCoProcessor(new MPIIORestartCoProcessor(grid, rSch, pathOut, comm)); - restartCoProcessor->setLBMKernel(kernel); - restartCoProcessor->setBCProcessor(bcProc); - - SPtr<UbScheduler> mSch(new UbScheduler(cpStep, cpStart)); - SPtr<MPIIOMigrationCoProcessor> migCoProcessor(new MPIIOMigrationCoProcessor(grid, mSch, pathOut+"/mig", comm)); - migCoProcessor->setLBMKernel(kernel); - migCoProcessor->setBCProcessor(bcProc); - ////////////////////////////////////////////////////////////////////////// - - //bounding box - double g_minX1 = boundingBox[0]; - double g_minX2 = boundingBox[1]; - double g_minX3 = boundingBox[2]; - - double g_maxX1 = boundingBox[3]; - double g_maxX2 = boundingBox[4]; - double g_maxX3 = boundingBox[5]; - - double blockLength = (double)blocknx[0]*deltaXcoarse; - - double channel_high = channelHigh; // g_maxX3-g_minX3; - double channel_high_LB = channel_high/deltaXcoarse; - ////////////////////////////////////////////////////////////////////////// - double nu_LB = (u_LB*channel_high_LB)/Re; - ////////////////////////////////////////////////////////////////////////// - if (myid == 0) - { - UBLOG(logINFO, "Parameters:"); - UBLOG(logINFO, "Re = " << Re); - UBLOG(logINFO, "u_LB = " << u_LB); - UBLOG(logINFO, "rho_LB = " << rho_LB); - UBLOG(logINFO, "nu_LB = " << nu_LB); - UBLOG(logINFO, "dx coarse = " << deltaXcoarse << " m"); - UBLOG(logINFO, "dx fine = " << deltaXfine << " m"); - UBLOG(logINFO, "channel_high = " << channel_high << " m"); - UBLOG(logINFO, "channel_high_LB = " << channel_high_LB); - UBLOG(logINFO, "number of levels = " << refineLevel + 1); - UBLOG(logINFO, "number of processes = " << comm->getNumberOfProcesses()); - UBLOG(logINFO, "number of threads = " << numOfThreads); - UBLOG(logINFO, "path = " << pathOut); - UBLOG(logINFO, "Preprocess - start"); - } - - - if (newStart) - { - if (myid == 0) UBLOG(logINFO, "new start..."); - - - - grid->setPeriodicX1(true); - grid->setPeriodicX2(true); - grid->setPeriodicX3(false); - grid->setDeltaX(deltaXcoarse); - grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - - SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); - if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathOut + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); - - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - - ////////////////////////////////////////////////////////////////////////// - //refinement - double blockLengthX3Fine = grid->getDeltaX(refineLevel) * blocknx[2]; - double refHight = 0.002; - - GbCuboid3DPtr refineBoxTop(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3-refHight, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3)); - if (myid == 0) GbSystem3D::writeGeoObject(refineBoxTop.get(), pathOut + "/geo/refineBoxTop", WbWriterVtkXmlASCII::getInstance()); - - //GbCuboid3DPtr refineBoxBottom(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3+offsetMinX3+blockLengthX3Fine)); - GbCuboid3DPtr refineBoxBottom(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3+refHight)); - if (myid == 0) GbSystem3D::writeGeoObject(refineBoxBottom.get(), pathOut + "/geo/refineBoxBottom", WbWriterVtkXmlASCII::getInstance()); - - if (refineLevel > 0) - { - if (myid == 0) UBLOG(logINFO, "Refinement - start"); - RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel, comm); - refineHelper.addGbObject(refineBoxTop, refineLevel); - refineHelper.addGbObject(refineBoxBottom, refineLevel); - refineHelper.refine(); - if (myid == 0) UBLOG(logINFO, "Refinement - end"); - } - ////////////////////////////////////////////////////////////////////////// - - //walls - GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathOut+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathOut+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance()); - - - //wall interactors - SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, noSlipBCAdapter, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - //////////////////////////////////////////// - //METIS - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::KWAY)); - //////////////////////////////////////////// - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - intHelper.addInteractor(addWallZminInt); - intHelper.addInteractor(addWallZmaxInt); - intHelper.selectBlocks(); - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end"); - ////////////////////////////////////// - - { - WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathOut, WbWriterVtkXmlBinary::getInstance(), comm); - ppblocks.process(0); - } - - 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"); - } - - - SetKernelBlockVisitor kernelVisitor(kernel, nu_LB, availMem, needMem); - grid->accept(kernelVisitor); - - ////////////////////////////////// - //undef nodes for refinement - if (refineLevel > 0) - { - SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - - //BC - intHelper.setBC(); - - ////porous media - if (true) - { - string samplePathname = pathGeo + "/" + sampleFilename; - - SPtr<GbVoxelMatrix3D> sample(new GbVoxelMatrix3D(pmNX[0], pmNX[1], pmNX[2], 0, lthreshold, uthreshold)); - if (rawFile) - { - sample->readBufferedMatrixFromRawFile<unsigned short>(samplePathname, GbVoxelMatrix3D::BigEndian); - } - else - { - sample->readMatrixFromVtiASCIIFile(samplePathname); - } - - sample->setVoxelMatrixDelta(voxelDeltaX[0], voxelDeltaX[1], voxelDeltaX[2]); - sample->setVoxelMatrixMininum(origin[0], origin[1], origin[2]); - - changePorosity(sample, pmNX); - - sample->writeToLegacyVTKBinary(pathOut+"/geo/sample.vtk"); - return; - - int bounceBackOption = 1; - bool vxFile = false; - int i = 0; - //for (int x = 0; x < lengthFactor; x+=2) - int lenX = (int)((g_maxX1-g_minX1)/(pmL[0])); - int lenY = (int)((g_maxX2-g_minX2)/(pmL[1])); - - for (int y = 0; y < lenY; y+=2) - for (int x = 0; x < lenX; x+=2) - { - double offsetX = pmL[0] * (double)x; - double offsetY = pmL[1] * (double)y; - //sample 0 - if (myid == 0) UBLOG(logINFO, "sample # " << i); - sample->setVoxelMatrixMininum(origin[0]+offsetX, origin[1]+offsetY, origin[2]); - Utilities::voxelMatrixDiscretisation(sample, pathOut, myid, i, grid, bounceBackOption, vxFile); - i++; - - if (myid == 0) - { - UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()/1073741824.0<<" GB"); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()/1073741824.0<<" GB"); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - - //sample 1 - if (myid == 0) UBLOG(logINFO, "sample # " << i); - sample->setVoxelMatrixMininum(origin[0]+pmL[0]+offsetX, origin[1]+offsetY, origin[2]); - sample->mirrorX(); - Utilities::voxelMatrixDiscretisation(sample, pathOut, myid, i, grid, bounceBackOption, vxFile); - i++; - - if (myid == 0) - { - UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()/1073741824.0<<" GB"); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()/1073741824.0<<" GB"); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()/1073741824.0<<" GB"); - } - - //sample 2 - if (myid == 0) UBLOG(logINFO, "sample # " << i); - sample->setVoxelMatrixMininum(origin[0]+pmL[0]+offsetX, origin[1]+pmL[1]+offsetY, origin[2]); - sample->mirrorY(); - Utilities::voxelMatrixDiscretisation(sample, pathOut, myid, i, grid, bounceBackOption, vxFile); - i++; - - if (myid == 0) - { - UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()/1073741824.0<<" GB"); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()/1073741824.0<<" GB"); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - } - - //sample 3 - if (myid == 0) UBLOG(logINFO, "sample # " << i); - sample->setVoxelMatrixMininum(origin[0]+offsetX, origin[1]+pmL[1]+offsetY, origin[2]); - sample->mirrorX(); - Utilities::voxelMatrixDiscretisation(sample, pathOut, myid, i, grid, bounceBackOption, vxFile); - sample->mirrorY(); - i++; - } - - } - - grid->accept(bcVisitor); - - mu::Parser inflowProfileVx1, inflowProfileVx2, inflowProfileVx3, inflowProfileRho; - inflowProfileVx1.SetExpr("x3 < h ? 0.0 : uLB+1*x1"); - inflowProfileVx1.DefineConst("uLB", u_LB); - inflowProfileVx1.DefineConst("h", pmL[2]); - - InitDistributionsBlockVisitor initVisitor; - initVisitor.setVx1(inflowProfileVx1); - grid->accept(initVisitor); - - ////set connectors - InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator()); - SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor); - grid->accept(setConnsVisitor); - - //domain decomposition for threads - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - //Postrozess - { - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - WriteBoundaryConditionsCoProcessor ppgeo(grid, geoSch, pathOut, WbWriterVtkXmlBinary::getInstance(), comm); - ppgeo.process(0); - } - - if (myid == 0) UBLOG(logINFO, "Preprozess - end"); - } - else - { - //restartCoProcessor->restart((int)restartStep); - migCoProcessor->restart((int)restartStep); - grid->setTimeStep(restartStep); - //////////////////////////////////////////////////////////////////////////// - InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor); - grid->accept(setConnsVisitor); - - grid->accept(bcVisitor); - - if (myid == 0) UBLOG(logINFO, "Restart - end"); - } - - SPtr<UbScheduler> nupsSch(new UbScheduler(nupsStep[0], nupsStep[1], nupsStep[2])); - std::shared_ptr<NUPSCounterCoProcessor> nupsCoProcessor(new NUPSCounterCoProcessor(grid, nupsSch, numOfThreads, comm)); - - SPtr<UbScheduler> stepSch(new UbScheduler(outTime)); - - SPtr<WriteMacroscopicQuantitiesCoProcessor> writeMQCoProcessor(new WriteMacroscopicQuantitiesCoProcessor(grid, stepSch, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - - SPtr<GbObject3D> bbBox(new GbCuboid3D(g_minX1-blockLength, (g_maxX2-g_minX2)/2.0, g_minX3-blockLength, g_maxX1+blockLength, (g_maxX2-g_minX2)/2.0+deltaXcoarse, g_maxX3+blockLength)); - if (myid==0) GbSystem3D::writeGeoObject(bbBox.get(), pathOut+"/geo/bbBox", WbWriterVtkXmlASCII::getInstance()); - SPtr<WriteMQFromSelectionCoProcessor> writeMQSelectCoProcessor(new WriteMQFromSelectionCoProcessor(grid, stepSch, bbBox, pathOut, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - - - SPtr<UbScheduler> AdjForcSch(new UbScheduler()); - AdjForcSch->addSchedule(10, 0, 10000000); - SPtr<IntegrateValuesHelper> intValHelp(new IntegrateValuesHelper(grid, comm, g_minX1, g_minX2, g_minX3+pmL[2], g_maxX1, g_maxX2, g_maxX3)); - if (myid == 0) GbSystem3D::writeGeoObject(intValHelp->getBoundingBox().get(), pathOut + "/geo/IntValHelp", WbWriterVtkXmlBinary::getInstance()); - - double vxTarget=u_LB; - SPtr<AdjustForcingCoProcessor> AdjForcCoProcessor(new AdjustForcingCoProcessor(grid, AdjForcSch, pathOut, intValHelp, vxTarget, comm)); - - //mu::Parser decrViscFunc; - //decrViscFunc.SetExpr("nue0+c0/(t+1)/(t+1)"); - //decrViscFunc.DefineConst("nue0", nu_LB*4.0); - //decrViscFunc.DefineConst("c0", 0.1); - //SPtr<UbScheduler> DecrViscSch(new UbScheduler()); - //DecrViscSch->addSchedule(10, 0, 1000); - //DecreaseViscosityCoProcessor decrViscPPPtr(grid, DecrViscSch, &decrViscFunc, comm); - - //if (changeQs) - //{ - // double z1 = pmL[2]; - // SPtr<IntegrateValuesHelper> intValHelp2(new IntegrateValuesHelper(grid, comm, - // coord[0], coord[1], z1 - deltaXfine, - // coord[3], coord[4], z1 + deltaXfine)); - // if (myid == 0) GbSystem3D::writeGeoObject(intValHelp2->getBoundingBox().get(), pathOut + "/geo/intValHelp2", WbWriterVtkXmlBinary::getInstance()); - // Utilities::ChangeRandomQs(intValHelp2); - //} - - std::vector<double> levelCoords; - std::vector<int> levels; - std::vector<double> bounds; - //bounds.push_back(0); - //bounds.push_back(0); - //bounds.push_back(0); - //bounds.push_back(0.004); - //bounds.push_back(0.002); - //bounds.push_back(0.003); - //levels.push_back(1); - //levels.push_back(0); - //levels.push_back(1); - //levelCoords.push_back(0); - //levelCoords.push_back(0.0016); - //levelCoords.push_back(0.0024); - //levelCoords.push_back(0.003); - bounds.push_back(0); - bounds.push_back(0); - bounds.push_back(0); - bounds.push_back(0.004); - bounds.push_back(0.002); - bounds.push_back(0.002); - levels.push_back(0); - levelCoords.push_back(0); - levelCoords.push_back(0.002); - //SPtr<UbScheduler> tavSch(new UbScheduler(1, timeAvStart, timeAvStop)); - //SPtr<CoProcessor> tav(new TimeAveragedValuesCoProcessor(grid, pathOut, WbWriterVtkXmlBinary::getInstance(), tavSch, comm, - // TimeAveragedValuesCoProcessor::Velocity | TimeAveragedValuesCoProcessor::Fluctuations | TimeAveragedValuesCoProcessor::Triplecorrelations, - // levels, levelCoords, bounds)); - - - //create line time series - SPtr<UbScheduler> tpcSch(new UbScheduler(1, 1, 3)); - //GbPoint3DPtr p1(new GbPoint3D(0.0,0.005,0.01)); - //GbPoint3DPtr p2(new GbPoint3D(0.064,0.005,0.01)); - //SPtr<GbLine3D> line(new GbLine3D(p1.get(),p2.get())); - SPtr<GbLine3D> line(new GbLine3D(new GbPoint3D(0.0, 0.005, 0.01), new GbPoint3D(0.064, 0.005, 0.01))); - LineTimeSeriesCoProcessor lineTs(grid, tpcSch, pathOut+"/TimeSeries/line1.csv", line, 0, comm); - if (myid==0) lineTs.writeLine(pathOut+"/geo/line1"); - - if (myid == 0) - { - UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - } - - //omp_set_num_threads(numOfThreads); - numOfThreads = 4; - SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1)); - SPtr<Calculator> calculator(new BasicCalculator(grid, stepGhostLayer, (int)endTime)); - calculator->addCoProcessor(nupsCoProcessor); - calculator->addCoProcessor(AdjForcCoProcessor); - calculator->addCoProcessor(migCoProcessor); - //calculator->addCoProcessor(restartCoProcessor); - calculator->addCoProcessor(writeMQSelectCoProcessor); - calculator->addCoProcessor(writeMQCoProcessor); - - if (myid == 0) UBLOG(logINFO, "Simulation-start"); - calculator->calculate(); - if (myid == 0) UBLOG(logINFO, "Simulation-end"); - } - catch (exception& e) - { - cerr << e.what() << endl << flush; - } - catch (string& s) - { - cerr << s << endl; - } - catch (mu::Parser::exception_type &e) - { - std::cout << e.GetMsg() << std::endl; - } - catch (...) - { - cerr << "unknown exception" << endl; - } - -} -////////////////////////////////////////////////////////////////////////// -int main(int argc, char* argv[]) -{ - - if (argv != NULL) - { - if (argv[1] != NULL) - { - run(string(argv[1])); - } - else - { - cout << "Configuration file is missing!" << endl; - } - } - - return 0; -} diff --git a/apps/cpu/pChannel/pChannel.cpp.hlrn b/apps/cpu/pChannel/pChannel.cpp.hlrn deleted file mode 100644 index 812566c96d046cf9da9b72bd388ce0696224df7b..0000000000000000000000000000000000000000 --- a/apps/cpu/pChannel/pChannel.cpp.hlrn +++ /dev/null @@ -1,729 +0,0 @@ -#include <iostream> -#include <string> -#include "VirtualFluids.h" - - - -//#include <thread> - -using namespace std; - -////////////////////////////////////////////////////////////////////////// -void run(string configname) -{ - try - { - vf::basics::ConfigurationFile config; - config.load(configname); - - string pathname = config.getString("pathname"); - string pathGeo = config.getString("pathGeo"); - int numOfThreads = config.getInt("numOfThreads"); - string sampleFilename = config.getString("sampleFilename"); - vector<int> pmNX = config.getVector<int>("pmNX"); - double lthreshold = config.getDouble("lthreshold"); - double uthreshold = config.getDouble("uthreshold"); - vector<float> voxelDeltaX = config.getVector<float>("voxelDeltaX"); - vector<int> blocknx = config.getVector<int>("blocknx"); - double u_LB = config.getDouble("u_LB"); - double restartStep = config.getDouble("restartStep"); - double restartStepStart = config.getDouble("restartStepStart"); - double endTime = config.getDouble("endTime"); - double outTime = config.getDouble("outTime"); - double availMem = config.getDouble("availMem"); - bool rawFile = config.getBool("rawFile"); - bool logToFile = config.getBool("logToFile"); - bool writeSample = config.getBool("writeSample"); - vector<double> pmL = config.getVector<double>("pmL"); - double deltaXfine = config.getDouble("deltaXfine"); - int refineLevel = config.getInt("refineLevel"); - bool thinWall = config.getBool("thinWall"); - double Re = config.getDouble("Re"); - double channelHigh = config.getDouble("channelHigh"); - double lengthFactor = config.getDouble("lengthFactor"); - double forcing = config.getDouble("forcing"); - bool changeQs = config.getBool("changeQs"); - double timeAvStart = config.getDouble("timeAvStart"); - double timeAvStop = config.getDouble("timeAvStop"); - bool averaging = config.getBool("averaging"); - bool averagingReset = config.getBool("averagingReset"); - double nupsSteps = config.getDouble("nupsSteps"); - double timeLineTsStart = config.getDouble("timeLineTsStart"); - double timeLineTsStop = config.getDouble("timeLineTsStop"); - - - CommunicatorPtr comm = vf::parallel::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); - - if (myid == 0) UBLOG(logINFO, "Testcase porous channel"); - - LBMReal rho_LB = 0.0; - - LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - - const int baseLevel = 0; - double deltaXcoarse = deltaXfine*(double)(1<<refineLevel); - - double coord[6]; - bool restart; - - vector<double> origin(3); - origin[0] = 0; - origin[1] = 0; - origin[2] = 0; - - //real velocity is 49.63 m/s - double nu_LB; - - Grid3DPtr grid(new Grid3D(comm)); - - ////////////////////////////////////////////////////////////////////////// - //restart - UbSchedulerPtr rSch(new UbScheduler(restartStep, restartStepStart)); - RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::BINARY); - ////////////////////////////////////////////////////////////////////////// - - if (grid->getTimeStep() == 0) - { - if (myid == 0) UBLOG(logINFO, "new start..."); - restart = false; - - double offsetMinX3 = pmL[2]; - - double offsetMaxX1 = pmL[0]*lengthFactor; - double offsetMaxX2 = pmL[1]*2.0; - double offsetMaxX3 = pmL[2] + channelHigh; //DLR-F15 //pmL[2]*2.0; - - //bounding box - double g_minX1 = origin[0]; - double g_minX2 = origin[1]; - double g_minX3 = origin[2]; - - double g_maxX1 = origin[0] + offsetMaxX1; - double g_maxX2 = origin[1] + offsetMaxX2; - double g_maxX3 = origin[2] + offsetMaxX3; -////////////////////////////////////////////////////////////////////////// - double nx1_temp = floor((g_maxX1-g_minX1) /(deltaXcoarse*(double)blocknx[0])); - - deltaXcoarse = (g_maxX1-g_minX1) /(nx1_temp*(double)blocknx[0]); - - g_maxX1 -= 0.5* deltaXcoarse; -////////////////////////////////////////////////////////////////////////// - double blockLength = (double)blocknx[0]*deltaXcoarse; - - grid->setPeriodicX1(true); - grid->setPeriodicX2(true); - grid->setPeriodicX3(false); - grid->setDeltaX(deltaXcoarse); - grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - - 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()); - - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - double channel_high = channelHigh; // g_maxX3-g_minX3; - double channel_high_LB = channel_high/deltaXcoarse; -////////////////////////////////////////////////////////////////////////// - //nu_LB = 0.005; - nu_LB = (u_LB*channel_high_LB)/Re; -////////////////////////////////////////////////////////////////////////// - if (myid == 0) - { - UBLOG(logINFO, "Parameters:"); - UBLOG(logINFO, "Re = " << Re); - UBLOG(logINFO, "u_LB = " << u_LB); - UBLOG(logINFO, "rho_LB = " << rho_LB); - UBLOG(logINFO, "nu_LB = " << nu_LB); - UBLOG(logINFO, "dx coarse = " << deltaXcoarse << " m"); - UBLOG(logINFO, "dx fine = " << grid->getDeltaX(refineLevel) << " m"); - UBLOG(logINFO, "number of levels = " << refineLevel + 1); - UBLOG(logINFO, "number of processes = " << comm->getNumberOfProcesses()); - UBLOG(logINFO, "number of threads = " << numOfThreads); - UBLOG(logINFO, "path = " << pathname); - UBLOG(logINFO, "Preprocess - start"); - } - - ////////////////////////////////////////////////////////////////////////// - //refinement - double blockLengthX3Fine = grid->getDeltaX(refineLevel) * blocknx[2]; - - GbCuboid3DPtr refineBoxTop(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3-blockLengthX3Fine, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(refineBoxTop.get(), pathname + "/geo/refineBoxTop", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr refineBoxBottom(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3+offsetMinX3+blockLengthX3Fine)); - //GbCuboid3DPtr refineBoxBottom(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLengthX3Fine, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3+blockLengthX3Fine)); - if (myid == 0) GbSystem3D::writeGeoObject(refineBoxBottom.get(), pathname + "/geo/refineBoxBottom", WbWriterVtkXmlASCII::getInstance()); - - if (refineLevel > 0) - { - if (myid == 0) UBLOG(logINFO, "Refinement - start"); - RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel); - refineHelper.addGbObject(refineBoxTop, refineLevel); - refineHelper.addGbObject(refineBoxBottom, refineLevel); - refineHelper.refine(); - if (myid == 0) UBLOG(logINFO, "Refinement - end"); - } - ////////////////////////////////////////////////////////////////////////// - - //walls - GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance()); - - - //wall interactors - int bbOption = 1; - D3Q27BoundaryConditionAdapterPtr bcNoSlip(new D3Q27NoSlipBCAdapter(bbOption)); - D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, bcNoSlip, Interactor3D::SOLID)); - D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, bcNoSlip, Interactor3D::SOLID)); - - //////////////////////////////////////////////// - //TEST - //GbObject3DPtr testCube(new GbCuboid3D(g_minX1 + 2.0 * blockLength, g_minX2 + 2.0 * blockLength, g_minX3 + 5.0 * blockLength, - // g_minX1 + 3.0 * blockLength, g_minX2 + 3.0 * blockLength, g_minX3 + 6.0 * blockLength)); - //if (myid == 0) GbSystem3D::writeGeoObject(testCube.get(), pathname + "/geo/testCube", WbWriterVtkXmlBinary::getInstance()); - //D3Q27InteractorPtr testCubeInt(new D3Q27Interactor(testCube, grid, bcNoSlip, Interactor3D::SOLID)); - /////////////////////////////////////////////// - - //////////////////////////////////////////// - //METIS - Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::KWAY)); - //////////////////////////////////////////// - //Zoltan - //Grid3DVisitorPtr zoltanVisitor(new ZoltanPartitioningGridVisitor(comm, D3Q27System::BSW, 1)); - //grid->accept(zoltanVisitor); - /////delete solid blocks - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - intHelper.addInteractor(addWallZminInt); - intHelper.addInteractor(addWallZmaxInt); - ////////////////////////////////////////////////////////////////////////// - //TEST - //intHelper.addInteractor(testCubeInt); - ////////////////////////////////////////////////////////////////////////// - intHelper.selectBlocks(); - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end"); - ////////////////////////////////////// - - WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - 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"); - } - - LBMKernel3DPtr kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL)); - - mu::Parser fctForcingX1; - fctForcingX1.SetExpr("Fx1"); - fctForcingX1.DefineConst("Fx1", 1.0e-6); - - kernel->setWithForcing(true); - - BCProcessorPtr bcProc; - BoundaryConditionPtr noSlipBC; - - if (thinWall) - { - bcProc = BCProcessorPtr(new D3Q27ETForThinWallBCProcessor()); - noSlipBC = BoundaryConditionPtr(new ThinWallNoSlipBoundaryCondition()); - } - else - { - bcProc = BCProcessorPtr(new D3Q27ETBCProcessor()); - noSlipBC = BoundaryConditionPtr(new NoSlipBoundaryCondition()); - } - - bcProc->addBC(noSlipBC); - - kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nu_LB, availMem, needMem); - grid->accept(kernelVisitor); - - ////////////////////////////////// - //undef nodes for refinement - if (refineLevel > 0) - { - D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - - //BC - intHelper.setBC(); - - ////porous media - { - string samplePathname = pathGeo + "/" + sampleFilename; - - GbVoxelMatrix3DPtr sample(new GbVoxelMatrix3D(pmNX[0], pmNX[1], pmNX[2], 0, lthreshold, uthreshold)); - if (rawFile) - { - sample->readBufferedMatrixFromRawFile<unsigned short>(samplePathname, GbVoxelMatrix3D::BigEndian); - } - else - { - sample->readMatrixFromVtiASCIIFile(samplePathname); - } - - sample->setVoxelMatrixDelta(voxelDeltaX[0], voxelDeltaX[1], voxelDeltaX[2]); - sample->setVoxelMatrixMininum(origin[0], origin[1], origin[2]); - - int bounceBackOption = 1; - bool vxFile = false; - int i = 0; - for (int x = 0; x < lengthFactor; x+=2) - { - double offset = pmL[0] * (double)x; - //sample 0 - if (myid == 0) UBLOG(logINFO, "sample # " << i); - sample->setVoxelMatrixMininum(origin[0]+offset, origin[1], origin[2]); - Utilities::voxelMatrixDiscretisation(sample, pathname, myid, i, grid, bounceBackOption, vxFile); - i++; - - if (myid == 0) - { - UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - } - - //sample 1 - if (myid == 0) UBLOG(logINFO, "sample # " << i); - sample->setVoxelMatrixMininum(origin[0]+pmL[0]+offset, origin[1], origin[2]); - sample->mirrorX(); - Utilities::voxelMatrixDiscretisation(sample, pathname, myid, i, grid, bounceBackOption, vxFile); - i++; - - if (myid == 0) - { - UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - } - - //sample 2 - if (myid == 0) UBLOG(logINFO, "sample # " << i); - sample->setVoxelMatrixMininum(origin[0]+pmL[0]+offset, origin[1]+pmL[1], origin[2]); - sample->mirrorY(); - Utilities::voxelMatrixDiscretisation(sample, pathname, myid, i, grid, bounceBackOption, vxFile); - i++; - - if (myid == 0) - { - UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - } - - //sample 3 - if (myid == 0) UBLOG(logINFO, "sample # " << i); - sample->setVoxelMatrixMininum(origin[0]+offset, origin[1]+pmL[1], origin[2]); - sample->mirrorX(); - Utilities::voxelMatrixDiscretisation(sample, pathname, myid, i, grid, bounceBackOption, vxFile); - sample->mirrorY(); - i++; - } - - } - BoundaryConditionBlockVisitor bcVisitor; - grid->accept(bcVisitor); - - mu::Parser inflowProfile; - inflowProfile.SetExpr("x3 < h ? 0.0 : uLB+1*x1-1*x2"); - //inflowProfile.SetExpr("uLB+1*x1-1*x2"); - //inflowProfile.SetExpr("uLB"); - inflowProfile.DefineConst("uLB", u_LB); - inflowProfile.DefineConst("h", pmL[2]); - - D3Q27ETInitDistributionsBlockVisitor initVisitor(nu_LB, rho_LB); - initVisitor.setVx1(inflowProfile); - //initVisitor.setVx1(u_LB); - grid->accept(initVisitor); - - ////set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor); - grid->accept(setConnsVisitor); - - //domain decomposition for threads - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - //Postrozess - UbSchedulerPtr geoSch(new UbScheduler(1)); - MacroscopicQuantitiesCoProcessorPtr ppgeo( - new MacroscopicQuantitiesCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, true)); - ppgeo->process(0); - ppgeo.reset(); - - coord[0] = g_minX1; - coord[1] = g_minX2; - coord[2] = g_minX3; - coord[3] = g_maxX1; - coord[4] = g_maxX2; - coord[5] = g_maxX3; - - //////////////////////////////////////////////////////// - FILE * pFile; - string str = pathname + "/checkpoints/coord.txt"; - pFile = fopen(str.c_str(), "w"); - fprintf(pFile, "%g\n", deltaXcoarse); - fprintf(pFile, "%g\n", nu_LB); - fprintf(pFile, "%g\n", coord[0]); - fprintf(pFile, "%g\n", coord[1]); - fprintf(pFile, "%g\n", coord[2]); - fprintf(pFile, "%g\n", coord[3]); - fprintf(pFile, "%g\n", coord[4]); - fprintf(pFile, "%g\n", coord[5]); - fclose(pFile); - //////////////////////////////////////////////////////// - - if (myid == 0) UBLOG(logINFO, "Preprozess - end"); - } - else - { - //////////////////////////////////////////////////////// - FILE * pFile; - string str = pathname + "/checkpoints/coord.txt"; - pFile = fopen(str.c_str(), "r"); - fscanf(pFile, "%lg\n", &deltaXcoarse); - fscanf(pFile, "%lg\n", &nu_LB); - fscanf(pFile, "%lg\n", &coord[0]); - fscanf(pFile, "%lg\n", &coord[1]); - fscanf(pFile, "%lg\n", &coord[2]); - fscanf(pFile, "%lg\n", &coord[3]); - fscanf(pFile, "%lg\n", &coord[4]); - fscanf(pFile, "%lg\n", &coord[5]); - fclose(pFile); - //////////////////////////////////////////////////////// - - if (myid == 0) - { - UBLOG(logINFO, "Parameters:"); - UBLOG(logINFO, "Re = " << Re); - UBLOG(logINFO, "u_LB = " << u_LB); - UBLOG(logINFO, "rho_LB = " << rho_LB); - UBLOG(logINFO, "nu_LB = " << nu_LB); - UBLOG(logINFO, "dx coarse = " << deltaXcoarse << " m"); - UBLOG(logINFO, "dx fine = " << grid->getDeltaX(refineLevel) << " m"); - UBLOG(logINFO, "number of levels = " << refineLevel + 1); - UBLOG(logINFO, "numOfThreads = " << numOfThreads); - UBLOG(logINFO, "path = " << pathname); - } - - ///////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////////////// - //bounding box -// double offsetMinX3 = pmL[2]; -// -// double offsetMaxX1 = pmL[0]*lengthFactor; -// double offsetMaxX2 = pmL[1]*2.0; -// double offsetMaxX3 = channelHigh; -// -// double g_minX1 = origin[0]; -// double g_minX2 = origin[1]; -// double g_minX3 = origin[2]; -// -// double g_maxX1 = origin[0]+offsetMaxX1; -// double g_maxX2 = origin[1]+offsetMaxX2; -// double g_maxX3 = origin[2]+offsetMaxX3; -// -// double blockLength = (double)blocknx[0]*deltaXcoarse; -// -// GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3+offsetMinX3)); -// if (myid==0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); -// int bbOption = 1; -// D3Q27BoundaryConditionAdapterPtr bcNoSlip(new D3Q27NoSlipBCAdapter(bbOption)); -// D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, bcNoSlip, Interactor3D::SOLID)); -// -// SetSolidOrTransBlockVisitor v1(addWallZminInt, SetSolidOrTransBlockVisitor::SOLID); -// grid->accept(v1); -// SetSolidOrTransBlockVisitor v2(addWallZminInt, SetSolidOrTransBlockVisitor::TRANS); -// grid->accept(v2); -// -// std::vector<Block3DPtr> blocks; -// std::vector<Block3DPtr>& sb = addWallZminInt->getSolidBlockSet(); -// if (myid==0) UBLOG(logINFO, "number of solid blocks = "<<sb.size()); -// blocks.insert(blocks.end(), sb.begin(), sb.end()); -// std::vector<Block3DPtr>& tb = addWallZminInt->getTransBlockSet(); -// if (myid==0) UBLOG(logINFO, "number of trans blocks = "<<tb.size()); -// blocks.insert(blocks.end(), tb.begin(), tb.end()); -// -// if (myid==0) UBLOG(logINFO, "number of blocks = "<<blocks.size()); -// -// BOOST_FOREACH(Block3DPtr block, blocks) -// { -// block->setActive(true); -// addWallZminInt->setDifferencesToGbObject3D(block); -// } -// -// ////////////////////////////////////////////// -// ////METIS -// //Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::KWAY)); -// ////////////////////////////////////////////// -// ///////delete solid blocks -// //if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - start"); -// //InteractorsHelper intHelper(grid, metisVisitor); -// //intHelper.addInteractor(addWallZminInt); -// //intHelper.selectBlocks(); -// //if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - end"); -// //////////////////////////////////////// -// //intHelper.setBC(); -// ////////////////////////////////////////////////////////////// -// -// BoundaryConditionBlockVisitor bcVisitor; -// grid->accept(bcVisitor); -// -// WriteBlocksCoProcessorPtr ppblocks(new WriteBlocksCoProcessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); -// ppblocks->process(0); -// ppblocks.reset(); -// -// UbSchedulerPtr geoSch(new UbScheduler(1)); -// MacroscopicQuantitiesCoProcessorPtr ppgeo( -// new MacroscopicQuantitiesCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, true)); -// ppgeo->process(0); -// ppgeo.reset(); - //////////////////////////////////////////////////////////////// - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor); - grid->accept(setConnsVisitor); - - restart = true; - - if (myid == 0) UBLOG(logINFO, "Restart - end"); - } - UbSchedulerPtr nupsSch(new UbScheduler(nupsSteps)); - NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); - - UbSchedulerPtr stepSch(new UbScheduler(outTime)); - - MacroscopicQuantitiesCoProcessor pp(grid, stepSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv); - - double startStep = grid->getTimeStep(); - - //UbSchedulerPtr visSch(new UbScheduler()); - //visSch->addSchedule(40000,40000,40000000); - //UbSchedulerPtr resSchRMS(new UbScheduler()); - //resSchRMS->addSchedule(40000, startStep, 40000000); - //UbSchedulerPtr resSchMeans(new UbScheduler()); - //resSchMeans->addSchedule(40000, startStep, 40000000); - //UbSchedulerPtr stepAvSch(new UbScheduler()); - //stepAvSch->addSchedule(100, 0, 10000000); - //AverageValuesPostprocessor Avpp(grid, pathname, WbWriterVtkXmlBinary::getInstance(), - // stepSch/*wann wird rausgeschrieben*/, stepAvSch/*wann wird gemittelt*/, resSchMeans, resSchRMS/*wann wird resettet*/, restart); - - - UbSchedulerPtr AdjForcSch(new UbScheduler()); - AdjForcSch->addSchedule(10, 0, 10000000); - D3Q27IntegrateValuesHelperPtr intValHelp(new D3Q27IntegrateValuesHelper(grid, comm, - coord[0], coord[1], coord[2], - coord[3], coord[4], coord[5])); - if (myid == 0) GbSystem3D::writeGeoObject(intValHelp->getBoundingBox().get(), pathname + "/geo/IntValHelp", WbWriterVtkXmlBinary::getInstance()); - - double vxTarget=u_LB; - AdjustForcingCoProcessor AdjForcPPPtr(grid, AdjForcSch, pathname, intValHelp, vxTarget, comm); - - //mu::Parser decrViscFunc; - //decrViscFunc.SetExpr("nue0+c0/(t+1)/(t+1)"); - //decrViscFunc.DefineConst("nue0", nu_LB*4.0); - //decrViscFunc.DefineConst("c0", 0.1); - //UbSchedulerPtr DecrViscSch(new UbScheduler()); - //DecrViscSch->addSchedule(10, 0, 1000); - //DecreaseViscosityPostprocessor decrViscPPPtr(grid, DecrViscSch, &decrViscFunc, comm); - - //if (changeQs) - //{ - // double z1 = pmL[2]; - // D3Q27IntegrateValuesHelperPtr intValHelp2(new D3Q27IntegrateValuesHelper(grid, comm, - // coord[0], coord[1], z1 - deltaXfine, - // coord[3], coord[4], z1 + deltaXfine)); - // if (myid == 0) GbSystem3D::writeGeoObject(intValHelp2->getBoundingBox().get(), pathname + "/geo/intValHelp2", WbWriterVtkXmlBinary::getInstance()); - // Utilities::ChangeRandomQs(intValHelp2); - //} - - std::vector<double> levelCoords; - std::vector<int> levels; - std::vector<double> bounds; - bounds.push_back(0); - bounds.push_back(0); - bounds.push_back(1e-3); - bounds.push_back(0.064); - bounds.push_back(0.008); - bounds.push_back(0.018); - levels.push_back(3); - levels.push_back(2); - levels.push_back(1); - levels.push_back(0); - levels.push_back(1); - levels.push_back(2); - levels.push_back(3); - levelCoords.push_back(0); - levelCoords.push_back(0.0016-6.0*deltaXfine); - levelCoords.push_back(0.0016); - levelCoords.push_back(0.0024-6.0*deltaXfine*2.0); - levelCoords.push_back(0.0024); - levelCoords.push_back(0.0048-6.0*deltaXfine*4.0); - levelCoords.push_back(0.0048); - levelCoords.push_back(0.0144); - levelCoords.push_back(0.0144+6.0*deltaXfine*4.0); - levelCoords.push_back(0.0168); - levelCoords.push_back(0.0168+6.0*deltaXfine*2.0); - levelCoords.push_back(0.0176); - levelCoords.push_back(0.0176+6.0*deltaXfine); - levelCoords.push_back(0.018); - UbSchedulerPtr tavSch(new UbScheduler(1, timeAvStart, timeAvStop)); - TimeAveragedValuesCoProcessorPtr tav(new TimeAveragedValuesCoProcessor(grid, pathname, WbWriterVtkXmlBinary::getInstance(), tavSch, comm, - TimeAveragedValuesCoProcessor::Velocity | TimeAveragedValuesCoProcessor::Fluctuations | TimeAveragedValuesCoProcessor::Triplecorrelations//)); - ,levels, levelCoords, bounds, false)); - if (averagingReset) - { - tav->reset(); - } - //UbSchedulerPtr catalystSch(new UbScheduler(1)); - //InSituCatalystCoProcessor catalyst(grid, catalystSch, "pchannel.py"); - - UbSchedulerPtr exitSch(new UbScheduler(10)); - EmergencyExitCoProcessor exitCoProc(grid, exitSch, pathname, RestartCoProcessorPtr(&rp), comm); - - //create line time series - UbSchedulerPtr tpcSch(new UbScheduler(1,timeLineTsStart,timeLineTsStop)); - - GbLine3DPtr line1(new GbLine3D(new GbPoint3D(0.0,0.004,0.00078),new GbPoint3D(0.064,0.004,0.00078))); - LineTimeSeriesCoProcessor lineTs1(grid, tpcSch,pathname+"/TimeSeries/line1.csv",line1, 3,comm); - if (myid==0) lineTs1.writeLine(pathname+"/geo/line1"); - - GbLine3DPtr line2(new GbLine3D(new GbPoint3D(0.0,0.004,0.001+deltaXfine*8.0),new GbPoint3D(0.064,0.004,0.001+deltaXfine*8.0))); - LineTimeSeriesCoProcessor lineTs2(grid, tpcSch,pathname+"/TimeSeries/line2.csv",line2, 3,comm); - if (myid==0) lineTs2.writeLine(pathname+"/geo/line2"); - - GbLine3DPtr line3(new GbLine3D(new GbPoint3D(0.03,0.0,0.00078),new GbPoint3D(0.03,0.008,0.00078))); - LineTimeSeriesCoProcessor lineTs3(grid, tpcSch,pathname+"/TimeSeries/line3.csv",line3, 3,comm); - if (myid==0) lineTs3.writeLine(pathname+"/geo/line3"); - - GbLine3DPtr line4(new GbLine3D(new GbPoint3D(0.03,0.0,0.001+deltaXfine*8.0),new GbPoint3D(0.03,0.008,0.001+deltaXfine*8.0))); - LineTimeSeriesCoProcessor lineTs4(grid, tpcSch,pathname+"/TimeSeries/line4.csv",line4, 3,comm); - if (myid==0) lineTs4.writeLine(pathname+"/geo/line4"); - - GbLine3DPtr line5(new GbLine3D(new GbPoint3D(0.0,0.004,0.002),new GbPoint3D(0.064,0.004,0.002))); - LineTimeSeriesCoProcessor lineTs5(grid, tpcSch,pathname+"/TimeSeries/line5.csv",line5,2,comm); - if (myid==0) lineTs5.writeLine(pathname+"/geo/line5"); - - GbLine3DPtr line6(new GbLine3D(new GbPoint3D(0.0,0.004,0.0035),new GbPoint3D(0.064,0.004,0.0035))); - LineTimeSeriesCoProcessor lineTs6(grid, tpcSch,pathname+"/TimeSeries/line6.csv",line6,1,comm); - if (myid==0) lineTs6.writeLine(pathname+"/geo/line6"); - - GbLine3DPtr line7(new GbLine3D(new GbPoint3D(0.0,0.004,0.009),new GbPoint3D(0.064,0.004,0.009))); - LineTimeSeriesCoProcessor lineTs7(grid, tpcSch,pathname+"/TimeSeries/line7.csv",line7,0,comm); - if (myid==0) lineTs7.writeLine(pathname+"/geo/line7"); - - GbLine3DPtr line8(new GbLine3D(new GbPoint3D(0.0,0.004,0.015),new GbPoint3D(0.064,0.004,0.015))); - LineTimeSeriesCoProcessor lineTs8(grid, tpcSch,pathname+"/TimeSeries/line8.csv",line8,1,comm); - if (myid==0) lineTs8.writeLine(pathname+"/geo/line8"); - - GbLine3DPtr line9(new GbLine3D(new GbPoint3D(0.0,0.004,0.017),new GbPoint3D(0.064,0.004,0.017))); - LineTimeSeriesCoProcessor lineTs9(grid, tpcSch,pathname+"/TimeSeries/line9.csv",line9,2,comm); - if (myid==0) lineTs9.writeLine(pathname+"/geo/line9"); - - GbLine3DPtr line10(new GbLine3D(new GbPoint3D(0.0,0.004,0.018-deltaXfine*14.0),new GbPoint3D(0.064,0.004,0.018-deltaXfine*14.0))); - LineTimeSeriesCoProcessor lineTs10(grid, tpcSch,pathname+"/TimeSeries/line10.csv",line10,3,comm); - if (myid==0) lineTs10.writeLine(pathname+"/geo/line10"); - - if (myid == 0) - { - UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - } - - CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, stepSch)); - if (averaging) - { - calculation->setTimeAveragedValuesCoProcessor(tav); - } - if (myid == 0) UBLOG(logINFO, "Simulation-start"); - calculation->calculate(); - if (myid == 0) UBLOG(logINFO, "Simulation-end"); - } - catch (exception& e) - { - cerr << e.what() << endl << flush; - } - catch (string& s) - { - cerr << s << endl; - } - catch (...) - { - cerr << "unknown exception" << endl; - } - -} -////////////////////////////////////////////////////////////////////////// -int main(int argc, char* argv[]) -{ - - if (argv != NULL) - { - if (argv[1] != NULL) - { - run(string(argv[1])); - } - else - { - cout << "Configuration file is missing!" << endl; - } - } - - return 0; -} diff --git a/apps/cpu/pChannel/pchannel.py b/apps/cpu/pChannel/pchannel.py deleted file mode 100644 index a32efd60f157bc13a5fa6351a910f42405ee546c..0000000000000000000000000000000000000000 --- a/apps/cpu/pChannel/pchannel.py +++ /dev/null @@ -1,85 +0,0 @@ -try: paraview.simple -except: from paraview.simple import * - -from paraview import coprocessing - - -#-------------------------------------------------------------- -# Code generated from cpstate.py to create the CoProcessor. - - -# ----------------------- CoProcessor definition ----------------------- - -def CreateCoProcessor(): - def _CreatePipeline(coprocessor, datadescription): - class Pipeline: - filename_3_pvtu = coprocessor.CreateProducer( datadescription, "input" ) - - #~ Slice1 = Slice( guiName="Slice1", Crinkleslice=0, SliceOffsetValues=[0.0], Triangulatetheslice=1, SliceType="Plane" ) - #~ Slice1.SliceType.Offset = 0.0 - #~ Slice1.SliceType.Origin = [34.5, 32.45, 27.95] - #~ Slice1.SliceType.Normal = [1.0, 0.0, 0.0] -#~ - #~ ParallelPolyDataWriter1 = coprocessor.CreateWriter( XMLPPolyDataWriter, "slice_%t.pvtp", 10 ) - - SetActiveSource(filename_3_pvtu) - #~ ParallelUnstructuredGridWriter1 = coprocessor.CreateWriter( XMLPUnstructuredGridWriter, "fullgrid_%t.pvtu", 100 ) - - return Pipeline() - - class CoProcessor(coprocessing.CoProcessor): - def CreatePipeline(self, datadescription): - self.Pipeline = _CreatePipeline(self, datadescription) - - coprocessor = CoProcessor() - freqs = {'input': [10, 100]} - coprocessor.SetUpdateFrequencies(freqs) - return coprocessor - -#-------------------------------------------------------------- -# Global variables that will hold the pipeline for each timestep -# Creating the CoProcessor object, doesn't actually create the ParaView pipeline. -# It will be automatically setup when coprocessor.UpdateProducers() is called the -# first time. -coprocessor = CreateCoProcessor() - -#-------------------------------------------------------------- -# Enable Live-Visualizaton with ParaView -coprocessor.EnableLiveVisualization(True) - - -# ---------------------- Data Selection method ---------------------- - -def RequestDataDescription(datadescription): - "Callback to populate the request for current timestep" - global coprocessor - if datadescription.GetForceOutput() == True: - # We are just going to request all fields and meshes from the simulation - # code/adaptor. - for i in range(datadescription.GetNumberOfInputDescriptions()): - datadescription.GetInputDescription(i).AllFieldsOn() - datadescription.GetInputDescription(i).GenerateMeshOn() - return - - # setup requests for all inputs based on the requirements of the - # pipeline. - coprocessor.LoadRequestedData(datadescription) - -# ------------------------ Processing method ------------------------ - -def DoCoProcessing(datadescription): - "Callback to do co-processing for current timestep" - global coprocessor - - # Update the coprocessor by providing it the newly generated simulation data. - # If the pipeline hasn't been setup yet, this will setup the pipeline. - coprocessor.UpdateProducers(datadescription) - - # Write output data, if appropriate. - coprocessor.WriteData(datadescription); - - # Write image capture (Last arg: rescale lookup table), if appropriate. - coprocessor.WriteImages(datadescription, rescale_lookuptable=False) - - # Live Visualization, if enabled. - coprocessor.DoLiveVisualization(datadescription, "localhost", 22222) diff --git a/apps/cpu/pDisk/CMakeLists.txt b/apps/cpu/pDisk/CMakeLists.txt deleted file mode 100644 index 96e8db4cf640ca05b12093e572e474a87cabf046..0000000000000000000000000000000000000000 --- a/apps/cpu/pDisk/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(pDisk) - -INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(pdisk BINARY) diff --git a/apps/cpu/pDisk/configBombadilPdisk.cfg b/apps/cpu/pDisk/configBombadilPdisk.cfg deleted file mode 100644 index 95df549a4712d46c93b3d656b758c83dbff4fdc5..0000000000000000000000000000000000000000 --- a/apps/cpu/pDisk/configBombadilPdisk.cfg +++ /dev/null @@ -1,36 +0,0 @@ -# -#Simulation parameters for porous disk -# - -pathname = d:/temp/pDisk -pathGeo = d:/Data/PorousDisk -numOfThreads = 1 -availMem = 3e9 -logToFile = false - -#geometry -diskFilename = PorousDiskDR.stl -mastFilename = Mast.stl - -#grid -fineNodeDx = 10 # 0.3 / 0.2 -blocknx = 16 16 16 -refineLevel = 2 -geoLength = 5000 2000 2000 - -#physic -Re = 6.66e4 -u_LB = 0.01 -rho_LB = 0.0 - -#averaging -restart = false -averaging = false - -restartStep = 20000 -restartStepStart=20000 - -endTime = 60000 -outTime = 100 - - diff --git a/apps/cpu/pDisk/configHlrnPorousDisk.cfg b/apps/cpu/pDisk/configHlrnPorousDisk.cfg deleted file mode 100644 index da50c9dac4ef4c61a782e57c7e941e7650a9fd3b..0000000000000000000000000000000000000000 --- a/apps/cpu/pDisk/configHlrnPorousDisk.cfg +++ /dev/null @@ -1,36 +0,0 @@ -# -#Simulation parameters for porous disk -# - -pathname = /gfs1/work/niikonst/scratch/pDisk -pathGeo = /gfs1/work/niikonst/data/PorousDisk -numOfThreads = 24 -availMem = 128e9 -logToFile = true - -#geometry -diskFilename = PorousDiskD2.stl -mastFilename = Mast.stl - -#grid -fineNodeDx = 1.9 -blocknx = 16 16 16 -refineLevel = 4 -geoLength = 5000 2000 2000 - -#physic -Re = 6.66e4 -u_LB = 0.01 -rho_LB = 0.0 - -#averaging -restart = false -averaging = false - -restartStep = 10000 -restartStepStart=10000 - -outTime = 10000 - -endTime = 100000 - diff --git a/apps/cpu/pDisk/pdisk.cpp b/apps/cpu/pDisk/pdisk.cpp deleted file mode 100644 index fed4f38b64eb8fa8471fc9e0c389fe40f77ffd4a..0000000000000000000000000000000000000000 --- a/apps/cpu/pDisk/pdisk.cpp +++ /dev/null @@ -1,427 +0,0 @@ - - -#include <iostream> -#include <string> -#include <math.h> - -#include <vfluids.h> - -using namespace std; - - -void run(string configname) -{ - try - { - Configuration config; - config.load(configname); - - string pathname = config.getString("pathname"); - string pathGeo = config.getString("pathGeo"); - int numOfThreads = config.getInt("numOfThreads"); - string diskFilename = config.getString("diskFilename"); - string mastFilename = config.getString("mastFilename"); - vector<int> blocknx = config.getVector<int>("blocknx"); - double restartStep = config.getDouble("restartStep"); - double restartStepStart = config.getDouble("restartStepStart"); - double endTime = config.getDouble("endTime"); - double outTime = config.getDouble("outTime"); - double availMem = config.getDouble("availMem"); - bool logToFile = config.getBool("logToFile"); - vector<double> geoLength = config.getVector<double>("geoLength"); - int refineLevel = config.getInt("refineLevel"); - double Re = config.getDouble("Re"); - double u_LB = config.getDouble("u_LB"); - double rho_LB = config.getDouble("rho_LB"); - double fineNodeDx = config.getDouble("fineNodeDx"); - bool restart = config.getBool("restart"); - bool averaging = config.getBool("averaging"); - - //UbLog::reportingLevel() = logDEBUG5; - - CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - -#if defined(__unix__) - if (myid==0) - { - const char* str = pathname.c_str(); - int status=mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); - } -#endif - - if(myid == 0 && logToFile) - { - stringstream logFilename; - logFilename << pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - - if(myid==0) UBLOG(logINFO,"Test case: porous disk"); - - int baseLevel = 0; - - double coarseNodeDx = fineNodeDx * (double)(1<<refineLevel);//geowerte - - double blockLengthx1 = blocknx[0]*coarseNodeDx; //geowerte - double blockLengthx2 = blockLengthx1; - double blockLengthx3 = blockLengthx1; - - bool periodicx1 = false; - bool periodicx2 = true; - bool periodicx3 = false; - - int sizeSP= (int)(500.0/coarseNodeDx); //500 mm sponge layer - mu::Parser spongeLayer; - spongeLayer.SetExpr("x1>=(sizeX-sizeSP)/dt ? (sizeX-x1)/sizeSP/2.0 + 0.5 : 1.0"); - spongeLayer.DefineConst("sizeX", 5000.0/coarseNodeDx); - spongeLayer.DefineConst("sizeSP", sizeSP); - - //########################################################################## - //## physical parameters - //########################################################################## - double nu_LB = (u_LB*(geoLength[2]/coarseNodeDx))/Re; - - LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter()); - - Grid3DPtr grid(new Grid3D(comm)); - - ////////////////////////////////////////////////////////////////////////// - //restart - UbSchedulerPtr rSch(new UbScheduler(restartStep, restartStepStart)); - RestartPostprocessor rp(grid, rSch, comm, pathname, RestartPostprocessor::BINARY); - ////////////////////////////////////////////////////////////////////////// - - - - if (grid->getTimeStep() == 0) - { - if (myid==0) UBLOG(logINFO, "new start.."); - - if (myid==0) UBLOG(logINFO, "load geometry start"); - GbTriFaceMesh3DPtr geoMast(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+mastFilename, "mast")); - if (myid == 0) GbSystem3D::writeGeoObject(geoMast.get(), pathname + "/geo/geoMast", WbWriterVtkXmlBinary::getInstance()); - - GbTriFaceMesh3DPtr geoDisk(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo+"/"+diskFilename, "disk")); - if (myid == 0) GbSystem3D::writeGeoObject(geoDisk.get(), pathname + "/geo/geoDisk", WbWriterVtkXmlBinary::getInstance()); - if (myid==0) UBLOG(logINFO, "load geometry end"); - - //bounding box - double g_minX1 = geoMast->getX1Centroid() - 2000.0; - double g_minX2 = geoMast->getX2Centroid() - 1000.0; - double g_minX3 = geoMast->getX3Minimum(); - - double g_maxX1 = g_minX1 + geoLength[0]; - double g_maxX2 = g_minX2 + geoLength[1]; - double g_maxX3 = g_minX3 + geoLength[2]; - - double nx1_temp = floor((g_maxX2-g_minX2) /(coarseNodeDx*(double)blocknx[1])); - - coarseNodeDx = (g_maxX2-g_minX2) /(nx1_temp*(double)blocknx[1]); - - fineNodeDx = coarseNodeDx / (double)(1<<refineLevel); - - //set grid - grid->setDeltaX(coarseNodeDx); - grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - grid->setPeriodicX1(periodicx1); - grid->setPeriodicX2(periodicx2); - grid->setPeriodicX3(periodicx3); - - - 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", WbWriterVtkXmlASCII::getInstance()); - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - ////////////////////////////////////////////////////////////////////////// - if (myid == 0) - { - UBLOG(logINFO, "*****************************************"); - UBLOG(logINFO, "* Parameters *"); - UBLOG(logINFO, "* Re = "<<Re); - UBLOG(logINFO, "* nu_LB = "<<nu_LB); - UBLOG(logINFO, "* u_LB = "<<u_LB); - UBLOG(logINFO, "* cdx = "<<coarseNodeDx<<" mm"); - UBLOG(logINFO, "* fdx = "<<fineNodeDx<<" mm"); - UBLOG(logINFO, "* nx1/2/3 = "<<grid->getNX1()<<"/"<<grid->getNX2()<<"/"<<grid->getNX3()); - UBLOG(logINFO, "* blocknx1/2/3 = "<<blocknx[0]<<"/"<<blocknx[1]<<"/"<<blocknx[2]); - UBLOG(logINFO, "* x1Periodic = "<<periodicx1); - UBLOG(logINFO, "* x2Periodic = "<<periodicx2); - UBLOG(logINFO, "* x3Periodic = "<<periodicx3); - UBLOG(logINFO, "* number of levels = "<<refineLevel+1); - UBLOG(logINFO, "* path = "<<pathname); - - UBLOG(logINFO, "*****************************************"); - UBLOG(logINFO, "* number of threads = "<<numOfThreads); - UBLOG(logINFO, "* number of processes = "<<comm->getNumberOfProcesses()); - UBLOG(logINFO, "*****************************************"); - //UBLOGML(logINFO, "UnitConverter:"<<unitConverter->toString()); - //UBLOG(logINFO, "*****************************************"); - } - - ////walls - GbCuboid3DPtr addWallYmin(new GbCuboid3D(g_minX1-blockLengthx1, g_minX2-blockLengthx1, g_minX3-blockLengthx1, g_maxX1+blockLengthx1, g_minX2, g_maxX3+blockLengthx1)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname+"/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallYmax(new GbCuboid3D(g_minX1-blockLengthx1, g_maxX2, g_minX3-blockLengthx1, g_maxX1+blockLengthx1, g_maxX2+blockLengthx1, g_maxX3+blockLengthx1)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1 - blockLengthx1, g_minX2 - blockLengthx1, g_minX3 - blockLengthx1, g_maxX1 + blockLengthx1, g_maxX2 + blockLengthx1, g_minX3)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname + "/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1 - blockLengthx1, g_minX2 - blockLengthx1, g_maxX3, g_maxX1 + blockLengthx1, g_maxX2 + blockLengthx1, g_maxX3 + blockLengthx1)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname + "/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance()); - - int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr bcNoSlip(new D3Q27NoSlipBCAdapter(bbOption)); - D3Q27InteractorPtr addWallYminInt(new D3Q27Interactor(addWallYmin, grid, bcNoSlip, Interactor3D::SOLID)); - D3Q27InteractorPtr addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, bcNoSlip, Interactor3D::SOLID)); - D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, bcNoSlip, Interactor3D::SOLID)); - D3Q27BoundaryConditionAdapterPtr bcSlip(new D3Q27SlipBCAdapter()); - D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, bcSlip, Interactor3D::SOLID)); - - D3Q27TriFaceMeshInteractorPtr mastInt(new D3Q27TriFaceMeshInteractor(geoMast, grid, bcNoSlip, Interactor3D::SOLID, Interactor3D::POINTS)); - D3Q27TriFaceMeshInteractorPtr diskInt(new D3Q27TriFaceMeshInteractor(geoDisk, grid, bcNoSlip, Interactor3D::SOLID, Interactor3D::POINTS)); - - //inflow - GbCuboid3DPtr geoInflow(new GbCuboid3D(g_minX1-blockLengthx1, g_minX2-blockLengthx1, g_minX3-blockLengthx1, g_minX1, g_maxX2+blockLengthx1, g_maxX3+blockLengthx1)); - if (myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname + "/geo/geoInflow", WbWriterVtkXmlASCII::getInstance()); - D3Q27InteractorPtr inflowInt(new D3Q27Interactor(geoInflow, grid, Interactor3D::SOLID)); - - //inflow - mu::Parser inflowProfile; - //inflowProfile.SetExpr("u_ref*(((x3+Z_ref)/Z_ref)^a)"); - inflowProfile.SetExpr("u_ref"); - inflowProfile.DefineConst("u_ref", u_LB); - inflowProfile.DefineConst("Z_ref", 300.0); - inflowProfile.DefineConst("a", 0.143); - - D3Q27BoundaryConditionAdapterPtr velBCAdapter = D3Q27BoundaryConditionAdapterPtr(new D3Q27VelocityBCAdapter(true, false, false, inflowProfile, 0, D3Q27BCFunction::INFCONST)); - inflowInt->addBCAdapter(velBCAdapter); - - //outflow - GbCuboid3DPtr geoOutflow(new GbCuboid3D(g_maxX1, g_minX2-blockLengthx1, g_minX3-blockLengthx1, g_maxX1+blockLengthx1, g_maxX2+blockLengthx1, g_maxX3+blockLengthx1)); - if (myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname + "/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); - D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rho_LB)); - D3Q27InteractorPtr outflowInt(new D3Q27Interactor(geoOutflow, grid, denBCAdapter, Interactor3D::SOLID)); - - { - if (myid == 0) UBLOG(logINFO, "Write blocks - start"); - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - if (myid == 0) - ppblocks->update(0); - if (myid == 0) UBLOG(logINFO, "Write blocks - end"); - } - //////////////////////////////////////////// - //METIS - Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B)); - - ////////////////////////////////////////////////////////////////////////// - //refinement - double diameter = geoDisk->getLengthX2(); - GbCuboid3DPtr refineDiskBox(new GbCuboid3D(geoDisk->getX1Centroid()-0.2*diameter, geoDisk->getX2Centroid()-0.6*diameter, geoDisk->getX3Minimum()-diameter, - geoDisk->getX1Centroid() + 1.0*diameter, geoDisk->getX2Centroid()+0.6*diameter, geoDisk->getX3Maximum() + 0.05*diameter)); - if (myid == 0) GbSystem3D::writeGeoObject(refineDiskBox.get(), pathname + "/geo/refineDiskBox", WbWriterVtkXmlASCII::getInstance()); - - if (refineLevel > 0) - { - if(myid == 0) UBLOG(logINFO,"Refinement - start"); - RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel); - refineHelper.addGbObject(refineDiskBox, refineLevel); - refineHelper.refine(); - if(myid == 0) UBLOG(logINFO,"Refinement - end"); - } - - { - if (myid == 0) UBLOG(logINFO, "Write blocks - start"); - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - if (myid == 0) - ppblocks->update(1); - if (myid == 0) UBLOG(logINFO, "Write blocks - end"); - } - //////////////////////////////////////////// - /////delete solid blocks - if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - intHelper.addInteractor(mastInt); - intHelper.addInteractor(diskInt); - //intHelper.addInteractor(addWallYminInt); - //intHelper.addInteractor(addWallYmaxInt); - intHelper.addInteractor(addWallZminInt); - intHelper.addInteractor(addWallZmaxInt); - intHelper.addInteractor(outflowInt); - intHelper.addInteractor(inflowInt); - intHelper.selectBlocks(); - if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end"); - ////////////////////////////////////// - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nodb = (blocknx[0])* (blocknx[1])* (blocknx[2]); - unsigned long nod = nob * (blocknx[0])* (blocknx[1])* (blocknx[2]); - unsigned long nodg = nob * (blocknx[0] + gl) * (blocknx[1] + gl) * (blocknx[2] + gl); - double needMemAll = double(nodg*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - if (myid == 0) - { - UBLOG(logINFO, "Number of blocks = " << nob); - UBLOG(logINFO, "Number of nodes = " << nod); - 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*nodb); - } - UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); - } - - //////////////////////////// - LBMKernel3DPtr kernel; - //kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL)); - //with sponge layer - kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLBWithSpongeLayer(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL)); - kernel->setWithSpongeLayer(true); - kernel->setSpongeLayer(spongeLayer); - - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - BoundaryConditionPtr densityBC(new NonEqDensityBoundaryCondition()); - BoundaryConditionPtr noSlipBC(new NoSlipBoundaryCondition()); - BoundaryConditionPtr velocityBC(new VelocityBoundaryCondition()); - BoundaryConditionPtr slipBC(new SlipBoundaryCondition()); - - bcProc->addBC(densityBC); - bcProc->addBC(noSlipBC); - bcProc->addBC(velocityBC); - bcProc->addBC(slipBC); - kernel->setBCProcessor(bcProc); - SetKernelBlockVisitor kernelVisitor(kernel, nu_LB, availMem, needMem); - grid->accept(kernelVisitor); - ////////////////////////////////// - //undef nodes - if (refineLevel > 0) - { - D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - ////////////////////////////////////////// - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor); - grid->accept( setConnsVisitor ); - - //domain decomposition for threads - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - intHelper.setBC(); - - BoundaryConditionBlockVisitor bcVisitor; - grid->accept(bcVisitor); - - //initialization of decompositions - D3Q27ETInitDistributionsBlockVisitor initVisitor( nu_LB,rho_LB); - //initVisitor.setVx1(inflowProfile); - initVisitor.setVx1(u_LB); - grid->accept(initVisitor); - - //Postprozess - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), - unitConverter, true)); - ppgeo->update(0); - ppgeo.reset(); - geoSch.reset(); - - if(myid == 0) UBLOG(logINFO,"Preprozess - end"); - } - else - { - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor); - grid->accept( setConnsVisitor ); - //domain decomposition for threads - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - //SetSpongeLayerBlockVisitor ssp(spongeLayer); - //grid->accept(ssp); - if(myid == 0) UBLOG(logINFO,"Restart - end"); - } - UbSchedulerPtr visSch(new UbScheduler(outTime)); - - double startStep = 80000; - - if (averaging) - { - UbSchedulerPtr resSchRMS(new UbScheduler()); - resSchRMS->addSchedule(100000, 80000, 10000000); - UbSchedulerPtr resSchMeans(new UbScheduler()); - resSchMeans->addSchedule(100000, 80000, 10000000); - UbSchedulerPtr stepAvSch(new UbScheduler()); - int averageInterval=100; - stepAvSch->addSchedule(averageInterval, 0, 10000000); - - AverageValuesPostprocessor Avpp(grid, pathname, WbWriterVtkXmlBinary::getInstance(), - visSch/*wann wird rausgeschrieben*/, stepAvSch/*wann wird gemittelt*/, resSchMeans, resSchRMS/*wann wird resettet*/, restart); - } - - D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), unitConverter); - - UbSchedulerPtr nupsSch(new UbScheduler(10, 10, 30)); - nupsSch->addSchedule(1000, 1000, 1000000000); - NUPSCounterPostprocessor npr(grid, nupsSch, numOfThreads, comm); - - if(myid == 0) - { - UBLOG(logINFO,"PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - UBLOG(logINFO,"PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - UBLOG(logINFO,"PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - } - - //double endTime = 80001; - 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[]) -{ - - if (argv != NULL) - { - if (argv[1] != NULL) - { - run(string(argv[1])); - } - else - { - cout << "Configuration file is missing!" << endl; - } - } - - return 0; -} - diff --git a/apps/cpu/perm/CMakeLists.txt b/apps/cpu/perm/CMakeLists.txt deleted file mode 100644 index 108fa0857c2482ab0fdecb3b250c9b1f66934706..0000000000000000000000000000000000000000 --- a/apps/cpu/perm/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(perm) - -INCLUDE(${APPS_ROOT}/IncludsList.cmake) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(perm BINARY) diff --git a/apps/cpu/perm/config.txt b/apps/cpu/perm/config.txt deleted file mode 100644 index 01be8321c2dbd99bd6ab7cc578577ecd7c9bda9f..0000000000000000000000000000000000000000 --- a/apps/cpu/perm/config.txt +++ /dev/null @@ -1,41 +0,0 @@ -pathname = /gfs1/work/niikonst/scratch/permAlu -pathGeo = /gfs1/work/niikonst/data/materials -numOfTreads = 24 - -#poroeses Medium - -sampleFilename = alu_80-110.vti - -#Diminsion in Voxel -pmNX1 = 1096 -pmNX2 = 1327 -pmNX3 = 1265 - -#Threshold -lthreshold = 29041 -uthreshold = 65535 - -#Diminsion in m -pmL1 = 4e-3 -pmL2 = 5e-3 -pmL3 = 5e-3 - -dp_LB = 0.01 - -#for Re=2 -nu_LB = 0.02 - -#for Re=100 -#nu_LB = 0.0004 - -#nu -= nuFactor*simNumber -#coefficient for nu (0.02-0.0004)/10 -nuFactor = 0.00196 -#simulation number -simNumber = 1 - -restartStep = 20000 -#immer 40000 pro Job -endTime = 140000 -outTime = 20000 -nupsStep = 10 80010 80100 \ No newline at end of file diff --git a/apps/cpu/perm/configBombadil.txt b/apps/cpu/perm/configBombadil.txt deleted file mode 100644 index 93229b8465de908ecdf62aa29c1d7433a11b3f76..0000000000000000000000000000000000000000 --- a/apps/cpu/perm/configBombadil.txt +++ /dev/null @@ -1,34 +0,0 @@ -pathname = d:/temp/perm2 -pathGeo = d:/Projects/SFB880/GeometrienPoroeseMedien/Alu_80-110 -numOfTreads = 4 - -#poroeses Medium - -sampleFilename = /alu_80-110.vti - -#Diminsion in Voxel -pmNX1 = 200 -pmNX2 = 200 -pmNX3 = 200 - -#Threshold -lthreshold = 29041 -uthreshold = 65535 - -#Diminsion in m -pmL1 = 0.726e-3 -pmL2 = 0.75e-3 -pmL3 = 0.786e-3 - -#dp_LB = 1e-9 -dp_LB = 1e-1 -nu_LB = 2e-5 - -timeSeriesOut = /timeseries/simAlu80_5 - -restartStep = 300 -restartStepStart = 300 -#immer 40000 pro Job -endTime = 140000 -outTime = 10 -nupsStep = 10 80010 80100 \ No newline at end of file diff --git a/apps/cpu/perm/configBombadil2.txt b/apps/cpu/perm/configBombadil2.txt deleted file mode 100644 index 1d6cdc954f0a9f7965c3e2595a55d86759a10ac0..0000000000000000000000000000000000000000 --- a/apps/cpu/perm/configBombadil2.txt +++ /dev/null @@ -1,36 +0,0 @@ -pathname = d:/temp/perm -pathGeo = d:/Projects/SFB880/GeometrienPoroeseMedien/Alu_80-110 -numOfTreads = 4 - -#poroeses Medium - -sampleFilename = /alu_80-110.vti - -#Diminsion in Voxel -pmNX1 = 200 -pmNX2 = 200 -pmNX3 = 200 - -#Threshold -lthreshold = 29041 -uthreshold = 65535 - -#Diminsion in m -pmL1 = 0.726e-3 -pmL2 = 0.75e-3 -pmL3 = 0.786e-3 - -dp_LB = 0.001 -#nu_LB = 0.168666666667 -#nu_LB = 0.168666666667e-1 -#nu_LB = 0.168666666667e-2 -#nu_LB = 0.168666666667e-3 -nu_LB = 0.168666666667e-4 - -timeSeriesOut = /timeseries/simAlu80_5 - -restartStep = 20000 -#immer 40000 pro Job -endTime = 140000 -outTime = 1000 -nupsStep = 10 80010 80100 \ No newline at end of file diff --git a/apps/cpu/perm/configBombadilSBP120s.txt b/apps/cpu/perm/configBombadilSBP120s.txt deleted file mode 100644 index adad95f0a7e50b7436801b1be21446afe72360be..0000000000000000000000000000000000000000 --- a/apps/cpu/perm/configBombadilSBP120s.txt +++ /dev/null @@ -1,42 +0,0 @@ -# -#Simulation parameters for determitatoin of permeability -#SBP120 - -pathname = d:/temp/perm -pathGeo = d:/Projects/SFB880/GeometrienPoroeseMedien/SBP120 -numOfThreads = 4 -availMem = 1.2e9 - -#porous media -rawFile = false -sampleFilename = /SPB120s_center_closed.vti - -#diminsions [voxel] -pmNX1 = 680 -pmNX2 = 689 -pmNX3 = 787 - -#threshold -lthreshold = 1 -uthreshold = 1 - -#diminsions [m] -pmL1 = 2.55e-3 -pmL2 = 2.55000278e-3 -pmL3 = 2.95125e-3 - -#grid -blocknx = 10 -nx3 = 10 - -#physic -dp_LB = 0.001 -nu_LB = 0.01 - -timeSeriesOut = /timeseries/simSBP120_1 - -restartStep = 20000 -restartStepStart=20000 - -endTime = 140000 -outTime = 1000 diff --git a/apps/cpu/perm/configBombadilSBP120s500.txt b/apps/cpu/perm/configBombadilSBP120s500.txt deleted file mode 100644 index 9e8584b98ad7e3056a35b19976bdf9724b9f1571..0000000000000000000000000000000000000000 --- a/apps/cpu/perm/configBombadilSBP120s500.txt +++ /dev/null @@ -1,50 +0,0 @@ -# -#Simulation parameters for determitatoin of permeability -#SBP120 - -pathname = d:/temp/perm -pathGeo = d:/Projects/SFB880/GeometrienPoroeseMedien/SBP120 -numOfThreads = 4 -availMem = 3e9 -logToFile = false - -#porous media -rawFile = false -sampleFilename = /SBP120s500_center_closed.vti - -#diminsions [voxel] -pmNX1 = 500 -pmNX2 = 500 -pmNX3 = 500 - -#threshold -#lthreshold = 38370 -#uthreshold = 65535 -lthreshold = 1 -uthreshold = 1 - - -#diminsions [m] -pmL1 = 1.87e-3 -pmL2 = 1.87e-3 -pmL3 = 1.87e-3 - -#grid -#blocknx = 30 -#nx3 = 5 -blocknx = 50 -nx3 = 10 -spongeLayer=true - -#physic -dp_LB = 1e-7 -nu_LB = 0.01 - -timeSeriesFile = /timeseries/simSBP120_1 -timeSeriesOutTime = 10 - -restartStep = 20000 -restartStepStart=20000 - -endTime = 60000 -outTime = 100 diff --git a/apps/cpu/perm/configHlrnAlu.txt b/apps/cpu/perm/configHlrnAlu.txt deleted file mode 100644 index 55b9bd3f2275452b85c73f1cc2ed86d5ecf43377..0000000000000000000000000000000000000000 --- a/apps/cpu/perm/configHlrnAlu.txt +++ /dev/null @@ -1,34 +0,0 @@ -pathname = /gfs1/work/niikonst/scratch/permAlu80 -pathGeo = /gfs1/work/niikonst/data/materials - -numOfTreads = 1 - -#poroeses Medium - -sampleFilename = /alu_80-110.vti - -#Diminsion in Voxel -pmNX1 = 200 -pmNX2 = 200 -pmNX3 = 200 - -#Threshold -lthreshold = 29041 -uthreshold = 65535 - -#Diminsion in m -pmL1 = 0.726e-3 -pmL2 = 0.75e-3 -pmL3 = 0.786e-3 - -dp_LB = 0.001 -nu_LB = 0.15 - -timeSeriesOut = /timeseries/simAlu80_1 - -restartStep = 20 -#immer 40000 pro Job -#endTime = 140000 -endTime = 60 -outTime = 10 -nupsStep = 10 80010 80100 \ No newline at end of file diff --git a/apps/cpu/perm/configSBP120.txt b/apps/cpu/perm/configSBP120.txt deleted file mode 100644 index 1d28d643c428b45b8ffbf6d882cc09932e08c416..0000000000000000000000000000000000000000 --- a/apps/cpu/perm/configSBP120.txt +++ /dev/null @@ -1,70 +0,0 @@ -# -#Simulation parameters for determitatoin of permeability -#SBP120 - -pathname = /beegfs/work/koskuche/perm -pathGeo = /work/koskuche/data/Permiability/isotropic -numOfThreads = 10 -availMem = 320e9 -logToFile = true - -#porous media -rawFile = true -sampleFilename = /Sinterbronze_SBP120_1358x1376x1572.raw - -#diminsions [voxel] -pmNX1 = 1358 -pmNX2 = 1376 -pmNX3 = 1572 - -#threshold -lthreshold = 38370 -uthreshold = 65535 - -#diminsions [m] -pmL1 = 5092499.73e-9 -pmL2 = 5159999.85e-9 -pmL3 = 5894999.98e-9 - -#test -######################################### -#rawFile = false -#sampleFilename = /SBP120s500_center.vti -#pmNX1 = 500 -#pmNX2 = 500 -#pmNX3 = 500 -#lthreshold = 1 -#uthreshold = 1 -#pmL1 = 0.001875 -#pmL2 = 0.001875 -#pmL3 = 0.001875 -######################################## - -writeSampleToFile = false - -#grid -blocknx = 32 -deltax = 3750e-9 - -#physic -dpLB = 1e-7 -nuLB = 0.01 - -timeSeriesFile = /timeseries/simSBP120_1 -timeSeriesOutTime = 10 - -restartStep = 20000 -restartStepStart=20000 - -newStart = true -restartStep = 31000 - -cpStep = 1000 -cpStart = 1000 - -outTimeStep = 1000 -outTimeStart = 1000 - -nupsStep = 100 100 10000000 - -endTime = 390000000 diff --git a/apps/cpu/perm/config_HLRS_SBP120.cfg b/apps/cpu/perm/config_HLRS_SBP120.cfg deleted file mode 100644 index 720302622a33d7cb8119e66c82a0992383da511e..0000000000000000000000000000000000000000 --- a/apps/cpu/perm/config_HLRS_SBP120.cfg +++ /dev/null @@ -1,43 +0,0 @@ -#HLRS -#Simulation parameters for determitatoin of permeability -#SBP120 - -pathname = /univ_1/ws1/ws/xrmkuchr-perm-0/SBP120 -pathGeo = /univ_1/ws1/ws/xrmkuchr-perm-0/SBP120/Data -numOfThreads = 24 -availMem = 128e9 -logToFile = true -#porous media -rawFile = false -sampleFilename = /Sinterbronze_SBP120_1358x1376x1572.raw - -#diminsions [voxel] -pmNX1 = 1358 -pmNX2 = 1376 -pmNX3 = 1572 - -#threshold -lthreshold = 38370 -uthreshold = 65535 - -#diminsions [m] -pmL1 = 5092499.73e-9 -pmL2 = 5159999.85e-9 -pmL3 = 5894999.98e-9 - -#grid -blocknx = 64 -nx3 = 22 - -#physic -dp_LB = 1e-7 -nu_LB = 0.01 - -timeSeriesFile = /timeseries/simSBP120_1 -timeSeriesOutTime = 100 - -restartStep = 1000 -restartStepStart=1000 - -endTime = 2000 -outTime = 1000 diff --git a/apps/cpu/perm/perm.cpp b/apps/cpu/perm/perm.cpp deleted file mode 100644 index 4ea9ac93742da1bc65cd266d028bd09bcc195811..0000000000000000000000000000000000000000 --- a/apps/cpu/perm/perm.cpp +++ /dev/null @@ -1,513 +0,0 @@ -#include <iostream> -#include <string> -#include <VirtualFluids.h> - -using namespace std; - -////////////////////////////////////////////////////////////////////////// -void perm(string configname) -{ - try - { - vf::basics::ConfigurationFile config; - config.load(configname); - - string pathname = config.getValue<string>("pathname"); - string pathGeo = config.getValue<string>("pathGeo"); - int numOfThreads = config.getValue<int>("numOfThreads"); - string sampleFilename = config.getValue<string>("sampleFilename"); - int pmNX1 = config.getValue<int>("pmNX1"); - int pmNX2 = config.getValue<int>("pmNX2"); - int pmNX3 = config.getValue<int>("pmNX3"); - double lthreshold = config.getValue<double>("lthreshold"); - double uthreshold = config.getValue<double>("uthreshold"); - double pmL1 = config.getValue<double>("pmL1"); - double pmL2 = config.getValue<double>("pmL2"); - double pmL3 = config.getValue<double>("pmL3"); - int blocknx = config.getValue<int>("blocknx"); - double dpLB = config.getValue<double>("dpLB"); - double nuLB = config.getValue<double>("nuLB"); - string timeSeriesFile = config.getValue<string>("timeSeriesFile"); - double restartStep = config.getValue<double>("restartStep"); - double restartStepStart = config.getValue<double>("restartStepStart"); - double endTime = config.getValue<double>("endTime"); - double availMem = config.getValue<double>("availMem"); - bool rawFile = config.getValue<bool>("rawFile"); - double timeSeriesOutTime = config.getValue<double>("timeSeriesOutTime"); - bool logToFile = config.getValue<bool>("logToFile"); - bool newStart = config.getValue<bool>("newStart"); - double cpStart = config.getValue<double>("cpStart"); - double cpStep = config.getValue<double>("cpStep"); - vector<double> nupsStep = config.getVector<double>("nupsStep"); - double outTimeStep = config.getValue<double>("outTimeStep"); - double outTimeStart = config.getValue<double>("outTimeStart"); - double deltax = config.getValue<double>("deltax"); - bool writeSampleToFile = config.getValue<bool>("writeSampleToFile"); - - SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - if (logToFile) - { -#if defined(__unix__) - if (myid == 0) - { - const char* str = pathname.c_str(); - int status = 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); - - if (myid == 0) UBLOG(logINFO, "Testcase permeability"); - - if (myid == 0) - { - //string machinename = UbSystem::getMachineName(); - //UBLOG(logINFO, "PID = " << myid << " Hostname: " << machinename); - UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - } - - int blocknx1 = blocknx; - int blocknx2 = blocknx; - int blocknx3 = blocknx; - - LBMReal rhoLB = 0.0; - - double rhoLBinflow = dpLB*3.0; - - SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter()); - - const int baseLevel = 0; - - double coord[6]; - - - - ///close void space - ////////////////////////////////////////////////////////////////////////// - //{ - // string samplePathname = pathGeo + sampleFilename; - - // double deltaVoxelX1 = pmL1/(double)pmNX1; - // double deltaVoxelX2 = pmL2/(double)pmNX2; - // double deltaVoxelX3 = pmL3/(double)pmNX3; - - // GbVoxelMatrix3DPtr sample(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold)); - // if (rawFile) - // { - // sample->readMatrixFromRawFile<unsigned short>(samplePathname, GbVoxelMatrix3D::BigEndian); - // } - // else - // { - // sample->readMatrixFromVtiASCIIFile(samplePathname); - // } - - // sample->setVoxelMatrixDelta((float)deltaVoxelX1, (float)deltaVoxelX2, (float)deltaVoxelX3); - // sample->setVoxelMatrixMininum(0.0, 0.0, 0.0); - - // if (myid == 0) sample->writeToVTKImageDataASCII(pathname + "/geo/sampleOpen"); - // sample->calculateNumberOfSolidAndFluid(); - // if (myid == 0) UBLOG(logINFO, "number of solid = "<<sample->getNumberOfSolid()); - // if (myid == 0) UBLOG(logINFO, "number of fluid = "<<sample->getNumberOfFluid()); - - // sample->setClosedVoidSpaceToSolid(); - - // if (myid == 0) sample->writeToVTKImageDataASCII(pathname + "/geo/sampleClosed"); - - // sample->calculateNumberOfSolidAndFluid(); - // if (myid == 0) UBLOG(logINFO, "number of solid = "<<sample->getNumberOfSolid()); - // if (myid == 0) UBLOG(logINFO, "number of fluid = "<<sample->getNumberOfFluid()); - - // UBLOG(logINFO, "Finish!"); - // return; - //} - ////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////// - //Grid - ////////////////////////////////////////////////////////////////////////// - SPtr<Grid3D> grid(new Grid3D(comm)); - - //BC adapters - SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter()); - noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new NoSlipBCAlgorithm())); - - SPtr<BCAdapter> denBCAdapterInflow(new DensityBCAdapter(rhoLBinflow)); - denBCAdapterInflow->setBcAlgorithm(SPtr<BCAlgorithm>(new NonEqDensityBCAlgorithm())); - - SPtr<BCAdapter> denBCAdapterOutflow(new DensityBCAdapter(rhoLB)); - denBCAdapterOutflow->setBcAlgorithm(SPtr<BCAlgorithm>(new NonEqDensityBCAlgorithm())); - - ////////////////////////////////////////////////////////////////////////////////// - //BS visitor - BoundaryConditionsBlockVisitor bcVisitor; - bcVisitor.addBC(noSlipBCAdapter); - bcVisitor.addBC(denBCAdapterInflow); - bcVisitor.addBC(denBCAdapterOutflow);; - - SPtr<BCProcessor> bcProc; - bcProc = SPtr<BCProcessor>(new BCProcessor()); - - SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel()); - - kernel->setBCProcessor(bcProc); - - - ////////////////////////////////////////////////////////////////////////// - //restart - SPtr<UbScheduler> mSch(new UbScheduler(cpStep, cpStart)); - SPtr<MPIIOMigrationCoProcessor> migCoProcessor(new MPIIOMigrationCoProcessor(grid, mSch, pathname+"/mig", comm)); - migCoProcessor->setLBMKernel(kernel); - migCoProcessor->setBCProcessor(bcProc); - ////////////////////////////////////////////////////////////////////////// - - if (myid == 0) - { - UBLOG(logINFO, "Parameters:"); - UBLOG(logINFO, "rhoLB = " << rhoLB); - UBLOG(logINFO, "nuLB = " << nuLB); - UBLOG(logINFO, "dpLB = " << dpLB); - UBLOG(logINFO, "dx = " << deltax << " m"); - - UBLOG(logINFO, "numOfThreads = " << numOfThreads); - UBLOG(logINFO, "path = " << pathname); - UBLOG(logINFO, "Preprozess - start"); - } - - if (newStart) - { - if (myid == 0) UBLOG(logINFO, "new start.."); - - if (myid == 0) - { - //UBLOG(logINFO, "new start PID = " << myid << " Hostname: " << machinename); - UBLOG(logINFO, "new start PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - UBLOG(logINFO, "new start PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - UBLOG(logINFO, "new start PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - } - - string samplePathname = pathGeo + sampleFilename; - - double deltaVoxelX1 = pmL1/(double)pmNX1; - double deltaVoxelX2 = pmL2/(double)pmNX2; - double deltaVoxelX3 = pmL3/(double)pmNX3; - - SPtr<GbVoxelMatrix3D> sample(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold)); - if (rawFile) - { - sample->readMatrixFromRawFile<unsigned short>(samplePathname, GbVoxelMatrix3D::BigEndian); - } - else - { - sample->readMatrixFromVtiASCIIFile(samplePathname); - } - - sample->setVoxelMatrixDelta((float)deltaVoxelX1, (float)deltaVoxelX2, (float)deltaVoxelX3); - sample->setVoxelMatrixMininum(0.0, 0.0, 0.0); - - if (myid == 0 && writeSampleToFile) sample->writeToVTKImageDataASCII(pathname + "/geo/sample"); - - /////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////// - - double offset1 = sample->getLengthX1()/10.0; - double offset2 = 2.0*offset1; - //bounding box - double g_minX1 = sample->getX1Minimum() - offset1; - double g_minX2 = sample->getX2Minimum(); - double g_minX3 = sample->getX3Minimum(); - - double g_maxX1 = sample->getX1Maximum() + offset2; - double g_maxX2 = sample->getX2Maximum(); - double g_maxX3 = sample->getX3Maximum(); - - double blockLength = (double)blocknx1*deltax; - - grid->setPeriodicX1(false); - grid->setPeriodicX2(false); - grid->setPeriodicX3(false); - grid->setDeltaX(deltax); - grid->setBlockNX(blocknx1, blocknx2, blocknx3); - - 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()); - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - //walls - GbCuboid3DPtr addWallYmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_minX2, g_maxX3+blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname+"/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallYmax(new GbCuboid3D(g_minX1-blockLength, g_maxX2, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", 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()); - - //PM interactor - SPtr<D3Q27Interactor> sampleInt(new D3Q27Interactor(sample, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - //wall interactors - SPtr<D3Q27Interactor> addWallYminInt(new D3Q27Interactor(addWallYmin, grid, noSlipBCAdapter, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> addWallZminInt(new D3Q27Interactor(addWallZmin, grid, noSlipBCAdapter, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, noSlipBCAdapter, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, noSlipBCAdapter, Interactor3D::SOLID)); - - //inflow - SPtr<D3Q27Interactor> inflowInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoInflow, grid, denBCAdapterInflow, Interactor3D::SOLID)); - - //outflow - SPtr<D3Q27Interactor> outflowInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, denBCAdapterOutflow, Interactor3D::SOLID));; - - if (myid == 0) - { - //UBLOG(logINFO, "PID = " << myid << " Hostname: " << machinename); - UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - } - - //////////////////////////////////////////// - //METIS - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B, MetisPartitioner::RECURSIVE)); - //////////////////////////////////////////// - - /////delete solid blocks - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - intHelper.addInteractor(addWallYminInt); - intHelper.addInteractor(addWallZminInt); - intHelper.addInteractor(addWallYmaxInt); - intHelper.addInteractor(addWallZmaxInt); - intHelper.addInteractor(inflowInt); - intHelper.addInteractor(outflowInt); - intHelper.addInteractor(sampleInt); - intHelper.selectBlocks(); - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end"); - ////////////////////////////////////// - - { - WriteBlocksCoProcessor ppblocks(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm); - ppblocks.process(1); - } - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nodb = (blocknx1)* (blocknx2)* (blocknx3); - unsigned long nod = nob * (blocknx1)* (blocknx2)* (blocknx3); - unsigned long nodg = nob * (blocknx1 + gl) * (blocknx2 + gl) * (blocknx3 + gl); - double needMemAll = double(nodg*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - if (myid == 0) - { - UBLOG(logINFO, "Number of blocks = " << nob); - UBLOG(logINFO, "Number of nodes = " << nod); - 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*nodb); - } - UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); - } - - - SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem); - grid->accept(kernelVisitor); - - - //BC - intHelper.setBC(); - - - //Press*1.6e8+(14.76-coordsX)/3.5*5000 - //initialization of distributions - mu::Parser fct; - fct.SetExpr("(x1max-x1)/l*dp*3.0"); - fct.DefineConst("dp", dpLB); - fct.DefineConst("x1max", g_maxX1); - fct.DefineConst("l", g_maxX1-g_minX1); - - InitDistributionsBlockVisitor initVisitor; - initVisitor.setRho(fct); - grid->accept(initVisitor); - - //Post process - { - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - WriteBoundaryConditionsCoProcessor ppgeo(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), comm); - ppgeo.process(0); - } - - coord[0] = sample->getX1Minimum(); - coord[1] = sample->getX2Minimum(); - coord[2] = sample->getX3Minimum(); - coord[3] = sample->getX1Maximum(); - coord[4] = sample->getX2Maximum(); - coord[5] = sample->getX3Maximum(); - - //////////////////////////////////////////////////////// - FILE * pFile; - string str = pathname + "/checkpoints/coord.txt"; - pFile = fopen(str.c_str(), "w"); - fprintf(pFile, "%g\n", deltax); - fprintf(pFile, "%g\n", coord[0]); - fprintf(pFile, "%g\n", coord[1]); - fprintf(pFile, "%g\n", coord[2]); - fprintf(pFile, "%g\n", coord[3]); - fprintf(pFile, "%g\n", coord[4]); - fprintf(pFile, "%g\n", coord[5]); - fclose(pFile); - //////////////////////////////////////////////////////// - - if (myid == 0) UBLOG(logINFO, "Preprozess - end"); - } - else - { - //////////////////////////////////////////////////////// - FILE * pFile; - string str = pathname + "/checkpoints/coord.txt"; - pFile = fopen(str.c_str(), "r"); - fscanf(pFile, "%lg\n", &deltax); - fscanf(pFile, "%lg\n", &coord[0]); - fscanf(pFile, "%lg\n", &coord[1]); - fscanf(pFile, "%lg\n", &coord[2]); - fscanf(pFile, "%lg\n", &coord[3]); - fscanf(pFile, "%lg\n", &coord[4]); - fscanf(pFile, "%lg\n", &coord[5]); - fclose(pFile); - //////////////////////////////////////////////////////// - - migCoProcessor->restart((int)restartStep); - grid->setTimeStep(restartStep); - - if (myid == 0) UBLOG(logINFO, "Restart - end"); - } - - ////set connectors - SPtr<Interpolator> iProcessor(new CompressibleOffsetMomentsInterpolator()); - SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - grid->accept(setConnsVisitor); - - //bcVisitor should be accept after initialization!!!! - grid->accept(bcVisitor); - if (myid == 0) UBLOG(logINFO, "grid->accept(bcVisitor):end"); - - SPtr<UbScheduler> nupsSch(new UbScheduler(nupsStep[0], nupsStep[1], nupsStep[2])); - std::shared_ptr<CoProcessor> nupsCoProcessor(new NUPSCounterCoProcessor(grid, nupsSch, numOfThreads, comm)); - - SPtr<UbScheduler> stepSch(new UbScheduler(outTimeStep, outTimeStart)); - - SPtr<CoProcessor> writeMQCoProcessor(new WriteMacroscopicQuantitiesCoProcessor(grid, stepSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - - deltax = grid->getDeltaX(baseLevel); - double dxd2 = deltax / 2.0; - - SPtr<IntegrateValuesHelper> ih1(new IntegrateValuesHelper(grid, comm, coord[0] - dxd2*10.0, coord[1] - dxd2, coord[2] - dxd2, - coord[0] - dxd2*10.0 - 2.0*dxd2, coord[4] + dxd2, coord[5] + dxd2)); - - //D3Q27IntegrateValuesHelperPtr ih2(new D3Q27IntegrateValuesHelper(grid, comm, coord[3]/2.0, coord[1] - dxd2, coord[2] - dxd2, - // coord[3]/2.0 + 2.0*dxd2, coord[4] + dxd2, coord[5] + dxd2)); - SPtr<IntegrateValuesHelper> ih2(new IntegrateValuesHelper(grid, comm, coord[0], coord[1], coord[2], coord[3], coord[4], coord[5])); - - SPtr<IntegrateValuesHelper> ih3(new IntegrateValuesHelper(grid, comm, coord[3] + dxd2*10.0, coord[1] - dxd2, coord[2] - dxd2, - coord[3] + dxd2*10.0 + 2.0*dxd2, coord[4] + dxd2, coord[5] + dxd2)); - - //D3Q27IntegrateValuesHelperPtr ih1(new D3Q27IntegrateValuesHelper(grid, comm, coord[0], coord[1], coord[2], coord[3], coord[4], coord[5])); - if (myid == 0) GbSystem3D::writeGeoObject(ih1->getBoundingBox().get(), pathname + "/geo/ih1", WbWriterVtkXmlBinary::getInstance()); - if (myid == 0) GbSystem3D::writeGeoObject(ih2->getBoundingBox().get(), pathname + "/geo/ih2", WbWriterVtkXmlBinary::getInstance()); - if (myid == 0) GbSystem3D::writeGeoObject(ih3->getBoundingBox().get(), pathname + "/geo/ih3", WbWriterVtkXmlBinary::getInstance()); - - double factorp = 1; // dp_real / dpLB; - double factorv = 1;// dx / dt; - SPtr<UbScheduler> stepMV(new UbScheduler(timeSeriesOutTime)); - - SPtr<CoProcessor> tsp1(new TimeseriesCoProcessor(grid, stepMV, ih1, pathname+timeSeriesFile+"_1", comm)); - SPtr<CoProcessor> tsp2(new TimeseriesCoProcessor(grid, stepMV, ih2, pathname+timeSeriesFile+"_2", comm)); - SPtr<CoProcessor> tsp3(new TimeseriesCoProcessor(grid, stepMV, ih3, pathname+timeSeriesFile+"_3", comm)); - - if (myid == 0) - { - UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - } - - omp_set_num_threads(numOfThreads); - SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1)); - SPtr<Calculator> calculator(new BasicCalculator(grid, stepGhostLayer, endTime)); - calculator->addCoProcessor(nupsCoProcessor); - calculator->addCoProcessor(tsp1); - calculator->addCoProcessor(tsp2); - calculator->addCoProcessor(tsp3); - calculator->addCoProcessor(writeMQCoProcessor); - calculator->addCoProcessor(migCoProcessor); - - - - if (myid==0) UBLOG(logINFO, "Simulation-start"); - calculator->calculate(); - if (myid==0) UBLOG(logINFO, "Simulation-end"); - } - catch (exception& e) - { - cerr << e.what() << endl << flush; - } - catch (string& s) - { - cerr << s << endl; - } - catch (...) - { - cerr << "unknown exception" << endl; - } - -} -////////////////////////////////////////////////////////////////////////// -int main(int argc, char* argv[]) -{ - - if (argv != NULL) - { - if (argv[1] != NULL) - { - perm(string(argv[1])); - } - else - { - cout<<"Configuration file must be set!: "<<argv[0]<<" <config file>"<<endl<<std::flush; - } - } - - return 0; -} diff --git a/apps/cpu/perm/perm.cpp_s b/apps/cpu/perm/perm.cpp_s deleted file mode 100644 index e40c55fbf49d157433822462cfa5e0cfec9636a6..0000000000000000000000000000000000000000 --- a/apps/cpu/perm/perm.cpp_s +++ /dev/null @@ -1,442 +0,0 @@ -#include <iostream> -#include <string> - -#include <vfluids.h> - -using namespace std; - - -void perm(const char *configname) -{ - try - { - - string machine = QUOTEME(CAB_MACHINE); - string pathname, pathGeo; - int numOfThreads; - double availMem; - - ConfigFileReader cf(configname); - if (!cf.read()) - { - std::string exceptionText = "Unable to read configuration file\n"; - throw exceptionText; - } - - CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - if (machine == "BOMBADIL") - { - numOfThreads = 4; - pathname = "d:/temp/perm"; - pathGeo = "d:/Projects/SFB880/GeometrienPoroeseMedien/Allu_80-110"; - availMem = 15.0e9; - } - else //if (machine == "M01" || machine == "M02") - { - numOfThreads = UbSystem::stringTo<int>(cf.getValue("numOfTreads")); - pathname = cf.getValue("pathname"); - pathGeo = cf.getValue("pathGeo"); - availMem = 12.0e9; - -#if defined(__unix__) - if (myid == 0) - { - const char* str = pathname.c_str(); - int status = 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()); - } - } - //else throw UbException(UB_EXARGS, "unknown CAB_MACHINE"); - - - - if (myid == 0) UBLOG(logINFO, "Testcase permebility"); - - Grid3DPtr grid(new Grid3D(comm)); - - const int blocknx1 = 64; - const int blocknx2 = 64; - const int blocknx3 = 64; - - LBMReal rho_LB = 0.0; - - //Re = (Lp*u)/nu, Lp - size of pore, u - volume-avaraged velocity, nu - viscositi - double Re = 1.0; - double u_LB = 0.01; - - //dp/dx ~ u for laminar flow - double dp_LB = 0.0001; - double rhoLBinflow = dp_LB*3.0; - - LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - - const int baseLevel = 0; - const int refineLevel = 0; - - double nx3 = 3.0; //number of blocks for z - double deltax; - double coord[6]; - - ////////////////////////////////////////////////////////////////////////// - //restart - UbSchedulerPtr rSch(new UbScheduler(50000, 50000, 10000000)); - RestartPostprocessor rp(grid, rSch, comm, pathname, RestartPostprocessor::BINARY); - ////////////////////////////////////////////////////////////////////////// - - if (grid->getTimeStep() == 0) - { - if (myid == 0) UBLOG(logINFO, "Neustart.."); - - string sampleFilename = pathGeo + "/alu_80-110.vti"; - - int pmNX1 = 200; //abmessung einzelbild in x-richtung - int pmNX2 = 200; //abmessung einzelbild in y richtung - int pmNX3 = 200; //anzahl der bilder - - float lthreshold = 29041.0; - float uthreshold = 65535.0; - double deltaVoxelX1 = 4e-3/1096.0; - double deltaVoxelX2 = 5e-3/1327.0; - double deltaVoxelX3 = 5e-3/1265.0; - - - GbVoxelMatrix3DPtr sample(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold)); - //sample->readMatrixFromRawFile<unsigned char>(sampleFilename, GbVoxelMatrix3D::BigEndian); - sample->readMatrixFromVtiASCIIFile(sampleFilename); - sample->setVoxelMatrixDelta(deltaVoxelX1, deltaVoxelX2, deltaVoxelX3); - sample->setVoxelMatrixMininum(0.0, 0.0, 0.0); - - if (myid == 0) sample->writeToVTKImageDataASCII(pathname + "/geo/sample"); - - /////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////// - - double offset = 0.2e-3; //0.5e-3; - //bounding box - double g_minX1 = sample->getX1Minimum() - offset; - double g_minX2 = sample->getX2Minimum(); - double g_minX3 = sample->getX3Minimum(); - - double g_maxX1 = sample->getX1Maximum() + offset; - double g_maxX2 = sample->getX2Maximum(); - double g_maxX3 = sample->getX3Maximum(); - - deltax = (g_maxX3-g_minX3) /(nx3*blocknx3); - - double Lp = 90e-6/deltax; - double nu_LB = (Lp*u_LB)/Re; - - - double blockLength = (double)blocknx1*deltax; - - grid->setPeriodicX1(false); - grid->setPeriodicX2(false); - grid->setPeriodicX3(false); - grid->setDeltaX(deltax); - grid->setBlockNX(blocknx1, blocknx2, blocknx3); - - 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()); - - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - - - if (myid == 0) - { - UBLOG(logINFO, "Parameters:"); - //UBLOG(logINFO, "with forcing = " << with_forcing); - UBLOG(logINFO, "rho_LB = " << rho_LB); - UBLOG(logINFO, "nu_LB = " << nu_LB); - UBLOG(logINFO, "dp_LB = " << dp_LB); - UBLOG(logINFO, "u_LB = " << u_LB); - //UBLOG(logINFO, "forcing = " << forcing); - UBLOG(logINFO, "dx = " << deltax << " m"); - //UBLOG(logINFO, "dt = " << dt << " s"); - //UBLOG(logINFO, "rho_real = " << rho_real << " kg*m^-3"); - //UBLOG(logINFO, "nu_real = " << nu_real << " m^2/s"); - //UBLOG(logINFO, "dp_real = " << dp_real << " Pa"); - - UBLOG(logINFO, "number of levels = " << refineLevel + 1); - UBLOG(logINFO, "numOfThreads = " << numOfThreads); - UBLOG(logINFO, "path = " << pathname); - UBLOG(logINFO, "Preprozess - start"); - } - - //walls - GbCuboid3DPtr addWallYmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_minX2, g_maxX3+blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname+"/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallYmax(new GbCuboid3D(g_minX1-blockLength, g_maxX2, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", 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()); - - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - - //bone interactor - int bcOptionNoSlip = 1; //0=simple Bounce Back, 1=quadr. BB, 2=thin wall - D3Q27BoundaryConditionAdapterPtr bcNoSlip(new D3Q27NoSlipBCAdapter(bcOptionNoSlip)); - D3Q27InteractorPtr sampleInt(new D3Q27Interactor(sample, grid, bcNoSlip, Interactor3D::SOLID)); - - //wall interactors - D3Q27InteractorPtr addWallYminInt(new D3Q27Interactor(addWallYmin, grid, bcNoSlip, Interactor3D::SOLID)); - D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, bcNoSlip, Interactor3D::SOLID)); - D3Q27InteractorPtr addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, bcNoSlip, Interactor3D::SOLID)); - D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, bcNoSlip, Interactor3D::SOLID)); - - D3Q27BoundaryConditionAdapterPtr denBCAdapterInflow(new D3Q27DensityBCAdapter(rhoLBinflow)); - denBCAdapterInflow->setSecondaryBcOption(0); - D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoInflow, grid, denBCAdapterInflow, Interactor3D::SOLID)); - - //outflow - D3Q27BoundaryConditionAdapterPtr denBCAdapterOutflow(new D3Q27DensityBCAdapter(rho_LB)); - denBCAdapterOutflow->setSecondaryBcOption(0); - D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr(new D3Q27Interactor(geoOutflow, grid, denBCAdapterOutflow, Interactor3D::SOLID)); - - //////////////////////////////////////////// - //METIS - Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW)); - //////////////////////////////////////////// - /////delete solid blocks - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - intHelper.addInteractor(sampleInt); - intHelper.addInteractor(addWallYminInt); - intHelper.addInteractor(addWallZminInt); - intHelper.addInteractor(addWallYmaxInt); - intHelper.addInteractor(addWallZmaxInt); - intHelper.addInteractor(inflowInt); - intHelper.addInteractor(outflowInt); - intHelper.selectBlocks(); - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end"); - ////////////////////////////////////// - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor); - grid->accept(setConnsVisitor); - - //domain decomposition for threads - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - ppblocks->update(0); - ppblocks.reset(); - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nodb = (blocknx1)* (blocknx2)* (blocknx3); - unsigned long nod = nob * (blocknx1)* (blocknx2)* (blocknx3); - unsigned long nodg = nob * (blocknx1 + gl) * (blocknx2 + gl) * (blocknx3 + gl); - double needMemAll = double(nodg*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - if (myid == 0) - { - UBLOG(logINFO, "Number of blocks = " << nob); - UBLOG(logINFO, "Number of nodes = " << nod); - 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*nodb); - } - UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); - } - - LBMKernel3DPtr kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx1, blocknx2, blocknx3, LBMKernelETD3Q27CCLB::NORMAL)); - - //mu::Parser fctForcingX3; - //fctForcingX3.SetExpr("Fx3"); - //fctForcingX3.DefineConst("Fx3", forcing); - - //kernel->setForcingX3(fctForcingX3); - //kernel->setWithForcing(true); - - //BCProcessorPtr bcProc(new D3Q27ETForThinWallBCProcessor()); - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nu_LB, availMem, needMem); - grid->accept(kernelVisitor); - - - //BC - intHelper.setBC(); - - //Press*1.6e8+(14.76-coordsX)/3.5*5000 - //initialization of distributions - //mu::Parser fct; - //fct.SetExpr("(x1max-x1)/l*dp*3.0"); - //fct.DefineConst("dp", dp_LB); - //fct.DefineConst("x3max", g_maxX3); - //fct.DefineConst("l", g_maxX3-g_minX3); - - D3Q27ETInitDistributionsBlockVisitor initVisitor(nu_LB, rho_LB); - //initVisitor.setRho(fct); - //initVisitor.setVx1(fct); - initVisitor.setVx1(0); - grid->accept(initVisitor); - - //Postrozess - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, true)); - ppgeo->update(0); - ppgeo.reset(); - - coord[0] = sample->getX1Minimum(); - coord[1] = sample->getX2Minimum(); - coord[2] = sample->getX3Minimum(); - coord[3] = sample->getX1Maximum(); - coord[4] = sample->getX2Maximum(); - coord[5] = sample->getX3Maximum(); - - //////////////////////////////////////////////////////// - FILE * pFile; - string str = pathname + "/checkpoints/coord.txt"; - pFile = fopen(str.c_str(), "w"); - fprintf(pFile, "%f\n", deltax); - fprintf(pFile, "%f\n", coord[0]); - fprintf(pFile, "%f\n", coord[1]); - fprintf(pFile, "%f\n", coord[2]); - fprintf(pFile, "%f\n", coord[3]); - fprintf(pFile, "%f\n", coord[4]); - fprintf(pFile, "%f\n", coord[5]); - fclose(pFile); - //////////////////////////////////////////////////////// - - - if (myid == 0) UBLOG(logINFO, "Preprozess - end"); - } - else - { - //////////////////////////////////////////////////////// - FILE * pFile; - string str = pathname + "/checkpoints/coord.txt"; - pFile = fopen(str.c_str(), "r"); - fscanf(pFile, "%f\n", &deltax); - fscanf(pFile, "%f\n", &coord[0]); - fscanf(pFile, "%f\n", &coord[1]); - fscanf(pFile, "%f\n", &coord[2]); - fscanf(pFile, "%f\n", &coord[3]); - fscanf(pFile, "%f\n", &coord[4]); - fscanf(pFile, "%f\n", &coord[5]); - fclose(pFile); - //////////////////////////////////////////////////////// - - double Lp = 0.35e-3/deltax; - double nu_LB = (Lp*u_LB)/Re; - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor); - grid->accept(setConnsVisitor); - - - - if (myid == 0) UBLOG(logINFO, "Restart - end"); - } - UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); - NUPSCounterPostprocessor npr(grid, nupsSch, numOfThreads, comm); - - double outTime = 30000; - UbSchedulerPtr stepSch(new UbScheduler(outTime)); - stepSch->addSchedule(10, 10, 10); - stepSch->addSchedule(100, 100, 100); - stepSch->addSchedule(1000, 1000, 1000); - stepSch->addSchedule(100, 1500, 2000); - stepSch->addSchedule(10000, 10000, 10000); - - D3Q27MacroscopicQuantitiesPostprocessor pp(grid, stepSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv); - - double dxd2 = deltax / 2.0; - //D3Q27IntegrateValuesHelperPtr ih1(new D3Q27IntegrateValuesHelper(grid, comm, coord[0] - dxd2, coord[1] - dxd2, coord[2] - dxd2, - // coord[3] + dxd2, coord[4] + dxd2, coord[5] + dxd2)); - //if (myid == 0) GbSystem3D::writeGeoObject(ih1->getBoundingBox().get(), pathname + "/geo/ih1", WbWriterVtkXmlBinary::getInstance()); - - D3Q27IntegrateValuesHelperPtr ih1(new D3Q27IntegrateValuesHelper(grid, comm, coord[3] + dxd2, coord[1] - dxd2, coord[2] - dxd2, - coord[3] + 2.0*dxd2, coord[4] + dxd2, coord[5] + dxd2)); - if (myid == 0) GbSystem3D::writeGeoObject(ih1->getBoundingBox().get(), pathname + "/geo/ih1", WbWriterVtkXmlBinary::getInstance()); - - double factorp = 1; // dp_real / dp_LB; - double factorv = 1;// dx / dt; - UbSchedulerPtr stepMV(new UbScheduler(1)); - D3Q27MeanValuesPostprocessor mvp1(grid, stepMV, pathname + "/mv/mv1.txt", comm, ih1, factorp, factorv); - - - //D3Q27IntegrateValuesHelperPtr ih2(new D3Q27IntegrateValuesHelper(grid, comm, g_maxX1-2.0*deltax, g_minX2, g_minX3, - // g_maxX1 - deltax, g_maxX2, g_maxX3)); - //if (myid == 0) GbSystem3D::writeGeoObject(ih2->getBoundingBox().get(), pathname + "/geo/ih2", WbWriterVtkXmlBinary::getInstance()); - - //D3Q27MeanValuesPostprocessor mvp2(grid, stepSch, pathname + "/mv/mv2.txt", comm, ih2, factorp, factorv); - - if (myid == 0) - { - UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << MemoryUtil::getTotalPhysMem()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << MemoryUtil::getPhysMemUsed()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << MemoryUtil::getPhysMemUsedByMe()); - } - - double endTime = UbSystem::stringTo<double>(cf.getValue("endTime")); //100001;//10001.0; - - CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, stepMV)); - if (myid == 0) UBLOG(logINFO, "Simulation-start"); - calculation->calculate(); - if (myid == 0) UBLOG(logINFO, "Simulation-end"); - } - catch (exception& e) - { - cerr << e.what() << endl << flush; - } - catch (string& s) - { - cerr << s << endl; - } - catch (...) - { - cerr << "unknown exception" << endl; - } - -} -////////////////////////////////////////////////////////////////////////// -int main(int argc, char* argv[]) -{ - - if (argv != NULL) - { - perm(argv[1]); - } - - return 0; -} diff --git a/apps/cpu/plate/CMakeLists.txt b/apps/cpu/plate/CMakeLists.txt deleted file mode 100644 index cc2d6aea0a0a007395f1010facdd2880608ce895..0000000000000000000000000000000000000000 --- a/apps/cpu/plate/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(plate) - -INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(plate BINARY) diff --git a/apps/cpu/plate/plate.cpp b/apps/cpu/plate/plate.cpp deleted file mode 100644 index e4c78c6044106280732f151f9610e3791ff502a4..0000000000000000000000000000000000000000 --- a/apps/cpu/plate/plate.cpp +++ /dev/null @@ -1,652 +0,0 @@ - - -#include <iostream> -#include <string> -#include <math.h> - -#include <vfluids.h> - -using namespace std; - - -void run(const char *cstr, double endTime) -{ - try - { - string pathname; - string pathGeo; - string pathLog; - string PlatteFilename; - string ZckbndFilename; - int numOfThreads = 1; - bool logfile = false; - stringstream logFilename; - double availMem = 0; - - //UbLog::reportingLevel() = logDEBUG5; - - CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - string machine = string(cstr); - - if(machine == "my") - { - pathname = "d:/temp/plate"; - pathGeo = "d:/Data/plate"; - pathLog = "d:/temp/plate"; - numOfThreads = 6; - logfile = false; - availMem = 15.0e9; - } - else if(machine == "Ludwig") - { - pathname = "/work/koskuche/SFB880/plateR1e06"; - pathGeo = "/home/koskuche/data/plate"; - pathLog = "/work/koskuche/SFB880/plateR1e06"; - numOfThreads = 1; - availMem = 1.0e9; - logfile = true; - } - else if(machine == "Hermit") - { - //Hermit - pathname = "/univ_1/ws1/ws/xrmkuchr-plate3-0"; - pathGeo = "/zhome/academic/HLRS/xrm/xrmkuchr/data/plate"; - pathLog = "/zhome/academic/HLRS/xrm/xrmkuchr/work/plate"; - numOfThreads = 16; - availMem = 2.0e9; - logfile = true; - } - else if(machine == "HLRN") - { - //Hermit - pathname = "/gfs1/work/niivfcpu/scratch/plate"; - pathGeo = "/gfs1/work/niivfcpu/data/plate"; - pathLog = "/gfs1/work/niivfcpu/scratch/plate"; - numOfThreads = 24; - availMem = 12.0e9; - logfile = true; - } - else throw UbException(UB_EXARGS, "unknown CAB_MACHINE"); - -#if defined(__unix__) - if (myid==0) - { - const char* str = pathLog.c_str(); - int status=mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); - } -#endif - - if(myid == 0 && logfile) - { - logFilename << pathLog + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt"; - } - - if(myid ==0 && logfile) - { - UbLog::output_policy::setStream(logFilename.str()); - } - - if(myid==0) UBLOG(logINFO,"Testcase plate"); - - PlatteFilename = pathGeo + "/platte_raw.stl"; - ZckbndFilename= pathGeo + "/2zackenbaender0.stl"; - - int baseLevel, refineLevel,nx[3],blocknx[3]; - double Re,velocity,rhoInit,vx1Init; - - ////////////////////////////////////////////////////////////////////////// - //physik - ////////////////////////////////////////////////////////////////////////// - Re = 1e6; //11900;// 13286;//13286;//gemessen 18.98 m/s...*spaeter koorestur michael moessner 17m/s - velocity = 0.1; - vx1Init = 0.1; - rhoInit = 0.0; - - //int H=200;//200;//392; - ///////////////Knotenabmessungen: - nx[0] = 50;//240;//120;//60;//86;//43;//65;//50; //l�nge - nx[1] = 1;//2;//6;///1;//5;// //breite - nx[2] = 16;//64;//32;//18;//5;//15;//15; //h�he gebiet - blocknx[0] = 25;//10;//6; - blocknx[1] = 25;//10;//6; - blocknx[2] = 25;//10;//6; - - baseLevel = 0; - refineLevel = 4; - - ///////////////Weltabmessungen: - double kanalhoeheSI = 60.0/100.0;//60.0/100.0;//cm, Kanalh�he - double kanalbreiteSI = kanalhoeheSI*((double)nx[1])/((double)nx[2]);//=kanalh�he*nx1/nx2//1.65/100.0;//13.2/100.0;////40.0/100.0; //cm, Kanalbreite //13.2 zeilbreite - double kanallaengeSI = kanalhoeheSI*((double)nx[0])/((double)nx[2]);//80.0/100.0;//cm, Kanall�nge, ist nicht angegeben - - // double refinewidth1=kanalhoeheSI/10.0; - - - double fineNodeDx = (kanalhoeheSI) / (double)( blocknx[2]*nx[2]*(1<<refineLevel)+1 ); //+1--> gitter liegt jeweils 0.5dx innerhalb - //double fineNodeDx = hReal/100.0; - double coarseNodeDx = fineNodeDx * (double)(1<<refineLevel);//geowerte - - double blockLengthx1 = blocknx[0]*coarseNodeDx; //geowerte - double blockLengthx2 = blockLengthx1; - double blockLengthx3 = blockLengthx1; - - double originX1 = 0.0;//-50.0*propellerDurchmesser; //geowerte - double originX2 = 0.0;//-0.5*blockLengthx2*nx2; - double originX3 = 0.0;// minX3 + 0.5*fineNodeDx; - - double geoLength[] = { nx[0]*blockLengthx1, nx[1]*blockLengthx2, nx[2]*blockLengthx3}; - - //position vorderkante cube - double originBridgeX1 = 20.0/100.0; //cm, geraten - double originBridgeX2 = 0.0;//0.5*params.nx[1]*blockLengthx2-0.5*H-fineNodeDx; - double originBridgeX3 = kanalhoeheSI*0.5;//H*0.0-fineNodeDx; //boden - - bool periodicx1 = false; - bool periodicx2 = true; - bool periodicx3 = true; - - //########################################################################## - //## physical parameters - //########################################################################## - double rhoLB = rhoInit; - double rhoReal = 1.0; - double nuReal = 0.000015;//0.015; - - double hReal = 0.0105;//<-m 1.05;//Plattendicke in cm(! cm nicht m !) - double uReal = 15;//m/s //Re*nueReal/hReal; - double lReal = 1; //m Plattenl�nge - - //##Machzahl: - //#Ma = uReal/csReal - double Ma = 0.05;//0.0553;//Ma-Real! - double csReal = 343; //uReal/Ma; - double hLB = hReal/coarseNodeDx; - - //LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter(hReal, csReal, rhoReal, hLB)); - //LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter(hReal, LBMUnitConverter::AIR_20C, hLB)); - - - double uLB = 0.1; //uReal * unitConverter->getFactorVelocityWToLb(); - //double nuLB = nueReal * unitConverter->getFactorViscosityWToLb(); - double nuLB = (uLB*(lReal/coarseNodeDx))/Re; - //double timestep = unitConverter->getFactorTimeLbToW(coarseNodeDx); - - - //LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter(0, uReal, uLB, nuReal, nuLB)); - LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter()); - - velocity = uLB; - double viscosity = nuLB; - - Grid3DPtr grid(new Grid3D(comm)); - - ////////////////////////////////////////////////////////////////////////// - //restart - UbSchedulerPtr rSch(new UbScheduler(10000,10000,10000000)); - RestartPostprocessor rp(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY); - ////////////////////////////////////////////////////////////////////////// - - int sizeSP=4; - mu::Parser spongeLayer; - //spongeLayer.SetExpr("x1>=(sizeX-sizeSP)/dx ? (sizeX-(x1+1))/sizeSP/2.0 + 0.5 : 1.0"); - spongeLayer.SetExpr("x1>=(sizeX-sizeSP)/dx ? (sizeX-x1)/sizeSP/2.0 + 0.5 : 1.0"); - spongeLayer.DefineConst("sizeX", nx[0]*blocknx[0]); - spongeLayer.DefineConst("sizeSP", sizeSP*blocknx[0]); - - if (grid->getTimeStep() == 0) - { - if(myid==0) UBLOG(logINFO,"Neustart.."); - //bounding box - double g_minX1 = originX1; - double g_minX2 = originX2; - double g_minX3 = originX3; - - double g_maxX1 = originX1 + geoLength[0]; - double g_maxX2 = originX2 + geoLength[1]; - double g_maxX3 = originX3 + geoLength[2]; - - //set grid - grid->setDeltaX(coarseNodeDx); - grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - grid->setPeriodicX1(periodicx1); - grid->setPeriodicX2(periodicx2); - grid->setPeriodicX3(periodicx3); - - - 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", WbWriterVtkXmlASCII::getInstance()); - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - ///////////////////////////////////////////////// - //interactoren definieren - double geoOverlap = 3.0*coarseNodeDx; - - //inflow - GbCuboid3DPtr velBCCuboid(new GbCuboid3D(originX1-geoOverlap, originX2-geoOverlap, originX3-geoOverlap, - originX1/*+coarseNodeDx*/, originX2+geoLength[1]+geoOverlap, originX3+geoLength[2]+geoOverlap)); - if(myid == 0) GbSystem3D::writeGeoObject(velBCCuboid.get(), pathname+"/geo/velBCCuboid", WbWriterVtkXmlASCII::getInstance()); - D3Q27InteractorPtr velBCInteractor(new D3Q27Interactor(velBCCuboid,grid,Interactor3D::SOLID)); - - //inflow - double uLB2=uLB*0.96*1.02;//*0.5; - double raiseVelSteps = 0; - vector<D3Q27BCFunction> velcX1BCs,dummy; - - mu::Parser inflowProfile; - inflowProfile.SetExpr("uLB"); - - inflowProfile.DefineConst("uLB",uLB); - velcX1BCs.push_back(D3Q27BCFunction(inflowProfile,raiseVelSteps,D3Q27BCFunction::INFCONST)); - - D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter (velcX1BCs,dummy,dummy)); - velBCInteractor->addBCAdapter(velBCAdapter); - - //outflow - GbCuboid3DPtr densCuboid(new GbCuboid3D(originX1+geoLength[0], originX2-geoOverlap, originX3-geoOverlap, - originX1+geoLength[0]+geoOverlap, originX2+geoLength[1]+geoOverlap, originX3+geoLength[2]+geoOverlap )); - if(myid == 0) GbSystem3D::writeGeoObject(densCuboid.get(), pathname+"/geo/densCuboid", WbWriterVtkXmlASCII::getInstance()); - D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoInit)); - D3Q27InteractorPtr densInteractor( new D3Q27Interactor(densCuboid,grid,denBCAdapter,Interactor3D::SOLID) ); - - ////////////////////////////////////////////////////////////////////////// - if(myid == 0) - { - UBLOG(logINFO, "*****************************************"); - UBLOG(logINFO, "* Parameters *"); - UBLOG(logINFO, "* Re ="<<Re); - UBLOG(logINFO, "* Ma ="<<Ma); - UBLOG(logINFO, "* uReal ="<<uReal); - UBLOG(logINFO, "* nueReal ="<<nuReal); - UBLOG(logINFO, "* nueLB ="<<nuLB); - UBLOG(logINFO, "* uLB ="<<uLB); - UBLOG(logINFO, "* LX3 (world/LB)="<<kanalhoeheSI<<"/"<<kanalhoeheSI/coarseNodeDx); - UBLOG(logINFO, "* cdx ="<<coarseNodeDx); - UBLOG(logINFO, "* fdx ="<<fineNodeDx); - UBLOG(logINFO, "* dx_base ="<<coarseNodeDx<<" == "<<coarseNodeDx); - UBLOG(logINFO, "* dx_refine ="<<fineNodeDx<<" == "<<fineNodeDx ); - UBLOG(logINFO, "* nx1/2/3 ="<<nx[0]<<"/"<<nx[1]<<"/"<<nx[2]); - UBLOG(logINFO, "* blocknx1/2/3 ="<<blocknx[0]<<"/"<<blocknx[1]<<"/"<<blocknx[2]); - UBLOG(logINFO, "* x1Periodic ="<<periodicx1); - UBLOG(logINFO, "* x2Periodic ="<<periodicx2); - UBLOG(logINFO, "* x3Periodic ="<<periodicx3); - UBLOG(logINFO, "* number of levels ="<<refineLevel+1); - UBLOG(logINFO, "* path ="<<pathname); - - UBLOG(logINFO, "*****************************************"); - UBLOG(logINFO, "* number of threads ="<<numOfThreads); - UBLOG(logINFO, "* number of processes ="<<comm->getNumberOfProcesses()); - UBLOG(logINFO, "*****************************************"); - //UBLOGML(logINFO, "UnitConverter:"<<unitConverter->toString()); - UBLOG(logINFO, "*****************************************"); - } - ////////////////////////////////////////////////////////////////////////// - //Platte - GbTriFaceMesh3DPtr mesh (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(PlatteFilename,"Netz")); - - double x1minMesh = mesh->getX1Minimum(); double x1maxMesh = mesh->getX1Maximum(); - double x2minMesh = mesh->getX2Minimum(); double x2maxMesh = mesh->getX2Maximum(); - double x3minMesh = mesh->getX3Minimum(); double x3maxMesh = mesh->getX3Maximum(); - - double drehpunktX=x1minMesh+(x1maxMesh-x1minMesh)*0.5;//triFaceMeshS->getX1Centroid(); - double drehpunktZ=x3minMesh+(x3maxMesh-x3minMesh)*0.5;//triFaceMeshS->getX3Centroid(); - double drehpunktY=x2minMesh+(x2maxMesh-x2minMesh)*0.5;// seedX2-0.5*nodeDelta;//+nx2*deltaX2+0.5*deltaX2; - - mesh->rotate(90.0,0.0,0.0); //TriFacMesh-KO-System anders als LB-KO-System - - x1minMesh = mesh->getX1Minimum(); x1maxMesh = mesh->getX1Maximum(); - x2minMesh = mesh->getX2Minimum(); x2maxMesh = mesh->getX2Maximum(); - x3minMesh = mesh->getX3Minimum(); x3maxMesh = mesh->getX3Maximum(); - - drehpunktX=x1minMesh+(x1maxMesh-x1minMesh)*0.5;//triFaceMeshS->getX1Centroid(); - drehpunktZ=x3minMesh+(x3maxMesh-x3minMesh)*0.5;//triFaceMeshS->getX3Centroid(); - drehpunktY=x2minMesh+(x2maxMesh-x2minMesh)*0.5;// seedX2-0.5*nodeDelta;//+nx2*deltaX2+0.5*deltaX2; - - double H3=1.05/100.0;//cm, Plattendicke - double scaleB=H3/(x3maxMesh-x3minMesh); - double scaleX2=(geoLength[2]+2.0*coarseNodeDx)/(x2minMesh-x2maxMesh); - - mesh->scale(scaleB,scaleB,scaleB); - x1minMesh = mesh->getX1Minimum(); x1maxMesh = mesh->getX1Maximum(); - x2minMesh = mesh->getX2Minimum(); x2maxMesh = mesh->getX2Maximum(); - x3minMesh = mesh->getX3Minimum(); x3maxMesh = mesh->getX3Maximum(); - double offsetXBridge=originBridgeX1;//originBridgeX1; - double offsetYBridge=originBridgeX2;//originBridgeX2; - double offsetZBridge=originBridgeX3;//originBridgeX3;//-0.5*(x3minMesh-x3maxMesh); - //mesh->translate(-x1minMesh+offsetXBridge, -x2minMesh-0.5*offsetYBridge-coarseNodeDx, -x3minMesh+offsetZBridge); - mesh->translate(-x1minMesh+offsetXBridge, -x2minMesh+offsetYBridge-coarseNodeDx, -x3minMesh+offsetZBridge-(x3maxMesh-x3minMesh)*0.5/*-hReal*2.0*/); - - x1minMesh = mesh->getX1Minimum(); x1maxMesh = mesh->getX1Maximum(); - x2minMesh = mesh->getX2Minimum(); x2maxMesh = mesh->getX2Maximum(); - x3minMesh = mesh->getX3Minimum(); x3maxMesh = mesh->getX3Maximum(); - - if(myid == 0) GbSystem3D::writeGeoObject( mesh.get(), pathname+"/geo/platte", WbWriterVtkXmlBinary::getInstance() ); - - ////////////////////////////////////////////////////////////////////////// - // Zackenband - ////////////////////////////////////////////////////////////////////////// - GbTriFaceMesh3DPtr meshBand (GbTriFaceMesh3DCreator::readMeshFromFile(ZckbndFilename, "NetzBand")); - meshBand->deleteRedundantNodes(); - - double x1minMeshB = meshBand->getX1Minimum(); double x1maxMeshB = meshBand->getX1Maximum(); - double x2minMeshB = meshBand->getX2Minimum(); double x2maxMeshB = meshBand->getX2Maximum(); - double x3minMeshB = meshBand->getX3Minimum(); double x3maxMeshB = meshBand->getX3Maximum(); - - x1minMeshB = meshBand->getX1Minimum(); x1maxMeshB = meshBand->getX1Maximum(); - x2minMeshB = meshBand->getX2Minimum(); x2maxMeshB = meshBand->getX2Maximum(); - x3minMeshB = meshBand->getX3Minimum(); x3maxMeshB = meshBand->getX3Maximum(); - - double H1B=1.05/100.0;//*2.0;//0.05;//cm, Banddicke..nachschauen!!! - double scaleBand=H1B/(x1maxMeshB-x1minMeshB);//H3B/(x3maxMeshB-x3minMeshB); - - meshBand->scale(scaleBand,scaleBand,scaleBand); - x1minMeshB = meshBand->getX1Minimum(); x1maxMeshB = meshBand->getX1Maximum(); - x2minMeshB = meshBand->getX2Minimum(); x2maxMeshB = meshBand->getX2Maximum(); - x3minMeshB = meshBand->getX3Minimum(); x3maxMeshB = meshBand->getX3Maximum(); - double dBandX=0.5/100.0;//1.29; //15mm-2.1mm Absand von Bandvorderkante - double dBandY=0.0/100.0; - double dBandZ=0.223/100.0;//0.344;//.... - double offsetXBridgeB=x1minMesh+dBandX;//originBridgeX1+dBandX;//originBridgeX1; - double offsetYBridgeB=originBridgeX2+dBandY;//originBridgeX2; - double offsetZBridgeB=originBridgeX3+dBandZ;//originBridgeX3;//-0.5*(x3minMesh-x3maxMesh); - meshBand->translate(-x1minMeshB+offsetXBridgeB, -x2minMeshB+offsetYBridgeB-coarseNodeDx, -x3minMeshB+offsetZBridgeB);//-(x3maxMeshB-x3minMeshB)*0.5); - - x1minMeshB = meshBand->getX1Minimum(); x1maxMeshB = meshBand->getX1Maximum(); - x2minMeshB = meshBand->getX2Minimum(); x2maxMeshB = meshBand->getX2Maximum(); - x3minMeshB = meshBand->getX3Minimum(); x3maxMeshB = meshBand->getX3Maximum(); - - GbSystem3D::writeGeoObject( meshBand.get(), pathname+"/geo/Band", WbWriterVtkXmlASCII::getInstance() ); - - /////////////////Band2 - GbTriFaceMesh3DPtr meshBand2(GbTriFaceMesh3DCreator::readMeshFromFile(ZckbndFilename, "NetzBand2")); - meshBand->deleteRedundantNodes(); - - double x1minMeshB2 = meshBand2->getX1Minimum(); double x1maxMeshB2 = meshBand2->getX1Maximum(); - double x2minMeshB2 = meshBand2->getX2Minimum(); double x2maxMeshB2 = meshBand2->getX2Maximum(); - double x3minMeshB2 = meshBand2->getX3Minimum(); double x3maxMeshB2 = meshBand2->getX3Maximum(); - - x1minMeshB2 = meshBand2->getX1Minimum(); x1maxMeshB2 = meshBand2->getX1Maximum(); - x2minMeshB2 = meshBand2->getX2Minimum(); x2maxMeshB2 = meshBand2->getX2Maximum(); - x3minMeshB2 = meshBand2->getX3Minimum(); x3maxMeshB2 = meshBand2->getX3Maximum(); - - double H1B2=1.05/100.0;//0.05;//cm, Banddicke..nachschauen!!! - double scaleBand2=H1B2/(x1maxMeshB2-x1minMeshB2);//*3.0;//H3B/(x3maxMeshB-x3minMeshB); - - meshBand2->scale(scaleBand2,scaleBand2,scaleBand2); - x1minMeshB2 = meshBand2->getX1Minimum(); x1maxMeshB2 = meshBand2->getX1Maximum(); - x2minMeshB2 = meshBand2->getX2Minimum(); x2maxMeshB2 = meshBand2->getX2Maximum(); - x3minMeshB2 = meshBand2->getX3Minimum(); x3maxMeshB2 = meshBand2->getX3Maximum(); - double dBandX2=0.5/100.0;//1.29; - double dBandY2=0.5/100.0; - double dBandZ2=0.223/100.0;//0.344;//... - double offsetXBridgeB2=x1minMesh+dBandX2;//originBridgeX1; - double offsetYBridgeB2=originBridgeX2+dBandY2;//originBridgeX2; - double offsetZBridgeB2=originBridgeX3+dBandZ2;//originBridgeX3;//-0.5*(x3minMesh-x3maxMesh); - meshBand2->translate(-x1minMeshB2+offsetXBridgeB2, -x2minMeshB2+offsetYBridgeB2-coarseNodeDx, -x3minMeshB2+offsetZBridgeB2);//-(x3maxMeshB2-x3minMeshB2)*0.5); - - x1minMeshB2 = meshBand2->getX1Minimum(); x1maxMeshB2 = meshBand2->getX1Maximum(); - x2minMeshB2 = meshBand2->getX2Minimum(); x2maxMeshB2 = meshBand2->getX2Maximum(); - x3minMeshB2 = meshBand2->getX3Minimum(); x3maxMeshB2 = meshBand2->getX3Maximum(); - - if(myid == 0) GbSystem3D::writeGeoObject( meshBand2.get(), pathname+"/geo/Band2", WbWriterVtkXmlASCII::getInstance() ); - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // refine - ////////////////////////////////////////////////////////////////////////// - - ///////////platte ausmessen: - x1minMesh = mesh->getX1Minimum(); x1maxMesh = mesh->getX1Maximum(); - x2minMesh = mesh->getX2Minimum(); x2maxMesh = mesh->getX2Maximum(); - x3minMesh = mesh->getX3Minimum(); x3maxMesh = mesh->getX3Maximum(); - double deltaX3Platte=(x3maxMesh-x3minMesh); - - GbCuboid3DPtr refine2PlatteCube(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , x3minMesh-H3*0.5 - , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3)); - //if(myid == 0) GbSystem3D::writeGeoObject(refine2PlatteCube.get(), pathname+"/geo/refine2PlatteCube", WbWriterVtkXmlASCII::getInstance()); - //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP2(refine2PlatteCube, baseLevel, refineLevel-5); - //grid->accept(refineAdapterP2); - - GbCuboid3DPtr refine3PlatteCube(new GbCuboid3D( x1minMesh+H3*2.0 , originX2-geoOverlap , x3minMesh+H3*0.8 - , x1maxMesh-H3*0.2, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.1)); - //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP3(refine3PlatteCube, baseLevel, refineLevel-4); - //grid->accept(refineAdapterP3); - - GbCuboid3DPtr refine4PlatteCube(new GbCuboid3D( x1minMesh-H3*2.0 , originX2-geoOverlap , x3minMesh+deltaX3Platte*0.04 - , x1maxMesh+H3*2.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.25)); - //if(myid == 0) GbSystem3D::writeGeoObject(refine4PlatteCube.get(), pathname+"/geo/refine4PlatteCube", WbWriterVtkXmlASCII::getInstance()); - //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP4(refine4PlatteCube, baseLevel, refineLevel-3); - //grid->accept(refineAdapterP4); - - GbCuboid3DPtr refine5PlatteCube(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap ,x3minMesh-deltaX3Platte/*x3minMesh+deltaX3Platte*0.8*//* x3minMesh+deltaX3Platte*0.8*/ - , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3)); - //if(myid == 0) GbSystem3D::writeGeoObject(refine5PlatteCube.get(), pathname+"/geo/refine5PlatteCube", WbWriterVtkXmlASCII::getInstance()); - //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP5(refine5PlatteCube, baseLevel, refineLevel-2); - //grid->accept(refineAdapterP5); - - GbCuboid3DPtr refine6PlatteCube(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , x3minMesh-deltaX3Platte*3.0/*x3minMesh+deltaX3Platte*0.9*/ - , x1maxMesh+H3*7.0, originX2+geoOverlap+geoLength[1], x3maxMesh+deltaX3Platte*3.0)); - //if(myid == 0) GbSystem3D::writeGeoObject(refine6PlatteCube.get(), pathname+"/geo/refine6PlatteCube", WbWriterVtkXmlASCII::getInstance()); - //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP6(refine6PlatteCube, baseLevel, refineLevel-1); - //grid->accept(refineAdapterP6); - - //GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , originX1-3.0*geoOverlap - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.1)); - - - GbCuboid3DPtr refinePlatteBox(new GbCuboid3D(mesh->getX1Minimum(), mesh->getX2Minimum(), mesh->getX3Minimum()+(mesh->getX3Maximum()-mesh->getX3Minimum())/2.0, - mesh->getX1Maximum(), mesh->getX2Maximum(), mesh->getX3Maximum())); - if(myid == 0) GbSystem3D::writeGeoObject( refinePlatteBox.get(), pathname+"/geo/refinePlatteBox", WbWriterVtkXmlASCII::getInstance() ); - - ///////////////////////////////////////////////// - ///interactoren - int bbOption1 = 1; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1)); - D3Q27TriFaceMeshInteractorPtr triPlateInteractor( new D3Q27TriFaceMeshInteractor(mesh, grid, bcObst,Interactor3D::SOLID)); - D3Q27TriFaceMeshInteractorPtr triBandInteractor( new D3Q27TriFaceMeshInteractor( meshBand, grid, bcObst,Interactor3D::SOLID) ); - D3Q27TriFaceMeshInteractorPtr triBand2Interactor( new D3Q27TriFaceMeshInteractor( meshBand2, grid, bcObst,Interactor3D::SOLID) ); - - //////////////////////////////////////////// - //METIS - Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B)); - - ////////////////////////////////////////////////////////////////////////// - //refinement - if (refineLevel > 0) - { - if(myid == 0) UBLOG(logINFO,"Refinement - start"); - RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel); - //refineHelper.addGbObject( refine6PlatteCube, refineLevel-3); - //refineHelper.addGbObject( refine5PlatteCube, refineLevel-2); - //refineHelper.addGbObject( refine4PlatteCube, refineLevel-1); - //refineHelper.addGbObject( refine3PlatteCube, refineLevel); - refineHelper.addGbObject(refinePlatteBox, refineLevel); - refineHelper.refine(); - - //RefineAroundGbObjectHelper refineHelper(grid, refineLevel, boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(triPlateInteractor), 0.0, hReal/4.0); - //refineHelper.refine(); - if(myid == 0) UBLOG(logINFO,"Refinement - end"); - } - - //BlocksPostprocessorPtr ppblocks1(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm)); - ////if(myid == 0) - //ppblocks1->update(0); - - //return; - - //GbCuboid3DPtr testBox(new GbCuboid3D(0.2, -1, 0.1, 1.6, 0.04, 0.5)); - //if(myid == 0) GbSystem3D::writeGeoObject(testBox.get(), pathname+"/geo/testBox", WbWriterVtkXmlASCII::getInstance()); - //D3Q27InteractorPtr testBoxInt(new D3Q27Interactor(testBox, grid, bcObst,Interactor3D::SOLID)); - - //////////////////////////////////////////// - /////delete solid blocks - if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - intHelper.addInteractor(triPlateInteractor); - intHelper.addInteractor(triBandInteractor); - intHelper.addInteractor(triBand2Interactor); - //intHelper.addInteractor(testBoxInt); - intHelper.addInteractor(densInteractor); - intHelper.addInteractor(velBCInteractor); - intHelper.selectBlocks(); - if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end"); - ////////////////////////////////////// - - //domain decomposition for threads - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - - if(myid == 0) UBLOG(logINFO,"Write blocks - start"); - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm)); - if(myid == 0) - ppblocks->update(0); - if(myid == 0) UBLOG(logINFO,"Write blocks - end"); - - - - unsigned long nob = grid->getNumberOfBlocks(); - unsigned long nod = nob * blocknx[0]*blocknx[1]*blocknx[2]; - unsigned long nod_real = nob * (blocknx[0]+3)*(blocknx[1]+3)*(blocknx[2]+3); - - double needMemAll = double(nod_real*(27*sizeof(double) + sizeof(int))); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - if(myid == 0) - { - UBLOG(logINFO,"Number of blocks = " << nob); - UBLOG(logINFO,"Number of nodes = " << nod); - UBLOG(logINFO,"Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO,"Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO,"Available memory per process = " << availMem << " bytes"); - UBLOG(logINFO,"Available memory per node/8.0 = " << (availMem/8.0) << " bytes"); - } - //////////////////////////// - LBMKernel3DPtr kernel; - //kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL)); - - //with sponge layer - kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLBWithSpongeLayer(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL)); - kernel->setWithSpongeLayer(true); - kernel->setSpongeLayer(spongeLayer); - - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - kernel->setBCProcessor(bcProc); - SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem); - grid->accept(kernelVisitor); - ////////////////////////////////// - //undef nodes - if (refineLevel > 0) - { - D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - ////////////////////////////////////////// - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - grid->accept( setConnsVisitor ); - - intHelper.setBC(); - - //initialization of decompositions - D3Q27ETInitDistributionsBlockVisitor initVisitor( nuLB,rhoInit); - initVisitor.setVx1(vx1Init); - grid->accept(initVisitor); - - //Postprozess - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), - unitConverter, true)); - ppgeo->update(0); - //grid->doPostProcess(0); - ppgeo.reset(); - geoSch.reset(); - - if(myid == 0) UBLOG(logINFO,"Preprozess - end"); - - //return; - } - else - { - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - grid->accept( setConnsVisitor ); - SetSpongeLayerBlockVisitor ssp(spongeLayer); - grid->accept(ssp); - if(myid == 0) UBLOG(logINFO,"Restart - end"); - } - UbSchedulerPtr visSch(new UbScheduler()); - //visSch->addSchedule(1,0,3); - //visSch->addSchedule(100,100,1000); - //visSch->addSchedule(1000,1000,5000); - //visSch->addSchedule(5000,5000,100000); - //visSch->addSchedule(100000,100000,10000000); - - visSch->addSchedule(10000,10000,10000000); - //visSch->addSchedule(100,100,100000000); - - //UbSchedulerPtr resSchRMS(new UbScheduler()); - //resSchRMS->addSchedule(100000,0,10000000); - //UbSchedulerPtr resSchMeans(new UbScheduler()); - //resSchMeans->addSchedule(100000,0,10000000); - //UbSchedulerPtr stepAvSch(new UbScheduler()); - //int averageInterval=1000; - //stepAvSch->addSchedule(averageInterval,0,10000000); - - //AverageValuesPostprocessor Avpp(grid, pathname + "/steps/stepAV", WbWriterVtkXmlBinary::getInstance(), visSch/*wann wird rausgeschrieben*/, stepAvSch/*wann wird gemittelt*/, resSchMeans,resSchRMS/*wann wird resettet*/); - - D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), unitConverter); - - UbSchedulerPtr nupsSch(new UbScheduler(10, 10, 30)); - nupsSch->addSchedule(1000, 1000, 1000000000); - NUPSCounterPostprocessor npr(grid, nupsSch, comm); - - //mu::Parser decrViscFunc; - //decrViscFunc.SetExpr("nue0+c0/(t+1)/(t+1)"); - //decrViscFunc.DefineConst("nue0", nueLB); - //decrViscFunc.DefineConst("c0", 0.1); - //UbSchedulerPtr DecrViscSch(new UbScheduler()); - //DecrViscSch->addSchedule(10,10,5000); - //DecreaseViscosityPostprocessor decrViscPPPtr(grid, DecrViscSch,&decrViscFunc, comm); - - if(myid == 0) - { - UBLOG(logINFO,"PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - UBLOG(logINFO,"PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - UBLOG(logINFO,"PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - } - - //double endTime = 80001; - 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[]) -{ - - run(argv[1], UbSystem::stringTo<double>(argv[2])); - - return 0; -} - diff --git a/apps/cpu/plate/plate.cpp.ludwig10092013 b/apps/cpu/plate/plate.cpp.ludwig10092013 deleted file mode 100644 index 00e1aed5a3414e48252a6e96536e13f76728b282..0000000000000000000000000000000000000000 --- a/apps/cpu/plate/plate.cpp.ludwig10092013 +++ /dev/null @@ -1,626 +0,0 @@ - - -#include <iostream> -#include <string> -#include <math.h> - -#include <vfluids.h> - -using namespace std; - - -void run(const char *cstr) -{ - try - { - string machine = QUOTEME(CAB_MACHINE); - UBLOG(logINFO,"Testcase plate"); - string pathname; - string pathGeo; - string BrueckeFilename; - string ZckbndFilename; - int numOfThreads =1; - bool logfile = false; - stringstream logFilename; - double availMem = 0; - - UbLog::reportingLevel() = logDEBUG; - - CommunicatorPtr comm(new MPICommunicator()); - int myid = comm->getProcessID(); - - if(machine == "PIPPINNEU") - { - - pathname = "f:/temp/plateBfluid"; - pathGeo = "e:/geometriedatenstls"; - numOfThreads = 1; - logfile = false; - availMem = 3.0e9; - } - else if(machine == "M01" || machine == "M02") - { - pathname = "/work/sonjaOutputs/plateBfluidNeud"; - pathGeo = "/home/sonuphof/Stl-Zeichnungen"; - numOfThreads = 1; - availMem = 12.0e9; - logfile = true; - - //if(myid ==0) - //{ - logFilename << pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt"; - //} - } - else throw UbException(UB_EXARGS, "unknown CAB_MACHINE"); - - BrueckeFilename = pathGeo + "/platte_raw.stl"; - ZckbndFilename= pathGeo + "/2zackenbaender0.stl"; - - //if(myid ==0 && logfile) - //{ - UbLog::output_policy::setStream(logFilename.str()); - //} - - int baseLevel, refineLevel,nx[3],blocknx[3]; - double Re,velocity,rhoInit,vx1Init;//,vx2Init,vx3Init; - - ////////////////////////////////////////////////////////////////////////// - //physik - ////////////////////////////////////////////////////////////////////////// - Re = 11900;// 13286;//13286;//gemessen 18.98 m/s...*5.0 zum testen ob was passiert - velocity = 0.01; - vx1Init = 0.01; - rhoInit = 1.0; - SimulationParametersPtr param = SimulationParameters::getInstanz(); - param->setCollisionModelType(SimulationParameters::COMPRESSIBLE); - - int H=200;//200;//392; - ///////////////Knotenabmessungen: - nx[0] = 120;//60;//86;//43;//65;//50; //länge - nx[1] = 3;//6;///1;//5;// //breite - nx[2] = 32;//18;//5;//15;//15; //höhe gebiet - blocknx[0] = 9; - blocknx[1] = 9; - blocknx[2] = 9; - - baseLevel = 0; - refineLevel = 2;//1;//5; - - - - ///////////////Weltabmessungen: - double kanalhoeheSI = 60.0/100.0;//60.0/100.0;//cm, Kanalhöhe - double kanalbreiteSI = kanalhoeheSI*120.0/2.0;//=kanalhöhe*nx1/nx2//1.65/100.0;//13.2/100.0;////40.0/100.0; //cm, Kanalbreite //13.2 zeilbreite - double kanallaengeSI = kanalhoeheSI*120.0/32.0;//80.0/100.0;//cm, Kanallänge, ist nicht angegeben - - // double refinewidth1=kanalhoeheSI/10.0; - - double fineNodeDx = (kanalhoeheSI) / (double)( blocknx[2]*nx[2]*(1<<refineLevel)+1 ); //+1--> gitter liegt jeweils 0.5dx innerhalb - double coarseNodeDx = fineNodeDx * (double)(1<<refineLevel);//geowerte - - double blockLengthx1 = blocknx[0]*coarseNodeDx; //geowerte - double blockLengthx2 = blockLengthx1; - double blockLengthx3 = blockLengthx1; - - double originX1 = 0.0;//-50.0*propellerDurchmesser; //geowerte - double originX2 = 0.0;//-0.5*blockLengthx2*nx2; - double originX3 = 0.0;// minX3 + 0.5*fineNodeDx; - - double geoLength[] = { nx[0]*blockLengthx1, nx[1]*blockLengthx2, nx[2]*blockLengthx3}; - - //position vorderkante cube - double originBridgeX1 = 20.0/100.0; //cm, geraten - double originBridgeX2 = 0.0;//0.5*params.nx[1]*blockLengthx2-0.5*H-fineNodeDx; - double originBridgeX3 = kanalhoeheSI*0.5;//H*0.0-fineNodeDx; //boden - - bool periodicx1 = false; - bool periodicx2 = true; - bool periodicx3 = true; - - //########################################################################## - //## physical parameters - //########################################################################## - - double smagorinskiConstant = 0.18; - - - double rhoLB = 1.0; - double rhoReal = 1.0; - double nueReal = 0.000015;//0.015; - - double hReal = 0.0105;//<-m 1.05;//Plattendicke in cm(! cm nicht m !) - double uReal = Re*nueReal/hReal; - - //##Machzahl: - //#Ma = uReal/csReal - double Ma = 0.05;//0.0553;//Ma-Real! - double csReal = uReal/Ma; - double hLB = hReal/coarseNodeDx; - - LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter(hReal, csReal, rhoReal, hLB)); - - double uLB = uReal * unitConverter->getFactorVelocityWToLb(); - double nueLB = nueReal * unitConverter->getFactorViscosityWToLb(); - double timestep = unitConverter->getFactorTimeLbToW(coarseNodeDx); - - velocity = uLB; - double viscosity = nueLB; - - ////////////////////////////////////////////////////////////////////////// - Grid3DPtr grid(new Grid3D(comm)); - UbSchedulerPtr rSch(new UbScheduler(5000,5000,1000000)); - RestartPostprocessor rp(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY); - - std::string opt; - - if(cstr!= NULL) - opt = std::string(cstr); - - if(/*(cstr== NULL)*/cstr!= NULL) - { - opt = std::string(cstr); - - if(myid==0) UBLOG(logINFO,"Restart step: " << opt); - - grid = rp.restart(UbSystem::stringTo<int>(opt)); - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27OffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - - //domain decomposition - //PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - //grid->accept(pqPartVisitor); - } - else - { - //bounding box - double g_minX1 = originX1; - double g_minX2 = originX2; - double g_minX3 = originX3; - - double g_maxX1 = originX1 + geoLength[0]; - double g_maxX2 = originX2 + geoLength[1]; - double g_maxX3 = originX3 + geoLength[2]; - - //set grid - grid->setDeltaX(coarseNodeDx); - grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - grid->setPeriodicX1(periodicx1); - grid->setPeriodicX2(periodicx2); - grid->setPeriodicX3(periodicx3); - - - 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", WbWriterVtkXmlASCII::getInstance()); - - GenBlocksGridVisitor genBlocks; - genBlocks.addGeoObject(gridCube); - grid->accept(genBlocks); - - - /////////////////////////////////////////////////7 - //interactoren definieren - - - - double geoOverlap = 3.0*coarseNodeDx; - - //inflow - GbCuboid3DPtr velBCCuboid(new GbCuboid3D(originX1-geoOverlap, originX2-geoOverlap, originX3-geoOverlap, - originX1/*+coarseNodeDx*/, originX2+geoLength[1]+geoOverlap, originX3+geoLength[2]+geoOverlap)); - if(myid == 0) GbSystem3D::writeGeoObject(velBCCuboid.get(), pathname+"/geo/velBCCuboid", WbWriterVtkXmlASCII::getInstance()); - D3Q27InteractorPtr velBCInteractor(new D3Q27Interactor(velBCCuboid,grid,Interactor3D::SOLID)); - - //inflow - double uLB2=uLB*0.96*1.02;//*0.5; - double raiseVelSteps = 0; - vector<D3Q27BCFunction> velcX1BCs,dummy; - - mu::Parser inflowProfile; - inflowProfile.SetExpr("uLB"); - - inflowProfile.DefineConst("uLB",uLB2); - velcX1BCs.push_back(D3Q27BCFunction(inflowProfile,raiseVelSteps,D3Q27BCFunction::INFCONST)); - - D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter (velcX1BCs,dummy,dummy)); - velBCInteractor->addBCAdapter(velBCAdapter); - - //outflow - GbCuboid3DPtr densCuboid(new GbCuboid3D(originX1+geoLength[0]-coarseNodeDx, originX2-geoOverlap, originX3-geoOverlap, - originX1+geoLength[0]+geoOverlap, originX2+geoLength[1]+geoOverlap, originX3+geoLength[2]+geoOverlap )); - if(myid == 0) GbSystem3D::writeGeoObject(densCuboid.get(), pathname+"/geo/densCuboid", WbWriterVtkXmlASCII::getInstance()); - D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoInit)); - D3Q27InteractorPtr densInteractor( new D3Q27Interactor(densCuboid,grid,denBCAdapter,Interactor3D::SOLID) ); - - ////////////////////////////////////////////////////////////////////////// - if(myid == 0) - { - UBLOG(logINFO, "*****************************************"); - UBLOG(logINFO, "* Parameters *"); - UBLOG(logINFO, "* Re ="<<Re); - UBLOG(logINFO, "* Ma ="<<Ma); - UBLOG(logINFO, "* uReal ="<<uReal); - UBLOG(logINFO, "* nueReal ="<<nueReal); - UBLOG(logINFO, "* nue ="<<nueLB); - UBLOG(logINFO, "* velocity ="<<uLB); - // UBLOG(logINFO, "* LX1 (world/LB)="<<kanallaengeSI<<"/"<<kanallaengeSI/coarseNodeDx); - // UBLOG(logINFO, "* LX2 (world/LB)="<<kanalbreiteSI<<"/"<<kanalbreiteSI/coarseNodeDx); - UBLOG(logINFO, "* LX3 (world/LB)="<<kanalhoeheSI<<"/"<<kanalhoeheSI/coarseNodeDx); - UBLOG(logINFO, "* cdx ="<<coarseNodeDx); - UBLOG(logINFO, "* fdx ="<<fineNodeDx); - UBLOG(logINFO, "* dx_base ="<<coarseNodeDx<<" == "<<coarseNodeDx); - UBLOG(logINFO, "* dx_refine ="<<fineNodeDx<<" == "<<fineNodeDx ); - UBLOG(logINFO, "* nx1/2/3 ="<<nx[0]<<"/"<<nx[1]<<"/"<<nx[2]); - UBLOG(logINFO, "* blocknx1/2/3 ="<<blocknx[0]<<"/"<<blocknx[1]<<"/"<<blocknx[2]); - UBLOG(logINFO, "* x2Periodic ="<<periodicx2); - UBLOG(logINFO, "* x3Periodic ="<<periodicx3); - UBLOG(logINFO, "*****************************************"); - UBLOGML(logINFO, "UnitConverter:"<<unitConverter->toString()); - UBLOG(logINFO, "*****************************************"); - } - ////////////////////////////////////////////////////////////////////////// - //platte - GbTriFaceMesh3DPtr mesh (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(BrueckeFilename,"Netz")); - - double x1minMesh = mesh->getX1Minimum(); double x1maxMesh = mesh->getX1Maximum(); - double x2minMesh = mesh->getX2Minimum(); double x2maxMesh = mesh->getX2Maximum(); - double x3minMesh = mesh->getX3Minimum(); double x3maxMesh = mesh->getX3Maximum(); - - double drehpunktX=x1minMesh+(x1maxMesh-x1minMesh)*0.5;//triFaceMeshS->getX1Centroid(); - double drehpunktZ=x3minMesh+(x3maxMesh-x3minMesh)*0.5;//triFaceMeshS->getX3Centroid(); - double drehpunktY=x2minMesh+(x2maxMesh-x2minMesh)*0.5;// seedX2-0.5*nodeDelta;//+nx2*deltaX2+0.5*deltaX2; - - mesh->rotate(90.0,0.0,0.0); //TriFacMesh-KO-System anders als LB-KO-System - - x1minMesh = mesh->getX1Minimum(); x1maxMesh = mesh->getX1Maximum(); - x2minMesh = mesh->getX2Minimum(); x2maxMesh = mesh->getX2Maximum(); - x3minMesh = mesh->getX3Minimum(); x3maxMesh = mesh->getX3Maximum(); - - drehpunktX=x1minMesh+(x1maxMesh-x1minMesh)*0.5;//triFaceMeshS->getX1Centroid(); - drehpunktZ=x3minMesh+(x3maxMesh-x3minMesh)*0.5;//triFaceMeshS->getX3Centroid(); - drehpunktY=x2minMesh+(x2maxMesh-x2minMesh)*0.5;// seedX2-0.5*nodeDelta;//+nx2*deltaX2+0.5*deltaX2; - - double H3=1.05/100.0;//cm, Plattendicke - double scaleB=H3/(x3maxMesh-x3minMesh); - double scaleX2=(geoLength[2]+2.0*coarseNodeDx)/(x2minMesh-x2maxMesh); - - mesh->scale(scaleB,scaleB,scaleB); - x1minMesh = mesh->getX1Minimum(); x1maxMesh = mesh->getX1Maximum(); - x2minMesh = mesh->getX2Minimum(); x2maxMesh = mesh->getX2Maximum(); - x3minMesh = mesh->getX3Minimum(); x3maxMesh = mesh->getX3Maximum(); - double offsetXBridge=originBridgeX1;//originBridgeX1; - double offsetYBridge=originBridgeX2;//originBridgeX2; - double offsetZBridge=originBridgeX3;//originBridgeX3;//-0.5*(x3minMesh-x3maxMesh); - //mesh->translate(-x1minMesh+offsetXBridge, -x2minMesh-0.5*offsetYBridge-coarseNodeDx, -x3minMesh+offsetZBridge); - mesh->translate(-x1minMesh+offsetXBridge, -x2minMesh+offsetYBridge-coarseNodeDx, -x3minMesh+offsetZBridge-(x3maxMesh-x3minMesh)*0.5); - - x1minMesh = mesh->getX1Minimum(); x1maxMesh = mesh->getX1Maximum(); - x2minMesh = mesh->getX2Minimum(); x2maxMesh = mesh->getX2Maximum(); - x3minMesh = mesh->getX3Minimum(); x3maxMesh = mesh->getX3Maximum(); - - if(myid == 0) GbSystem3D::writeGeoObject( mesh.get(), pathname+"/geo/platte", WbWriterVtkXmlBinary::getInstance() ); - - ////////////////////////////////////////////////////////////////////////// - // Zackenband - ////////////////////////////////////////////////////////////////////////// - GbTriFaceMesh3DPtr meshBand (GbTriFaceMesh3DCreator::readMeshFromFile(ZckbndFilename, "NetzBand")); - meshBand->deleteRedundantNodes(); - - double x1minMeshB = meshBand->getX1Minimum(); double x1maxMeshB = meshBand->getX1Maximum(); - double x2minMeshB = meshBand->getX2Minimum(); double x2maxMeshB = meshBand->getX2Maximum(); - double x3minMeshB = meshBand->getX3Minimum(); double x3maxMeshB = meshBand->getX3Maximum(); - - x1minMeshB = meshBand->getX1Minimum(); x1maxMeshB = meshBand->getX1Maximum(); - x2minMeshB = meshBand->getX2Minimum(); x2maxMeshB = meshBand->getX2Maximum(); - x3minMeshB = meshBand->getX3Minimum(); x3maxMeshB = meshBand->getX3Maximum(); - - double H1B=1.5/100.0;//0.05;//cm, Banddicke..nachschauen!!! - double scaleBand=H1B/(x1maxMeshB-x1minMeshB);//H3B/(x3maxMeshB-x3minMeshB); - - meshBand->scale(scaleBand,scaleBand,scaleBand); - x1minMeshB = meshBand->getX1Minimum(); x1maxMeshB = meshBand->getX1Maximum(); - x2minMeshB = meshBand->getX2Minimum(); x2maxMeshB = meshBand->getX2Maximum(); - x3minMeshB = meshBand->getX3Minimum(); x3maxMeshB = meshBand->getX3Maximum(); - double dBandX=0.5/100.0;//1.29; //15mm-2.1mm Absand von Bandvorderkante - double dBandY=0.0/100.0; - double dBandZ=0.223/100.0;//0.344;//.... - double offsetXBridgeB=x1minMesh+dBandX;//originBridgeX1+dBandX;//originBridgeX1; - double offsetYBridgeB=originBridgeX2+dBandY;//originBridgeX2; - double offsetZBridgeB=originBridgeX3+dBandZ;//originBridgeX3;//-0.5*(x3minMesh-x3maxMesh); - meshBand->translate(-x1minMeshB+offsetXBridgeB, -x2minMeshB+offsetYBridgeB-coarseNodeDx, -x3minMeshB+offsetZBridgeB);//-(x3maxMeshB-x3minMeshB)*0.5); - - x1minMeshB = meshBand->getX1Minimum(); x1maxMeshB = meshBand->getX1Maximum(); - x2minMeshB = meshBand->getX2Minimum(); x2maxMeshB = meshBand->getX2Maximum(); - x3minMeshB = meshBand->getX3Minimum(); x3maxMeshB = meshBand->getX3Maximum(); - - GbSystem3D::writeGeoObject( meshBand.get(), pathname+"/geo/Band", WbWriterVtkXmlASCII::getInstance() ); - - /////////////////Band2 - GbTriFaceMesh3DPtr meshBand2(GbTriFaceMesh3DCreator::readMeshFromFile(ZckbndFilename, "NetzBand2")); - meshBand->deleteRedundantNodes(); - - double x1minMeshB2 = meshBand2->getX1Minimum(); double x1maxMeshB2 = meshBand2->getX1Maximum(); - double x2minMeshB2 = meshBand2->getX2Minimum(); double x2maxMeshB2 = meshBand2->getX2Maximum(); - double x3minMeshB2 = meshBand2->getX3Minimum(); double x3maxMeshB2 = meshBand2->getX3Maximum(); - - x1minMeshB2 = meshBand2->getX1Minimum(); x1maxMeshB2 = meshBand2->getX1Maximum(); - x2minMeshB2 = meshBand2->getX2Minimum(); x2maxMeshB2 = meshBand2->getX2Maximum(); - x3minMeshB2 = meshBand2->getX3Minimum(); x3maxMeshB2 = meshBand2->getX3Maximum(); - - double H1B2=1.5/100.0;//0.05;//cm, Banddicke..nachschauen!!! - double scaleBand2=H1B2/(x1maxMeshB2-x1minMeshB2);//H3B/(x3maxMeshB-x3minMeshB); - - meshBand2->scale(scaleBand2,scaleBand2,scaleBand2); - x1minMeshB2 = meshBand2->getX1Minimum(); x1maxMeshB2 = meshBand2->getX1Maximum(); - x2minMeshB2 = meshBand2->getX2Minimum(); x2maxMeshB2 = meshBand2->getX2Maximum(); - x3minMeshB2 = meshBand2->getX3Minimum(); x3maxMeshB2 = meshBand2->getX3Maximum(); - double dBandX2=0.5/100.0;//1.29; - double dBandY2=0.5/100.0; - double dBandZ2=0.223/100.0;//0.344;//... - double offsetXBridgeB2=x1minMesh+dBandX2;//originBridgeX1; - double offsetYBridgeB2=originBridgeX2+dBandY2;//originBridgeX2; - double offsetZBridgeB2=originBridgeX3+dBandZ2;//originBridgeX3;//-0.5*(x3minMesh-x3maxMesh); - meshBand2->translate(-x1minMeshB2+offsetXBridgeB2, -x2minMeshB2+offsetYBridgeB2-coarseNodeDx, -x3minMeshB2+offsetZBridgeB2);//-(x3maxMeshB2-x3minMeshB2)*0.5); - - x1minMeshB2 = meshBand2->getX1Minimum(); x1maxMeshB2 = meshBand2->getX1Maximum(); - x2minMeshB2 = meshBand2->getX2Minimum(); x2maxMeshB2 = meshBand2->getX2Maximum(); - x3minMeshB2 = meshBand2->getX3Minimum(); x3maxMeshB2 = meshBand2->getX3Maximum(); - - if(myid == 0) GbSystem3D::writeGeoObject( meshBand2.get(), pathname+"/geo/Band2", WbWriterVtkXmlASCII::getInstance() ); - ////////////////////////////////////////////////////////////////////////// - if(myid == 0) UBLOG(logINFO,"Refinement - start"); - - ////////////////////////////////////////////////////////////////////////// - // refine - ////////////////////////////////////////////////////////////////////////// - - ///////////platte ausmessen: - x1minMesh = mesh->getX1Minimum(); x1maxMesh = mesh->getX1Maximum(); - x2minMesh = mesh->getX2Minimum(); x2maxMesh = mesh->getX2Maximum(); - x3minMesh = mesh->getX3Minimum(); x3maxMesh = mesh->getX3Maximum(); - double deltaX3Platte=(x3maxMesh-x3minMesh); - - - // 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", WbWriterVtkXmlASCII::getInstance()); - - - - - //GbCuboid3DPtr refine2PlatteCube(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , x3minMesh-H3*0.5 - // , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3)); - //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP2(refine2PlatteCube, baseLevel, refineLevel-5); - //grid->accept(refineAdapterP2); - - GbCuboid3DPtr refine3PlatteCube(new GbCuboid3D( x1minMesh+H3*2.0 , originX2-geoOverlap , x3minMesh+H3*0.8 - , x1maxMesh-H3*0.2, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.1)); - //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP3(refine3PlatteCube, baseLevel, refineLevel-4); - //grid->accept(refineAdapterP3); - - GbCuboid3DPtr refine4PlatteCube(new GbCuboid3D( x1minMesh-H3*2.0 , originX2-geoOverlap , x3minMesh+deltaX3Platte*0.04 - , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.25)); - //if(myid == 0) GbSystem3D::writeGeoObject(refine4PlatteCube.get(), pathname+"/geo/refine4PlatteCube", WbWriterVtkXmlASCII::getInstance()); - //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP4(refine4PlatteCube, baseLevel, refineLevel-3); - //grid->accept(refineAdapterP4); - - GbCuboid3DPtr refine5PlatteCube(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap ,x3minMesh-deltaX3Platte/*x3minMesh+deltaX3Platte*0.8*//* x3minMesh+deltaX3Platte*0.8*/ - , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3)); - //if(myid == 0) GbSystem3D::writeGeoObject(refine5PlatteCube.get(), pathname+"/geo/refine5PlatteCube", WbWriterVtkXmlASCII::getInstance()); - //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP5(refine5PlatteCube, baseLevel, refineLevel-2); - //grid->accept(refineAdapterP5); - - GbCuboid3DPtr refine6PlatteCube(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , x3minMesh-deltaX3Platte*3.0/*x3minMesh+deltaX3Platte*0.9*/ - , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+deltaX3Platte*3.0)); - if(myid == 0) GbSystem3D::writeGeoObject(refine6PlatteCube.get(), pathname+"/geo/refine6PlatteCube", WbWriterVtkXmlASCII::getInstance()); - //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP6(refine6PlatteCube, baseLevel, refineLevel-1); - //grid->accept(refineAdapterP6); - - //GbCuboid3DPtr wallsX1X2minRef4(new GbCuboid3D( originX1-3.0*geoOverlap , originX2-3.0*geoOverlap , originX1-3.0*geoOverlap - // , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], kanalhoeheSI*0.1)); - - - - if (refineLevel > 0) - { - - RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel); - refineHelper.addGbObject( refine6PlatteCube, refineLevel-1); - refineHelper.addGbObject( refine5PlatteCube, refineLevel); - //refineHelper.addGbObject( refine4PlatteCube, refineLevel); - //refineHelper.addGbObject( refine3PlatteCube, refineLevel); - refineHelper.refine(); - if(myid == 0) UBLOG(logINFO,"Refinement - end"); - } - - - - if(myid == 0) UBLOG(logINFO,"Refinement - end"); - //////////////////////////////////////////// - //METIS - MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B); - grid->accept( metisVisitor ); - ///////////////////////////////////////////////// - ///interactoren - int bbOption1 = 0; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1)); - - D3Q27TriFaceMeshInteractorPtr triBridgeInteractor( new D3Q27TriFaceMeshInteractor(mesh, grid, bcObst,Interactor3D::SOLID)); - //sd.addInteractor(triBridgeInteractor); - - D3Q27TriFaceMeshInteractorPtr triBandInteractor( new D3Q27TriFaceMeshInteractor( meshBand, grid, bcObst,Interactor3D::SOLID) ); - - D3Q27TriFaceMeshInteractorPtr triBand2Interactor( new D3Q27TriFaceMeshInteractor( meshBand2, grid, bcObst,Interactor3D::SOLID) ); - - - //////////////////////////////////////////// - /////delete solid blocks - if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - start"); - SolidBlocksHelper sd(grid, comm); - - sd.addInteractor(triBridgeInteractor); - sd.addInteractor(triBandInteractor); - sd.addInteractor(triBand2Interactor); - sd.addInteractor(densInteractor); - sd.addInteractor(velBCInteractor); - sd.deleteSolidBlocks(); - if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end"); - - - - ////////////////////////////////////// - - - - unsigned long nob = grid->getNumberOfBlocks(); - unsigned long nod = nob * blocknx[0]*blocknx[1]*blocknx[2]; - unsigned long nod_real = nob * (blocknx[0]+3)*(blocknx[1]+3)*(blocknx[2]+3); - - double needMemAll = double(nod_real*(27*sizeof(double) + sizeof(int))); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - if(myid == 0) - { - UBLOG(logINFO,"Number of blocks = " << nob); - UBLOG(logINFO,"Number of nodes = " << nod); - UBLOG(logINFO,"Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO,"Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO,"Available memory per process = " << availMem << " bytes"); - UBLOG(logINFO,"Available memory per node/8.0 = " << (availMem/8.0) << " bytes"); - } - //////////////////////////// - grid->accept( metisVisitor ); - /////kernel - //LBMKernel3DPtr kernel(new LBMKernelETD3Q27CascadedTI(blocknx[0], blocknx[1], blocknx[2])); - LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(blocknx[0], blocknx[1], blocknx[2],0)); -// LBMKernel3DPtr kernel(new LBMKernelETD3Q27BGK (blocknx[0], blocknx[1], blocknx[2],1)); - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - kernel->setBCProcessor(bcProc); - - - SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem); - - grid->accept(kernelVisitor); - ////////////////////////////////// - //undef nodes - if (refineLevel > 0) - { - D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - ////////////////////////////////////////// - grid->addAndInitInteractor(triBridgeInteractor); - grid->addAndInitInteractor(triBandInteractor); - grid->addAndInitInteractor(triBand2Interactor); - grid->addAndInitInteractor( densInteractor ); - grid->addAndInitInteractor( velBCInteractor ); - - UbTimer timer; - timer.start(); - - grid->accept( metisVisitor ); - - if(myid == 0) UBLOG(logINFO,"Write blocks - start"); - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm)); - if(myid == 0) ppblocks->update(0); - if(myid == 0) UBLOG(logINFO,"Write blocks - end"); - - - - if(myid == 0) UBLOG(logINFO,"Write blocks - start"); - grid->accept( metisVisitor ); - if(myid == 0) ppblocks->update(1); - ppblocks.reset(); - if(myid == 0) UBLOG(logINFO,"Write blocks - end"); - - - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27OffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - - //domain decomposition - //PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - //grid->accept(pqPartVisitor); - - //initialization of decompositions - D3Q27ETInitDistributionsBlockVisitor initVisitor(1.0); - initVisitor.setVx1(inflowProfile); - grid->accept(initVisitor); - - //Postprozess - - - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), - unitConverter, comm, true)); - - - grid->doPostProcess(0); - ppgeo.reset(); - geoSch.reset(); - - if(myid == 0) UBLOG(logINFO,"Preprozess - end"); - -} - - - - UbSchedulerPtr visSch(new UbScheduler()); -visSch->addSchedule(1,1,3); - visSch->addSchedule(100,100,1000); - // visSch->addSchedule(1000,1000,100000); - // visSch->addSchedule(100000,100000,1000000); - // //TurbulenceIntensityPostprocessor tipp(grid, pathname + "/steps/stepTI", WbWriterVtkXmlBinary::getInstance(), visSch, comm); - UbSchedulerPtr resSch(new UbScheduler()); - resSch->addSchedule(0,20,1000); - AverageValuesPostprocessor Avpp(grid, pathname + "/steps/stepAV", WbWriterVtkXmlBinary::getInstance(), visSch/*wann wird rausgeschrieben*/,resSch/*wann wird resettet*/,comm); - D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), unitConverter, comm);// unitConverter, comm); - - UbSchedulerPtr nupsSch(new UbScheduler(10, 10, 100)); - NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm); - - //} - mu::Parser decrViscFunc; - decrViscFunc.SetExpr("nue0+c0/(t+1)/(t+1)"); - decrViscFunc.DefineConst("nue0", nueLB); - decrViscFunc.DefineConst("c0", 0.1); - UbSchedulerPtr DecrViscSch(new UbScheduler()); - DecrViscSch->addSchedule(10,10,1000); - DecreaseViscosityPostprocessor decrViscPPPtr(grid, DecrViscSch,&decrViscFunc, comm); - - cout << "PID = " << myid << " Total Physical Memory (RAM): " << MemoryUtil::getTotalPhysMem()<<endl; - cout << "PID = " << myid << " Physical Memory currently used: " << MemoryUtil::getPhysMemUsed()<<endl; - cout << "PID = " << myid << " Physical Memory currently used by current process: " << MemoryUtil::getPhysMemUsedByMe()<<endl; - - double endTime = 200001; - 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[]) -{ - - run(argv[1]); - - return 0; -} - diff --git a/apps/cpu/plate/plate.old b/apps/cpu/plate/plate.old deleted file mode 100644 index 4d7b2e06e1931eacdf860937e1db15fc33b2de6a..0000000000000000000000000000000000000000 --- a/apps/cpu/plate/plate.old +++ /dev/null @@ -1,615 +0,0 @@ -#include <iostream> -#include <string> - -#include "numerics/geometry3d/CoordinateTransformation3D.h" -#include "Grid3D.h" -#include "GenBlocksGridVisitor.h" -#include "numerics/geometry3d/GbSystem3D.h" -#include "numerics/geometry3d/GbCuboid3D.h" -#include "numerics/geometry3d/GbCylinder3D.h" -#include <numerics/geometry3d/GbSphere3D.h> -#include "basics/writer/WbWriterVtkXmlASCII.h" -#include "basics/writer/WbWriterVtkXmlBinary.h" -#include "RefineCrossAndInsideGbObjectBlockVisitor.h" -#include "RatioBlockVisitor.h" -#include "RatioSmoothBlockVisitor.h" -#include "OverlapBlockVisitor.h" -#include "RefineInterGbObjectsVisitor.h" -#include "RefineCrossAndInsideGbObjectBlockVisitor.h" -#include "SetKernelBlockVisitor.h" -#include "LBMKernelETD3Q27Cascaded.h" -#include "D3Q27MacroscopicQuantitiesPostprocessor.h" -#include "MPICommunicator.h" -#include "D3Q27ETBCProcessor.h" -#include "SimulationParameters.h" -#include "D3Q27SetUndefinedNodesBlockVisitor.h" -#include "SetInterpolationDirsBlockVisitor.h" -#include "D3Q27SetConnectorsBlockVisitor.h" -#include "NullCommunicator.h" -#include "D3Q27ETInitDistributionsBlockVisitor.h" -#include "CalculationManager.h" -#include "PQueuePartitioningGridVisitor.h" -#include "MetisPartitioningGridVisitor.h" -#include "D3Q27Interactor.h" -#include "D3Q27NoSlipBCAdapter.h" -#include "D3Q27VelocityBCAdapter.h" -#include "D3Q27DensityBCAdapter.h" -#include "D3Q27BoundaryConditionAdapter.h" -#include "StringUtil.hpp" -#include "D3Q27OffsetInterpolationProcessor.h" -#include "D3Q27CompactInterpolationProcessor.h" -#include "SyncBcBlockVisitor.h" -#include "numerics/geometry3d/creator/GbTriFaceMesh3DCreator.h" -#include "numerics/geometry3d/GbTriFaceMesh3D.h" -#include "D3Q27TriFaceMeshInteractor.h" -#include "MathUtil.hpp" -#include "SolidBlocksHelper.h" -#include "LBMKernelETD3Q27CascadedTI.h" -#include "TurbulenceIntensityPostprocessor.h" -#include "RestartPostprocessor.h" -#include "BlocksPostprocessor.h" -#include "NUPSCounterPostprocessor.h" - -using namespace std; - - -void run(const char *cstr) -{ - try - { - string machine = QUOTEME(CAB_MACHINE); - string BrueckeFilename; - string ZckbndFilename; - string pathname; - string pathGeo; - int numOfThreads =1; - bool logfile = false; - double availMem = 0; - - CommunicatorPtr comm(new MPICommunicator()); - int myid = comm->getProcessID(); - - if(machine == "BOMBADIL") - { - pathname = "c:/temp/plate"; - pathGeo = "c:/Data/plate"; - numOfThreads = 1; - logfile = false; - availMem = 3.0e9; - } - else if(machine == "M01" || machine == "M02") - { - pathname = "/work/koskuche/scratch/plate"; - pathGeo = "/home/koskuche/data/plate"; - numOfThreads = 8; - availMem = 12.0e9; - - if(myid ==0) - { - stringstream logFilename; - logFilename << pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - } - else throw UbException(UB_EXARGS, "unknown CAB_MACHINE"); - - BrueckeFilename = pathGeo + "/platte_raw.stl"; - ZckbndFilename= pathGeo + "/2zackenbaender0.stl"; - - - - if(myid ==0 && logfile) - { - stringstream logFilename; - logFilename << pathname + "/logfile.log"; - UbLog::output_policy::setStream(logFilename.str()); - } - - int baseLevel, refineLevel,nx[3],blocknx[3]; - double Re,velocity,rhoInit,vx1Init;//,vx2Init,vx3Init; - - ////////////////////////////////////////////////////////////////////////// - //physik - ////////////////////////////////////////////////////////////////////////// - Re = 11900;// 13286;//13286;//gemessen 18.98 m/s...*5.0 zum testen ob was passiert - velocity = 0.01; - vx1Init = 0.01; - rhoInit = 1.0; - SimulationParametersPtr param = SimulationParameters::getInstanz(); - param->setCollisionModelType(SimulationParameters::COMPRESSIBLE); - - ///////////////Knotenabmessungen: - //int KnotenCubeCoarse=40; - nx[0] = 120;//60;//86;//43;//65;//50; //länge - nx[1] = 1;//6;///1;//5;// //breite - nx[2] = 32;//18;//5;//15;//15; //höhe gebiet - blocknx[0] = 15; - blocknx[1] = 15; - blocknx[2] = 15; - - baseLevel = 0; - refineLevel = 4; - - int inflowCubeLevel = 1; - int bottomLevel = 1; - - ///////////////Weltabmessungen: - double kanalhoeheSI = 60.0/100.0;//60.0/100.0;//cm, Kanalhöhe - double kanalbreiteSI = 9.9/100.0;//1.65/100.0;//13.2/100.0;////40.0/100.0; //cm, Kanalbreite //13.2 zeilbreite - double kanallaengeSI = kanalhoeheSI*30.0/18.0;//80.0/100.0;//cm, Kanallänge, ist nicht angegeben - - // double refinewidth1=kanalhoeheSI/10.0; - - double fineNodeDx = (kanalhoeheSI) / (double)( blocknx[2]*nx[2]*(1<<refineLevel)+1 ); //+1--> gitter liegt jeweils 0.5dx innerhalb - double coarseNodeDx = fineNodeDx * (double)(1<<refineLevel);//geowerte - - double blockLengthx1 = blocknx[0]*coarseNodeDx; //geowerte - double blockLengthx2 = blockLengthx1; - double blockLengthx3 = blockLengthx1; - - double originX1 = 0.0;//-50.0*propellerDurchmesser; //geowerte - double originX2 = 0.0;//-0.5*blockLengthx2*nx2; - double originX3 = 0.0;// minX3 + 0.5*fineNodeDx; - - double geoLength[] = { nx[0]*blockLengthx1, nx[1]*blockLengthx2, nx[2]*blockLengthx3}; - - //position vorderkante cube - double originBridgeX1 = 20.0/100.0; //cm, geraten - double originBridgeX2 = 0.0;//0.5*params.nx[1]*blockLengthx2-0.5*H-fineNodeDx; - double originBridgeX3 = kanalhoeheSI*0.5;//H*0.0-fineNodeDx; //boden - - bool periodicx1 = false; - bool periodicx2 = true; - bool periodicx3 = true; - - //########################################################################## - //## physical parameters - //########################################################################## - double smagorinskiConstant = 0.18; - - - double rhoLB = 1.0; - double rhoReal = 1.0; - double nueReal = 0.000015;//0.015; - - double hReal = 0.0105;//<-m 1.05;//Plattendicke in cm(! cm nicht m !) - double uReal = Re*nueReal/hReal; - - //##Machzahl: - //#Ma = uReal/csReal - double Ma = 0.05;//0.0553;//Ma-Real! - double csReal = uReal/Ma; - double hLB = hReal/coarseNodeDx; - - LBMUnitConverter unitConverter(hReal, csReal, rhoReal, hLB); - - double uLB = uReal * unitConverter.getFactorVelocityWToLb(); - double nueLB = nueReal * unitConverter.getFactorViscosityWToLb(); - - velocity = uLB; - double viscosity = nueLB; - - Grid3DPtr grid(new Grid3D()); - UbSchedulerPtr rSch(new UbScheduler(5000,5000,1000000)); - RestartPostprocessor rp(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY); - - ////////////////////////////////////////////////////////////////////////// - - std::string opt; - - if(cstr!= NULL) - opt = std::string(cstr); - - if(/*(cstr== NULL)*/cstr!= NULL) - { - opt = std::string(cstr); - - if(myid==0) UBLOG(logINFO,"Restart step: " << opt); - - grid = rp.restart(UbSystem::stringTo<int>(opt)); - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27OffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - - //domain decomposition - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - } - else - { - //bounding box - double g_minX1 = originX1; - double g_minX2 = originX2; - double g_minX3 = originX3; - - double g_maxX1 = originX1 + geoLength[0]; - double g_maxX2 = originX2 + geoLength[1]; - double g_maxX3 = originX3 + geoLength[2]; - - //set grid - grid->setDeltaX(coarseNodeDx); - grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - grid->setPeriodicX1(periodicx1); - grid->setPeriodicX2(periodicx2); - grid->setPeriodicX3(periodicx3); - - - 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", WbWriterVtkXmlASCII::getInstance()); - - GenBlocksGridVisitor genBlocks; - genBlocks.addGeoObject(gridCube); - grid->accept(genBlocks); - - ////////////////////////////////////////////////////////////////////////// - //platte - GbTriFaceMesh3DPtr mesh (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(BrueckeFilename,"Netz")); - - double x1minMesh = mesh->getX1Minimum(); double x1maxMesh = mesh->getX1Maximum(); - double x2minMesh = mesh->getX2Minimum(); double x2maxMesh = mesh->getX2Maximum(); - double x3minMesh = mesh->getX3Minimum(); double x3maxMesh = mesh->getX3Maximum(); - - double drehpunktX=x1minMesh+(x1maxMesh-x1minMesh)*0.5;//triFaceMeshS->getX1Centroid(); - double drehpunktZ=x3minMesh+(x3maxMesh-x3minMesh)*0.5;//triFaceMeshS->getX3Centroid(); - double drehpunktY=x2minMesh+(x2maxMesh-x2minMesh)*0.5;// seedX2-0.5*nodeDelta;//+nx2*deltaX2+0.5*deltaX2; - - mesh->rotate(90.0,0.0,0.0); //TriFacMesh-KO-System anders als LB-KO-System - - x1minMesh = mesh->getX1Minimum(); x1maxMesh = mesh->getX1Maximum(); - x2minMesh = mesh->getX2Minimum(); x2maxMesh = mesh->getX2Maximum(); - x3minMesh = mesh->getX3Minimum(); x3maxMesh = mesh->getX3Maximum(); - - drehpunktX=x1minMesh+(x1maxMesh-x1minMesh)*0.5;//triFaceMeshS->getX1Centroid(); - drehpunktZ=x3minMesh+(x3maxMesh-x3minMesh)*0.5;//triFaceMeshS->getX3Centroid(); - drehpunktY=x2minMesh+(x2maxMesh-x2minMesh)*0.5;// seedX2-0.5*nodeDelta;//+nx2*deltaX2+0.5*deltaX2; - - double H3=1.05/100.0;//cm, Plattendicke - double scaleB=H3/(x3maxMesh-x3minMesh); - double scaleX2=(geoLength[2]+2.0*coarseNodeDx)/(x2minMesh-x2maxMesh); - - mesh->scale(scaleB,scaleB,scaleB); - x1minMesh = mesh->getX1Minimum(); x1maxMesh = mesh->getX1Maximum(); - x2minMesh = mesh->getX2Minimum(); x2maxMesh = mesh->getX2Maximum(); - x3minMesh = mesh->getX3Minimum(); x3maxMesh = mesh->getX3Maximum(); - double offsetXBridge=originBridgeX1;//originBridgeX1; - double offsetYBridge=originBridgeX2;//originBridgeX2; - double offsetZBridge=originBridgeX3;//originBridgeX3;//-0.5*(x3minMesh-x3maxMesh); - //mesh->translate(-x1minMesh+offsetXBridge, -x2minMesh-0.5*offsetYBridge-coarseNodeDx, -x3minMesh+offsetZBridge); - mesh->translate(-x1minMesh+offsetXBridge, -x2minMesh+offsetYBridge-coarseNodeDx, -x3minMesh+offsetZBridge-(x3maxMesh-x3minMesh)*0.5); - - x1minMesh = mesh->getX1Minimum(); x1maxMesh = mesh->getX1Maximum(); - x2minMesh = mesh->getX2Minimum(); x2maxMesh = mesh->getX2Maximum(); - x3minMesh = mesh->getX3Minimum(); x3maxMesh = mesh->getX3Maximum(); - - if(myid == 0) GbSystem3D::writeGeoObject( mesh.get(), pathname+"/geo/platte", WbWriterVtkXmlBinary::getInstance() ); - - ////////////////////////////////////////////////////////////////////////// - // Zackenband - ////////////////////////////////////////////////////////////////////////// - GbTriFaceMesh3DPtr meshBand (GbTriFaceMesh3DCreator::readMeshFromFile(ZckbndFilename, "NetzBand")); - meshBand->deleteRedundantNodes(); - - double x1minMeshB = meshBand->getX1Minimum(); double x1maxMeshB = meshBand->getX1Maximum(); - double x2minMeshB = meshBand->getX2Minimum(); double x2maxMeshB = meshBand->getX2Maximum(); - double x3minMeshB = meshBand->getX3Minimum(); double x3maxMeshB = meshBand->getX3Maximum(); - - x1minMeshB = meshBand->getX1Minimum(); x1maxMeshB = meshBand->getX1Maximum(); - x2minMeshB = meshBand->getX2Minimum(); x2maxMeshB = meshBand->getX2Maximum(); - x3minMeshB = meshBand->getX3Minimum(); x3maxMeshB = meshBand->getX3Maximum(); - - double H1B=1.5/100.0;//0.05;//cm, Banddicke..nachschauen!!! - double scaleBand=H1B/(x1maxMeshB-x1minMeshB);//H3B/(x3maxMeshB-x3minMeshB); - - meshBand->scale(scaleBand,scaleBand,scaleBand); - x1minMeshB = meshBand->getX1Minimum(); x1maxMeshB = meshBand->getX1Maximum(); - x2minMeshB = meshBand->getX2Minimum(); x2maxMeshB = meshBand->getX2Maximum(); - x3minMeshB = meshBand->getX3Minimum(); x3maxMeshB = meshBand->getX3Maximum(); - double dBandX=0.5/100.0;//1.29; //15mm-2.1mm Absand von Bandvorderkante - double dBandY=0.0/100.0; - double dBandZ=0.223/100.0;//0.344;//.... - double offsetXBridgeB=x1minMesh+dBandX;//originBridgeX1+dBandX;//originBridgeX1; - double offsetYBridgeB=originBridgeX2+dBandY;//originBridgeX2; - double offsetZBridgeB=originBridgeX3+dBandZ;//originBridgeX3;//-0.5*(x3minMesh-x3maxMesh); - meshBand->translate(-x1minMeshB+offsetXBridgeB, -x2minMeshB+offsetYBridgeB-coarseNodeDx, -x3minMeshB+offsetZBridgeB);//-(x3maxMeshB-x3minMeshB)*0.5); - - x1minMeshB = meshBand->getX1Minimum(); x1maxMeshB = meshBand->getX1Maximum(); - x2minMeshB = meshBand->getX2Minimum(); x2maxMeshB = meshBand->getX2Maximum(); - x3minMeshB = meshBand->getX3Minimum(); x3maxMeshB = meshBand->getX3Maximum(); - - GbSystem3D::writeGeoObject( meshBand.get(), pathname+"/geo/Band", WbWriterVtkXmlASCII::getInstance() ); - - /////////////////Band2 - GbTriFaceMesh3DPtr meshBand2(GbTriFaceMesh3DCreator::readMeshFromFile(ZckbndFilename, "NetzBand2")); - meshBand->deleteRedundantNodes(); - - double x1minMeshB2 = meshBand2->getX1Minimum(); double x1maxMeshB2 = meshBand2->getX1Maximum(); - double x2minMeshB2 = meshBand2->getX2Minimum(); double x2maxMeshB2 = meshBand2->getX2Maximum(); - double x3minMeshB2 = meshBand2->getX3Minimum(); double x3maxMeshB2 = meshBand2->getX3Maximum(); - - x1minMeshB2 = meshBand2->getX1Minimum(); x1maxMeshB2 = meshBand2->getX1Maximum(); - x2minMeshB2 = meshBand2->getX2Minimum(); x2maxMeshB2 = meshBand2->getX2Maximum(); - x3minMeshB2 = meshBand2->getX3Minimum(); x3maxMeshB2 = meshBand2->getX3Maximum(); - - double H1B2=1.5/100.0;//0.05;//cm, Banddicke..nachschauen!!! - double scaleBand2=H1B2/(x1maxMeshB2-x1minMeshB2);//H3B/(x3maxMeshB-x3minMeshB); - - meshBand2->scale(scaleBand2,scaleBand2,scaleBand2); - x1minMeshB2 = meshBand2->getX1Minimum(); x1maxMeshB2 = meshBand2->getX1Maximum(); - x2minMeshB2 = meshBand2->getX2Minimum(); x2maxMeshB2 = meshBand2->getX2Maximum(); - x3minMeshB2 = meshBand2->getX3Minimum(); x3maxMeshB2 = meshBand2->getX3Maximum(); - double dBandX2=0.5/100.0;//1.29; - double dBandY2=0.5/100.0; - double dBandZ2=0.223/100.0;//0.344;//... - double offsetXBridgeB2=x1minMesh+dBandX2;//originBridgeX1; - double offsetYBridgeB2=originBridgeX2+dBandY2;//originBridgeX2; - double offsetZBridgeB2=originBridgeX3+dBandZ2;//originBridgeX3;//-0.5*(x3minMesh-x3maxMesh); - meshBand2->translate(-x1minMeshB2+offsetXBridgeB2, -x2minMeshB2+offsetYBridgeB2-coarseNodeDx, -x3minMeshB2+offsetZBridgeB2);//-(x3maxMeshB2-x3minMeshB2)*0.5); - - x1minMeshB2 = meshBand2->getX1Minimum(); x1maxMeshB2 = meshBand2->getX1Maximum(); - x2minMeshB2 = meshBand2->getX2Minimum(); x2maxMeshB2 = meshBand2->getX2Maximum(); - x3minMeshB2 = meshBand2->getX3Minimum(); x3maxMeshB2 = meshBand2->getX3Maximum(); - - if(myid == 0) GbSystem3D::writeGeoObject( meshBand2.get(), pathname+"/geo/Band2", WbWriterVtkXmlASCII::getInstance() ); - ////////////////////////////////////////////////////////////////////////// - if(myid == 0) - { - UBLOG(logINFO, "*****************************************"); - UBLOG(logINFO, "* Parameters *"); - UBLOG(logINFO, "* Re ="<<Re); - UBLOG(logINFO, "* Ma ="<<Ma); - UBLOG(logINFO, "* uReal ="<<uReal); - UBLOG(logINFO, "* nueReal ="<<nueReal); - UBLOG(logINFO, "* nue ="<<nueLB); - UBLOG(logINFO, "* velocity ="<<uLB); - UBLOG(logINFO, "* LX1 (world/LB)="<<kanallaengeSI<<"/"<<kanallaengeSI/coarseNodeDx); - UBLOG(logINFO, "* LX2 (world/LB)="<<kanalbreiteSI<<"/"<<kanalbreiteSI/coarseNodeDx); - UBLOG(logINFO, "* LX3 (world/LB)="<<kanalhoeheSI<<"/"<<kanalhoeheSI/coarseNodeDx); - //UBLOG(logINFO, "* dxInflow-Cube ="<<velBCCuboid->getX1Maximum()-mesh->getX1Minimum()); - UBLOG(logINFO, "* cdx ="<<coarseNodeDx); - UBLOG(logINFO, "* fdx ="<<fineNodeDx); - //UBLOG(logINFO, "* inflowProfile ="<<inflowProfile.GetExpr()); - UBLOG(logINFO, "* dx_base ="<<coarseNodeDx<<" == "<<coarseNodeDx); - UBLOG(logINFO, "* dx_refine ="<<fineNodeDx<<" == "<<fineNodeDx ); - //UBLOG(logINFO, "* raiseVelSteps ="<<raiseVelSteps); - UBLOG(logINFO, "* nx1/2/3 ="<<nx[0]<<"/"<<nx[1]<<"/"<<nx[2]); - UBLOG(logINFO, "* blocknx1/2/3 ="<<blocknx[0]<<"/"<<blocknx[1]<<"/"<<blocknx[2]); - UBLOG(logINFO, "* x2Periodic ="<<periodicx2); - UBLOG(logINFO, "* x3Periodic ="<<periodicx3); - UBLOG(logINFO, "*****************************************"); - UBLOGML(logINFO, "UnitConverter:"<<unitConverter.toString()); - UBLOG(logINFO, "*****************************************"); - } - if(myid == 0) UBLOG(logINFO,"Refinement - start"); - double geoOverlap = 3.0*coarseNodeDx; - ////////////////////////////////////////////////////////////////////////// - // refine - ////////////////////////////////////////////////////////////////////////// - ///////////platte ausmessen: - x1minMesh = mesh->getX1Minimum(); x1maxMesh = mesh->getX1Maximum(); - x2minMesh = mesh->getX2Minimum(); x2maxMesh = mesh->getX2Maximum(); - x3minMesh = mesh->getX3Minimum(); x3maxMesh = mesh->getX3Maximum(); - double deltaX3Platte=(x3maxMesh-x3minMesh); - - - //GbCuboid3DPtr refine1PlatteCube(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , x3minMesh-H3 - // , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3)); - //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP1(refine1PlatteCube, baseLevel, refineLevel-6); - //grid->accept(refineAdapterP1); - - // GbCuboid3DPtr refine2PlatteCube(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , x3minMesh-H3*0.5 - // , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3)); - // RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP2(refine2PlatteCube, baseLevel, refineLevel-5); - // grid->accept(refineAdapterP2); - - GbCuboid3DPtr refine3PlatteCube(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , x3minMesh-H3*0.5 - , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.5)); - RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP3(refine3PlatteCube, baseLevel, refineLevel-4); - grid->accept(refineAdapterP3); - - GbCuboid3DPtr refine4PlatteCube(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , x3minMesh+deltaX3Platte*0.0 - , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.25)); - if(myid == 0) GbSystem3D::writeGeoObject(refine4PlatteCube.get(), pathname+"/geo/refine4PlatteCube", WbWriterVtkXmlASCII::getInstance()); - RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP4(refine4PlatteCube, baseLevel, refineLevel-3); - grid->accept(refineAdapterP4); - - GbCuboid3DPtr refine5PlatteCube(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap ,x3minMesh+deltaX3Platte*0.1/* x3minMesh+deltaX3Platte*0.8*/ - , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.00375)); - if(myid == 0) GbSystem3D::writeGeoObject(refine5PlatteCube.get(), pathname+"/geo/refine5PlatteCube", WbWriterVtkXmlASCII::getInstance()); - RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP5(refine5PlatteCube, baseLevel, refineLevel-2); - grid->accept(refineAdapterP5); - - GbCuboid3DPtr refine6PlatteCube(new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , x3minMesh-deltaX3Platte*0.1/*x3minMesh+deltaX3Platte*0.9*/ - , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+deltaX3Platte*0.9)); - if(myid == 0) GbSystem3D::writeGeoObject(refine6PlatteCube.get(), pathname+"/geo/refine6PlatteCube", WbWriterVtkXmlASCII::getInstance()); - RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP6(refine6PlatteCube, baseLevel, refineLevel-1); - grid->accept(refineAdapterP6); - - //GbCuboid3DPtr refine7PlatteCube(new GbCuboid3D(originX1-geoOverlap , originX2-geoOverlap , x3minMesh-deltaX3Platte*0.3, - // meshBand->getX1Maximum()+meshBand->getLengthX1()*3.0, originX2+geoOverlap+geoLength[1], x3maxMesh)); - //if(myid == 0) GbSystem3D::writeGeoObject(refine7PlatteCube.get(), pathname+"/geo/refine7PlatteCube", WbWriterVtkXmlASCII::getInstance()); - //RefineCrossAndInsideGbObjectBlockVisitor refineAdapterP7(refine7PlatteCube, baseLevel, refineLevel-1); - //grid->accept(refineAdapterP7); - - RatioBlockVisitor ratioVisitor(refineLevel); - grid->accept(ratioVisitor); - RatioSmoothBlockVisitor ratioSmoothVisitor(refineLevel); - grid->accept(ratioSmoothVisitor); - OverlapBlockVisitor overlapVisitor(refineLevel); - grid->accept(overlapVisitor); - std::vector<int> dirs; - D3Q27System::getLBMDirections(dirs); - SetInterpolationDirsBlockVisitor interDirsVisitor(dirs); - grid->accept(interDirsVisitor); - - if(myid == 0) UBLOG(logINFO,"Refinement - end"); - - if(myid == 0) UBLOG(logINFO,"Write blocks - start"); - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm)); - if(myid == 0) ppblocks->update(0); - //ppblocks.reset(); - if(myid == 0) UBLOG(logINFO,"Write blocks - end"); - - MetisPartitioningGridVisitor metisVisitor(numOfThreads, D3Q27System::B, comm, false); - grid->accept( metisVisitor ); - - if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - start"); - SolidBlocksHelper sd(grid, comm); - - //iteractors - int bbOption1 = 0; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1)); - - D3Q27TriFaceMeshInteractorPtr triBridgeInteractor( new D3Q27TriFaceMeshInteractor(mesh, grid, bcObst,Interactor3D::SOLID)); - sd.addInteractor(triBridgeInteractor); - - D3Q27TriFaceMeshInteractorPtr triBandInteractor( new D3Q27TriFaceMeshInteractor( meshBand, grid, bcObst,Interactor3D::SOLID) ); - - D3Q27TriFaceMeshInteractorPtr triBand2Interactor( new D3Q27TriFaceMeshInteractor( meshBand2, grid, bcObst,Interactor3D::SOLID) ); - - sd.deleteSolidBlocks(); - if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end"); - - if(myid == 0) UBLOG(logINFO,"Write blocks - start"); - grid->accept( metisVisitor ); - //BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm)); - if(myid == 0) ppblocks->update(0); - ppblocks.reset(); - if(myid == 0) UBLOG(logINFO,"Write blocks - end"); - - unsigned long nob = grid->getNumberOfBlocks(); - unsigned long nod = nob * blocknx[0]*blocknx[1]*blocknx[2]; - - double needMemAll = double(nod*(27*sizeof(double) + sizeof(int))*2); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - if(myid == 0) - { - UBLOG(logINFO,"Number of blocks = " << nob); - UBLOG(logINFO,"Number of nodes = " << nod); - UBLOG(logINFO,"Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO,"Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO,"Available memory per process = " << availMem << " bytes"); - } - - LBMKernel3DPtr kernel(new LBMKernelETD3Q27Cascaded(blocknx[0], blocknx[1], blocknx[2])); - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem); - grid->accept(kernelVisitor); - - if (refineLevel > 0) - { - D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - //discretization - grid->addAndInitInteractor(triBridgeInteractor); - grid->addAndInitInteractor(triBandInteractor); - grid->addAndInitInteractor(triBand2Interactor); - - //outflow - GbCuboid3DPtr densCuboid(new GbCuboid3D(originX1+geoLength[0]-coarseNodeDx, originX2-geoOverlap, originX3-geoOverlap, - originX1+geoLength[0]+geoOverlap, originX2+geoLength[1]+geoOverlap, originX3+geoLength[2]+geoOverlap )); - if(myid == 0) GbSystem3D::writeGeoObject(densCuboid.get(), pathname+"/geo/densCuboid", WbWriterVtkXmlASCII::getInstance()); - D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoInit)); - D3Q27InteractorPtr densInteractor( new D3Q27Interactor(densCuboid,grid,denBCAdapter,Interactor3D::SOLID) ); - grid->addAndInitInteractor( densInteractor ); - - //inflow - double uLB2=uLB*0.96*1.02;//*0.5; - double raiseVelSteps = 0; - vector<D3Q27BCFunction> velcX1BCs,dummy; - - mu::Parser inflowProfile; - inflowProfile.SetExpr("uLB"); - - inflowProfile.DefineConst("uLB",uLB2); - velcX1BCs.push_back(D3Q27BCFunction(inflowProfile,raiseVelSteps,D3Q27BCFunction::INFCONST)); - - GbCuboid3DPtr velBCCuboid(new GbCuboid3D(originX1-geoOverlap, originX2-geoOverlap, originX3-geoOverlap, - originX1+coarseNodeDx, originX2+geoLength[1]+geoOverlap, originX3+geoLength[2]+geoOverlap)); - if(myid == 0) GbSystem3D::writeGeoObject(velBCCuboid.get(), pathname+"/geo/velBCCuboid", WbWriterVtkXmlASCII::getInstance()); - - D3Q27InteractorPtr velBCInteractor(new D3Q27Interactor(velBCCuboid,grid,Interactor3D::SOLID)); - D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter (velcX1BCs,dummy,dummy)); - velBCInteractor->addBCAdapter(velBCAdapter); - grid->addAndInitInteractor( velBCInteractor ); - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27OffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - - //domain decomposition - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - //initialization of decompositions - D3Q27ETInitDistributionsBlockVisitor initVisitor(1.0); - initVisitor.setVx1(inflowProfile); - grid->accept(initVisitor); - - //Postrozess - LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), - conv, comm, true)); - grid->doPostProcess(0); - ppgeo.reset(); - geoSch.reset(); - - if(myid == 0) UBLOG(logINFO,"Preprozess - end"); - - if(myid == 0) - { - UBLOG(logINFO, "* dxInflow-Cube ="<<velBCCuboid->getX1Maximum()-mesh->getX1Minimum()); - UBLOG(logINFO, "* inflowProfile ="<<inflowProfile.GetExpr()); - UBLOG(logINFO, "* raiseVelSteps ="<<raiseVelSteps); - } -} - - LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - double outTime = 1000; - UbSchedulerPtr visSch(new UbScheduler(outTime)); - visSch->addSchedule(1000,1000,10000); - visSch->addSchedule(10000,10000,100000); - visSch->addSchedule(100000,100000,1000000); - D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), conv, comm); - - UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); - NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm); - - double endTime = 1000001; - 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[]) -{ - - run(argv[1]); - - return 0; -} - diff --git a/apps/cpu/plate/sonjas_org.cpp.vf b/apps/cpu/plate/sonjas_org.cpp.vf deleted file mode 100644 index 58b0d27a6219ba6fc1b2b54e14068e06b8ba4865..0000000000000000000000000000000000000000 --- a/apps/cpu/plate/sonjas_org.cpp.vf +++ /dev/null @@ -1,677 +0,0 @@ - - -..damit wir gleich damit anfangen k�nnen. So sieht das Setup aus. -Sonja - - -SpD3Q19Plattenanstroemung.hpp - -#include <topology/amr3d/blockadaptation/AMR3DCrossAndInsideGbObject3DAdapter.h> -//AMR3DCrossAndInsideGbObject3DAdapter -#include <topology/amr3d/lbmd3q19/utils/D3Q19MetisTools.h> -#include <topology/amr3d/lbmd3q19/gridadaptation/D3Q19GridInformationGridAdapter.h> -#include <topology/amr3d/lbmd3q19/gridadaptation/D3Q19SetConnectorsGridAdapter.h> -#include <topology/amr3d/lbmd3q19/gridadaptation/D3Q19InitDistributionsGridAdapter.h> -#include <topology/amr3d/gridadaptation/AMR3DGridLevelPartitionMetisAdapter.h> -#include <topology/amr3d/gridadaptation/AMR3DGridPartitionOneDirectionAdapter.h> -#include <topology/amr3d/lbmd3q19/bcadapter/D3Q19DensityLodiBCAdapter.h> -#include <topology/amr3d/lbmd3q19/singlephase/gridadaptation/SpD3Q19SpongeLayerAdapter.h> -#include <topology/amr3d/lbmd3q19/gridadaptation/D3Q19InitDistributionsGridAdapter.h> - -#include <numerics/geometry3d/GbTriFaceMesh3D.h> -#include <numerics/geometry3d/creator/GbTriFaceMesh3DCreator.h> -#include <topology/amr3d/lbmd3q19/interactor/D3Q19AMRTriFaceMeshInteractor.h> -#include <topology/amr3d/lbmd3q19/services/adapter/D3Q19ClientGridWriteInteractorNodeFiles.h> -#include <topology/amr3d/lbmd3q19/gridadaptation/D3Q19ChangeSlipToNoSlipGridAdapter.h> - -using namespace std; - -void SpD3Q19MasterTestcases::start( RcfClient<IRcfIpService>& ipService, - RcfClient<IRcfD3Q19TopologyService>& topoService, - RcfClient<IRcfD3Q19AMRInteractorService>& interactorService, - RcfClient<IRcfD3Q19CalculationManager>& calculationManager, - std::vector< RcfClient<IRcfD3Q19CalcService> >& calcServices, - std::string inputfile ) -{ - using namespace std; - UBLOG(logERROR,"Testcase GBBridge_Sonja "); - - string outpath = UbStaticPathMap::getPath(UbStaticPathMap::GLOBAL); - - SpD3Q19TestCaseParameters params; - bool useLODI; - bool initWithLogProfile; - ////////////////////////////////////////////////////////////////////////// - // Params - ////////////////////////////////////////////////////////////////////////// - // if( inputfile.empty() ) - // { - params.calcSteps = 300000; - params.threadedClientCall = true; - - //params.distributedDumpScheduler = UbScheduler(5000, 0); - params.distributedDumpScheduler.addSchedule(UbSchedule(100,0,100)); - params.distributedDumpScheduler.addSchedule(UbSchedule(100,100,6000)); - params.distributedDumpScheduler.addSchedule(UbSchedule(1000,6000,10000)); - params.distributedDumpScheduler.addSchedule(UbSchedule(5000,10000,Ub::inf)); - - //params.schedulers.calcForces = UbScheduler(10,0); - //params.schedulers.writeForces = UbScheduler(500,500); - params.schedulers.resetAverage = UbScheduler(50000,50000); - params.schedulers.serialization = UbScheduler(20000,20000); - - //Schnickschnack( so lassen, da geht es im Wesentlichen um Kommunikationsdetails) - params.connsTransAttr.setRemoteProtocol(D3Q19ConnectorTransmitterAttributes::MPI_PROTOCOL); - params.connsTransAttr.setOptionDirectConnectors(true); - params.connsTransAttr.setOptionTwoVectorsForLocalVectors(false); - params.connsTransAttr.setOptionConsForNotActiveBlocks(true); - params.connsTransAttr.setOptionRemoteBlockedSend(false); - params.connsTransAttr.setOptionRemoteBlockedReceive(true); - params.connsTransAttr.setOptionRemotePool(true); - params.connsTransAttr.setOptionStlVecForSameLevelCons(false); - params.connsTransAttr.setOptionStlVecForScaleCons(false); - -#ifndef CAB_MPI - if(params.connsTransAttr.getRemoteProtocol() == D3Q19ConnectorTransmitterAttributes::MPI_PROTOCOL) - throw UbException(UB_EXARGS,"MPI Transmitter not available for this compilation without /DCAB_MPI"); -#endif - - string machine = QUOTEME(CAB_MACHINE); - string BrueckeFilename; - string ZckbndFilename; - if(machine == "ARAGORN") { BrueckeFilename = "f:/data/bruecke/platte_raw.stl"; ZckbndFilename="f:/data/bruecke/zweiPlatten0.stl";} - else if(machine == "LUDWIG") { BrueckeFilename = "/hpc3lustre/home/sonuphof/Stl-Zeichnungen/platte_raw.stl"; ZckbndFilename="/hpc3lustre/home/sonuphof/Stl-Zeichnungen/2zackenbaender0.stl";} - else if(machine == "PIPPIN") { BrueckeFilename = "C:/platteD291009/sonja2/svn_uphoff/Daten/SFB880/platte-cad/platte_raw.stl"; ZckbndFilename="C:/platteD291009/sonja2/svn_uphoff/Daten/SFB880/platte-cad/2zackenbaender0.stl";} - else throw UbException(UB_EXARGS, "unknown CAB_MACHINE"); - - - ////////////////////////////////////////////////////////////////////////// - //physik - ////////////////////////////////////////////////////////////////////////// - params.Re = 11900;// 13286;//13286;//gemessen 18.98 m/s...*5.0 zum testen ob was passiert - params.velocity = 0.01; - params.vx1Init = 0.01; - params.rhoInit = 0.0; - initWithLogProfile = true; - useLODI = false; - - params.collModel = D3Q19System::INCOMPGLBEJTLESMODEL; - ///////////////Knotenabmessungen: - //int KnotenCubeCoarse=40; - params.nx[0] = 120;//60;//86;//43;//65;//50; //l�nge - params.nx[1] = 6;///1;//5;// //breite - params.nx[2] = 32;//18;//5;//15;//15; //h�he gebiet - params.blocknx[0] = 10; - params.blocknx[1] = 10; - params.blocknx[2] = 10; - - params.baseLevel = 0; - params.refineLevel = 3; - - int inflowCubeLevel = 1; - int bottomLevel = 1; - - ///////////////Weltabmessungen: - double kanalhoeheSI = 60.0/100.0;//60.0/100.0;//cm, Kanalh�he - double kanalbreiteSI = 9.9/100.0;//1.65/100.0;//13.2/100.0;////40.0/100.0; //cm, Kanalbreite //13.2 zeilbreite - double kanallaengeSI = kanalhoeheSI*30.0/18.0;//80.0/100.0;//cm, Kanall�nge, ist nicht angegeben - - // double refinewidth1=kanalhoeheSI/10.0; - - double fineNodeDx = (kanalhoeheSI) / (double)( params.blocknx[2]*params.nx[2]*(1<<params.refineLevel)+1 ); //+1--> gitter liegt jeweils 0.5dx innerhalb - double coarseNodeDx = fineNodeDx * (double)(1<<params.refineLevel);//geowerte - - double blockLengthx1 = params.blocknx[0]*coarseNodeDx; //geowerte - double blockLengthx2 = blockLengthx1; - double blockLengthx3 = blockLengthx1; - - double originX1 = 0.0;//-50.0*propellerDurchmesser; //geowerte - double originX2 = 0.0;//-0.5*blockLengthx2*nx2; - double originX3 = 0.0;// minX3 + 0.5*fineNodeDx; - - double geoLength[] = { params.nx[0]*blockLengthx1, params.nx[1]*blockLengthx2, params.nx[2]*blockLengthx3}; - - //position vorderkante cube - double originBridgeX1 = 20.0/100.0; //cm, geraten - double originBridgeX2 = 0.0;//0.5*params.nx[1]*blockLengthx2-0.5*H-fineNodeDx; - double originBridgeX3 = kanalhoeheSI*0.5;//H*0.0-fineNodeDx; //boden - - bool periodicx1 = false; - bool periodicx2 = true; - bool periodicx3 = false; - -#ifndef CAB_MPI - if(params.connsTransAttr.getRemoteProtocol() == D3Q19ConnectorTransmitterAttributes::MPI_PROTOCOL) - throw UbException("LbD3Q19MasterTestcases::startChannelFlow - MPI Transmitter not available for this compilation without /DCAB_MPI"); -#endif - - //weitere parameter - double raiseVelSteps = 0; - double startViscosity = 1.0/3.0; - int decreaseViscositySteps = 6000; - int decreaseViscosityStepForHalVis = (int)(1.0/8.0*decreaseViscositySteps); - - if( D3Q19System::isCompModel(params.collModel) ) params.rhoInit = 1.0; - ////////////////////////////////////////////////////////////////////////// - //grid initialization - ////////////////////////////////////////////////////////////////////////// - UBLOG2(logINFO, std::cout, "grid initialization..."); - - CoordinateTransformation3D* trafo = new CoordinateTransformation3D(originX1,originX2, originX3, blockLengthx1, blockLengthx2, blockLengthx3); - vector< boost::shared_ptr<AMR3DGridAdaptationCriterion> > adapter; - UBLOG(logINFO,"set periodic") - adapter.push_back( boost::shared_ptr<AMR3DGridAdaptationCriterion>(new AMR3DSetPeriodicAdapter(periodicx1, params.nx[0], periodicx2, params.nx[1], periodicx3, params.nx[2])) ); - UBLOG(logINFO,"construct block grid") - topoService.constructBlockGrid("MyGrid", UbTupleInt6(params.nx[0],params.nx[1],params.nx[2],params.blocknx[0],params.blocknx[1],params.blocknx[2]), params.baseLevel, UbPointerWrapper<CoordinateTransformation3D>(trafo),adapter ); - - UBLOG2(logINFO, std::cout, "grid initialization... done"); - - //########################################################################## - - double geoOverlap = 3.0*coarseNodeDx; - - ////////////////////////////////////////////////////////////////////////////// - - GbTriFaceMesh3D* mesh = GbTriFaceMesh3DCreator::readMeshFromFile(BrueckeFilename, "Netz"); - mesh->deleteRedundantNodes(); - - double x1minMesh = mesh->getX1Minimum(); double x1maxMesh = mesh->getX1Maximum(); - double x2minMesh = mesh->getX2Minimum(); double x2maxMesh = mesh->getX2Maximum(); - double x3minMesh = mesh->getX3Minimum(); double x3maxMesh = mesh->getX3Maximum(); - - double drehpunktX=x1minMesh+(x1maxMesh-x1minMesh)*0.5;//triFaceMeshS->getX1Centroid(); - double drehpunktZ=x3minMesh+(x3maxMesh-x3minMesh)*0.5;//triFaceMeshS->getX3Centroid(); - double drehpunktY=x2minMesh+(x2maxMesh-x2minMesh)*0.5;// seedX2-0.5*nodeDelta;//+nx2*deltaX2+0.5*deltaX2; - - mesh->rotateAroundPoint(drehpunktZ,drehpunktX,drehpunktY,90.0,0.0,0.0); //TriFacMesh-KO-System anders als LB-KO-System - - x1minMesh = mesh->getX1Minimum(); x1maxMesh = mesh->getX1Maximum(); - x2minMesh = mesh->getX2Minimum(); x2maxMesh = mesh->getX2Maximum(); - x3minMesh = mesh->getX3Minimum(); x3maxMesh = mesh->getX3Maximum(); - - drehpunktX=x1minMesh+(x1maxMesh-x1minMesh)*0.5;//triFaceMeshS->getX1Centroid(); - drehpunktZ=x3minMesh+(x3maxMesh-x3minMesh)*0.5;//triFaceMeshS->getX3Centroid(); - drehpunktY=x2minMesh+(x2maxMesh-x2minMesh)*0.5;// seedX2-0.5*nodeDelta;//+nx2*deltaX2+0.5*deltaX2; - - double H3=1.05/100.0;//cm, Plattendicke - double scaleB=H3/(x3maxMesh-x3minMesh); - double scaleX2=(geoLength[2]+2.0*coarseNodeDx)/(x2minMesh-x2maxMesh); - - mesh->scale(scaleB,scaleB,scaleB); - x1minMesh = mesh->getX1Minimum(); x1maxMesh = mesh->getX1Maximum(); - x2minMesh = mesh->getX2Minimum(); x2maxMesh = mesh->getX2Maximum(); - x3minMesh = mesh->getX3Minimum(); x3maxMesh = mesh->getX3Maximum(); - double offsetXBridge=originBridgeX1;//originBridgeX1; - double offsetYBridge=originBridgeX2;//originBridgeX2; - double offsetZBridge=originBridgeX3;//originBridgeX3;//-0.5*(x3minMesh-x3maxMesh); - //mesh->translate(-x1minMesh+offsetXBridge, -x2minMesh-0.5*offsetYBridge-coarseNodeDx, -x3minMesh+offsetZBridge); - mesh->translate(-x1minMesh+offsetXBridge, -x2minMesh+offsetYBridge-coarseNodeDx, -x3minMesh+offsetZBridge-(x3maxMesh-x3minMesh)*0.5); - - x1minMesh = mesh->getX1Minimum(); x1maxMesh = mesh->getX1Maximum(); - x2minMesh = mesh->getX2Minimum(); x2maxMesh = mesh->getX2Maximum(); - x3minMesh = mesh->getX3Minimum(); x3maxMesh = mesh->getX3Maximum(); - - GbSystem3D::writeGeoObject( mesh, UbStaticPathMap::getPath(UbStaticPathMap::GLOBAL)+"/platte", WbWriterVtkXmlBinary::getInstance() ); - - //GbTriFaceMesh3D* Bruecke = GbTriFaceMesh3DCreator::getInstance()->readMeshFromFile(BrueckeFilename ,"Bruecke"); - // Bruecke->setPointInObjectTest(GbTriFaceMesh3D::RAYCROSSING);//, HALFSPACE, MEGARAY, SEGURA, GELLER) - //D3Q19AMRTriFaceMeshInteractor* triInteractor = new D3Q19AMRTriFaceMeshInteractor(mesh, grid,new D3Q19NoSlipBCAdapter, AMR3DInteractor::SOLID); - boost::shared_ptr<D3Q19AMRTriFaceMeshInteractor> triBridgeInteractor( new D3Q19AMRTriFaceMeshInteractor( mesh,new D3Q19NoSlipBCAdapter,AMR3DInteractor::SOLID,"bridge") ); - - //grid->addAndInitInteractor(triInteractor); - interactorService.addInteractor(triBridgeInteractor); - - ////////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // Zackenband - ////////////////////////////////////////////////////////////////////////// - GbTriFaceMesh3D* meshBand = GbTriFaceMesh3DCreator::readMeshFromFile(ZckbndFilename, "NetzBand"); - meshBand->deleteRedundantNodes(); - - double x1minMeshB = meshBand->getX1Minimum(); double x1maxMeshB = meshBand->getX1Maximum(); - double x2minMeshB = meshBand->getX2Minimum(); double x2maxMeshB = meshBand->getX2Maximum(); - double x3minMeshB = meshBand->getX3Minimum(); double x3maxMeshB = meshBand->getX3Maximum(); - - //double drehpunktXB=x1minMeshB+(x1maxMeshB-x1minMeshB)*0.5;//triFaceMeshS->getX1Centroid(); - //double drehpunktZB=x3minMeshB+(x3maxMeshB-x3minMeshB)*0.5;//triFaceMeshS->getX3Centroid(); - //double drehpunktYB=x2minMeshB+(x2maxMeshB-x2minMeshB)*0.5;// seedX2-0.5*nodeDelta;//+nx2*deltaX2+0.5*deltaX2; - - // meshBand->rotateAroundPoint(drehpunktZB,drehpunktXB,drehpunktYB,90.0,0.0,0.0); //TriFacMesh-KO-System anders als LB-KO-System - - x1minMeshB = meshBand->getX1Minimum(); x1maxMeshB = meshBand->getX1Maximum(); - x2minMeshB = meshBand->getX2Minimum(); x2maxMeshB = meshBand->getX2Maximum(); - x3minMeshB = meshBand->getX3Minimum(); x3maxMeshB = meshBand->getX3Maximum(); - - //drehpunktXB=x1minMeshB+(x1maxMeshB-x1minMeshB)*0.5;//triFaceMeshS->getX1Centroid(); - //drehpunktZB=x3minMeshB+(x3maxMeshB-x3minMeshB)*0.5;//triFaceMeshS->getX3Centroid(); - //drehpunktYB=x2minMeshB+(x2maxMeshB-x2minMeshB)*0.5;// seedX2-0.5*nodeDelta;//+nx2*deltaX2+0.5*deltaX2; - - double H1B=1.5/100.0;//0.05;//cm, Banddicke..nachschauen!!! - double scaleBand=H1B/(x1maxMeshB-x1minMeshB);//H3B/(x3maxMeshB-x3minMeshB); - // double scaleX2B=(geoLength[2]+2.0*coarseNodeDx)/(x2minMeshB-x2maxMeshB); - - meshBand->scale(scaleBand,scaleBand,scaleBand); - x1minMeshB = meshBand->getX1Minimum(); x1maxMeshB = meshBand->getX1Maximum(); - x2minMeshB = meshBand->getX2Minimum(); x2maxMeshB = meshBand->getX2Maximum(); - x3minMeshB = meshBand->getX3Minimum(); x3maxMeshB = meshBand->getX3Maximum(); - double dBandX=0.5/100.0;//1.29; //15mm-2.1mm Absand von Bandvorderkante - double dBandY=0.0/100.0; - double dBandZ=0.223/100.0;//0.344;//.... - double offsetXBridgeB=x1minMesh+dBandX;//originBridgeX1+dBandX;//originBridgeX1; - double offsetYBridgeB=originBridgeX2+dBandY;//originBridgeX2; - double offsetZBridgeB=originBridgeX3+dBandZ;//originBridgeX3;//-0.5*(x3minMesh-x3maxMesh); - //mesh->translate(-x1minMesh+offsetXBridge, -x2minMesh-0.5*offsetYBridge-coarseNodeDx, -x3minMesh+offsetZBridge); - meshBand->translate(-x1minMeshB+offsetXBridgeB, -x2minMeshB+offsetYBridgeB-coarseNodeDx, -x3minMeshB+offsetZBridgeB);//-(x3maxMeshB-x3minMeshB)*0.5); - - x1minMeshB = meshBand->getX1Minimum(); x1maxMeshB = meshBand->getX1Maximum(); - x2minMeshB = meshBand->getX2Minimum(); x2maxMeshB = meshBand->getX2Maximum(); - x3minMeshB = meshBand->getX3Minimum(); x3maxMeshB = meshBand->getX3Maximum(); - - GbSystem3D::writeGeoObject( meshBand, UbStaticPathMap::getPath(UbStaticPathMap::GLOBAL)+"/Band", WbWriterVtkXmlBinary::getInstance() ); - - //GbTriFaceMesh3D* Bruecke = GbTriFaceMesh3DCreator::getInstance()->readMeshFromFile(BrueckeFilename ,"Bruecke"); - // Bruecke->setPointInObjectTest(GbTriFaceMesh3D::RAYCROSSING);//, HALFSPACE, MEGARAY, SEGURA, GELLER) - //D3Q19AMRTriFaceMeshInteractor* triInteractor = new D3Q19AMRTriFaceMeshInteractor(mesh, grid,new D3Q19NoSlipBCAdapter, AMR3DInteractor::SOLID); - boost::shared_ptr<D3Q19AMRTriFaceMeshInteractor> triBandInteractor( new D3Q19AMRTriFaceMeshInteractor( meshBand,new D3Q19NoSlipBCAdapter,AMR3DInteractor::SOLID,"band") ); - interactorService.addInteractor(triBandInteractor); - /////////////////Band2 - - - GbTriFaceMesh3D* meshBand2 = GbTriFaceMesh3DCreator::readMeshFromFile(ZckbndFilename, "NetzBand2"); - meshBand->deleteRedundantNodes(); - - double x1minMeshB2 = meshBand2->getX1Minimum(); double x1maxMeshB2 = meshBand2->getX1Maximum(); - double x2minMeshB2 = meshBand2->getX2Minimum(); double x2maxMeshB2 = meshBand2->getX2Maximum(); - double x3minMeshB2 = meshBand2->getX3Minimum(); double x3maxMeshB2 = meshBand2->getX3Maximum(); - - //double drehpunktXB2=x1minMeshB2+(x1maxMeshB2-x1minMeshB2)*0.5;//triFaceMeshS->getX1Centroid(); - //double drehpunktZB2=x3minMeshB2+(x3maxMeshB2-x3minMeshB2)*0.5;//triFaceMeshS->getX3Centroid(); - //double drehpunktYB2=x2minMeshB2+(x2maxMeshB2-x2minMeshB2)*0.5;// seedX2-0.5*nodeDelta;//+nx2*deltaX2+0.5*deltaX2; - -// meshBand2->rotateAroundPoint(drehpunktZB2,drehpunktXB2,drehpunktYB2,90.0,0.0,0.0); //TriFacMesh-KO-System anders als LB-KO-System - - x1minMeshB2 = meshBand2->getX1Minimum(); x1maxMeshB2 = meshBand2->getX1Maximum(); - x2minMeshB2 = meshBand2->getX2Minimum(); x2maxMeshB2 = meshBand2->getX2Maximum(); - x3minMeshB2 = meshBand2->getX3Minimum(); x3maxMeshB2 = meshBand2->getX3Maximum(); - - //drehpunktXB2=x1minMeshB2+(x1maxMeshB2-x1minMeshB2)*0.5;//triFaceMeshS->getX1Centroid(); - //drehpunktZB2=x3minMeshB2+(x3maxMeshB2-x3minMeshB2)*0.5;//triFaceMeshS->getX3Centroid(); - //drehpunktYB2=x2minMeshB2+(x2maxMeshB2-x2minMeshB2)*0.5;// seedX2-0.5*nodeDelta;//+nx2*deltaX2+0.5*deltaX2; - - double H1B2=1.5/100.0;//0.05;//cm, Banddicke..nachschauen!!! - double scaleBand2=H1B2/(x1maxMeshB2-x1minMeshB2);//H3B/(x3maxMeshB-x3minMeshB); - - meshBand2->scale(scaleBand2,scaleBand2,scaleBand2); - x1minMeshB2 = meshBand2->getX1Minimum(); x1maxMeshB2 = meshBand2->getX1Maximum(); - x2minMeshB2 = meshBand2->getX2Minimum(); x2maxMeshB2 = meshBand2->getX2Maximum(); - x3minMeshB2 = meshBand2->getX3Minimum(); x3maxMeshB2 = meshBand2->getX3Maximum(); - double dBandX2=0.5/100.0;//1.29; - double dBandY2=0.5/100.0; - double dBandZ2=0.223/100.0;//0.344;//... - double offsetXBridgeB2=x1minMesh+dBandX2;//originBridgeX1; - double offsetYBridgeB2=originBridgeX2+dBandY2;//originBridgeX2; - double offsetZBridgeB2=originBridgeX3+dBandZ2;//originBridgeX3;//-0.5*(x3minMesh-x3maxMesh); - //mesh->translate(-x1minMesh+offsetXBridge, -x2minMesh-0.5*offsetYBridge-coarseNodeDx, -x3minMesh+offsetZBridge); - meshBand2->translate(-x1minMeshB2+offsetXBridgeB2, -x2minMeshB2+offsetYBridgeB2-coarseNodeDx, -x3minMeshB2+offsetZBridgeB2);//-(x3maxMeshB2-x3minMeshB2)*0.5); - - x1minMeshB2 = meshBand2->getX1Minimum(); x1maxMeshB2 = meshBand2->getX1Maximum(); - x2minMeshB2 = meshBand2->getX2Minimum(); x2maxMeshB2 = meshBand2->getX2Maximum(); - x3minMeshB2 = meshBand2->getX3Minimum(); x3maxMeshB2 = meshBand2->getX3Maximum(); - - GbSystem3D::writeGeoObject( meshBand2, UbStaticPathMap::getPath(UbStaticPathMap::GLOBAL)+"/Band2", WbWriterVtkXmlBinary::getInstance() ); - - //GbTriFaceMesh3D* Bruecke = GbTriFaceMesh3DCreator::getInstance()->readMeshFromFile(BrueckeFilename ,"Bruecke"); - // Bruecke->setPointInObjectTest(GbTriFaceMesh3D::RAYCROSSING);//, HALFSPACE, MEGARAY, SEGURA, GELLER) - //D3Q19AMRTriFaceMeshInteractor* triInteractor = new D3Q19AMRTriFaceMeshInteractor(mesh, grid,new D3Q19NoSlipBCAdapter, AMR3DInteractor::SOLID); - boost::shared_ptr<D3Q19AMRTriFaceMeshInteractor> triBand2Interactor( new D3Q19AMRTriFaceMeshInteractor( meshBand2,new D3Q19NoSlipBCAdapter,AMR3DInteractor::SOLID,"band2") ); - interactorService.addInteractor(triBand2Interactor); - - ////////////////////////////////////////////////////////////////////////// - // refine - ////////////////////////////////////////////////////////////////////////// - - - - - - - - ///////////platte ausmessen: - x1minMesh = mesh->getX1Minimum(); x1maxMesh = mesh->getX1Maximum(); - x2minMesh = mesh->getX2Minimum(); x2maxMesh = mesh->getX2Maximum(); - x3minMesh = mesh->getX3Minimum(); x3maxMesh = mesh->getX3Maximum(); - double deltaX3Platte=(x3maxMesh-x3minMesh); - - - GbCuboid3D* refine1PlatteCube = new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , x3minMesh-H3 - , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3); - boost::shared_ptr<AMR3DBlockAdaptationCriterion> refineAdapterP1(new AMR3DCrossAndInsideGbObject3DAdapter(refine1PlatteCube,0,params.refineLevel-6)); - topoService.adaptGridByBlockCriterion(refineAdapterP1); - - GbCuboid3D* refine2PlatteCube = new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , x3minMesh-H3*0.5 - , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3); - boost::shared_ptr<AMR3DBlockAdaptationCriterion> refineAdapterP2(new AMR3DCrossAndInsideGbObject3DAdapter(refine2PlatteCube,0,params.refineLevel-5)); - topoService.adaptGridByBlockCriterion(refineAdapterP2); - - GbCuboid3D* refine3PlatteCube = new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , x3minMesh-H3*0.5 - , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.5); - boost::shared_ptr<AMR3DBlockAdaptationCriterion> refineAdapterP3(new AMR3DCrossAndInsideGbObject3DAdapter(refine3PlatteCube,0,params.refineLevel-4)); //dieser hier hat eine ecke - topoService.adaptGridByBlockCriterion(refineAdapterP3); - - GbCuboid3D* refine4PlatteCube = new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , x3minMesh+deltaX3Platte*0.6 - , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.25); - boost::shared_ptr<AMR3DBlockAdaptationCriterion> refineAdapterP4(new AMR3DCrossAndInsideGbObject3DAdapter(refine4PlatteCube,0,params.refineLevel-3)); //weil der hier zu hoch ist - topoService.adaptGridByBlockCriterion(refineAdapterP4); - - GbCuboid3D* refine5PlatteCube = new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , x3minMesh+deltaX3Platte*0.8 - , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+H3*0.00375); - boost::shared_ptr<AMR3DBlockAdaptationCriterion> refineAdapterP5(new AMR3DCrossAndInsideGbObject3DAdapter(refine5PlatteCube,0,params.refineLevel-2)); - topoService.adaptGridByBlockCriterion(refineAdapterP5); - - // GbCuboid3D* refine6PlatteCube = new GbCuboid3D( x1minMeshB2+( x1maxMeshB2- x1minMeshB2)*0.8 , originX2-geoOverlap , x3minMesh+deltaX3Platte*0.9 - // , x1maxMesh+H3*0.075, originX2+geoOverlap+geoLength[1], x3maxMesh+2.0*fineNodeDx); - // boost::shared_ptr<AMR3DBlockAdaptationCriterion> refineAdapterP6(new AMR3DCrossAndInsideGbObject3DAdapter(refine6PlatteCube,0,params.refineLevel-1)); - // topoService.adaptGridByBlockCriterion(refineAdapterP6); - - GbCuboid3D* refine6PlatteCube = new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , x3minMesh+deltaX3Platte*0.9 - , x1maxMesh+H3*5.0, originX2+geoOverlap+geoLength[1], x3maxMesh+deltaX3Platte*0.9); - boost::shared_ptr<AMR3DBlockAdaptationCriterion> refineAdapterP6(new AMR3DCrossAndInsideGbObject3DAdapter(refine6PlatteCube,0,params.refineLevel-1)); - topoService.adaptGridByBlockCriterion(refineAdapterP6); - - UBLOG2(logINFO, std::cout, "Refinement..done"); - //blockverh�ltnis von 2:1 herstellen: - UBLOG(logINFO,"ratio") - boost::shared_ptr<AMR3DBlockAdaptationCriterion> ratioAdapter(new AMR3DBlockRatioAdapter(params.refineLevel)); - topoService.adaptGridByBlockCriterion(ratioAdapter); - - - - ////////////////////////////////////////////////////////////////////////// - //walls - ////////////////////////////////////////////////////////////////////////// - int noSlipSecOpt = 1; //0=2nd order BB 1=simple BB - int slipSecOpt = 1; //0=2nd order BB 1=simple BB - - ////x1x2-walls: - GbCuboid3D* wallsX1X2min = new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , originX3-geoOverlap - , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], originX3-0.5*fineNodeDx); - boost::shared_ptr<D3Q19AMRInteractor> wallsX1X2minInteractor( new D3Q19AMRInteractor( wallsX1X2min,new D3Q19SlipBCAdapter(slipSecOpt),AMR3DInteractor::SOLID,"wallsX1X2min") ); - if(!params.periodic[2]) interactorService.addInteractor( wallsX1X2minInteractor ); - - GbCuboid3D* wallsX1X2max = new GbCuboid3D( originX1-geoOverlap , originX2-geoOverlap , originX3+geoLength[2]+0.5*fineNodeDx - , originX1+geoLength[0]+geoOverlap, originX2+geoOverlap+geoLength[1], originX3+geoLength[2]+geoOverlap); - boost::shared_ptr<D3Q19AMRInteractor> wallsX1X2maxInteractor( new D3Q19AMRInteractor( wallsX1X2max,new D3Q19SlipBCAdapter(slipSecOpt),AMR3DInteractor::SOLID,"wallsX1X2max") ) ; - if(!params.periodic[2]) interactorService.addInteractor( wallsX1X2maxInteractor ); - - - - - //########################################################################## - //## physical parameters - //########################################################################## - double smagorinskiConstant = 0.18; - - - double rhoLB = 1.0; - double rhoReal = 1.0; - double nueReal = 0.000015;//0.015; - - double hReal = 0.0105;//<-m 1.05;//Plattendicke in cm(! cm nicht m !) - double uReal = params.Re*nueReal/hReal; - - //##Machzahl: - //#Ma = uReal/csReal - double Ma = 0.05;//0.0553;//Ma-Real! - double csReal = uReal/Ma; - double hLB = hReal/coarseNodeDx; - - D3Q19UnitConverter unitConverter(hReal, csReal, rhoReal, hLB ); - - double uLB = uReal * unitConverter.getFactorVelocityWToLb(); - double nueLB = nueReal * unitConverter.getFactorViscosityWToLb(); - - params.velocity = uLB; - double viscosity = nueLB; - - ////////////////////////////////////////////////////////////////////////// - // BCs - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - // inflow - ////////////////////////////////////////////////////////////////////////// - - - double uLB2=uLB*0.96*1.02;//*0.5; - - vector<D3Q19BCFunction> velcX1BCs,dummy; - - if(raiseVelSteps>0) - { - mu::Parser inflowProfile1; - inflowProfile1.SetExpr("uLB"); - - inflowProfile1.DefineConst("uLB",uLB2); - } - mu::Parser inflowProfile; - inflowProfile.SetExpr("uLB"); - - inflowProfile.DefineConst("uLB",uLB2); - //inflowProfile.DefineConst("xlbnachxworld",xlbnachxworld); - velcX1BCs.push_back(D3Q19BCFunction(inflowProfile,raiseVelSteps,D3Q19BCFunction::INFCONST)); - - - GbCuboid3D* velBCCuboid = NULL; - velBCCuboid = new GbCuboid3D( originX1-geoOverlap, originX2-geoOverlap, originX3-geoOverlap - , originX1-fineNodeDx, originX2+geoLength[1]+geoOverlap, originX3+geoLength[2]+geoOverlap); - - boost::shared_ptr< D3Q19AMRInteractor> velBCInteractor(new D3Q19AMRInteractor(velBCCuboid,AMR3DInteractor::SOLID,"velBC")); - velBCInteractor->addBCAdapter(new D3Q19VelocityBCAdapter(velcX1BCs,dummy,dummy) ); - interactorService.addInteractor( velBCInteractor ); - - - - ////////////////////////////////////////////////////////////////////////// - // outflow - ////////////////////////////////////////////////////////////////////////// - GbCuboid3D* densCuboid = NULL; - densCuboid = new GbCuboid3D( originX1+geoLength[0]+fineNodeDx, originX2-geoOverlap , originX3-geoOverlap - , originX1+geoLength[0]+geoOverlap, originX2+geoLength[1]+geoOverlap, originX3+geoLength[2]+geoOverlap ); - - if(useLODI) - { - float LX1 = (float)((densCuboid->getX1Minimum()-velBCCuboid->getX1Maximum())/coarseNodeDx); - float LX2 = -1.0f; - float LX3 = -1.0f; - - D3Q19DensityLodiBCAdapter* lodiBCadapter = new D3Q19DensityLodiBCAdapter(3,LX1,LX2,LX3,params.rhoInit,params.vx1Init,params.vx2Init,params.vx3Init,params.rhoInit); - boost::shared_ptr< D3Q19AMRInteractor> densInteractor(new D3Q19AMRInteractor(densCuboid,lodiBCadapter,AMR3DInteractor::SOLID,"lodiDensBC")); - interactorService.addInteractor( densInteractor ); - } - else - { - boost::shared_ptr< D3Q19AMRInteractor> densInteractor( new D3Q19AMRInteractor(densCuboid,new D3Q19DensityBCAdapter(params.rhoInit),AMR3DInteractor::SOLID,"densBC") ); - interactorService.addInteractor( densInteractor ); - } - - UBLOG(logINFO, "*****************************************"); - UBLOG(logINFO, "* Parameters *"); - UBLOG(logINFO, "* Re ="<<params.Re); - UBLOG(logINFO, "* Ma ="<<Ma); - UBLOG(logINFO, "* uReal ="<<uReal); - UBLOG(logINFO, "* nueReal ="<<nueReal); - UBLOG(logINFO, "* nue ="<<nueLB); - UBLOG(logINFO, "* velocity ="<<uLB); - UBLOG(logINFO, "* LX1 (world/LB)="<<kanallaengeSI<<"/"<<kanallaengeSI/coarseNodeDx); - UBLOG(logINFO, "* LX2 (world/LB)="<<kanalbreiteSI<<"/"<<kanalbreiteSI/coarseNodeDx); - UBLOG(logINFO, "* LX3 (world/LB)="<<kanalhoeheSI<<"/"<<kanalhoeheSI/coarseNodeDx); - UBLOG(logINFO, "* dxInflow-Cube ="<<velBCCuboid->getX1Maximum()-mesh->getX1Minimum()); - UBLOG(logINFO, "* cdx ="<<coarseNodeDx); - UBLOG(logINFO, "* fdx ="<<fineNodeDx); - // UBLOG(logINFO, "* H_world ="<<H); - // UBLOG(logINFO, "* H_LB ="<<H/coarseNodeDx); - //UBLOG(logINFO, "* H_log_world ="<<delta); - //UBLOG(logINFO, "* H_log_LB ="<<delta/baseDX); - //UBLOG(logINFO, "* alpha ="<<alpha); - UBLOG(logINFO, "* inflowProfile ="<<inflowProfile.GetExpr()); - UBLOG(logINFO, "* dx_base ="<<coarseNodeDx<<" == "<<coarseNodeDx); - UBLOG(logINFO, "* dx_refine ="<<fineNodeDx<<" == "<<fineNodeDx ); - UBLOG(logINFO, "* collModel ="<<params.collModel); - UBLOG(logINFO, "* raiseVelSteps ="<<raiseVelSteps); - UBLOG(logINFO, "* startVis ="<<startViscosity); - UBLOG(logINFO, "* raiseVisSteps ="<<decreaseViscositySteps); - UBLOG(logINFO, "* nx1/2/3 ="<<params.nx[0]<<"/"<<params.nx[1]<<"/"<<params.nx[2]); - UBLOG(logINFO, "* blocknx1/2/3 ="<<params.blocknx[0]<<"/"<<params.blocknx[1]<<"/"<<params.blocknx[2]); - UBLOG(logINFO, "* x3Periodic ="<<params.periodic[2]); - UBLOG(logINFO, "* useDirectConnectors "<< params.connsTransAttr.useDirectConnectors() ); - UBLOG(logINFO, "* useSTLVectorForSameLevelCons "<< params.connsTransAttr.useStlVecForSameLevelCons() ); - UBLOG(logINFO, "* useSTLVectorForScaleCons "<< params.connsTransAttr.useStlVecForScaleCons() ); - UBLOG(logINFO, "* useConsForNotActiveBlocks "<< params.connsTransAttr.useConsForNotActiveBlocks() ); - UBLOG(logINFO, "* LODI ="<< (useLODI ? "ON" : "OFF") ); - UBLOG(logINFO, "*****************************************"); - UBLOGML(logINFO, "UnitConverter:"<<unitConverter.toString()); - UBLOG(logINFO, "*****************************************"); - - ////////////////////////////////////////////////////////////////////////// - //geo holen und setzen!!! - ////////////////////////////////////////////////////////////////////////// - topoService.getAndAddAndInitInteractors(); - - ////////////////////////////////////////////////////////////////////////// - UBLOG(logINFO, "//////////////////////////////////////////////////////////////////"); - int nofBlocks = topoService.getNumberOfBlocks(true); - UBLOG(logINFO, "//active blocks after interactors: "<<nofBlocks); - int nofAllBlocks = topoService.getNumberOfBlocks(false); - UBLOG(logINFO, "//total blocks after interactors: "<<nofAllBlocks); - UBLOG(logINFO, " -> ~"<<nofBlocks*(params.blocknx[0]+1)*(params.blocknx[1]+1)*(params.blocknx[2]+1)<<" nodes"); - UBLOG(logINFO, "//////////////////////////////////////////////////////////////////"); - - //partitionierung - UBLOG2(logINFO,cout, "levelweise METIS SEGMENTIERUNG!!!!") - boost::shared_ptr<AMR3DGridAdaptationCriterion> partioningAdapter(new AMR3DGridLevelPartitionMetisAdapter( (int)calcServices.size() - , D3Q19MetisAdapterTools::getMetisDirsAndWeights( params.blocknx[0] - , params.blocknx[1] - , params.blocknx[2] ) - , params.connsTransAttr.useConsForNotActiveBlocks() - , D3Q19MetisAdapterTools::getD3Q19GetBlockWeightFunctor(false) ) ); ///////hier false auf keine gewichtung - default:doppelte gewichtung f�r fine - // boost::shared_ptr<AMR3DGridAdaptationCriterion> partioningAdapter(new AMR3DGridPartitionOneDirectionAdapter((int)calcServices.size()) ); - // UBLOG2(logINFO,"params.connsTransAttr.useConsForNotActiveBlocks():" ); - //UBLOG2(logINFO,params.connsTransAttr.useConsForNotActiveBlocks() ); - topoService.adaptGridByGridCriterion(partioningAdapter); - topoService.writeBlocksToAVS(outpath+"/blocksSegments",false); - UBLOG2(logINFO,cout, "BlockSegmentsGeschriebe") - //clientgrids erzeugen - topoService.createClientGridsAndSendBlocksToClients("client",params.connsTransAttr,params.threadedClientCall); - UBLOG2(logINFO,cout, "createClientGrids usw") - - - - boost::shared_ptr<D3Q19ClientGridWriteInteractorNodeFiles> writeInteractorTransNodesAdapter(new D3Q19ClientGridWriteInteractorNodeFiles("shared",D3Q19ClientGridWriteInteractorNodeFiles::ValueProjOnGeoVertex)); - writeInteractorTransNodesAdapter->setScheduler(UbSchedule(10000)); - writeInteractorTransNodesAdapter->addInteractorID( triBridgeInteractor ->getName() ); - - //physik-daten zuweisen - D3Q19GridPhysicsAdapter* physicsAdapter = new D3Q19GridPhysicsAdapter(params.collModel,viscosity,0.0,0.0,0.0); - physicsAdapter->setSmagorinskyConstant(smagorinskiConstant); - physicsAdapter->setUnitConverter( unitConverter ); - boost::shared_ptr<AMR3DGridAdaptationCriterion> physicsAdapterPtr(physicsAdapter); - - //UbPointerWrapper<AMR3DGridAdaptationCriterion> decreaseViscosityAdapter( new D3Q19GridPhysicsAdapter(decreaseViscositySteps, startViscosity, viscosity, decreaseViscosityStepForHalVis) ); - boost::shared_ptr<AMR3DGridAdaptationCriterion> decreaseViscosityAdapter( new D3Q19GridPhysicsAdapter(decreaseViscositySteps, startViscosity, viscosity, decreaseViscosityStepForHalVis) ); - //boost::shared_ptr<AMR3DBlockAdaptationCriterion> initadapter(new D3Q19InitDistributionsAdapter(params.connsTransAttr.useConsForNotActiveBlocks(), params.collModel, params.rhoInit,(params.vx1Init*0.96),params.vx2Init,params.vx3Init, 0, AMR3DSystem::MAXLEVEL)); - - boost::shared_ptr<AMR3DGridAdaptationCriterion> initadapter(new D3Q19InitDistributionsGridAdapter(params.rhoInit,params.vx1Init,params.vx2Init,params.vx3Init)); - if(initWithLogProfile) - { - - boost::dynamic_pointer_cast<D3Q19InitDistributionsGridAdapter>(initadapter)->setVx1( inflowProfile ); - } - - - boost::shared_ptr<D3Q19ClientGridPostProcessFileAdapter> writeDumpsAdapter(new D3Q19ClientGridPostProcessFileAdapter("shared",true,false)); - writeDumpsAdapter->setScheduler(params.distributedDumpScheduler); - writeDumpsAdapter->setUseFileCounterInsteadTimestepForGlobalPVD(true); - - - UBLOG(logINFO, "put physicsAdapter to clients"); - calculationManager.adaptGridByGridCriterionAtClients(physicsAdapterPtr,params.threadedClientCall); - - boost::shared_ptr<AMR3DGridAdaptationCriterion> hackAdapter(new D3Q19ChangeSlipToNoSlipGridAdapter()); - UBLOG2(logINFO, std::cout, "add hackAdapter to clients"); - calculationManager.addTimeDependentGridAdapterAtClients(hackAdapter,params.threadedClientCall); - UBLOG2(logINFO, std::cout, "## adapter stuff - start"); - - UBLOG(logINFO, "getAndAddInteractorsAtClients at clients"); - calculationManager.getAndAddInteractorsAtClients(params.threadedClientCall); - - UBLOG(logINFO, "put initadapter to clients"); - calculationManager.adaptGridByGridCriterionAtClients(initadapter,params.threadedClientCall); - UBLOG(logINFO, "put setConnectorAdapter to clients"); - boost::shared_ptr<AMR3DGridAdaptationCriterion> setConnectorAdapter(new D3Q19SetConnectorsGridAdapter( ) ); - calculationManager.adaptGridByGridCriterionAtClients(setConnectorAdapter,params.threadedClientCall); - - if(decreaseViscositySteps) calculationManager.addTimeDependentGridAdapterAtClients(decreaseViscosityAdapter,params.threadedClientCall); - - UBLOG(logINFO,"put writeAdapter to calc clients") - calculationManager.addClientGridAdapterAtClients(writeDumpsAdapter,params.threadedClientCall); - UBLOG(logINFO, "put writeInteractorTransNodesAdapter to clients" ) - calculationManager.addClientGridAdapterAtClients(writeInteractorTransNodesAdapter, params.threadedClientCall); - - //remote connetoren - UBLOG(logINFO, "setRemoteConnectorsOnCalcServices at clients"); - topoService.setRemoteConnectorsOnCalcServices(D3Q19System::getAMR3DDirsForD3Q19Dirs(),params.connsTransAttr,params.threadedClientCall); - - UbFileOutputASCII out(UbStaticPathMap::getPath(UbStaticPathMap::GLOBAL)+"/params.txt"); - if(out.isOpen()) - { - UBLOG(logINFO, "save params to "<<out.getFileName()); - params.write(&out); - out.writeLine(); - out.writeString("useLodi "); out.writeBool(useLODI); out.writeLine(); - out.writeString("initWithLogProfile "); out.writeBool(initWithLogProfile); out.writeLine(); - UBLOG(logINFO, " done" ) - } - - - //########################################################################## - //## spongelayer - //########################################################################## - UBLOG2(logINFO, std::cout, "##################################################################"); - UBLOG2(logINFO, std::cout, "## spongelayer - start"); - - GbCuboid3D* spongeCubeLeft = new GbCuboid3D( velBCCuboid->getX1Minimum() - , velBCCuboid->getX2Minimum() - , velBCCuboid->getX3Minimum() - , velBCCuboid->getX1Maximum()+(velBCCuboid->getX1Maximum()-velBCCuboid->getX1Minimum() )*0.1-1.0*coarseNodeDx - , velBCCuboid->getX2Maximum() - , velBCCuboid->getX3Maximum() ); - - GbSystem3D::writeGeoObject( spongeCubeLeft, UbStaticPathMap::getPath(UbStaticPathMap::GLOBAL)+"/spongeIn", WbWriterVtkXmlBinary::getInstance() ); - boost::shared_ptr<AMR3DGridAdaptationCriterion> spongeAdapterLeft( new SpD3Q19SpongeLayerAdapter(spongeCubeLeft, 1./3., nueLB, SpD3Q19SpongeLayerAdapter::ALTERNATIONX1) ); - calculationManager.adaptGridByGridCriterionAtClients(spongeAdapterLeft ,params.threadedClientCall); - - - - UBLOG2(logINFO, std::cout, "## spongelayerOutflow - start"); - double H=kanallaengeSI/10.0; - GbCuboid3D* spongeCubeRight = new GbCuboid3D( originX1+geoLength[0]+fineNodeDx-H - , originX2-geoOverlap , originX3-geoOverlap - , originX1+geoLength[0]+geoOverlap, originX2+geoLength[1]+geoOverlap, originX3+geoLength[2]+geoOverlap ); - - GbSystem3D::writeGeoObject( spongeCubeRight, UbStaticPathMap::getPath(UbStaticPathMap::GLOBAL)+"/spongeOut", WbWriterVtkXmlBinary::getInstance() ); - boost::shared_ptr<AMR3DGridAdaptationCriterion> spongeAdapterRight( new SpD3Q19SpongeLayerAdapter(spongeCubeRight, nueLB,1./3., SpD3Q19SpongeLayerAdapter::ALTERNATIONX1) ); - calculationManager.adaptGridByGridCriterionAtClients(spongeAdapterRight ,params.threadedClientCall); - UBLOG2(logINFO, std::cout, "## spongelayer - end"); - UBLOG2(logINFO, std::cout, "##################################################################"); - - - - //GbCuboid3D* densCuboid = NULL; - //########################################################################## - - calculationManager.calculate(params.calcSteps, UbStaticPathMap::GLOBAL, params.schedulers); - - UBLOG(logINFO, "warte nun auf ende!!"); - -} - diff --git a/apps/cpu/plate2/CMakeLists.txt b/apps/cpu/plate2/CMakeLists.txt deleted file mode 100644 index 9b79ca447e13021658b721f7e869af549ffabf0e..0000000000000000000000000000000000000000 --- a/apps/cpu/plate2/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(plate2) - -INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(plate2 BINARY) diff --git a/apps/cpu/plate2/plate2.cpp b/apps/cpu/plate2/plate2.cpp deleted file mode 100644 index 1fd5a281ebae6906ae7706735d32b4aedbbe8199..0000000000000000000000000000000000000000 --- a/apps/cpu/plate2/plate2.cpp +++ /dev/null @@ -1,557 +0,0 @@ -#include <iostream> -#include <string> -#include <math.h> - -#include <vfluids.h> - -using namespace std; - -void run(const char *cstr1, const char *cstr2) -{ - try - { - string pathname; - string pathGeo; - string pathLog; - int numOfThreads = 1; - bool logfile = false; - stringstream logFilename; - double availMem = 0; - - CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - string machine = string(cstr1); - - if(machine == "my") - { - pathname = "d:/temp/plate2R1e6"; - pathGeo = "d:/Data/plate"; - pathLog = "d:/temp/plate2R1e6"; - numOfThreads = 4; - logfile = false; - availMem = 15.0e9; - } - else if(machine == "Ludwig") - { - pathname = "/work/koskuche/SFB880/plate2Con"; - pathGeo = "/home/koskuche/data/plate"; - pathLog = pathname; - numOfThreads = 8; - availMem = 12.0e9;///8*numOfThreads; - logfile = true; - } - else if(machine == "HLRS") - { - pathname = "/univ_1/ws1/ws/xrmkuchr-plate3-0"; - pathGeo = "/zhome/academic/HLRS/xrm/xrmkuchr/data/plate"; - pathLog = "/zhome/academic/HLRS/xrm/xrmkuchr/work/plate"; - numOfThreads = 16; - availMem = 2.0e9; - logfile = true; - } - else if(machine == "HLRN") - { - pathname = "/gfs1/work/niivfcpu/scratch/plateEx"; - pathGeo = "/gfs1/work/niivfcpu/data/plate"; - pathLog = pathname; - numOfThreads = 24; - availMem = 64.0e9/24.0*numOfThreads; - logfile = true; - } - else throw UbException(UB_EXARGS, "unknown CAB_MACHINE"); - -#if defined(__unix__) - if (myid==0) - { - const char* str = pathLog.c_str(); - int status=mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); - } -#endif - - if(myid == 0 && logfile) - { - //UbLog::reportingLevel() = logDEBUG5; - logFilename << pathLog + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - - if(myid==0) UBLOG(logINFO,"Testcase plate"); - - //string PlatteFilename = pathGeo + "/Platte4mesh_1.8mmProbendicke.stl"; - string PlatteFilename = pathGeo + "/platte_raw.stl"; - - string ZckbndFilename = pathGeo + "/2zackenbaender0.stl"; - - ///////////////Knotenabmessungen: - int nx[3], blocknx[3]; - nx[0] = 90;//240;//120;//60;//86;//43;//65;//50; //l�nge - nx[1] = 2;//2;//6;///1;//5;// //breite - nx[2] = 30;//64;//32;//18;//5;//15;//15; //h�he gebiet - blocknx[0] = 16;//10;//6; - blocknx[1] = 16;//10;//6; - blocknx[2] = 16;//10;//6; - - int baseLevel = 0; - int refineLevel = 4; - - double H = 600.0; // Kanalh�he [mm] - double cdx = H/(double)(nx[2]*blocknx[2]); - double fdx = cdx/double(1<<refineLevel); - - //double h = 200.0; // gew�nschte Plattenh�he in Gitterpunkten - //double fdx = plate->getLengthX3()/h; - //double cdx = fdx*double(1<<refineLevel); - - LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter()); - - ////////////////////////////////////////////////////////////////////////// - //physik - ////////////////////////////////////////////////////////////////////////// - double Re = 1133333.3333333335; - double rhoLB = 0.0; - double uLB = 0.1; - double lReal = 1000; //Plattenl�nge in mm - double nuLB = (uLB*(lReal/cdx))/Re; - - int sizeSP=4; - mu::Parser spongeLayer; - spongeLayer.SetExpr("x1>=(sizeX-sizeSP)/dx ? (sizeX-(x1+1))/sizeSP/2.0 + 0.5 : 1.0"); - spongeLayer.DefineConst("sizeX", nx[0]*blocknx[0]); - spongeLayer.DefineConst("sizeSP", sizeSP*blocknx[0]); - - Grid3DPtr grid(new Grid3D(comm)); - - ////////////////////////////////////////////////////////////////////////// - //restart - UbSchedulerPtr rSch(new UbScheduler(1000,1000,10000000)); - RestartPostprocessor rp(grid, rSch, comm, pathname, RestartPostprocessor::BINARY); - ////////////////////////////////////////////////////////////////////////// - bool restart; - - if (grid->getTimeStep() == 0) - { - - if(myid==0) UBLOG(logINFO,"Neustart.."); - restart = false; - ////////////////////////////////////////////////////////////////////////// - //Platte - GbTriFaceMesh3DPtr plate (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(PlatteFilename,"Netz")); - plate->rotate(90.0,0.0,0.0); //TriFacMesh-KO-System anders als LB-KO-System - if(myid == 0) GbSystem3D::writeGeoObject( plate.get(), pathname+"/geo/platte", WbWriterVtkXmlBinary::getInstance() ); - ////////////////////////////////////////////////////////////////////////// - // Zackenband - ////////////////////////////////////////////////////////////////////////// - GbTriFaceMesh3DPtr meshBand1 (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand")); - meshBand1->translate(-495, -700, -19.94); - if(myid == 0) GbSystem3D::writeGeoObject( meshBand1.get(), pathname+"/geo/Band1", WbWriterVtkXmlASCII::getInstance() ); - // Zackenband2 - GbTriFaceMesh3DPtr meshBand2(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand2")); - meshBand2->translate(-495, -705, -19.94); - if(myid == 0) GbSystem3D::writeGeoObject( meshBand2.get(), pathname+"/geo/Band2", WbWriterVtkXmlASCII::getInstance() ); - // Zackenband3 - GbTriFaceMesh3DPtr meshBand3(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand3")); - meshBand3->translate(-495, -700, -19.64); - if(myid == 0) GbSystem3D::writeGeoObject( meshBand3.get(), pathname+"/geo/Band3", WbWriterVtkXmlASCII::getInstance() ); - // Zackenband4 - GbTriFaceMesh3DPtr meshBand4(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand4")); - meshBand4->translate(-495, -705, -19.64); - if(myid == 0) GbSystem3D::writeGeoObject( meshBand4.get(), pathname+"/geo/Band4", WbWriterVtkXmlASCII::getInstance() ); - ////////////////////////////////////////////////////////////////////////// - - double blockLengthx1 = blocknx[0]*cdx; //geowerte - double blockLengthx2 = blockLengthx1; - double blockLengthx3 = blockLengthx1; - - double geoLength[] = { nx[0]*blockLengthx1, nx[1]*blockLengthx2, nx[2]*blockLengthx3}; - - double originX1 = plate->getX1Minimum()-plate->getLengthX1()/4.0; - double originX2 = plate->getX2Minimum(); - double originX3 = plate->getX3Minimum()-299.5; - - - bool periodicx1 = false; - bool periodicx2 = true; - bool periodicx3 = true; - - //bounding box - double g_minX1 = originX1; - double g_minX2 = originX2; - double g_minX3 = originX3; - - double g_maxX1 = originX1 + geoLength[0]; - double g_maxX2 = originX2 + geoLength[1]; - double g_maxX3 = originX3 + geoLength[2];; - - - //set grid - grid->setDeltaX(cdx); - grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - grid->setPeriodicX1(periodicx1); - grid->setPeriodicX2(periodicx2); - grid->setPeriodicX3(periodicx3); - - GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); - gridCube->setCenterCoordinates(gridCube->getX1Centroid(),meshBand1->getX2Centroid(),gridCube->getX3Centroid()); - if(myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance()); - - originX2 = gridCube->getX2Minimum(); - g_minX2 = originX2; - g_maxX2 = originX2 + geoLength[1]; - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - ////////////////////////////////////////////////////////////////////////// - if(myid == 0) - { - UBLOG(logINFO, "*****************************************"); - UBLOG(logINFO, "* Parameters *"); - UBLOG(logINFO, "* Re ="<<Re); - UBLOG(logINFO, "* nuLB ="<<nuLB); - UBLOG(logINFO, "* uLB ="<<uLB); - UBLOG(logINFO, "* cdx ="<<cdx); - UBLOG(logINFO, "* fdx ="<<fdx); - double Hzb = 0.6/fdx; - UBLOG(logINFO, "* Height of Zackenband ="<<Hzb); - UBLOG(logINFO, "* Re on Zackenband ="<<(uLB*Hzb)/(nuLB*double(1<<refineLevel))); - UBLOG(logINFO, "* nx1/2/3 ="<<nx[0]<<"/"<<nx[1]<<"/"<<nx[2]); - UBLOG(logINFO, "* blocknx1/2/3 ="<<blocknx[0]<<"/"<<blocknx[1]<<"/"<<blocknx[2]); - UBLOG(logINFO, "* x1Periodic ="<<periodicx1); - UBLOG(logINFO, "* x2Periodic ="<<periodicx2); - UBLOG(logINFO, "* x3Periodic ="<<periodicx3); - UBLOG(logINFO, "* number of levels ="<<refineLevel+1); - UBLOG(logINFO, "* path ="<<pathname); - - UBLOG(logINFO, "*****************************************"); - UBLOG(logINFO, "* number of threads ="<<numOfThreads); - UBLOG(logINFO, "* number of processes ="<<comm->getNumberOfProcesses()); - UBLOG(logINFO, "*****************************************"); - UBLOG(logINFO, "*****************************************"); - } - ////////////////////////////////////////////////////////////////////////// - - - ////////////////////////////////////////////////////////////////////////// - //refinement - GbCuboid3DPtr refinePlatteBox(new GbCuboid3D(plate->getX1Minimum(), plate->getX2Minimum(), plate->getX3Minimum()+(plate->getX3Maximum()-plate->getX3Minimum())/2.0, - plate->getX1Maximum()+40.0, plate->getX2Maximum(), plate->getX3Maximum())); - if(myid == 0) GbSystem3D::writeGeoObject( refinePlatteBox.get(), pathname+"/geo/refinePlatteBox", WbWriterVtkXmlASCII::getInstance() ); - - if (refineLevel > 0) - { - if(myid == 0) UBLOG(logINFO,"Refinement - start"); - RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel); - refineHelper.addGbObject(refinePlatteBox, refineLevel); - refineHelper.refine(); - if(myid == 0) UBLOG(logINFO,"Refinement - end"); - } - - ///////////////////////////////////////////////// - ///interactoren - int bbOption1 = 1; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1)); - D3Q27TriFaceMeshInteractorPtr triPlateInteractor( new D3Q27TriFaceMeshInteractor(plate, grid, bcObst,Interactor3D::SOLID)); - D3Q27TriFaceMeshInteractorPtr triBand1Interactor( new D3Q27TriFaceMeshInteractor( meshBand1, grid, bcObst,Interactor3D::SOLID, Interactor3D::EDGES) ); - D3Q27TriFaceMeshInteractorPtr triBand2Interactor( new D3Q27TriFaceMeshInteractor( meshBand2, grid, bcObst,Interactor3D::SOLID, Interactor3D::EDGES) ); - D3Q27TriFaceMeshInteractorPtr triBand3Interactor( new D3Q27TriFaceMeshInteractor( meshBand3, grid, bcObst,Interactor3D::SOLID, Interactor3D::EDGES) ); - D3Q27TriFaceMeshInteractorPtr triBand4Interactor( new D3Q27TriFaceMeshInteractor( meshBand4, grid, bcObst,Interactor3D::SOLID, Interactor3D::EDGES) ); - - //inflow - GbCuboid3DPtr velBCCuboid(new GbCuboid3D(originX1-blockLengthx1, originX2-blockLengthx1, originX3-blockLengthx1, - originX1, originX2+geoLength[1]+blockLengthx1, originX3+geoLength[2]+blockLengthx1)); - if(myid == 0) GbSystem3D::writeGeoObject(velBCCuboid.get(), pathname+"/geo/velBCCuboid", WbWriterVtkXmlASCII::getInstance()); - D3Q27InteractorPtr velBCInteractor(new D3Q27Interactor(velBCCuboid,grid,Interactor3D::SOLID)); - - //inflow - double raiseVelSteps = 0; - vector<D3Q27BCFunction> velcX1BCs,dummy; - - mu::Parser inflowProfile; - inflowProfile.SetExpr("uLB"); - inflowProfile.DefineConst("uLB",uLB); - velcX1BCs.push_back(D3Q27BCFunction(inflowProfile,raiseVelSteps,D3Q27BCFunction::INFCONST)); - - D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter (velcX1BCs,dummy,dummy)); - velBCInteractor->addBCAdapter(velBCAdapter); - - //outflow - GbCuboid3DPtr densCuboid(new GbCuboid3D(originX1+geoLength[0], originX2-blockLengthx1, originX3-blockLengthx1, - originX1+geoLength[0]+blockLengthx1, originX2+geoLength[1]+blockLengthx1, originX3+geoLength[2]+blockLengthx1 )); - if(myid == 0) GbSystem3D::writeGeoObject(densCuboid.get(), pathname+"/geo/densCuboid", WbWriterVtkXmlASCII::getInstance()); - D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB)); - D3Q27InteractorPtr densInteractor( new D3Q27Interactor(densCuboid,grid,denBCAdapter,Interactor3D::SOLID) ); - - //////////////////////////////////////////// - //METIS - Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B)); - - //////////////////////////////////////////// - /////delete solid blocks - if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - intHelper.addInteractor(triPlateInteractor); - intHelper.addInteractor(triBand1Interactor); - intHelper.addInteractor(triBand2Interactor); - intHelper.addInteractor(triBand3Interactor); - intHelper.addInteractor(triBand4Interactor); - intHelper.addInteractor(densInteractor); - intHelper.addInteractor(velBCInteractor); - intHelper.selectBlocks(); - if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end"); - ////////////////////////////////////// - - //domain decomposition for threads - if(numOfThreads > 1) - { - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - } - - if(myid == 0) - { - UBLOG(logINFO,"Write blocks - start"); - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - ppblocks->update(0); - UBLOG(logINFO,"Write blocks - end"); - } - - unsigned long nob = grid->getNumberOfBlocks(); - unsigned long nod = nob * blocknx[0]*blocknx[1]*blocknx[2]; - unsigned long nod_real = nob * (blocknx[0]+3)*(blocknx[1]+3)*(blocknx[2]+3); - unsigned long nodb = (blocknx[0]) * (blocknx[1]) * (blocknx[2]); - - double needMemAll = double(nod_real*(27*sizeof(double) + sizeof(int))); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - double nup = 0; - - if(myid == 0) - { - UBLOG(logINFO,"Number of blocks = " << nob); - UBLOG(logINFO,"Number of nodes = " << nod); - 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*nodb); - nup += nobl*nodb*double(1<<level); - } - UBLOG(logINFO,"Hypothetically time for calculation step for 120 nodes = " << nup/6.0e5/(120*8) << " s"); - UBLOG(logINFO,"Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO,"Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO,"Available memory per process = " << availMem << " bytes"); - UBLOG(logINFO,"Available memory per node/8.0 = " << (availMem/8.0) << " bytes"); - } - - ////////////////////////////////////////// - //set connectors - if(myid == 0) UBLOG(logINFO,"set connectors - start"); - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - grid->accept( setConnsVisitor ); - if(myid == 0) UBLOG(logINFO,"set connectors - end"); - - //////////////////////////// - LBMKernel3DPtr kernel; - //kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL)); - - //with sponge layer - kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLBWithSpongeLayer(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL)); - kernel->setWithSpongeLayer(true); - kernel->setSpongeLayer(spongeLayer); - - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - kernel->setBCProcessor(bcProc); - SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem); - grid->accept(kernelVisitor); - ////////////////////////////////// - //undef nodes - if (refineLevel > 0) - { - D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - - intHelper.setBC(); - - //initialization of decompositions - D3Q27ETInitDistributionsBlockVisitor initVisitor( nuLB,rhoLB); - initVisitor.setVx1(uLB); - grid->accept(initVisitor); - - //Postprozess - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), - unitConverter, true)); - ppgeo->update(0); - ppgeo.reset(); - geoSch.reset(); - - if(myid == 0) UBLOG(logINFO,"Preprozess - end"); - } - else - { - restart = true; - - //domain decomposition for threads - if(numOfThreads > 1) - { - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - } - //set connectors - //grid->setPeriodicX3(false); - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - grid->accept( setConnsVisitor ); - SetSpongeLayerBlockVisitor ssp(spongeLayer); - grid->accept(ssp); - - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - //Platte - GbTriFaceMesh3DPtr plate (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(PlatteFilename,"Netz")); - plate->rotate(90.0,0.0,0.0); //TriFacMesh-KO-System anders als LB-KO-System - if(myid == 0) GbSystem3D::writeGeoObject( plate.get(), pathname+"/geo/platte", WbWriterVtkXmlBinary::getInstance() ); - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - // Zackenband - ////////////////////////////////////////////////////////////////////////// - GbTriFaceMesh3DPtr meshBand1 (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand")); - meshBand1->translate(-495, -700, -19.94); - if(myid == 0) GbSystem3D::writeGeoObject( meshBand1.get(), pathname+"/geo/Band1", WbWriterVtkXmlASCII::getInstance() ); - - double blockLengthx1 = blocknx[0]*cdx; //geowerte - double blockLengthx2 = blockLengthx1; - double blockLengthx3 = blockLengthx1; - - double geoLength[] = { nx[0]*blockLengthx1, nx[1]*blockLengthx2, nx[2]*blockLengthx3}; - - double originX1 = plate->getX1Minimum()-plate->getLengthX1()/4.0; - double originX2 = plate->getX2Minimum(); - double originX3 = plate->getX3Minimum()-299.5; - - //bounding box - double g_minX1 = originX1; - double g_minX2 = originX2; - double g_minX3 = originX3; - - double g_maxX1 = originX1 + geoLength[0]; - double g_maxX2 = originX2 + geoLength[1]; - double g_maxX3 = originX3 + geoLength[2];; - - GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); - gridCube->setCenterCoordinates(gridCube->getX1Centroid(),meshBand1->getX2Centroid(),gridCube->getX3Centroid()); - if(myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname+"/geo/gridCube", WbWriterVtkXmlASCII::getInstance()); - - originX2 = gridCube->getX2Minimum(); - g_minX2 = originX2; - g_maxX2 = originX2 + geoLength[1]; - //walls - GbCuboid3DPtr addWallZmin (new GbCuboid3D(g_minX1-blockLengthx1, g_minX2-blockLengthx1, g_minX3-blockLengthx1, g_maxX1+blockLengthx1, g_maxX2+blockLengthx1, g_minX3)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmax (new GbCuboid3D(g_minX1-blockLengthx1, g_minX2-blockLengthx1, g_maxX3, g_maxX1+blockLengthx1, g_maxX2+blockLengthx1, g_maxX3+blockLengthx1)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance()); - - //walls - int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr slip(new D3Q27SlipBCAdapter(bbOption)); - D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, slip,Interactor3D::SOLID)); - D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, slip,Interactor3D::SOLID)); - - SetSolidOrTransBlockVisitor v1(addWallZminInt, SetSolidOrTransBlockVisitor::TRANS); - grid->accept(v1); - addWallZminInt->initInteractor(); - SetSolidOrTransBlockVisitor v2(addWallZmaxInt, SetSolidOrTransBlockVisitor::TRANS); - grid->accept(v2); - addWallZmaxInt->initInteractor(); - - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), - unitConverter, true)); - ppgeo->update(0); - ppgeo.reset(); - geoSch.reset(); - ////////////////////////////////////////////////////////////////////////// - - if(myid == 0) UBLOG(logINFO,"Restart - end"); - } - UbSchedulerPtr visSch(new UbScheduler()); - //visSch->addSchedule(1,0,3); - //visSch->addSchedule(100,100,1000); - //visSch->addSchedule(1000,1000,5000); - //visSch->addSchedule(5000,5000,100000); - //visSch->addSchedule(100000,100000,10000000); - - visSch->addSchedule(1000,1000,10000000); - - D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), unitConverter); - - double startStep = 88000; - - UbSchedulerPtr resSchRMS(new UbScheduler()); - resSchRMS->addSchedule(1000000, startStep, 10000000); - UbSchedulerPtr resSchMeans(new UbScheduler()); - resSchMeans->addSchedule(1000000, startStep, 10000000); - UbSchedulerPtr stepAvSch(new UbScheduler()); - int averageInterval=100; - stepAvSch->addSchedule(averageInterval,0,10000000); - AverageValuesPostprocessor Avpp(grid, pathname, WbWriterVtkXmlBinary::getInstance(), visSch/*wann wird rausgeschrieben*/, - stepAvSch/*wann wird gemittelt*/, resSchMeans,resSchRMS/*wann wird resettet*/,restart); - - UbSchedulerPtr nupsSch(new UbScheduler(10, 10, 30)); - nupsSch->addSchedule(500,500,1e6); - NUPSCounterPostprocessor npr(grid, nupsSch, numOfThreads, comm); - - UbSchedulerPtr emSch(new UbScheduler(10)); - EmergencyExitPostprocessor empr(grid, emSch, pathname, RestartPostprocessorPtr(&rp), comm); - - if(myid == 0) - { - UBLOG(logINFO,"PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - UBLOG(logINFO,"PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - UBLOG(logINFO,"PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - } - - string lastStep = string(cstr2); - double endTime = UbSystem::stringTo<double>(lastStep); - 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[]) -{ - if (argc == 1) - { - cout<<"Command line argument isn't specified!"<<endl; - cout<<"plate2 <machine name>"<<endl; - return 1; - } - run(argv[1], argv[2]); - - return 0; -} - diff --git a/apps/cpu/pmTortu/CMakeLists.txt b/apps/cpu/pmTortu/CMakeLists.txt deleted file mode 100644 index 6f53609f0734e369f9954b581ec211aef8e2957d..0000000000000000000000000000000000000000 --- a/apps/cpu/pmTortu/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(plate) - -INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(pmTortu BINARY) diff --git a/apps/cpu/pmTortu/pmTortu.cpp b/apps/cpu/pmTortu/pmTortu.cpp deleted file mode 100644 index 491e2b003ce9e03b128b6d24ea4a6884a9d6dcf6..0000000000000000000000000000000000000000 --- a/apps/cpu/pmTortu/pmTortu.cpp +++ /dev/null @@ -1,511 +0,0 @@ -#include <iostream> -#include <string> - -#include <vfluids.h> - -using namespace std; - -//! \brief Computes Flow thorugh a porous medium and writespathlines -//! \details Aim: determine tortuosity. pathlines are later integrated using python-script streamlinesMean.py (needs scipy,numpy) -//! \details If PM-data is large run on single visulalization node. -//! \details Created on: 01.07.2013 -//! \author Sonja Uphoff - -void run(const char *cstr) -{ - try - { - string machine = QUOTEME(CAB_MACHINE); - UBLOG(logINFO,"Testcase PMTortuosity"); - string pathname; - string stlPath; - int numOfThreads =1; - bool logfile = false; - stringstream logFilename; - double availMem = 0; - - UbLog::reportingLevel() = logDEBUG5; //logINFO; - - CommunicatorPtr comm(new MPICommunicator()); - int myid = comm->getProcessID(); - - if(machine == "PIPPINNEU") - { - - pathname = "f:/temp/PMtortu"; - stlPath = "f:/GeometrienVliese"; - numOfThreads = 3; - logfile = false; - availMem = 3.0e9; - } - else if(machine == "M01" || machine == "M02") - { - pathname = "/work/sonjaOutputs/PMTortu2metall450"; - stlPath = "/work/sonjaOutputs"; - numOfThreads = 4; - availMem = 12.0e9; - logfile = true; - - //if(myid ==0) - //{ - logFilename << pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt"; - //} - } - else throw UbException(UB_EXARGS, "unknown CAB_MACHINE"); - - - - //if(myid ==0 && logfile) - //{ - UbLog::output_policy::setStream(logFilename.str()); - //} - - int baseLevel, refineLevel,nx[3],blocknx[3]; - double Re,velocity,rhoInit,vx1Init;//,vx2Init,vx3Init; - -////////////////////////////////////////////////////////////////////////// - //physik -////////////////////////////////////////////////////////////////////////// - Re = 1;// 13286;//13286;//gemessen 18.98 m/s...*5.0 zum testen ob was passiert - velocity = 0.01; - vx1Init = 0.01; - rhoInit = 1.0; - SimulationParametersPtr param = SimulationParameters::getInstanz(); -param->setCollisionModelType(SimulationParameters::COMPRESSIBLE); - - ///////////////Knotenabmessungen: - - nx[0]=28; - nx[1]=27; - nx[2]=27; - blocknx[0]=10; - blocknx[1]=10; - blocknx[2]=10; - - baseLevel = 0; - refineLevel = 0; - - bool periodicx1 = false; - bool periodicx2 = false; - bool periodicx3 = false; - - - - double minX1 = 0.0; - double maxX1 = 280; - double minX2 = 0.0; - double maxX2 = 270; - double minX3 = 0.0; - double maxX3 = 270; - double centerX1 = 0.5*(maxX1-minX1); - double centerX2 = 0.5*(maxX2-minX2); - //double scaleAsphalt = 0.0000625; //10/1600 - double scalepixeltomm=0.5; - double scaleAsphalt = 1.0; - minX1 = minX1*scaleAsphalt; - minX2 = minX2*scaleAsphalt; - minX3 = minX3*scaleAsphalt; - maxX1 = maxX1*scaleAsphalt; - maxX2 = maxX2*scaleAsphalt; - maxX3 = maxX3*scaleAsphalt; - - //vorgabe geom. dx im feinsten = 1 -> abstand der voxel = 1 - double coarseNodeDx = (maxX2 - minX2) / (double)( blocknx[1]*nx[1] ); - double fineNodeDx = coarseNodeDx / (double)(1<<refineLevel); - - double blockLengthx1 = blocknx[0]*coarseNodeDx; - double blockLengthx2 = blocknx[1]*coarseNodeDx; - double blockLengthx3 = blocknx[2]*coarseNodeDx; - - double originX1 = minX1; - double originX2 = minX2; - double originX3 = minX3; - - int nx1 = nx[0]; - int nx2 = nx[1]; - int nx3 = nx[2]; - int blocknx1 = blocknx[0]; - int blocknx2 = blocknx[1]; - int blocknx3 = blocknx[2]; - - double gridOrigin[3] = { originX1, originX2, originX3 }; - - //geom. GROBE Blocklaenge - double coarseBlockLength[3]; - coarseBlockLength[0] = blockLengthx1; - coarseBlockLength[1] = blockLengthx2; - coarseBlockLength[2] = blockLengthx3; - double geoLength[] = { nx[0]*blockLengthx1, nx[1]*blockLengthx2, nx[2]*blockLengthx3}; - -////////////////////////////////////////////////////////////////////////// - // PM File -////////////////////////////////////////////////////////////////////////// - string pmFilename; - pmFilename = stlPath+"/metallrgbx271y271z270.vti";// - int pmNX1=270; - int pmNX2=271; - int pmNX3=270; - float threshold = 120.0; - - GbVoxelMatrix3DPtr pmMesh(GbVoxelMatrix3DCreator::getInstance()->createFromVtiASCIIFloatFile(pmFilename,pmNX1,pmNX2,pmNX3,threshold)); - -pmMesh->translate((maxX1-minX1)*0.05,-(maxX2-minX2)*0.01,-(maxX3-minX3)*0.01); - pmMesh->setTransferViaFilename(true, pmFilename); - -//########################################################################## - //## physical parameters -//########################################################################## - - double rhoLB = 1.0; - double rhoReal = 1.0; - double nueReal = 0.16;//0.015; - - double hReal = maxX1; - double uReal = Re*nueReal/hReal; - - //##Machzahl: - //#Ma = uReal/csReal - - double csReal = 1.0/sqrt(3.0); - double cs_LB=1.0/sqrt(3.0); - double Ma = uReal/csReal;//0.0553;//Ma-Real! - double hLB = hReal; - - //LBMUnitConverter unitConverter(hReal, csReal, rhoReal, hLB); - LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter(hReal, csReal, rhoReal, blocknx[0]*nx[0] )); - - double uLB = uReal * unitConverter->getFactorVelocityWToLb(); - double nueLB = nueReal * unitConverter->getFactorViscosityWToLb(); - - double realDeltaT = (nueLB * hReal *hReal) / (nueReal * blocknx[0]*nx[0] *blocknx[0]*nx[0]); - - - - Grid3DPtr grid(new Grid3D()); - UbSchedulerPtr rSch(new UbScheduler(5000,5000,1000000)); - RestartPostprocessor rp(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY); - -////////////////////////////////////////////////////////////////////////// - - std::string opt; - - if(cstr!= NULL) - opt = std::string(cstr); - - //bounding box - double g_minX1 = originX1; - double g_minX2 = originX2; - double g_minX3 = originX3; - - double g_maxX1 = originX1 + geoLength[0]; - double g_maxX2 = originX2 + geoLength[1]; - double g_maxX3 = originX3 + geoLength[2]; - - //set grid - grid->setDeltaX(coarseNodeDx); - grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - grid->setPeriodicX1(periodicx1); - grid->setPeriodicX2(periodicx2); - grid->setPeriodicX3(periodicx3); - - - 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", WbWriterVtkXmlASCII::getInstance()); - - GenBlocksGridVisitor genBlocks; - genBlocks.addGeoObject(gridCube); - grid->accept(genBlocks); - - -////////////////////////////////////////////////////////////////////////// - if(myid == 0) - { - UBLOG(logINFO, "*****************************************"); - UBLOG(logINFO, "* Parameters *"); - UBLOG(logINFO, "* Re ="<<Re); - UBLOG(logINFO, "* Ma ="<<Ma); - UBLOG(logINFO, "* uReal ="<<uReal); - UBLOG(logINFO, "* nueReal ="<<nueReal); - UBLOG(logINFO, "* nue ="<<nueLB); - UBLOG(logINFO, "* velocity ="<<uLB); - UBLOG(logINFO, "* LX1 (world/LB)="<<hReal<<"/"<<hReal/coarseNodeDx); - // UBLOG(logINFO, "* LX2 (world/LB)="<<kanalbreiteSI<<"/"<<kanalbreiteSI/coarseNodeDx); - // UBLOG(logINFO, "* LX3 (world/LB)="<<kanalhoeheSI<<"/"<<kanalhoeheSI/coarseNodeDx); - UBLOG(logINFO, "* cdx ="<<coarseNodeDx); - UBLOG(logINFO, "* fdx ="<<fineNodeDx); - UBLOG(logINFO, "* dx_base ="<<coarseNodeDx<<" == "<<coarseNodeDx); - UBLOG(logINFO, "* dx_refine ="<<fineNodeDx<<" == "<<fineNodeDx ); - UBLOG(logINFO, "* nx1/2/3 ="<<nx[0]<<"/"<<nx[1]<<"/"<<nx[2]); - UBLOG(logINFO, "* blocknx1/2/3 ="<<blocknx[0]<<"/"<<blocknx[1]<<"/"<<blocknx[2]); - UBLOG(logINFO, "* x2Periodic ="<<periodicx2); - UBLOG(logINFO, "* x3Periodic ="<<periodicx3); - UBLOG(logINFO, "*****************************************"); - UBLOGML(logINFO, "UnitConverter:"<<unitConverter->toString()); - UBLOG(logINFO, "*****************************************"); - } - - - RatioBlockVisitor ratioVisitor(refineLevel); - grid->accept(ratioVisitor); - RatioSmoothBlockVisitor ratioSmoothVisitor(refineLevel); - grid->accept(ratioSmoothVisitor); - OverlapBlockVisitor overlapVisitor(refineLevel); - grid->accept(overlapVisitor); - std::vector<int> dirs; - D3Q27System::getLBMDirections(dirs); - SetInterpolationDirsBlockVisitor interDirsVisitor(dirs); - grid->accept(interDirsVisitor); - - if(myid == 0) UBLOG(logINFO,"Refinement - end"); - - MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B); - grid->accept( metisVisitor ); - - if(myid == 0) UBLOG(logINFO,"Write blocks - start"); - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm)); - if(myid == 0) ppblocks->update(0); - if(myid == 0) UBLOG(logINFO,"Write blocks - end"); - - if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - start"); - SolidBlocksHelper sd(grid, comm); - - - sd.deleteSolidBlocks(); - if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end"); - - if(myid == 0) UBLOG(logINFO,"Write blocks - start"); - grid->accept( metisVisitor ); - if(myid == 0) ppblocks->update(1); - ppblocks.reset(); - if(myid == 0) UBLOG(logINFO,"Write blocks - end"); - - unsigned long nob = grid->getNumberOfBlocks(); - unsigned long nod = nob * blocknx[0]*blocknx[1]*blocknx[2]; - unsigned long nod_real = nob * (blocknx[0]+3)*(blocknx[1]+3)*(blocknx[2]+3); - - double needMemAll = double(nod_real*(27*sizeof(double) + sizeof(int))); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - if(myid == 0) - { - UBLOG(logINFO,"Number of blocks = " << nob); - UBLOG(logINFO,"Number of nodes = " << nod); - UBLOG(logINFO,"Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO,"Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO,"Available memory per process = " << availMem << " bytes"); - } - - LBMKernel3DPtr kernel(new LBMKernelETD3Q27Cascaded(blocknx[0], blocknx[1], blocknx[2])); - - // LBMKernel3DPtr kernel(new LBMKernelETD3Q27BGK(blocknx[0], blocknx[1], blocknx[2],1)); - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - kernel->setBCProcessor(bcProc); - - - SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem); - - grid->accept(kernelVisitor); - - - -////////////////////////////////////////////////////////////////////////// - double geoOverlap = 5*coarseNodeDx; - - -////////////////////////////////////////////////////////////////////////// - // Interactoren -////////////////////////////////////////////////////////////////////////// -//########################################################################## - int noSlipSecOpt = 0; // #0=2nd order BB 1=simple BB -//########################################################################## - int noSlipSecOptAsphalt = 1; // #0=2nd order BB 1=simple BB -//########################################################################## - int bbOption1 = 0; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1)); - D3Q27InteractorPtr PM1Interactor = D3Q27InteractorPtr ( new D3Q27Interactor(pmMesh, grid, bcObst,Interactor3D::SOLID)); //wo ist bc obst definiert? - grid->addAndInitInteractor( PM1Interactor); - //UBLOG(logINFO,"SpD3Q19Asphalt - send porous media to D3Q19InteractorService"); - //UBLOG(logINFO,"SpD3Q19Asphalt - send porous media = "<<pmInteractor->getName()<<" with "<<typeid(*pmInteractor->getGbObject3D()).name()<<" node("<<pmNX1<<"/"<<pmNX2<<"/"<<pmNX3<<")"); - UbTimer timer; - timer.start(); - - - UBLOG(logINFO,"SpD3Q19Asphalt - send porous media to D3Q19InteractorService done in "<<timer.stop()); - - - if (refineLevel > 0) - { - D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27OffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - - //domain decomposition - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - //initialization of decompositions - D3Q27ETInitDistributionsBlockVisitor initVisitor(1.0); - initVisitor.setVx1(0.0); - grid->accept(initVisitor); - - - ////////////////////////////////////////////////////////////////////////// - // BCs -////////////////////////////////////////////////////////////////////////// - //Reparatur an den Seiten: - UBLOG(logINFO,"inflow") - double x3minMesh=0.000; double x3maxMesh=originX3 + blockLengthx3*nx3 + geoOverlap; - GbCuboid3DPtr leftCuboid(new GbCuboid3D( originX1 + blockLengthx1*nx1 - coarseNodeDx, - originX2 - geoOverlap, - x3minMesh, - originX1 + blockLengthx1*nx1 + geoOverlap, - originX2 + blockLengthx2*nx2 + geoOverlap, - x3maxMesh)); - GbCuboid3DPtr rightCuboid(new GbCuboid3D( originX1 - geoOverlap, - originX2 - geoOverlap, - x3minMesh, - originX1 + geoOverlap, - originX2 + blockLengthx2*nx2 + geoOverlap, - x3maxMesh)); - GbCuboid3DPtr northCuboid(new GbCuboid3D( originX1- geoOverlap, - originX2 + blockLengthx2*nx2 - 0.5*coarseNodeDx, - x3minMesh, - originX1 + blockLengthx1*nx1 + geoOverlap, - originX2 + blockLengthx2*nx2 + geoOverlap, - x3maxMesh)); - GbCuboid3DPtr southCuboid(new GbCuboid3D( originX1 - geoOverlap, - originX2 - geoOverlap, - x3minMesh, - originX1 + blockLengthx1*nx1 + geoOverlap, - originX2 + geoOverlap, - x3maxMesh)); - -////////////////////////////////////////////////////////////////////////// - // inflow -////////////////////////////////////////////////////////////////////////// - UBLOG(logINFO,"inflow") - - GbCuboid3DPtr densCuboid(new GbCuboid3D( - originX1 - geoOverlap, - originX2 - geoOverlap, - originX3 + blockLengthx3*nx3 - coarseNodeDx, - originX1 + blockLengthx1*nx1 + geoOverlap, - originX2 + blockLengthx2*nx2 + geoOverlap, - originX3 + blockLengthx3*nx3 + geoOverlap)); - - -////////////////////////////////////////////////////////////////////////// - // bottom/outflow -////////////////////////////////////////////////////////////////////////// - double dRho=0.05; - GbCuboid3DPtr densCuboid2(new GbCuboid3D( - originX1 - geoOverlap, - originX2 - geoOverlap, - originX3 - geoOverlap, - originX1 + blockLengthx1*nx1 + geoOverlap, - originX2 + blockLengthx2*nx2 + geoOverlap, -minX3+0.5*fineNodeDx )); - - if(myid == 0) GbSystem3D::writeGeoObject(densCuboid2.get(), pathname+"/geo/densCuboid2", WbWriterVtkXmlASCII::getInstance()); - D3Q27BoundaryConditionAdapterPtr denBCAdapter2(new D3Q27DensityBCAdapter(rhoInit-dRho)); - D3Q27InteractorPtr densInteractor2( new D3Q27Interactor(leftCuboid,grid,denBCAdapter2,Interactor3D::SOLID) ); - grid->addAndInitInteractor( densInteractor2 ); - - if(myid == 0) GbSystem3D::writeGeoObject(densCuboid.get(), pathname+"/geo/densCuboid", WbWriterVtkXmlASCII::getInstance()); - D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoInit+dRho)); - D3Q27InteractorPtr densInteractor( new D3Q27Interactor(rightCuboid,grid,denBCAdapter,Interactor3D::SOLID) ); - grid->addAndInitInteractor( densInteractor ); - - D3Q27InteractorPtr leftInteractor = D3Q27InteractorPtr ( new D3Q27Interactor(densCuboid2, grid, bcObst,Interactor3D::SOLID)); - grid->addAndInitInteractor( leftInteractor); - D3Q27InteractorPtr rightInteractor = D3Q27InteractorPtr ( new D3Q27Interactor(densCuboid, grid, bcObst,Interactor3D::SOLID)); - grid->addAndInitInteractor(rightInteractor); - D3Q27InteractorPtr northInteractor = D3Q27InteractorPtr ( new D3Q27Interactor(northCuboid, grid, bcObst,Interactor3D::SOLID)); - grid->addAndInitInteractor(northInteractor); - D3Q27InteractorPtr southInteractor = D3Q27InteractorPtr ( new D3Q27Interactor(southCuboid, grid, bcObst,Interactor3D::SOLID)); - grid->addAndInitInteractor(southInteractor); - - if(myid == 0) GbSystem3D::writeGeoObject(northCuboid.get(), pathname+"/geo/north", WbWriterVtkXmlASCII::getInstance()); -if(myid == 0) GbSystem3D::writeGeoObject(southCuboid.get(), pathname+"/geo/south", WbWriterVtkXmlASCII::getInstance()); -if(myid == 0) GbSystem3D::writeGeoObject(rightCuboid.get(), pathname+"/geo/right", WbWriterVtkXmlASCII::getInstance()); -if(myid == 0) GbSystem3D::writeGeoObject(leftCuboid.get(), pathname+"/geo/left", WbWriterVtkXmlASCII::getInstance()); - - - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), -unitConverter, comm, true)); - - double raiseVelSteps = 0; - - grid->doPostProcess(0); - ppgeo.reset(); - geoSch.reset(); - - UbSchedulerPtr plSch(new UbScheduler(10, 2)); - vector<D3Q27PathLinePostprocessorPtr> pathlinepostPParray; - - for (int ppz=0; ppz<27; ppz++) - { - for (int ppy=0; ppy<27; ppy++) - { - char numstr[21]; - sprintf(numstr, "%d", ppy+20*ppz); - std::string pathPL = pathname+"/pathline" + numstr+".dat"; - D3Q27PathLinePostprocessorPtr plptr1( new D3Q27PathLinePostprocessor(grid, pathPL, WbWriterVtkXmlASCII::getInstance(), unitConverter, plSch, comm, 8.0, 6.0+8.0*(double)ppy,5.0+8.0*(double)ppz, nueLB, iProcessor)); - pathlinepostPParray.push_back(plptr1);//new D3Q27PathLinePostprocessor(grid, pathname + "/pathLine", WbWriterVtkXmlASCII::getInstance(), conv, plSch, comm, 0.01+(double)ppx*0.0001, 0.00001,0.00001, nueLB, iProcessor)); - - } - } - - UbSchedulerPtr visSch(new UbScheduler()); - visSch->addSchedule(1,1,10); - visSch->addSchedule(10,10,100); - visSch->addSchedule(100,100,1000); - visSch->addSchedule(1000,1000,100000); - visSch->addSchedule(100000,100000,1000000); - D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), unitConverter, comm); - - UbSchedulerPtr nupsSch(new UbScheduler(10, 10, 100)); - NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm); - -////////////////////////////////////////////////////////////////////////// - - cout << "PID = " << myid << " Total Physical Memory (RAM): " << MemoryUtil::getTotalPhysMem()<<endl; - cout << "PID = " << myid << " Physical Memory currently used: " << MemoryUtil::getPhysMemUsed()<<endl; - cout << "PID = " << myid << " Physical Memory currently used by current process: " << MemoryUtil::getPhysMemUsedByMe()<<endl; - - double endTime = 40001; - UbSchedulerPtr ghostLSch(new UbScheduler()); - ghostLSch->addSchedule(1,1,endTime); - CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, ghostLSch)); - 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[]) -{ - - run(argv[1]); - - return 0; -} diff --git a/apps/cpu/pmTortu/streamlinesMean.py b/apps/cpu/pmTortu/streamlinesMean.py deleted file mode 100644 index 6fa77ce21f76214151848c150bae96563a3c344d..0000000000000000000000000000000000000000 --- a/apps/cpu/pmTortu/streamlinesMean.py +++ /dev/null @@ -1,162 +0,0 @@ -import os -import scipy -import numpy -import math - -#li=[[5,0.005]] - -n=409; -i=0; -j=0; -k=0; -length=[0]; -lengthx=[0]; -lengthT=[0,0,0,0,0]; -lengthxT=[0,0,0,0,0]; -ItortuList=[0]; -outKOx=78.0;#0.105; -try: - for i in range(1,n): - length.append(0); - lengthx.append(0); - #if (i<10): - # dateiIn="C:/Users/Sonja/Documents/pathlines3/pathline30"+str(i)+".dat.ascii.vtu" - #else: - dateiIn="C:/Users/Sonja/Documents/blech2c/pathline"+str(i)+".dat.ascii.vtu" - print dateiIn - datei = open(dateiIn,"r") - j=0; k=0; - for line in datei: - j=j+1 - #print line - ## if ((i>6568) and (i<17261) ): - #zuordnung = line.split(" ") - #if (j==1): print line - if (k==1): ##marker der anfang der koordinaten bezeichnet - zuordnung = line.split(" ") - #print zuordnung - #pointsxyz=zuordnung[7].split(" ") - #print pointsxyz - t=0; - for entry in zuordnung: - pointsxyz=entry.split(" ") - #print pointsxyz - t=t+1; - #if (i==1 | i==2): - lengthT.append(0); - lengthxT.append(0); - if (t>7): - if (pointsxyz[1]!="\n"): - if(float(pointsxyz[1])<outKOx): ##ende messbereich - #print pointsxyz - if (t==8): - xalt=float(pointsxyz[1]); - yalt=float(pointsxyz[2]); - zalt=float(pointsxyz[3]); - xneu=float(pointsxyz[1]); - yneu=float(pointsxyz[2]); - zneu=float(pointsxyz[3]); - if (xalt>20.0): ##beginn messbereicht - length[i]=length[i]+math.sqrt((xneu-xalt)*(xneu-xalt)+(yneu-yalt)*(yneu-yalt)+(zneu-zalt)*(zneu-zalt)); - lengthx[i]=lengthx[i]+(xneu-xalt); - lengthT[t]=lengthT[t]+length[i]; - lengthxT[t]=lengthxT[t]+lengthx[i]; - #print lengthT[t] - #print xneu - #print lengthx[i] - xalt=xneu; yalt=yneu; zalt=zneu; - - - k=2; - #if (str(line)==""" <DataArray type="Float64" NumberOfComponents="3" format="ascii">"""): - - if(j==5): - print line - k=1; - #print zuordnung - #print zuordnung[0] - #print zuordnung[1] - #test0=float(zuordnung[0]) - #test1=float(zuordnung[1]) - #li.append([test0,test1]) - ##print float(li[10])/20 - #print li - datei.close(); - i=0; - j=0; - length.pop(0); - lengthx.pop(0); - #print length - #print lengthx - tortuGes=0; - LGes=0.0; - LxGes=0.0; - fFile = open("f:/temp/pathlinesb2cLength.dat", "w") - for entry in length: - #print entry; - #print lengthx[i]; - LGes=LGes+length[i]; - LxGes=LxGes+lengthx[i]; - ItortuList.append(entry/max(lengthx[i],0.00000001)); - if (length[i]>2.0): - Itortu=entry/lengthx[i] - print Itortu - j=j+1; - tortuGes=tortuGes+Itortu; - i=i+1 - fFile.write(str(i)) - fFile.write(" ") - fFile.write(str(entry)) - fFile.write(" ") - #fFile.write(str(lengthx[i])) - #fFile.write(" ") - #fFile.write(str(entry/max(lengthx[i],0.00000001))) - fFile.write("\n") - tortuGes=tortuGes/j; - print "berücksichtigte Stromlinien:" - print j - fFile.close(); - ItortuList.pop(0); - print "TortuGes:" - print tortuGes; - print "Lges:" - print LGes; - print "Lxges:" - print LxGes; - print "Lges/LxGes:" - print LGes/LxGes; - erg=[lengthx,length,ItortuList]; - #print erg - erg=numpy.asarray(erg).T.tolist() #does a list-transpose - #print erg - erg=sorted(erg); - fFile = open("f:/temp/pathlinesb2cLengthSortt1000.dat", "w") - i=0; - #print erg[1][1] - #print erg[0][1] - for entry in erg: - i=i+1; - #print i - fFile.write(str(entry[0])) - fFile.write(" ") - fFile.write(str(entry[1])) - fFile.write(" ") - fFile.write(" ") - fFile.write(str(entry[2])) - fFile.write("\n") - fFile.close(); - fFile = open("f:/temp/pathlinesbcbwithTime.dat", "w") - i=0; - for entry in lengthxT: - i=i+1; - #print i - fFile.write(str(entry)) - fFile.write(" ") - fFile.write(str(lengthT[i])) - fFile.write(" ") - fFile.write("\n") - fFile.close(); -except IOError: - datei.close() - print "caught error couldnt process datafile" - print i diff --git a/apps/cpu/porplate2/CMakeLists.txt b/apps/cpu/porplate2/CMakeLists.txt deleted file mode 100644 index a1a8d917d96667de38c2e014313341303cee4810..0000000000000000000000000000000000000000 --- a/apps/cpu/porplate2/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(porplate2) - -INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(porplate2 BINARY) diff --git a/apps/cpu/porplate2/porplate.cpp b/apps/cpu/porplate2/porplate.cpp deleted file mode 100644 index fe93f8fa59d7e9befa63176b253f172ae09e1e87..0000000000000000000000000000000000000000 --- a/apps/cpu/porplate2/porplate.cpp +++ /dev/null @@ -1,1060 +0,0 @@ - - -#include <iostream> -#include <string> -#include <math.h> - -#include <vfluids.h> - -using namespace std; - -////////////////////////////////////////////////////////////////////////// -void inlay(GbVoxelMatrix3DPtr pmMesh, string& pathname, int myid, int i, Grid3DPtr grid) -{ - int bbOptionPM = 2; //quadratic bounce back with for thin walls - D3Q27BoundaryConditionAdapterPtr noSlipPM(new D3Q27NoSlipBCAdapter(bbOptionPM)); - D3Q27InteractorPtr inlayInt = D3Q27InteractorPtr(new D3Q27Interactor(pmMesh, grid, noSlipPM, Interactor3D::SOLID)); - - GbCuboid3DPtr inlayBox(new GbCuboid3D(pmMesh->getX1Minimum(), pmMesh->getX2Minimum(), pmMesh->getX3Minimum(), pmMesh->getX1Maximum(), pmMesh->getX2Maximum(), pmMesh->getX3Maximum())); - if (myid == 0) GbSystem3D::writeGeoObject(inlayBox.get(), pathname + "/geo/inlay" + UbSystem::toString(i), WbWriterVtkXmlASCII::getInstance()); - D3Q27InteractorPtr inlayBoxInt = D3Q27InteractorPtr(new D3Q27Interactor(inlayBox, grid, noSlipPM, Interactor3D::SOLID)); - SetSolidOrTransBlockVisitor v1(inlayBoxInt, SetSolidOrTransBlockVisitor::SOLID); - grid->accept(v1); - SetSolidOrTransBlockVisitor v2(inlayBoxInt, SetSolidOrTransBlockVisitor::TRANS); - grid->accept(v2); - - vector<Block3DPtr> inlayBlocks; - vector<Block3DPtr>& sb = inlayBoxInt->getSolidBlockSet(); - if (myid == 0) UBLOG(logINFO, "sb.size = " << sb.size()); - inlayBlocks.insert(inlayBlocks.end(), sb.begin(), sb.end()); - vector<Block3DPtr>& tb = inlayBoxInt->getTransBlockSet(); - if (myid == 0) UBLOG(logINFO, "tb.size = " << tb.size()); - inlayBlocks.insert(inlayBlocks.end(), tb.begin(), tb.end()); - - if (myid == 0) UBLOG(logINFO, "inlayBlocks.size = " << inlayBlocks.size()); - - BOOST_FOREACH(Block3DPtr block, inlayBlocks) - { - block->setActive(true); - inlayInt->setDifferencesToGbObject3D(block); - } -} -////////////////////////////////////////////////////////////////////////// -void deleteExistBlocks(Grid3DPtr ngrid, Grid3DPtr ogrid) -{ - int minInitLevel = ogrid->getCoarsestInitializedLevel(); - int maxInitLevel = ogrid->getFinestInitializedLevel(); - - std::vector<std::vector<Block3DPtr> > blockVector; - blockVector.resize(maxInitLevel + 1); - - std::vector<int> ids; - - for (int level = minInitLevel; level <= maxInitLevel; level++) - { - ogrid->getBlocks(level, blockVector[level]); - - BOOST_FOREACH(Block3DPtr block, blockVector[level]) - { - int x1 = block->getX1(); - int x2 = block->getX2(); - int x3 = block->getX3(); - Block3DPtr nblock = ngrid->getBlock(x1, x2, x3, level); - if (nblock) - { - ngrid->deleteBlock(x1, x2, x3, level); - } - else - { - ids.push_back(block->getGlobalID()); - } - } - } - - ogrid->deleteBlocks(ids); -} -////////////////////////////////////////////////////////////////////////// -void reindexBlocks(Grid3DPtr ngrid) -{ - int minInitLevel = ngrid->getCoarsestInitializedLevel(); - int maxInitLevel = ngrid->getFinestInitializedLevel(); - - std::vector<std::vector<Block3DPtr> > blockVector; - blockVector.resize(maxInitLevel + 1); - - int maxID = Block3D::getMaxGlobalID(); - - for (int level = minInitLevel; level <= maxInitLevel; level++) - { - ngrid->getBlocks(level, blockVector[level]); - - BOOST_FOREACH(Block3DPtr block, blockVector[level]) - { - block->setGlobalID(++maxID); - } - } -} -////////////////////////////////////////////////////////////////////////// -void setInterpolationFlag(Grid3DPtr grid) -{ - int minInitLevel = grid->getCoarsestInitializedLevel(); - int maxInitLevel = grid->getFinestInitializedLevel(); - - std::vector<std::vector<Block3DPtr> > blockVector; - blockVector.resize(maxInitLevel + 1); - - int maxID = Block3D::getMaxGlobalID(); - - for (int level = minInitLevel; level <= maxInitLevel; level++) - { - grid->getBlocks(level, blockVector[level]); - - BOOST_FOREACH(Block3DPtr block, blockVector[level]) - { - block->deleteInterpolationFlag(); - } - } - - std::vector<int> dirs; - - for (int i = D3Q27System::E; i <= D3Q27System::TS; i++) - { - dirs.push_back(i); - } - SetInterpolationDirsBlockVisitor interDirsVisitor(dirs); - grid->accept(interDirsVisitor); -} -////////////////////////////////////////////////////////////////////////// -void addExistBlocks(Grid3DPtr ngrid, Grid3DPtr ogrid, Grid3DPtr hgrid) -{ - int minInitLevel = ngrid->getCoarsestInitializedLevel(); - int maxInitLevel = ngrid->getFinestInitializedLevel(); - - std::vector<std::vector<Block3DPtr> > blockVector; - blockVector.resize(maxInitLevel + 1); - - std::vector<Block3DPtr> db; - - //int gridRank = ogrid->getRank(); - - for (int level = minInitLevel; level <= maxInitLevel; level++) - { - ngrid->getBlocks(level, blockVector[level]); - - BOOST_FOREACH(Block3DPtr block, blockVector[level]) - { - int x1 = block->getX1(); - int x2 = block->getX2(); - int x3 = block->getX3(); - Block3DPtr oblock = ogrid->getBlock(x1, x2, x3, level); - if (oblock) - { - hgrid->addBlock(oblock); - } - - } - } -} -////////////////////////////////////////////////////////////////////////// -void moveBlocks(Grid3DPtr ngrid, Grid3DPtr ogrid) -{ - int minInitLevel = ngrid->getCoarsestInitializedLevel(); - int maxInitLevel = ngrid->getFinestInitializedLevel(); - - std::vector<std::vector<Block3DPtr> > blockVector; - blockVector.resize(maxInitLevel + 1); - - for (int level = minInitLevel; level <= maxInitLevel; level++) - { - ngrid->getBlocks(level, blockVector[level]); - - BOOST_FOREACH(Block3DPtr block, blockVector[level]) - { - ogrid->addBlock(block); - } - } -} -////////////////////////////////////////////////////////////////////////// -void removeUndefNodes(Grid3DPtr grid) -{ - int minInitLevel = grid->getCoarsestInitializedLevel(); - int maxInitLevel = grid->getFinestInitializedLevel(); - - std::vector<std::vector<Block3DPtr> > blockVector; - blockVector.resize(maxInitLevel + 1); - - int gridRank = grid->getRank(); - - for (int level = minInitLevel; level <= maxInitLevel; level++) - { - grid->getBlocks(level, gridRank, true, blockVector[level]); - - BOOST_FOREACH(Block3DPtr block, blockVector[level]) - { - int gl = 0; - - LBMKernel3DPtr kernel = block->getKernel(); - BCArray3D<D3Q27BoundaryCondition>& bcMatrix = boost::dynamic_pointer_cast<D3Q27ETBCProcessor>(kernel->getBCProcessor())->getBCArray(); - - int minX1 = gl; - int minX2 = gl; - int minX3 = gl; - - int maxX1 = static_cast<int>(bcMatrix.getNX1()) - 1 - gl; - int maxX2 = static_cast<int>(bcMatrix.getNX2()) - 1 - gl; - int maxX3 = static_cast<int>(bcMatrix.getNX3()) - 1 - gl; - - minX1 = gl; - minX2 = gl; - minX3 = gl; - - maxX1 = static_cast<int>(bcMatrix.getNX1()) - 1 - gl; - maxX2 = static_cast<int>(bcMatrix.getNX2()) - 1 - gl; - maxX3 = static_cast<int>(bcMatrix.getNX3()) - 1 - gl; - - for (int ix3 = minX3; ix3 <= maxX3; ix3++) - for (int ix2 = minX2; ix2 <= maxX2; ix2++) - for (int ix1 = minX1; ix1 <= maxX3; ix1++) - { - if (bcMatrix.isUndefined(ix1, ix2, ix3)) bcMatrix.setFluid(ix1, ix2, ix3); - } - } - } -} -////////////////////////////////////////////////////////////////////////// -void removeBCInformation(Grid3DPtr grid) -{ - int minInitLevel = grid->getCoarsestInitializedLevel(); - int maxInitLevel = grid->getFinestInitializedLevel(); - - std::vector<std::vector<Block3DPtr> > blockVector; - blockVector.resize(maxInitLevel + 1); - - int gridRank = grid->getRank(); - - for (int level = minInitLevel; level <= maxInitLevel; level++) - { - grid->getBlocks(level, gridRank, true, blockVector[level]); - - BOOST_FOREACH(Block3DPtr block, blockVector[level]) - { - int gl = 0; - - LBMKernel3DPtr kernel = block->getKernel(); - BCArray3D<D3Q27BoundaryCondition>& bcMatrix = boost::dynamic_pointer_cast<D3Q27ETBCProcessor>(kernel->getBCProcessor())->getBCArray(); - - int minX1 = gl; - int minX2 = gl; - int minX3 = gl; - - int maxX1 = static_cast<int>(bcMatrix.getNX1()) - 1 - gl; - int maxX2 = static_cast<int>(bcMatrix.getNX2()) - 1 - gl; - int maxX3 = static_cast<int>(bcMatrix.getNX3()) - 1 - gl; - - for (int ix3 = minX3; ix3 <= maxX3; ix3++) - for (int ix2 = minX2; ix2 <= maxX2; ix2++) - for (int ix1 = minX1; ix1 <= maxX3; ix1++) - { - bcMatrix.setFluid(ix1, ix2, ix3); - //bcMatrix.setBC(ix1, ix2, ix3, D3Q27BoundaryConditionPtr()); - } - - // if (!block->getKernel()) - // { - // if (block->getRank() == grid->getRank()) - // { - // BCProcessorPtr bcProc(new D3Q27ETForThinWallBCProcessor()); - // block->getKernel()->setBCProcessor(bcProc); - // } - // } - } - } -} -////////////////////////////////////////////////////////////////////////// -void setKernel(Grid3DPtr grid, LBMKernel3DPtr kernel, double nu) -{ - int minInitLevel = grid->getCoarsestInitializedLevel(); - int maxInitLevel = grid->getFinestInitializedLevel(); - - std::vector<std::vector<Block3DPtr> > blockVector; - blockVector.resize(maxInitLevel + 1); - - int gridRank = grid->getRank(); - - for (int level = minInitLevel; level <= maxInitLevel; level++) - { - grid->getBlocks(level, gridRank, true, blockVector[level]); - - BOOST_FOREACH(Block3DPtr block, blockVector[level]) - { - if (!block->getKernel()) - { - if (block->getRank() == grid->getRank()) - { - LBMReal collFactor = LBMSystem::calcCollisionFactor(nu, block->getLevel()); - kernel->setCollisionFactor(collFactor); - kernel->setIndex(block->getX1(), block->getX2(), block->getX3()); - kernel->setDeltaT(LBMSystem::getDeltaT(block->getLevel())); - kernel->setBlock(block); - LBMKernel3DPtr newKernel = kernel->clone(); - block->setKernel(newKernel); - } - } - } - } -} -////////////////////////////////////////////////////////////////////////// -void run(const char *cstr, bool firststart) -{ - try - { - string pathname; - string pathGeo; - string pathLog; - int numOfThreads = 1; - bool logfile = false; - stringstream logFilename; - double availMem = 0; - - CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - string machine = string(cstr); - - if (machine == "my") - { - pathname = "d:/temp/porplate2"; - pathGeo = "d:/Data/plate"; - pathLog = pathname; - numOfThreads = 1; - logfile = false; - availMem = 15.0e9; - } - else if (machine == "Ludwig") - { - pathname = "/work/koskuche/SFB880/porplate2"; - pathGeo = "/home/koskuche/data/plate"; - pathLog = pathname; - numOfThreads = 8; - availMem = 12.0e9;///8*numOfThreads; - logfile = true; - } - else if (machine == "HLRS") - { - pathname = "/univ_1/ws1/ws/xrmkuchr-plate3-0"; - pathGeo = "/zhome/academic/HLRS/xrm/xrmkuchr/data/plate"; - pathLog = "/zhome/academic/HLRS/xrm/xrmkuchr/work/plate"; - numOfThreads = 16; - availMem = 2.0e9; - logfile = true; - } - else if (machine == "HLRN") - { - pathname = "/gfs1/work/niivfcpu/scratch/plateEx"; - pathGeo = "/gfs1/work/niivfcpu/data/plate"; - pathLog = pathname; - numOfThreads = 24; - availMem = 64.0e9 / 24.0*numOfThreads; - logfile = true; - } - else throw UbException(UB_EXARGS, "unknown CAB_MACHINE"); - -#if defined(__unix__) - if (myid==0) - { - const char* str = pathLog.c_str(); - int status=mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); - } -#endif - - if (myid == 0 && logfile) - { - //UbLog::reportingLevel() = logDEBUG5; - logFilename << pathLog + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + "_" + UbSystem::toString(myid) + ".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - - if (myid == 0) UBLOG(logINFO, "Testcase plate"); - - string PlatteFilename = pathGeo + "/Platte_bearbeitet2_10cmA.stl"; - - string ZckbndFilename = pathGeo + "/2zackenbaender0.stl"; - - int ppblockc = 0; - - ///////////////Knotenabmessungen: - int nx[3], blocknx[3]; - nx[0] = 90;//240;//120;//60;//86;//43;//65;//50; //l�nge - nx[1] = 2;//2;//6;///1;//5;// //breite - nx[2] = 30;//64;//32;//18;//5;//15;//15; //h�he gebiet - blocknx[0] = 16;//10;//6; - blocknx[1] = 16;//10;//6; - blocknx[2] = 16;//10;//6; - - int baseLevel = 0; - int refineLevel = 5; - - double H = 600.0; // Kanalh�he [mm] - double cdx = H / (double)(nx[2] * blocknx[2]); - double fdx = cdx / double(1 << refineLevel); - - //double h = 200.0; // gew�nschte Plattenh�he in Gitterpunkten - //double fdx = plate->getLengthX3()/h; - //double cdx = fdx*double(1<<refineLevel); - - LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter()); - - ////////////////////////////////////////////////////////////////////////// - // physik - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // Experiment Parametr - // Re = 1000000 - // V = 16.05 # m / s - // p = 994.7 #hPa(manuell abgelesen von MUB) - // T = 21.78 #�C - // Luftfeuchte = 50.5 # % - ////////////////////////////////////////////////////////////////////////// - // Simulation Parametr - ////////////////////////////////////////////////////////////////////////// - double Re = 1e6; // 1133333.3333333335; - double rhoLB = 0.0; - double uLB = 0.1; - double lReal = 1000; //Plattenl�nge in mm - double nuLB = (uLB*(lReal / cdx)) / Re; - - int sizeSP = 4; - mu::Parser spongeLayer; - spongeLayer.SetExpr("x1>=(sizeX-sizeSP)/dx ? (sizeX-(x1+1))/sizeSP/2.0 + 0.5 : 1.0"); - spongeLayer.DefineConst("sizeX", nx[0] * blocknx[0]); - spongeLayer.DefineConst("sizeSP", sizeSP*blocknx[0]); - - Grid3DPtr ogrid(new Grid3D(comm)); - - ////////////////////////////////////////////////////////////////////////// - //restart - UbSchedulerPtr rSch(new UbScheduler(1000, 1000, 10000000)); - rSch->addSchedule(100, 47000, 47100); - RestartPostprocessor rp(ogrid, rSch, comm, pathname, RestartPostprocessor::BINARY); - ////////////////////////////////////////////////////////////////////////// - bool restart; - - if (firststart) - { - - if (myid == 0) UBLOG(logINFO, "Neustart.."); - restart = false; - - Grid3DPtr ngrid(new Grid3D(comm)); - ////////////////////////////////////////////////////////////////////////// - //Platte - GbTriFaceMesh3DPtr plate(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(PlatteFilename, "Netz")); - if (myid == 0) GbSystem3D::writeGeoObject(plate.get(), pathname + "/geo/platte", WbWriterVtkXmlBinary::getInstance()); - ////////////////////////////////////////////////////////////////////////// - // Zackenband - ////////////////////////////////////////////////////////////////////////// - GbTriFaceMesh3DPtr meshBand1(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand")); - meshBand1->translate(5.0, -2.86, -14.717); - meshBand1->rotate(0.0, -0.5, 0.0); - if (myid == 0) GbSystem3D::writeGeoObject(meshBand1.get(), pathname + "/geo/Band1", WbWriterVtkXmlASCII::getInstance()); - // Zackenband2 - GbTriFaceMesh3DPtr meshBand2(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand2")); - meshBand2->translate(5.0, -7.86, -14.717); - meshBand2->rotate(0.0, -0.5, 0.0); - if (myid == 0) GbSystem3D::writeGeoObject(meshBand2.get(), pathname + "/geo/Band2", WbWriterVtkXmlASCII::getInstance()); - // Zackenband3 - GbTriFaceMesh3DPtr meshBand3(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand3")); - meshBand3->translate(5.0, -2.86, -14.417); //+0.3 - meshBand3->rotate(0.0, -0.5, 0.0); - if (myid == 0) GbSystem3D::writeGeoObject(meshBand3.get(), pathname + "/geo/Band3", WbWriterVtkXmlASCII::getInstance()); - // Zackenband4 - GbTriFaceMesh3DPtr meshBand4(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(ZckbndFilename, "NetzBand4")); - meshBand4->translate(5.0, -7.86, -14.417); - meshBand4->rotate(0.0, -0.5, 0.0); - if (myid == 0) GbSystem3D::writeGeoObject(meshBand4.get(), pathname + "/geo/Band4", WbWriterVtkXmlASCII::getInstance()); - ////////////////////////////////////////////////////////////////////////// - - double blockLengthx1 = blocknx[0] * cdx; //geowerte - double blockLengthx2 = blockLengthx1; - double blockLengthx3 = blockLengthx1; - - double geoLength[] = { nx[0] * blockLengthx1, nx[1] * blockLengthx2, nx[2] * blockLengthx3 }; - - double originX1 = plate->getX1Minimum() - plate->getLengthX1() / 4.0; - double originX2 = plate->getX2Minimum(); - double originX3 = plate->getX3Minimum() - 299.5; - - - bool periodicx1 = false; - bool periodicx2 = true; - bool periodicx3 = false; - - //bounding box - double g_minX1 = originX1; - double g_minX2 = originX2; - double g_minX3 = originX3; - - double g_maxX1 = originX1 + geoLength[0]; - double g_maxX2 = originX2 + geoLength[1]; - double g_maxX3 = originX3 + geoLength[2];; - - - //set grid - ngrid->setDeltaX(cdx); - ngrid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - ngrid->setPeriodicX1(periodicx1); - ngrid->setPeriodicX2(periodicx2); - ngrid->setPeriodicX3(periodicx3); - - GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); - gridCube->setCenterCoordinates(gridCube->getX1Centroid(), meshBand1->getX2Centroid(), gridCube->getX3Centroid()); - if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname + "/geo/gridCube", WbWriterVtkXmlASCII::getInstance()); - - originX2 = gridCube->getX2Minimum(); - g_minX2 = originX2; - g_maxX2 = originX2 + geoLength[1]; - - //Grid3DPtr hgrid(ngrid); - - GenBlocksGridVisitor genBlocks(gridCube); - ngrid->accept(genBlocks); - - //hgrid->setCoordinateTransformator(ngrid->getCoordinateTransformator()); - - - ////////////////////////////////////////////////////////////////////////// - if (myid == 0) - { - UBLOG(logINFO, "*****************************************"); - UBLOG(logINFO, "* Parameters *"); - UBLOG(logINFO, "* Re =" << Re); - UBLOG(logINFO, "* nuLB =" << nuLB); - UBLOG(logINFO, "* uLB =" << uLB); - UBLOG(logINFO, "* cdx =" << cdx); - UBLOG(logINFO, "* fdx =" << fdx); - double Hzb = 0.6 / fdx; - UBLOG(logINFO, "* Height of Zackenband =" << Hzb); - UBLOG(logINFO, "* Re on Zackenband =" << (uLB*Hzb) / (nuLB*double(1 << refineLevel))); - UBLOG(logINFO, "* nx1/2/3 =" << nx[0] << "/" << nx[1] << "/" << nx[2]); - UBLOG(logINFO, "* blocknx1/2/3 =" << blocknx[0] << "/" << blocknx[1] << "/" << blocknx[2]); - UBLOG(logINFO, "* x1Periodic =" << periodicx1); - UBLOG(logINFO, "* x2Periodic =" << periodicx2); - UBLOG(logINFO, "* x3Periodic =" << periodicx3); - UBLOG(logINFO, "* number of levels =" << refineLevel + 1); - UBLOG(logINFO, "* path =" << pathname); - - UBLOG(logINFO, "*****************************************"); - UBLOG(logINFO, "* number of threads =" << numOfThreads); - UBLOG(logINFO, "* number of processes =" << comm->getNumberOfProcesses()); - UBLOG(logINFO, "*****************************************"); - UBLOG(logINFO, "*****************************************"); - } - ////////////////////////////////////////////////////////////////////////// - - - ////////////////////////////////////////////////////////////////////////// - //refinement - GbCuboid3DPtr refinePlatteBox(new GbCuboid3D(plate->getX1Minimum() - 1.0, plate->getX2Minimum(), plate->getX3Minimum() + (plate->getX3Maximum() - plate->getX3Minimum()) / 2.0, - plate->getX1Maximum() + 40.0, plate->getX2Maximum(), plate->getX3Maximum() + 2.0)); - if (myid == 0) GbSystem3D::writeGeoObject(refinePlatteBox.get(), pathname + "/geo/refinePlatteBox", WbWriterVtkXmlASCII::getInstance()); - - //inlay patch - GbCuboid3DPtr refineInlayBox(new GbCuboid3D(plate->getX1Maximum() - 104.0, plate->getX2Minimum(), plate->getX3Minimum() + (plate->getX3Maximum() - plate->getX3Minimum()) / 2.0, - plate->getX1Maximum() + 1.0, plate->getX2Maximum(), plate->getX3Maximum() + 1.0)); - if (myid == 0) GbSystem3D::writeGeoObject(refineInlayBox.get(), pathname + "/geo/refineInlayBox", WbWriterVtkXmlASCII::getInstance()); - - if (refineLevel > 0) - { - if (myid == 0) UBLOG(logINFO, "Refinement - start"); - RefineCrossAndInsideGbObjectHelper refineHelper(ngrid, refineLevel); - refineHelper.addGbObject(refinePlatteBox, refineLevel - 1); - refineHelper.addGbObject(refineInlayBox, refineLevel); - - refineHelper.refine(); - if (myid == 0) UBLOG(logINFO, "Refinement - end"); - } - - if (myid == 0) - { - UBLOG(logINFO, "Write blocks - start"); - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(ngrid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - ppblocks->update(ppblockc++); - UBLOG(logINFO, "Write blocks - end"); - } - - - - { - - ////walls - GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1 - blockLengthx1, g_minX2 - blockLengthx1, g_minX3 - blockLengthx1, g_maxX1 + blockLengthx1, g_maxX2 + blockLengthx1, g_minX3)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname + "/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1 - blockLengthx1, g_minX2 - blockLengthx1, g_maxX3, g_maxX1 + blockLengthx1, g_maxX2 + blockLengthx1, g_maxX3 + blockLengthx1)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname + "/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance()); - - //walls - int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr slip(new D3Q27SlipBCAdapter(bbOption)); - D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, ngrid, slip, Interactor3D::SOLID)); - D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, ngrid, slip, Interactor3D::SOLID)); - - ///////////////////////////////////////////////// - ///interactoren - int bbOption1 = 1; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr noSlip(new D3Q27NoSlipBCAdapter(bbOption1)); - //D3Q27TriFaceMeshInteractorPtr triPlateInteractor(new D3Q27TriFaceMeshInteractor(plate, ngrid, noSlip, Interactor3D::SOLID, Interactor3D::POINTS)); - D3Q27TriFaceMeshInteractorPtr triPlateInteractor(new D3Q27TriFaceMeshInteractor(plate, ngrid, noSlip, Interactor3D::SOLID, Interactor3D::SIMPLE)); - D3Q27TriFaceMeshInteractorPtr triBand1Interactor(new D3Q27TriFaceMeshInteractor(meshBand1, ngrid, noSlip, Interactor3D::SOLID, Interactor3D::EDGES)); - D3Q27TriFaceMeshInteractorPtr triBand2Interactor(new D3Q27TriFaceMeshInteractor(meshBand2, ngrid, noSlip, Interactor3D::SOLID, Interactor3D::EDGES)); - D3Q27TriFaceMeshInteractorPtr triBand3Interactor(new D3Q27TriFaceMeshInteractor(meshBand3, ngrid, noSlip, Interactor3D::SOLID, Interactor3D::EDGES)); - D3Q27TriFaceMeshInteractorPtr triBand4Interactor(new D3Q27TriFaceMeshInteractor(meshBand4, ngrid, noSlip, Interactor3D::SOLID, Interactor3D::EDGES)); - - //inflow - GbCuboid3DPtr velBCCuboid(new GbCuboid3D(originX1 - blockLengthx1, originX2 - blockLengthx1, originX3 - blockLengthx1, - originX1, originX2 + geoLength[1] + blockLengthx1, originX3 + geoLength[2] + blockLengthx1)); - if (myid == 0) GbSystem3D::writeGeoObject(velBCCuboid.get(), pathname + "/geo/velBCCuboid", WbWriterVtkXmlASCII::getInstance()); - D3Q27InteractorPtr velBCInteractor(new D3Q27Interactor(velBCCuboid, ngrid, Interactor3D::SOLID)); - - //inflow - double raiseVelSteps = 0; - vector<D3Q27BCFunction> velcX1BCs, dummy; - - mu::Parser inflowProfile; - inflowProfile.SetExpr("uLB"); - inflowProfile.DefineConst("uLB", uLB); - velcX1BCs.push_back(D3Q27BCFunction(inflowProfile, raiseVelSteps, D3Q27BCFunction::INFCONST)); - - D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter(velcX1BCs, dummy, dummy)); - velBCInteractor->addBCAdapter(velBCAdapter); - - //outflow - GbCuboid3DPtr densCuboid(new GbCuboid3D(originX1 + geoLength[0], originX2 - blockLengthx1, originX3 - blockLengthx1, - originX1 + geoLength[0] + blockLengthx1, originX2 + geoLength[1] + blockLengthx1, originX3 + geoLength[2] + blockLengthx1)); - if (myid == 0) GbSystem3D::writeGeoObject(densCuboid.get(), pathname + "/geo/densCuboid", WbWriterVtkXmlASCII::getInstance()); - D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB)); - D3Q27InteractorPtr densInteractor(new D3Q27Interactor(densCuboid, ngrid, denBCAdapter, Interactor3D::SOLID)); - - - /////////////////////////////////////////////////// - if (myid == 0) UBLOG(logINFO, "deleteExistBlocks - start"); - deleteExistBlocks(ngrid, ogrid); - if (myid == 0) UBLOG(logINFO, "deleteExistBlocks - end"); - - if (myid == 0) - { - UBLOG(logINFO, "Write blocks - start"); - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(ngrid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - ppblocks->update(ppblockc++); - UBLOG(logINFO, "Write blocks - end"); - } - - //////////////////////////////////////////// - //METIS - Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B)); - - //////////////////////////////////////////// - /////delete solid blocks - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start"); - InteractorsHelper intHelper(ngrid, metisVisitor); - intHelper.addInteractor(triPlateInteractor); - intHelper.addInteractor(triBand1Interactor); - intHelper.addInteractor(triBand2Interactor); - intHelper.addInteractor(triBand3Interactor); - intHelper.addInteractor(triBand4Interactor); - intHelper.addInteractor(addWallZminInt); - intHelper.addInteractor(addWallZmaxInt); - intHelper.addInteractor(densInteractor); - intHelper.addInteractor(velBCInteractor); - intHelper.selectBlocks(); - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end"); - ////////////////////////////////////// - if (myid == 0) - { - UBLOG(logINFO, "Write blocks - start"); - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(ngrid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - ppblocks->update(ppblockc++); - UBLOG(logINFO, "Write blocks - end"); - } - //////////////////////////////////////////////////////// - - //addExistBlocks(ngrid, ogrid, hgrid); - - //////////////////////////////////////////////////////// - unsigned long nob = ogrid->getNumberOfBlocks(); - unsigned long nod = nob * blocknx[0] * blocknx[1] * blocknx[2]; - unsigned long nod_real = nob * (blocknx[0] + 3)*(blocknx[1] + 3)*(blocknx[2] + 3); - unsigned long nodb = (blocknx[0]) * (blocknx[1]) * (blocknx[2]); - - double needMemAll = double(nod_real*(27 * sizeof(double) + sizeof(int))); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - double nup = 0; - - if (myid == 0) - { - UBLOG(logINFO, "Number of blocks = " << nob); - UBLOG(logINFO, "Number of nodes = " << nod); - int minInitLevel = ngrid->getCoarsestInitializedLevel(); - int maxInitLevel = ngrid->getFinestInitializedLevel(); - for (int level = minInitLevel; level <= maxInitLevel; level++) - { - int nobl = ngrid->getNumberOfBlocks(level); - UBLOG(logINFO, "Number of blocks for level " << level << " = " << nobl); - UBLOG(logINFO, "Number of nodes for level " << level << " = " << nobl*nodb); - nup += nobl*nodb*double(1 << level); - } - UBLOG(logINFO, "Hypothetically time for calculation step for 120 nodes = " << nup / 6.0e5 / (120 * 8) << " s"); - UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); - UBLOG(logINFO, "Available memory per node/8.0 = " << (availMem / 8.0) << " bytes"); - } - - - //deleteNotExistBlocks(ngrid, ogrid); - - //deleteExistBlocks(ngrid, ogrid); - - //set kernel for new blocks - ////////////////////////////// - LBMKernel3DPtr kernel; - //with sponge layer - kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLBWithSpongeLayer(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL)); - kernel->setWithSpongeLayer(true); - kernel->setSpongeLayer(spongeLayer); - - BCProcessorPtr bcProc(new D3Q27ETForThinWallBCProcessor()); - kernel->setBCProcessor(bcProc); - - //setKernel(ogrid, kernel, nuLB); - - SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem); - ngrid->accept(kernelVisitor); - ////////////////////////////////// - - //initialization of decompositions - D3Q27ETInitDistributionsBlockVisitor initVisitor(nuLB, rhoLB); - //double aVuLB = 0.1; - initVisitor.setVx1(uLB); - ngrid->accept(initVisitor); - - int maxblock = Block3D::getMaxGlobalID(); - if (myid == 0) UBLOG(logINFO, "maxblock = " << maxblock); - - reindexBlocks(ngrid); - - moveBlocks(ngrid, ogrid); - - setInterpolationFlag(ogrid); - - removeBCInformation(ogrid); - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - ogrid->accept(setConnsVisitor); - - //////////////////////////////////// - ////undef nodes - if (refineLevel > 0) - { - D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - ogrid->accept(undefNodesVisitor); - } - - - D3Q27InteractorPtr addWallZminInt1(new D3Q27Interactor(addWallZmin, ogrid, slip, Interactor3D::SOLID)); - D3Q27InteractorPtr addWallZmaxInt1(new D3Q27Interactor(addWallZmax, ogrid, slip, Interactor3D::SOLID)); - D3Q27TriFaceMeshInteractorPtr triPlateInteractor1(new D3Q27TriFaceMeshInteractor(plate, ogrid, noSlip, Interactor3D::SOLID, Interactor3D::SIMPLE)); - D3Q27TriFaceMeshInteractorPtr triBand1Interactor1(new D3Q27TriFaceMeshInteractor(meshBand1, ogrid, noSlip, Interactor3D::SOLID, Interactor3D::EDGES)); - D3Q27TriFaceMeshInteractorPtr triBand2Interactor1(new D3Q27TriFaceMeshInteractor(meshBand2, ogrid, noSlip, Interactor3D::SOLID, Interactor3D::EDGES)); - D3Q27TriFaceMeshInteractorPtr triBand3Interactor1(new D3Q27TriFaceMeshInteractor(meshBand3, ogrid, noSlip, Interactor3D::SOLID, Interactor3D::EDGES)); - D3Q27TriFaceMeshInteractorPtr triBand4Interactor1(new D3Q27TriFaceMeshInteractor(meshBand4, ogrid, noSlip, Interactor3D::SOLID, Interactor3D::EDGES)); - D3Q27InteractorPtr velBCInteractor1(new D3Q27Interactor(velBCCuboid, ogrid, Interactor3D::SOLID)); - velBCInteractor1->addBCAdapter(velBCAdapter); - D3Q27InteractorPtr densInteractor1(new D3Q27Interactor(densCuboid, ogrid, denBCAdapter, Interactor3D::SOLID)); - - {SetSolidOrTransBlockVisitor v2(addWallZminInt1, SetSolidOrTransBlockVisitor::TRANS); - ogrid->accept(v2); } - {SetSolidOrTransBlockVisitor v2(addWallZmaxInt1, SetSolidOrTransBlockVisitor::TRANS); - ogrid->accept(v2); } - {SetSolidOrTransBlockVisitor v2(triPlateInteractor1, SetSolidOrTransBlockVisitor::TRANS); - ogrid->accept(v2); } - {SetSolidOrTransBlockVisitor v2(triBand1Interactor1, SetSolidOrTransBlockVisitor::TRANS); - ogrid->accept(v2); } - {SetSolidOrTransBlockVisitor v2(triBand2Interactor1, SetSolidOrTransBlockVisitor::TRANS); - ogrid->accept(v2); } - {SetSolidOrTransBlockVisitor v2(triBand3Interactor1, SetSolidOrTransBlockVisitor::TRANS); - ogrid->accept(v2); } - {SetSolidOrTransBlockVisitor v2(triBand4Interactor1, SetSolidOrTransBlockVisitor::TRANS); - ogrid->accept(v2); } - {SetSolidOrTransBlockVisitor v2(velBCInteractor1, SetSolidOrTransBlockVisitor::TRANS); - ogrid->accept(v2); } - {SetSolidOrTransBlockVisitor v2(densInteractor1, SetSolidOrTransBlockVisitor::TRANS); - ogrid->accept(v2); } - - addWallZminInt1->initInteractor(); - addWallZmaxInt1->initInteractor(); - triPlateInteractor1->initInteractor(); - triBand1Interactor1->initInteractor(); - triBand2Interactor1->initInteractor(); - triBand3Interactor1->initInteractor(); - triBand4Interactor1->initInteractor(); - velBCInteractor1->initInteractor(); - densInteractor1->initInteractor(); - - - //intHelper.setBC(); - } - if (myid == 0) - { - UBLOG(logINFO, "Write blocks - start"); - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(ogrid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - ppblocks->update(ppblockc++); - UBLOG(logINFO, "Write blocks - end"); - } - - { - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - new D3Q27MacroscopicQuantitiesPostprocessor(ogrid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), - unitConverter, true)); - ppgeo->update(0); - ppgeo.reset(); - geoSch.reset(); - } - - ////////////////////////////////////////////////////////////////////////// - //porous inlay - { - string pmFilename = pathGeo + "/CT-2014-039.raw"; - int pmNX1 = 1333; //abmessung einzelbild in x-richtung - int pmNX2 = 463; //abmessung einzelbild in y richtung - int pmNX3 = 1333; //anzahl der bilder - float lthreshold = 27686.97; - float uthreshold = 65535.0; - - GbVoxelMatrix3DPtr pmMesh(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold)); - pmMesh->readMatrixFromRawFile<unsigned short>(pmFilename, GbVoxelMatrix3D::LittleEndian); - - double scaleFactor = 0.001; - double delta = 3.75*scaleFactor; - pmMesh->setVoxelMatrixDelta(delta, delta, delta); - pmMesh->rotate90aroundX(); - pmMesh->rotate90aroundX(); - pmMesh->rotate90aroundX(); - - double inlayXmin = plate->getX1Maximum() - 5.0;//995.0; - double inlayYmin = gridCube->getX2Minimum();//180.0; - double inlayZmin = 8.84 + fdx;//8.73; - - //pmMesh->setVoxelMatrixMininum(inlayXmin, inlayYmin, inlayZmin); - //if(myid == 0) pmMesh->writeToLegacyVTKBinary(pathname+"/geo/pmMesh"); - - int i = 0; - for (int y = 0; y < 40; y += 10) - for (int x = 0; x < 100; x += 10) - { - if (myid == 0) UBLOG(logINFO, "inlay # " << i); - pmMesh->setVoxelMatrixMininum(inlayXmin - (double)x, inlayYmin + (double)y, inlayZmin); - inlay(pmMesh, pathname, myid, i, ogrid); - i++; - - if (myid == 0) UBLOG(logINFO, "inlay # " << i); - pmMesh->setVoxelMatrixMininum(inlayXmin - (double)(x + 5), inlayYmin + (double)y, inlayZmin); - pmMesh->mirrorX(); - inlay(pmMesh, pathname, myid, i, ogrid); - i++; - - if (myid == 0) UBLOG(logINFO, "inlay # " << i); - pmMesh->setVoxelMatrixMininum(inlayXmin - (double)(x + 5), inlayYmin + (double)(y + 5), inlayZmin); - pmMesh->mirrorY(); - inlay(pmMesh, pathname, myid, i, ogrid); - i++; - - if (myid == 0) UBLOG(logINFO, "inlay # " << i); - pmMesh->setVoxelMatrixMininum(inlayXmin - (double)x, inlayYmin + (double)(y + 5), inlayZmin); - pmMesh->mirrorX(); - inlay(pmMesh, pathname, myid, i, ogrid); - pmMesh->mirrorY(); - i++; - } - - if (myid == 0) - { - UBLOG(logINFO, "mit VoxelMatrix"); - UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - } - } - ////////////////////////////////////////////////////////////////////////// - - if (myid == 0) - { - UBLOG(logINFO, "Write blocks - start"); - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(ogrid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - ppblocks->update(ppblockc++); - UBLOG(logINFO, "Write blocks - end"); - } - - ////initialization of decompositions - //D3Q27ETInitDistributionsBlockVisitor initVisitor(nuLB, rhoLB); - ////initVisitor.setVx1(uLB); - //hgrid->accept(initVisitor); - - - //Postprozess - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - new D3Q27MacroscopicQuantitiesPostprocessor(ogrid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), - unitConverter, true)); - ppgeo->update(1); - ppgeo.reset(); - geoSch.reset(); - - if (myid == 0) - { - UBLOG(logINFO, "Write blocks - start"); - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(ogrid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - ppblocks->update(ppblockc++); - UBLOG(logINFO, "Write blocks - end"); - } - - - //domain decomposition for threads - if (numOfThreads > 1) - { - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - ogrid->accept(pqPartVisitor); - } - - SetSpongeLayerBlockVisitor ssp(spongeLayer); - ogrid->accept(ssp); - if (myid == 0) UBLOG(logINFO, "Restart - end"); - - if (myid == 0) UBLOG(logINFO, "Preprozess - end"); - } - else - { - restart = true; - - //////////////////////////////////////////////////////////////////////////// - //change viscosity - //Re = 1e6; - //nuLB = (uLB*(lReal / cdx)) / Re; - //if (myid == 0) UBLOG(logINFO, "nuLB =" << nuLB); - - //int gridRank = grid->getRank(); - //int minInitLevel = grid->getCoarsestInitializedLevel(); - //int maxInitLevel = grid->getFinestInitializedLevel(); - - //std::vector<std::vector<Block3DPtr> > blockVector; - //blockVector.resize(maxInitLevel + 1); - - //for (int level = minInitLevel; level <= maxInitLevel; level++) - //{ - // grid->getBlocks(level, gridRank, true, blockVector[level]); - - // BOOST_FOREACH(Block3DPtr block, blockVector[level]) - // { - // LBMReal collFactor = LBMSystem::calcCollisionFactor(nuLB, block->getLevel()); - // block->getKernel()->setCollisionFactor(collFactor); - // } - //} - //////////////////////////////////////////////////////////////////////////// - - //domain decomposition for threads - if (numOfThreads > 1) - { - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - ogrid->accept(pqPartVisitor); - } - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - ogrid->accept(setConnsVisitor); - SetSpongeLayerBlockVisitor ssp(spongeLayer); - ogrid->accept(ssp); - if (myid == 0) UBLOG(logINFO, "Restart - end"); - } - UbSchedulerPtr visSch(new UbScheduler()); - //visSch->addSchedule(1,0,10); - visSch->addSchedule(100, 100, 1000); - //visSch->addSchedule(1000,1000,5000); - //visSch->addSchedule(5000,5000,100000); - //visSch->addSchedule(100000,100000,10000000); - - visSch->addSchedule(1000, 1000, 10000000); - visSch->addSchedule(1, 47100, 47100); - - D3Q27MacroscopicQuantitiesPostprocessor pp(ogrid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), unitConverter); - - double startStep = 47000; - double startStep2= 47500; - - if(ogrid->getTimeStep() >= startStep2) startStep = startStep2; - - UbSchedulerPtr resSchRMS(new UbScheduler()); - resSchRMS->addSchedule(1000000, startStep, 10000000); - resSchRMS->addSchedule(1000000, startStep2, 10000000); - UbSchedulerPtr resSchMeans(new UbScheduler()); - resSchMeans->addSchedule(1000000, startStep, 10000000); - resSchMeans->addSchedule(1000000, startStep2, 10000000); - UbSchedulerPtr stepAvSch(new UbScheduler()); - int averageInterval = 100; - - stepAvSch->addSchedule(averageInterval, 0, 10000000); - AverageValuesPostprocessor Avpp(ogrid, pathname, WbWriterVtkXmlBinary::getInstance(), visSch/*wann wird rausgeschrieben*/, - stepAvSch/*wann wird gemittelt*/, resSchMeans, resSchRMS/*wann wird resettet*/, restart); - - UbSchedulerPtr nupsSch(new UbScheduler(10, 10, 30)); - nupsSch->addSchedule(500, 500, 1e6); - NUPSCounterPostprocessor npr(ogrid, nupsSch, numOfThreads, comm); - - UbSchedulerPtr emSch(new UbScheduler(10)); - EmergencyExitPostprocessor empr(ogrid, emSch, pathname, RestartPostprocessorPtr(&rp), comm); - - if (myid == 0) - { - UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - } - - double endTime = 100000001; - CalculationManagerPtr calculation(new CalculationManager(ogrid, 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[]) -{ - if (argc == 1) - { - cout << "Command line argument isn't specified!" << endl; - cout << "plate2 <machine name>" << endl; - return 1; - } - run(argv[1], true); - - return 0; -} - diff --git a/apps/cpu/reefer/CMakeLists.txt b/apps/cpu/reefer/CMakeLists.txt deleted file mode 100644 index 8c76ca7ed7678275d5d3f72d353b9ddce7c7ea44..0000000000000000000000000000000000000000 --- a/apps/cpu/reefer/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(reefer) - -INCLUDE(${SOURCE_ROOT}/core/IncludsList.txt) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES core) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(reefer BINARY) diff --git a/apps/cpu/reefer/reefer.cpp b/apps/cpu/reefer/reefer.cpp deleted file mode 100644 index 6590b35c58696b773f11075ec3e631ab1fda5c05..0000000000000000000000000000000000000000 --- a/apps/cpu/reefer/reefer.cpp +++ /dev/null @@ -1,489 +0,0 @@ -#include <iostream> -#include <string> - -#include "geometry3d/CoordinateTransformation3D.h" -#include "Grid3D.h" -#include "GenBlocksGridVisitor.h" -#include "geometry3d/GbSystem3D.h" -#include "geometry3d/GbCuboid3D.h" -#include "geometry3d/GbCylinder3D.h" -#include <geometry3d/GbSphere3D.h> -#include "basics/writer/WbWriterVtkXmlASCII.h" -#include "basics/writer/WbWriterVtkXmlBinary.h" -#include "RefineCrossAndInsideGbObjectBlockVisitor.h" -#include "RatioBlockVisitor.h" -#include "RatioSmoothBlockVisitor.h" -#include "OverlapBlockVisitor.h" -#include "RefineInterGbObjectsVisitor.h" -#include "RefineCrossAndInsideGbObjectBlockVisitor.h" -#include "SetKernelBlockVisitor.h" -#include "LBMKernelETD3Q27Cascaded.h" -#include "D3Q27MacroscopicQuantitiesPostprocessor.h" -#include "MPICommunicator.h" -#include "D3Q27ETBCProcessor.h" -#include "SimulationParameters.h" -#include "D3Q27SetUndefinedNodesBlockVisitor.h" -#include "SetInterpolationDirsBlockVisitor.h" -#include "D3Q27SetConnectorsBlockVisitor.h" -#include "NullCommunicator.h" -#include "D3Q27ETInitDistributionsBlockVisitor.h" -#include "CalculationManager.h" -#include "PQueuePartitioningGridVisitor.h" -#include "MetisPartitioningGridVisitor.h" -#include "D3Q27Interactor.h" -#include "D3Q27NoSlipBCAdapter.h" -#include "D3Q27VelocityBCAdapter.h" -#include "D3Q27DensityBCAdapter.h" -#include "D3Q27BoundaryConditionAdapter.h" -#include "StringUtil.hpp" -#include "D3Q27OffsetInterpolationProcessor.h" -#include "D3Q27CompactInterpolationProcessor.h" -#include "SyncBcBlockVisitor.h" -#include "geometry3d/creator/GbTriFaceMesh3DCreator.h" -#include "geometry3d/GbTriFaceMesh3D.h" -#include "D3Q27TriFaceMeshInteractor.h" -#include "MathUtil.hpp" -#include "SolidBlocksHelper.h" -#include "LBMKernelETD3Q27CascadedTI.h" -#include "TurbulenceIntensityPostprocessor.h" -#include "RestartPostprocessor.h" - -using namespace std; - - -void run(const char *cstr) -{ - try - { - string pathname = "c:/temp/reefer/out"; - string pathGeo = "c:/Data/reefer"; - - //string pathname = "/work/koskuche/scratch/reefer2/out"; - //string pathGeo = "/home/koskuche/data/reefer/new"; - - //string pathname = "/home/kucher/temp/reefer/out"; - //string pathGeo = "/home/kucher/data/reefer/new"; - - int numOfThreads = 2; - - CommunicatorPtr comm(new MPICommunicator()); - int myid = comm->getProcessID(); - - //if(myid ==0) - //{ - // stringstream logFilename; - // logFilename << "/work/koskuche/scratch/reefer2/logfile.log"; - // UbLog::output_policy::setStream(logFilename.str()); - //} - - //const double dx = 13.6; - const double dx = 2.0; - double refLentgthWorld = dx/1000.0; //from mm to m - double refLentgthLB = 1.0; - LBMUnitConverterPtr uconv = LBMUnitConverterPtr(new LBMUnitConverter(refLentgthWorld, LBMUnitConverter::AIR_20C, refLentgthLB)); - LBMReal uSI = 10;//m/s - LBMReal uLB = uSI * uconv->getFactorVelocityWToLb(); - LBMReal rhoLB = 1.0; - LBMReal nueSI = 1.5e-5; - LBMReal nueLB = nueSI * uconv->getFactorViscosityWToLb();//(uLB*l)/Re; - - Grid3DPtr grid(new Grid3D()); - UbSchedulerPtr rSch(new UbScheduler(1500,5000)); - RestartPostprocessor rp(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY); - - std::string opt; - - if(cstr!= NULL) - opt = std::string(cstr); - - if(cstr!= NULL) - { - opt = std::string(cstr); - - if(myid==0) UBLOG(logINFO,"Restart step: " << opt); - - grid = rp.restart(UbSystem::stringTo<int>(opt)); - - LBMReal nueLB = 1.5e-3; - - SimulationParametersPtr param = SimulationParameters::getInstanz(); - param->setCollisionModelType(SimulationParameters::COMPRESSIBLE); - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27OffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - - //domain decomposition - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - } - else - { - const int baseLevel = 0; - const int refineLevel = 0; - ////////////////////////////////////////////////////////////////////////// - // Geometries - ////////////////////////////////////////////////////////////////////////// - //container - GbTriFaceMesh3DPtr geoContainer (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo +"/Containerascii.stl","geoContainer")); - if(myid == 0) GbSystem3D::writeGeoObject(geoContainer.get(), pathname+"/geo/geoContainer", WbWriterVtkXmlASCII::getInstance()); - //cargo - //GbTriFaceMesh3DPtr geoCargo (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo + "/Kisten_fuer_Palettenascii.stl","geoCargo")); - GbTriFaceMesh3DPtr geoCargo (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo + "/Kistenascii.stl","geoCargo")); - if(myid == 0) GbSystem3D::writeGeoObject(geoCargo.get(), pathname+"/geo/geoCargo", WbWriterVtkXmlASCII::getInstance()); - //palette - //GbTriFaceMesh3DPtr geoPalette (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo + "/Palettenascii.stl","geoPalette")); - //if(myid == 0) GbSystem3D::writeGeoObject(geoPalette.get(), pathname+"/geoPalette", WbWriterVtkXmlASCII::getInstance()); - //reefer - GbTriFaceMesh3DPtr geoBlower (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo + "/Solidblockascii.stl","geoReefer")); - if(myid == 0) GbSystem3D::writeGeoObject(geoBlower.get(), pathname+"/geo/geoBlower", WbWriterVtkXmlASCII::getInstance()); - //T floor - GbTriFaceMesh3DPtr geoTFloor (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(pathGeo + "/T-Floorascii.stl","geoTFloor")); - if(myid == 0) GbSystem3D::writeGeoObject(geoTFloor.get(), pathname+"/geo/geoTFloor", WbWriterVtkXmlASCII::getInstance()); - - //bounding box - double g_minX1 = geoContainer->getX1Minimum(); - double g_minX2 = geoContainer->getX2Minimum(); - double g_minX3 = geoContainer->getX3Minimum(); - - double g_maxX1 = geoContainer->getX1Maximum(); - double g_maxX2 = geoContainer->getX2Maximum(); - double g_maxX3 = geoContainer->getX3Maximum(); - - const int nodesPerBlock = 10; - //const double dx = 1.7; - //const double dx = 13.6; - const double blockLength = double(nodesPerBlock)*dx; - - const double gridOriginX1 = g_minX1; - const double gridOriginX2 = g_minX2; - const double gridOriginX3 = g_minX3; - - //add wall X - GbCuboid3DPtr addWallXmax (new GbCuboid3D(g_maxX1, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - //GbCuboid3DPtr addWallXmax (new GbCuboid3D(geoBlower->getX1Maximum()+geoBlower->getLengthX1(), g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallXmax.get(), pathname+"/geo/addWallXmax", WbWriterVtkXmlASCII::getInstance()); - //add wall Y - GbCuboid3DPtr addWallYmax (new GbCuboid3D(g_minX1-blockLength, geoBlower->getX2Maximum(), g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance()); - //add wall Z - GbCuboid3DPtr addWallZmax (new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance()); - //add wall X - GbCuboid3DPtr addWallXmin (new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, geoBlower->getX1Minimum(), g_maxX2+blockLength, g_maxX3+blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallXmin.get(), pathname+"/geo/addWallXmin", WbWriterVtkXmlASCII::getInstance()); - //add wall Y - GbCuboid3DPtr addWallYmin (new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, geoBlower->getX2Minimum(), g_maxX3+blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname+"/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance()); - //add wall Z - GbCuboid3DPtr addWallZmin (new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, geoTFloor->getX3Minimum())); - if(myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - //add wall for blower - GbCuboid3DPtr addWallBlower (new GbCuboid3D(geoBlower->getX1Minimum()-3.0*blockLength, geoBlower->getX2Minimum()-3.0*blockLength, geoBlower->getX3Minimum()+4.0*dx, - geoBlower->getX1Maximum(), geoBlower->getX2Maximum()+3.0*blockLength, geoBlower->getX3Maximum()-4.0*dx)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallBlower.get(), pathname+"/geo/addWallBlower", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallBlowerXmin (new GbCuboid3D(geoBlower->getX1Minimum(), geoBlower->getX2Minimum(), geoBlower->getX3Minimum(), - geoBlower->getX1Minimum()+2.0*dx, geoBlower->getX2Maximum(), geoBlower->getX3Maximum())); - if(myid == 0) GbSystem3D::writeGeoObject(addWallBlowerXmin.get(), pathname+"/geo/addWallBlowerXmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallBlowerXmax (new GbCuboid3D(geoBlower->getX1Maximum()-2.0*dx, geoBlower->getX2Minimum(), geoBlower->getX3Minimum(), - geoBlower->getX1Maximum(), geoBlower->getX2Maximum(), geoBlower->getX3Maximum())); - if(myid == 0) GbSystem3D::writeGeoObject(addWallBlowerXmax.get(), pathname+"/geo/addWallBlowerXmax", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallBlowerYmin (new GbCuboid3D(geoBlower->getX1Minimum(), geoBlower->getX2Minimum(), geoBlower->getX3Minimum(), - geoBlower->getX1Maximum(), geoBlower->getX2Minimum()+2.0*dx, geoBlower->getX3Maximum())); - if(myid == 0) GbSystem3D::writeGeoObject(addWallBlowerYmin.get(), pathname+"/geo/addWallBlowerYmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallBlowerYmax (new GbCuboid3D(geoBlower->getX1Minimum()-2.0*dx, geoBlower->getX2Maximum()-2.0*dx, geoBlower->getX3Minimum(), - geoBlower->getX1Maximum(), geoBlower->getX2Maximum(), geoBlower->getX3Maximum())); - if(myid == 0) GbSystem3D::writeGeoObject(addWallBlowerYmax.get(), pathname+"/geo/addWallBlowerYmax", WbWriterVtkXmlASCII::getInstance()); - - //inflow - GbCuboid3DPtr geoInflow (new GbCuboid3D(geoBlower->getX1Minimum()+dx, geoBlower->getX2Minimum()+dx, geoBlower->getX3Minimum()+2.0*dx, - geoBlower->getX1Maximum()-dx, geoBlower->getX2Maximum()-dx, geoBlower->getX3Minimum()+4.0*dx)); - if(myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname+"/geo/geoInflow", WbWriterVtkXmlASCII::getInstance()); - - //outflow - GbCuboid3DPtr geoOutflow (new GbCuboid3D(geoBlower->getX1Minimum()+2.0*dx, geoBlower->getX2Minimum()+2.0*dx, geoBlower->getX3Maximum()-4.0*dx, - geoBlower->getX1Maximum()-2.0*dx, geoBlower->getX2Maximum()-2.0*dx, geoBlower->getX3Maximum()-2.0*dx)); - if(myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); - - //simulation parameters - double lSI = g_maxX2 - g_minX2; - double lLB = lSI / dx; - //double refLentgthWorld = blockLength/1000.0; //from mm to m - //double refLentgthLB = double(nodesPerBlock); - //LBMUnitConverterPtr uconv = LBMUnitConverterPtr(new LBMUnitConverter(refLentgthWorld, LBMUnitConverter::AIR_20C, refLentgthLB)); - //LBMReal uSI = 10;//m/s - //LBMReal uLB = uSI * uconv->getFactorVelocityWToLb(); - //LBMReal rhoLB = 1.0; - //LBMReal nueSI = 1.5e-5; - //LBMReal nueLB = nueSI * uconv->getFactorViscosityWToLb();//(uLB*l)/Re; - //LBMReal nueLB = 1.5e-3; - LBMReal Re = (uLB*(420/dx))/nueLB; - - if(myid ==0) - { - UBLOG(logINFO,"grid = " <<int((g_maxX1 - g_minX1)/dx)<<"x"<<int((g_maxX2 - g_minX2)/dx) << "x"<<int((g_maxX3 - g_minX3)/dx)); - UBLOG(logINFO,"dx = " << dx); - UBLOG(logINFO,"nodes per block = " << nodesPerBlock); - UBLOG(logINFO,"block length = " << blockLength << "mm"); - UBLOG(logINFO,"v = " << uLB ); - UBLOG(logINFO,"rho = " << rhoLB ); - UBLOG(logINFO,"nue = " << nueLB ); - UBLOG(logINFO,"Re = " << Re ); - UBLOG(logINFO,"Preprozess - start"); - } - - SimulationParametersPtr param = SimulationParameters::getInstanz(); - param->setCollisionModelType(SimulationParameters::COMPRESSIBLE); - param->setRho(rhoLB); - param->setVelocityX(uLB); - param->setViscosity(nueLB); - - //set grid - //Grid3DPtr grid(new Grid3D()); - grid->setDeltaX(dx); - grid->setBlockNX(nodesPerBlock, nodesPerBlock, nodesPerBlock); - - GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); - if(myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), pathname+"/gridCube", WbWriterVtkXmlASCII::getInstance()); - - GenBlocksGridVisitor genBlocks; - genBlocks.addGeoObject(gridCube); - grid->accept(genBlocks); - - MetisPartitioningGridVisitor metisVisitor(numOfThreads, D3Q27System::B, comm, false); - grid->accept( metisVisitor ); - - SolidBlocksHelper sd(grid, comm); - - //iteractors - int bbOption1 = 0; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption1)); - - D3Q27TriFaceMeshInteractorPtr cargoInt( new D3Q27TriFaceMeshInteractor(geoCargo, grid, bcObst,Interactor3D::SOLID)); - sd.addInteractor(cargoInt); - - D3Q27InteractorPtr addWallBlowerInt(new D3Q27Interactor(addWallBlower, grid, bcObst,Interactor3D::SOLID)); - - sd.addInteractor(addWallBlowerInt); - - //D3Q27TriFaceMeshInteractorPtr paletteInt( new D3Q27TriFaceMeshInteractor(geoPalette, grid, bcObst,Interactor3D::SOLID)); - //sd.addInteractor(paletteInt); - - D3Q27InteractorPtr addWallXmaxInt(new D3Q27Interactor(addWallXmax, grid, bcObst,Interactor3D::SOLID)); - sd.addInteractor(addWallXmaxInt); - - D3Q27InteractorPtr addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, bcObst,Interactor3D::SOLID)); - sd.addInteractor(addWallYmaxInt); - - D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, bcObst,Interactor3D::SOLID)); - sd.addInteractor(addWallZmaxInt); - - D3Q27InteractorPtr addWallXminInt(new D3Q27Interactor(addWallXmin, grid, bcObst,Interactor3D::SOLID)); - sd.addInteractor(addWallXminInt); - - D3Q27InteractorPtr addWallYminInt(new D3Q27Interactor(addWallYmin, grid, bcObst,Interactor3D::SOLID)); - sd.addInteractor(addWallYminInt); - - D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, bcObst,Interactor3D::SOLID)); - sd.addInteractor(addWallZminInt); - - sd.deleteSolidBlocks(); - if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end"); - - if (refineLevel > 0) - { - GbObject3DPtr refineCube1(new GbCuboid3D(geoTFloor->getX1Minimum(), geoTFloor->getX2Minimum(), geoTFloor->getX3Minimum(), - geoTFloor->getX1Maximum(), geoTFloor->getX2Maximum(), geoTFloor->getX3Maximum())); - GbSystem3D::writeGeoObject(refineCube1.get(),pathname + "/refineCube", WbWriterVtkXmlASCII::getInstance()); - - RefineCrossAndInsideGbObjectBlockVisitor refVisitor(refineCube1, baseLevel, refineLevel-1); - grid->accept(refVisitor); - - RatioBlockVisitor ratioVisitor(refineLevel); - grid->accept(ratioVisitor); - - RatioSmoothBlockVisitor ratioSmoothVisitor(refineLevel); - grid->accept(ratioSmoothVisitor); - - OverlapBlockVisitor overlapVisitor(refineLevel); - grid->accept(overlapVisitor); - } - - if(myid == 0) UBLOG(logINFO,"Write blocks - start"); - grid->accept( metisVisitor ); - if(myid == 0) grid->writeBlocks(pathname + "/blocks" + StringUtil::toString(myid), 0, WbWriterVtkXmlASCII::getInstance(), false); - if(myid == 0) UBLOG(logINFO,"Write blocks - end"); - - unsigned long nob = grid->getNumberOfBlocks(); - unsigned long nod = nob * nodesPerBlock * nodesPerBlock *nodesPerBlock; - double availMem = 6.0e9; - double needMemAll = double(nod*(27*sizeof(double) + sizeof(int))*2); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - if(myid == 0) - { - UBLOG(logINFO,"Number of blocks = " << nob); - UBLOG(logINFO,"Number of nodes = " << nod); - UBLOG(logINFO,"Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO,"Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO,"Available memory per process = " << availMem << " bytes"); - } - - //LBMKernel3DPtr kernel(new LBMKernelETD3Q27Cascaded(nodesPerBlock, nodesPerBlock, nodesPerBlock)); - LBMKernel3DPtr kernel(new LBMKernelETD3Q27CascadedTI(nodesPerBlock, nodesPerBlock, nodesPerBlock)); - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem); - //SetKernelBlockVisitor kernelVisitor(kernel, nueLB); - grid->accept(kernelVisitor); - - if (refineLevel > 0) - { - std::vector<int> dirs; - D3Q27System::getLBMDirections(dirs); - SetInterpolationDirsBlockVisitor interDirsVisitor(dirs); - grid->accept(interDirsVisitor); - - D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - //discretization - //D3Q27TriFaceMeshInteractorPtr containerInt( new D3Q27TriFaceMeshInteractor(geoContainer, grid, bcObst,Interactor3D::SOLID)); - //grid->addAndInitInteractor(containerInt); - - D3Q27TriFaceMeshInteractorPtr tFloorInt( new D3Q27TriFaceMeshInteractor(geoTFloor, grid, bcObst,Interactor3D::SOLID)); - grid->addAndInitInteractor(tFloorInt); - - grid->addAndInitInteractor(addWallBlowerInt); - //grid->addAndInitInteractor(blowerInt); - grid->addAndInitInteractor(cargoInt); - //grid->addAndInitInteractor(paletteInt); - grid->addAndInitInteractor(addWallXmaxInt); - grid->addAndInitInteractor(addWallYmaxInt); - grid->addAndInitInteractor(addWallZmaxInt); - grid->addAndInitInteractor(addWallXminInt); - grid->addAndInitInteractor(addWallYminInt); - grid->addAndInitInteractor(addWallZminInt); - - D3Q27InteractorPtr addWallBlowerXminInt(new D3Q27Interactor(addWallBlowerXmin, grid, bcObst,Interactor3D::SOLID)); - grid->addAndInitInteractor(addWallBlowerXminInt); - - D3Q27InteractorPtr addWallBlowerXmaxInt(new D3Q27Interactor(addWallBlowerXmax, grid, bcObst,Interactor3D::SOLID)); - grid->addAndInitInteractor(addWallBlowerXmaxInt); - - D3Q27InteractorPtr addWallBlowerYminInt(new D3Q27Interactor(addWallBlowerYmin, grid, bcObst,Interactor3D::SOLID)); - grid->addAndInitInteractor(addWallBlowerYminInt); - - D3Q27InteractorPtr addWallBlowerYmaxInt(new D3Q27Interactor(addWallBlowerYmax, grid, bcObst,Interactor3D::SOLID)); - grid->addAndInitInteractor(addWallBlowerYmaxInt); - - //outflow - D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB)); - D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr( new D3Q27Interactor(geoOutflow, grid, denBCAdapter,Interactor3D::SOLID)); - grid->addAndInitInteractor(outflowInt); - - //inflow - double Cx = geoInflow->getX1Centroid(); - double Hx = geoInflow->getLengthX1(); - double Cy = geoInflow->getX2Centroid(); - double Hy = geoInflow->getLengthX2(); - mu::Parser fct = MathUtil::getDuctParaboloidZ(Cx,Hx,Cy,Hy,-uLB); - //mu::Parser fct; - //fct.SetExpr("vx3"); - //fct.DefineConst("vx3", uLB); - - D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter (false, false ,true ,fct, 0, D3Q27BCFunction::INFCONST)); - velBCAdapter->setSecondaryBcOption(2); - D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr( new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID)); - grid->addAndInitInteractor(inflowInt); - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27OffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - - //domain decomposition - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - //initialization of decompositions - D3Q27ETInitDistributionsBlockVisitor initVisitor(1.0); - grid->accept(initVisitor); - - - //Postrozess - //if(myid == 0) grid->writeBlocks(pathname + "/blocks" + StringUtil::toString(myid), 0, WbWriterVtkXmlASCII::getInstance(), false); - - //std::vector< UbTupleFloat3 > nodes; - //std::vector< UbTupleInt2 > lines; - //sphereInt->addQsLineSet(nodes, lines); - //WbWriterVtkXmlBinary::getInstance()->writeLines(pathname+"/qs",nodes,lines); - - LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - new D3Q27MacroscopicQuantitiesPostprocessor(grid, pathname + "/geo/nodes_geo", WbWriterVtkXmlBinary::getInstance(), - conv, geoSch, comm, true)); - grid->doPostProcess(0); - ppgeo.reset(); - geoSch.reset(); - - - if(myid == 0) UBLOG(logINFO,"Preprozess - end"); - -} - - LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - //double outTime = 50000; - double outTime = 500; - UbSchedulerPtr visSch(new UbScheduler()); - visSch->addSchedule(1000,1000,10000); - visSch->addSchedule(10000,10000,100000); - visSch->addSchedule(100000,100000,1000000); - D3Q27MacroscopicQuantitiesPostprocessor pp(grid, pathname + "/mq/nodes", WbWriterVtkXmlBinary::getInstance(), conv, visSch, comm); - - //turbulence intensity postprocessor - UbSchedulerPtr tiSch(new UbScheduler()); - tiSch->addSchedule(1000, 5000, 5000); - tiSch->addSchedule(10000, 50000, 50000); - tiSch->addSchedule(100000, 500000, 500000); - TurbulenceIntensityPostprocessor vp(grid, pathname + "/ti/TI", WbWriterVtkXmlBinary::getInstance(), tiSch, comm); - - double endTime = 1000001; - //double endTime = 1001.0; - UbSchedulerPtr upSch(new UbScheduler(1)); - CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, upSch)); - 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[]) -{ - - run(argv[1]); - - return 0; -} - diff --git a/apps/cpu/rheometer/CMakeLists.txt b/apps/cpu/rheometer/CMakeLists.txt deleted file mode 100644 index b095887e02ca0ca6a4a63189b431147da78ba3c5..0000000000000000000000000000000000000000 --- a/apps/cpu/rheometer/CMakeLists.txt +++ /dev/null @@ -1,6 +0,0 @@ -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(rheometer) - -vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES rheometer.cpp ) \ No newline at end of file diff --git a/apps/cpu/rheometer/rheometer.cfg b/apps/cpu/rheometer/rheometer.cfg deleted file mode 100644 index 9b739bc67ed42d46c89adaefab1b020ad67da660..0000000000000000000000000000000000000000 --- a/apps/cpu/rheometer/rheometer.cfg +++ /dev/null @@ -1,34 +0,0 @@ -#outputPath = d:/temp/rheometerTest -outputPath = d:/temp/Taylor-CouetteFlowIncompCum -viscosityPath = d:/Projects/VirtualFluidsCombined/apps/cpu/rheometer - -numOfThreads = 1 -availMem = 8e9 -logToFile = false - -blocknx = 16 16 1 #8 8 1 -#boundingBox = 32 32 1 -deltax = 0.5 - -#boundingBox = 0.02 0.02 0.00125 -#deltax = 0.000625 - -refineLevel = 0 - -#OmegaLB = 4e-5 -#tau0 = 20e-7 - -OmegaLB = 1e-4 -tau0 = 20e-7 - -resolution = 165 -scaleFactor = 1 - -newStart = true -restartStep = 100000 - -cpStart = 10000000 -cpStep = 10000000 - -outTime = 1 -endTime = 10 \ No newline at end of file diff --git a/apps/cpu/rheometer/rheometer.cpp b/apps/cpu/rheometer/rheometer.cpp deleted file mode 100644 index 12b4b7e478780aaac9d5d6e1b928ab11e86e379b..0000000000000000000000000000000000000000 --- a/apps/cpu/rheometer/rheometer.cpp +++ /dev/null @@ -1,466 +0,0 @@ -#include <iostream> -#include <string> - -#include "VirtualFluids.h" -#include "NonNewtonianFluids/NonNewtonianFluids.h" - -using namespace std; - - -void bflow(string configname) -{ - using namespace vf::lbm::dir; - - try - { - vf::basics::ConfigurationFile config; - config.load(configname); - - string outputPath = config.getValue<string>("outputPath"); - string viscosityPath = config.getValue<string>("viscosityPath"); - int numOfThreads = config.getValue<int>("numOfThreads"); - vector<int> blocknx = config.getVector<int>("blocknx"); - //vector<double> boundingBox = config.getVector<double>("boundingBox"); - //double nuLB = 1.5e-3;//config.getValue<double>("nuLB"); - real endTime = config.getValue<real>("endTime"); - real outTime = config.getValue<real>("outTime"); - real availMem = config.getValue<real>("availMem"); - int refineLevel = config.getValue<int>("refineLevel"); - bool logToFile = config.getValue<bool>("logToFile"); - real restartStep = config.getValue<real>("restartStep"); - real deltax = config.getValue<real>("deltax"); - real cpStep = config.getValue<real>("cpStep"); - real cpStart = config.getValue<real>("cpStart"); - bool newStart = config.getValue<bool>("newStart"); - real OmegaLB = config.getValue<real>("OmegaLB"); - real tau0 = config.getValue<real>("tau0"); - real scaleFactor = config.getValue<real>("scaleFactor"); - real resolution = config.getValue<real>("resolution"); - - vf::basics::ConfigurationFile viscosity; - viscosity.load(viscosityPath + "/viscosity.cfg"); - real nuLB = viscosity.getValue<real>("nuLB"); - - //outputPath = outputPath + "/rheometerBingham_" + config.getValue<string>("resolution") + "_" + config.getValue<string>("OmegaLB"); - - SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - if (logToFile) - { -#if defined(__unix__) - if (myid == 0) - { - const char* str = outputPath.c_str(); - mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); - } -#endif - - if (myid == 0) - { - stringstream logFilename; - logFilename << outputPath + "/logfile" + UbSystem::toString(UbSystem::getTimeStamp()) + ".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - } - - real rhoLB = 0.0; - - //akoustic - OmegaLB /= scaleFactor; - nuLB *=scaleFactor; - endTime *= scaleFactor; - //outTime = endTime; - cpStart = endTime; - cpStep = endTime; - -//diffusive - //OmegaLB /= scaleFactor * scaleFactor; - //tau0 /= scaleFactor * scaleFactor; - //endTime *= scaleFactor * scaleFactor; - //outTime = endTime; - //cpStart = endTime; - //cpStep = endTime; - - SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter()); - // double uWorld = (N * PI) / 30.0; //0.0037699111843 - // double rhoWorld = 2350.0; //kg/m^3 - //double R0 = boundingBox[0] * 0.5; - - //SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter(deltax, uWorld*R0, rhoWorld, 1.0, uLB)); - //if (myid == 0) UBLOG(logINFO, conv->toString()); - - //bounding box - - //double g_minX1 = 0; - //double g_minX2 = 0; - //double g_minX3 = 0; - - //double g_maxX1 = resolution;// boundingBox[0]; - //double g_maxX2 = resolution;// boundingBox[1]; - //double g_maxX3 = 1.0; // boundingBox[2]; - - real g_minX1 = 0; - real g_minX2 = 0; - real g_minX3 = 0; - - real g_maxX1 = resolution; // boundingBox[0]; - real g_maxX2 = resolution; // boundingBox[1]; - real g_maxX3 = 1.0; // boundingBox[2]; - - //double g_minX1 = -boundingBox[0]/2.0; - //double g_minX2 = -boundingBox[1] / 2.0; - //double g_minX3 = -boundingBox[2]/2.0; - - //double g_maxX1 = boundingBox[0]/2.0; - //double g_maxX2 = boundingBox[1]/2.0; - //double g_maxX3 = boundingBox[2]/2.0; - -// double blockLength = 3.0 * deltax; - - // double d = 2.0 * radius; - // double U = uLB; - // double Gamma = U / d; - - // double muWorld = 20; //Pa*s - // double k = 0.0015; // muWorld / rhoWorld * conv->getFactorViscosityWToLb(); //(U * d) / (Re); - - // //double k = (U * d) / (Re * std::pow(Gamma, n - 1)); - // double yielStressWorld = 20; //Pa - // double tau0 = 1e-6;// 3e-6;//yielStressWorld * conv->getFactorPressureWToLb(); //Bn * k * std::pow(Gamma, n); - - //double k = 0.05; // (U * d) / (Re * std::pow(Gamma, n - 1)); - //double tau0 = 3e-6; //Bn * k * std::pow(Gamma, n); - - //double forcing = 8e-7; - - //double omegaMin = 1.0e-8; - - SPtr<Rheology> thix = Rheology::getInstance(); - //thix->setPowerIndex(n); - //thix->setViscosityParameter(k); - thix->setYieldStress(tau0); - //thix->setOmegaMin(omegaMin); - - SPtr<BC> noSlipBC(new NoSlipBC()); - //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new NoSlipInterpolated())); - //noSlipBC->setBCStrategy(SPtr<BCStrategy>(new RheologyHerschelBulkleyModelNoSlipBCStrategy())); - noSlipBC->setBCStrategy(SPtr<BCStrategy>(new RheologyBinghamModelNoSlipBCStrategy())); - - //SPtr<BC> slipBC(new SlipBC()); - //slipBC->setBCStrategy(SPtr<BCStrategy>(new SlipBounceBack())); - - mu::Parser fctVx; - //fctVx.SetExpr("omega*(r-x2)"); - fctVx.SetExpr("-Omega*(x2-r)"); - fctVx.DefineConst("Omega", OmegaLB); - //fctVx.DefineConst("r", R0); - fctVx.DefineConst("r", g_maxX1*0.5); - - mu::Parser fctVy; - fctVy.SetExpr("Omega*(x1-r)"); - fctVy.DefineConst("Omega", OmegaLB); - //fctVy.DefineConst("r", R0); - fctVy.DefineConst("r", g_maxX2 * 0.5); - - mu::Parser fctVz; - fctVz.SetExpr("0.0"); - - - //// rotation around X-axis - //mu::Parser fctVy; - //fctVy.SetExpr("-Omega*(x3-r)"); - //fctVy.DefineConst("Omega", OmegaLB); - //fctVy.DefineConst("r", 0.5 * (g_maxX2 - g_minX2)); - - //mu::Parser fctVz; - //fctVz.SetExpr("Omega*(x2-r)"); - //fctVz.DefineConst("Omega", OmegaLB); - //fctVz.DefineConst("r", 0.5 * (g_maxX2 - g_minX2)); - - //mu::Parser fctVx; - //fctVx.SetExpr("0.0"); - - SPtr<BC> velocityBC(new VelocityBC(true, true, true, fctVx, fctVy, fctVz, 0, BCFunction::INFCONST)); - //velocityBC->setBCStrategy(SPtr<BCStrategy>(new VelocityInterpolated())); - //velocityBC->setBCStrategy(SPtr<BCStrategy>(new VelocityBounceBack())); - //velocityBC->setBCStrategy(SPtr<BCStrategy>(new VelocityWithPressureInterpolated())); - velocityBC->setBCStrategy(SPtr<BCStrategy>(new RheologyBinghamModelVelocityBCStrategy())); - - //SPtr<BC> densityBC(new PressureBC()); - //densityBC->setBCStrategy(SPtr<BCStrategy>(new PressureNonEquilibrium())); - ////densityBC->setBCStrategy(SPtr<BCStrategy>(new OutflowNonReflecting())); - - - //BS visitor - BoundaryConditionsBlockVisitor bcVisitor; - - SPtr<BCSet> bcProc; - bcProc = SPtr<BCSet>(new BCSet()); - - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new B92IncompressibleNavierStokes()); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new K16IncompressibleNavierStokes()); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CumulantLBMKernel()); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CompressibleCumulant4thOrderViscosityLBMKernel()); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new CumulantK17LBMKernel()); - SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new RheologyBinghamModelLBMKernel()); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new HerschelBulkleyModelLBMKernel()); - //SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new BinghamModelLBMKernel()); - kernel->setBCSet(bcProc); - //kernel->setForcingX1(forcing); - //kernel->setWithForcing(true); - - SPtr<Grid3D> grid(new Grid3D(comm)); - grid->setPeriodicX1(false); - grid->setPeriodicX2(false); - grid->setPeriodicX3(true); - grid->setDeltaX(deltax); - grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - - SPtr<GbObject3D> gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); - if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), outputPath + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); - - //////////////////////////////////////////// - //METIS - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::KWAY)); - //////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - //restart - SPtr<UbScheduler> mSch(new UbScheduler(cpStep, cpStart)); - SPtr<MPIIOMigrationSimulationObserver> restartSimulationObserver(new MPIIOMigrationSimulationObserver(grid, mSch, metisVisitor, outputPath, comm)); - restartSimulationObserver->setLBMKernel(kernel); - restartSimulationObserver->setBCSet(bcProc); - //restartSimulationObserver->setNu(k); - ////////////////////////////////////////////////////////////////////////// - - ////stator - SPtr<GbObject3D> rotor(new GbCylinder3D(0.5 * g_maxX1, 0.5 * g_maxX2, g_minX3 - 2.0 * deltax, 0.5 * g_maxX1, - 0.5 * g_maxX2, g_maxX3 + 2.0 * deltax, 0.5 * g_maxX1)); - - //around x - //SPtr<GbObject3D> stator(new GbCylinder3D(g_minX1 - 3.0 * deltax, 0.5 * g_maxX2, 0.5 * g_maxX3, g_maxX1 + 3.0 * deltax, 0.5 * g_maxX2, 0.5 * g_maxX3, 0.5 * g_maxX3)); - - GbSystem3D::writeGeoObject(rotor.get(), outputPath + "/geo/rotor", WbWriterVtkXmlBinary::getInstance()); - - SPtr<D3Q27Interactor> rotorInt = - SPtr<D3Q27Interactor>(new D3Q27Interactor(rotor, grid, velocityBC, Interactor3D::INVERSESOLID)); - - ////rotor (cylinder) - SPtr<GbObject3D> stator(new GbCylinder3D(0.5 * g_maxX1, 0.5 * g_maxX2, g_minX3- 2.0 * deltax, 0.5 * g_maxX1, 0.5 * g_maxX2, g_maxX3+ 2.0 * deltax, 0.25 * g_maxX1)); - - //around x - //SPtr<GbObject3D> rotor(new GbCylinder3D(g_minX1 - 3.0 * deltax, 0.5 * g_maxX2, 0.5 * g_maxX3, g_maxX1 + 3.0 * deltax, 0.5 * g_maxX2, 0.5 * g_maxX3, 0.25 * g_maxX3)); - - GbSystem3D::writeGeoObject(stator.get(), outputPath + "/geo/stator", WbWriterVtkXmlBinary::getInstance()); - - SPtr<D3Q27Interactor> statorInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(stator, grid, noSlipBC, Interactor3D::SOLID)); - - if (myid == 0) - { - UBLOG(logINFO, "Parameters:"); - //UBLOG(logINFO, "forcing = " << forcing); - UBLOG(logINFO, "rho = " << rhoLB); - UBLOG(logINFO, "uLB = " << OmegaLB); - UBLOG(logINFO, "nuLB = " << nuLB); - // UBLOG(logINFO, "Re = " << (U * d) / (k * std::pow(Gamma, n - 1))); - // UBLOG(logINFO, "Bn = " << tau0 /(k * std::pow(Gamma, n))); - // UBLOG(logINFO, "k = " << k); - // UBLOG(logINFO, "n = " << n); - UBLOG(logINFO, "tau0 = " << tau0); - UBLOG(logINFO, "scaleFactor = " << scaleFactor); - UBLOG(logINFO, "deltax = " << deltax); - UBLOG(logINFO, "number of levels = " << refineLevel + 1); - UBLOG(logINFO, "number of threads = " << numOfThreads); - UBLOG(logINFO, "number of processes = " << comm->getNumberOfProcesses()); - UBLOG(logINFO, "blocknx = " << blocknx[0] << " " << blocknx[1] << " " << blocknx[2]); - UBLOG(logINFO, "resolution = " << resolution); - // UBLOG(logINFO, "boundingBox = " << boundingBox[0] << " " << boundingBox[1] << " " << boundingBox[2]); - // UBLOG(logINFO, "sphereCenter = " << sphereCenter[0] << " " << sphereCenter[1] << " " << sphereCenter[2]); - UBLOG(logINFO, "output path = " << outputPath); - UBLOG(logINFO, "Preprozess - start"); - } - - if (newStart) - { - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - if (refineLevel > 0) - { - GbCuboid3DPtr refCube(new GbCuboid3D(-10, -10, -10, 0, 0, 0)); - if (myid == 0) GbSystem3D::writeGeoObject(refCube.get(), outputPath + "/geo/refCube", WbWriterVtkXmlASCII::getInstance()); - - if (myid == 0) UBLOG(logINFO, "Refinement - start"); - RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel, comm); - //refineHelper.addGbObject(sphere, refineLevel); - refineHelper.addGbObject(refCube, refineLevel); - refineHelper.refine(); - if (myid == 0) UBLOG(logINFO, "Refinement - end"); - } - - - //walls - //GbCuboid3DPtr wallZmin(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_minX3 - blockLength, g_maxX1 + blockLength, g_maxX2 + blockLength, g_minX3)); - //if (myid == 0) GbSystem3D::writeGeoObject(wallZmin.get(), outputPath + "/geo/wallZmin", WbWriterVtkXmlASCII::getInstance()); - - //GbCuboid3DPtr wallZmax(new GbCuboid3D(g_minX1 - blockLength, g_minX2 - blockLength, g_maxX3, g_maxX1 + blockLength, g_maxX2 + blockLength, g_maxX3 + blockLength)); - //if (myid == 0) GbSystem3D::writeGeoObject(wallZmax.get(), outputPath + "/geo/wallZmax", WbWriterVtkXmlASCII::getInstance()); - - ////wall interactors - //SPtr<D3Q27Interactor> wallZminInt(new D3Q27Interactor(wallZmin, grid, noSlipBC, Interactor3D::SOLID)); - //SPtr<D3Q27Interactor> wallZmaxInt(new D3Q27Interactor(wallZmax, grid, noSlipBC, Interactor3D::SOLID)); - - //////////////////////////////////////////// - //METIS - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::KWAY)); - //////////////////////////////////////////// - /////delete solid blocks - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - //intHelper.addInteractor(wallZminInt); - //intHelper.addInteractor(wallZmaxInt); - intHelper.addInteractor(statorInt); - intHelper.addInteractor(rotorInt); - intHelper.selectBlocks(); - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end"); - ////////////////////////////////////// - - SPtr<SimulationObserver> ppblocks(new WriteBlocksSimulationObserver(grid, SPtr<UbScheduler>(new UbScheduler(1)), outputPath, WbWriterVtkXmlBinary::getInstance(), comm)); - ppblocks->update(0); - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nodb = (blocknx[0]) * (blocknx[1]) * (blocknx[2]); - unsigned long nod = nob * (blocknx[0]) * (blocknx[1]) * (blocknx[2]); - unsigned long nodg = nob * (blocknx[0] + gl) * (blocknx[1] + gl) * (blocknx[1] + gl); - real needMemAll = real(nodg * (27 * sizeof(real) + sizeof(int) + sizeof(float) * 4)); - real needMem = needMemAll / real(comm->getNumberOfProcesses()); - - if (myid == 0) - { - UBLOG(logINFO, "Number of blocks = " << nob); - UBLOG(logINFO, "Number of nodes = " << nod); - 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 * nodb); - } - UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); - } - - SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem); - grid->accept(kernelVisitor); - - if (refineLevel > 0) - { - SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - //BC - intHelper.setBC(); - - //initialization of distributions - InitDistributionsBlockVisitor initVisitor; - grid->accept(initVisitor); - - - if (myid == 0) UBLOG(logINFO, "Preprozess - end"); - } - else - { - restartSimulationObserver->restart((int)restartStep); - grid->setTimeStep(restartStep); - SetBcBlocksBlockVisitor v1(rotorInt); - grid->accept(v1); - rotorInt->initInteractor(); - SetBcBlocksBlockVisitor v2(statorInt); - grid->accept(v2); - statorInt->initInteractor(); - } - - omp_set_num_threads(numOfThreads); - - //set connectors - //InterpolationProcessorPtr iProcessor(new ThixotropyInterpolationProcessor()); - //static_pointer_cast<ThixotropyInterpolationProcessor>(iProcessor)->setOmegaMin(thix->getOmegaMin()); - //SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - //grid->accept(setConnsVisitor); - - OneDistributionSetConnectorsBlockVisitor setConnsVisitor(comm); - grid->accept(setConnsVisitor); - - grid->accept(bcVisitor); - - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - WriteBoundaryConditionsSimulationObserver ppgeo = WriteBoundaryConditionsSimulationObserver(grid, geoSch, outputPath, WbWriterVtkXmlASCII::getInstance(), comm); - ppgeo.update(0); - - SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100)); - SPtr<SimulationObserver> npr(new NUPSCounterSimulationObserver(grid, nupsSch, numOfThreads, comm)); - - //write data for visualization of macroscopic quantities - SPtr<UbScheduler> visSch(new UbScheduler(outTime)); - //SPtr<UbScheduler> visSch(new UbScheduler(10,1)); - SPtr<WriteMacroscopicQuantitiesSimulationObserver> writeMQSimulationObserver(new WriteMacroscopicQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm)); - //writeMQSimulationObserver->update(0); - - SPtr<UbScheduler> forceSch(new UbScheduler(100)); - SPtr<CalculateTorqueSimulationObserver> fp = make_shared<CalculateTorqueSimulationObserver>(grid, forceSch, outputPath + "/torque/TorqueRotor.txt", comm); - fp->addInteractor(rotorInt); - SPtr<CalculateTorqueSimulationObserver> fp2 = make_shared<CalculateTorqueSimulationObserver>(grid, forceSch, outputPath + "/torque/TorqueStator.txt", comm); - fp2->addInteractor(statorInt); - - SPtr<WriteThixotropyQuantitiesSimulationObserver> writeThixotropicMQSimulationObserver(new WriteThixotropyQuantitiesSimulationObserver(grid, visSch, outputPath, WbWriterVtkXmlBinary::getInstance(), SPtr<LBMUnitConverter>(new LBMUnitConverter()), comm)); - - SPtr<UbScheduler> stepGhostLayer(new UbScheduler(1)); - SPtr<Simulation> simulation(new Simulation(grid, stepGhostLayer, endTime)); - simulation->addSimulationObserver(npr); - simulation->addSimulationObserver(fp); - simulation->addSimulationObserver(fp2); - simulation->addSimulationObserver(writeMQSimulationObserver); - simulation->addSimulationObserver(writeThixotropicMQSimulationObserver); - //simulation->addSimulationObserver(restartSimulationObserver); - - if (myid == 0) UBLOG(logINFO, "Simulation-start"); - simulation->run(); - 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[]) -{ - if (argv != NULL) - { - if (argv[1] != NULL) - { - //pflowForcing(string(argv[1])); - bflow(string(argv[1])); - } - else - { - cout << "Configuration file is missing!" << endl; - } - } - - return 0; -} diff --git a/apps/cpu/rheometer/viscosity.cfg b/apps/cpu/rheometer/viscosity.cfg deleted file mode 100644 index 065757939d9313c7caaf46ba34f7b989b61914f2..0000000000000000000000000000000000000000 --- a/apps/cpu/rheometer/viscosity.cfg +++ /dev/null @@ -1 +0,0 @@ -nuLB = 0.0123058 #1.5e-3 \ No newline at end of file diff --git a/apps/cpu/sbone/CMakeLists.txt b/apps/cpu/sbone/CMakeLists.txt deleted file mode 100644 index 42b4cbee942142b119ff4892a78894e0211c9feb..0000000000000000000000000000000000000000 --- a/apps/cpu/sbone/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(sbone) - -INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(sbone BINARY) diff --git a/apps/cpu/sbone/sbone.cpp b/apps/cpu/sbone/sbone.cpp deleted file mode 100644 index b52aaa3ac6e40ec9550171125141edf28b3fd89d..0000000000000000000000000000000000000000 --- a/apps/cpu/sbone/sbone.cpp +++ /dev/null @@ -1,421 +0,0 @@ -#include <iostream> -#include <string> - -#include <vfluids.h> - -using namespace std; - - -void sbonepd(const char *configname) -{ - try - { - - string machine = QUOTEME(CAB_MACHINE); - string pathname, pathGeo; - int numOfThreads; - double availMem; - - ConfigFileReader cf(configname); - if (!cf.read()) - { - std::string exceptionText = "Unable to read configuration file\n"; - throw exceptionText; - } - - CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - if(machine == "BOMBADIL") - { - numOfThreads = 4; - pathname = "d:/temp/sbone2"; - pathGeo = "d:/Data/Bone/SmallBone"; - availMem = 3.0e9; - } - else if(machine == "M01" || machine == "M02") - { - numOfThreads = 8; - pathname = cf.getValue("pathname"); //"/work/koskuche/Bone/SmallBone"; - pathGeo = cf.getValue("pathGeo"); //"/home/koskuche/data/Bone/SmallBone/vti"; - availMem = 1.0e9; - -#if defined(__unix__) - if (myid == 0) - { - const char* str = pathname.c_str(); - int status = 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()); - } - } - else throw UbException(UB_EXARGS, "unknown CAB_MACHINE"); - - if(myid==0) UBLOG(logINFO,"Testcase small bone"); - - //string boneFileName = pathGeo + "/sbone.stl"; - string boneFileName = pathGeo + "/boneimage.vti"; - - double dx = 3.5e-3/175.0; - - const int blocknx1 = 16; - const int blocknx2 = 16; - const int blocknx3 = 16; - - LBMReal rho_LB = 0.0; - //nueWasser = 1e-6 m^2/s - double nu_real = 1e-6; - LBMReal dt = 5e-8; // s (frei gew�hlt) - //dx - frei gew�hlt - // - LBMReal nu_LB = nu_real/(dx*dx/dt); - - - //dp = 50000 Pa - 0 Pa = 50000 Pa - double dp_real = UbSystem::stringTo<double>(cf.getValue("pressure")); //5000; - //rho wasser = 1000 kg*m^-3 - double rho_real = 1000; - //dp/rho = 50000/1000 = 50 m^2/s^2 - double dp_div_rho_real = dp_real/rho_real; - - double dp_LB = dp_div_rho_real/((dx/dt)*(dx/dt)); - - bool with_forcing = false; - - double rhoLBinflow; - if (with_forcing) - { - rhoLBinflow = 0.0; - } - else - { - rhoLBinflow = dp_LB*3.0; - } - - LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - - const int baseLevel = 0; - const int refineLevel = 0; - - - ////////////////////////////////////////////////////////////////////////// - //bone STL - //GbTriFaceMesh3DPtr bone (GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(boneFileName,"Netz")); - //if(myid == 0) GbSystem3D::writeGeoObject( bone.get(), pathname+"/geo/bone", WbWriterVtkXmlBinary::getInstance() ); - - string boneFilename = pathGeo + "/boneimage.vti"; - - int pmNX1=151; //abmessung einzelbild in x-richtung - int pmNX2=101; //abmessung einzelbild in y richtung - int pmNX3=101; //anzahl der bilder - float lthreshold = 1.0; - float uthreshold = 255.0; - - GbVoxelMatrix3DPtr bone(new GbVoxelMatrix3D(pmNX1,pmNX2,pmNX3,0,lthreshold,uthreshold)); - bone->readMatrixFromVtiASCIIFile(boneFilename); - bone->setVoxelMatrixMininum(11.5, 8.01, 5.01); - - double deltax = dx*1e3; - double deltaVoxel = 11e-3; - bone->setVoxelMatrixDelta(deltaVoxel, deltaVoxel, deltaVoxel); - bone->setLbGridDx(deltax); - - if(myid == 0) bone->writeToLegacyVTKBinary(pathname+"/geo/bone"); - - //bounding box - double g_minX1 = bone->getX1Minimum()-0.25; - double g_minX2 = bone->getX2Minimum()-0.25; - double g_minX3 = bone->getX3Minimum()-0.25; - - double g_maxX1 = bone->getX1Maximum()+0.25; - double g_maxX2 = bone->getX2Maximum()+0.25; - double g_maxX3 = bone->getX3Maximum()+0.25; - - double blockLength = (double)blocknx1*deltax; - - //double h = g_maxX2/2.0; - //double dpLB = (rhoLBinflow - rhoLB)/3.0; - - // - //double dex = g_maxX1+1.0; - //double Umax = (1.0/(2.0*nueLB))*(dpLB/dex)*(h*h); - - //double Re = (4*h*Umax)/(3*nueLB); - - Grid3DPtr grid(new Grid3D(comm)); - grid->setPeriodicX1(false); - grid->setPeriodicX2(false); - grid->setPeriodicX3(false); - grid->setDeltaX(deltax); - grid->setBlockNX(blocknx1, blocknx2, blocknx3); - - 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()); - - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - double forcing = 0; - if (with_forcing) - { - forcing = dp_LB/(blocknx1*grid->getNX1()); - } - - if(myid ==0) - { - UBLOG(logINFO,"Parameters:"); - UBLOG(logINFO,"with forcing = " << with_forcing ); - UBLOG(logINFO,"rho_LB = " << rho_LB ); - UBLOG(logINFO,"nu_LB = " << nu_LB ); - UBLOG(logINFO,"dp_LB = " << dp_LB ); - UBLOG(logINFO,"forcing = " << forcing ); - UBLOG(logINFO,"dx = " << dx << " m"); - UBLOG(logINFO,"dt = " << dt << " s"); - UBLOG(logINFO,"rho_real = " << rho_real << " kg*m^-3" ); - UBLOG(logINFO,"nu_real = " << nu_real << " m^2/s" ); - UBLOG(logINFO,"dp_real = " << dp_real << " Pa" ); - - UBLOG(logINFO,"number of levels = " << refineLevel+1 ); - UBLOG(logINFO,"numOfThreads = " << numOfThreads ); - UBLOG(logINFO,"path = " << pathname ); - UBLOG(logINFO,"Preprozess - start"); - } - - //walls - GbCuboid3DPtr addWallYmin (new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_minX2, g_maxX3+blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname+"/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallYmax (new GbCuboid3D(g_minX1-blockLength, g_maxX2, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmin (new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_minX3)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmax (new GbCuboid3D(g_minX1-blockLength, g_minX2-blockLength, g_maxX3, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname+"/geo/addWallYmax", 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()); - - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - - - // if (refineLevel > 0) - // { - // if(myid == 0) UBLOG(logINFO,"Refinement - start"); - // RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel); - // refineHelper.refine(); - // if(myid == 0) UBLOG(logINFO,"Refinement - end"); - // } - - - - //bone interactor - int bcOptionBone = 2; //0=simple Bounce Back, 1=quadr. BB, 2=thin wall - D3Q27BoundaryConditionAdapterPtr bcBone(new D3Q27NoSlipBCAdapter(bcOptionBone)); - - D3Q27InteractorPtr boneInt(new D3Q27Interactor(bone, grid, bcBone,Interactor3D::SOLID)); - - //wall interactors - int bcOptionWall = 1; //0=simple Bounce Back, 1=quadr. BB, 2=thin wall - D3Q27BoundaryConditionAdapterPtr bcWall(new D3Q27NoSlipBCAdapter(bcOptionWall)); - D3Q27InteractorPtr addWallYminInt(new D3Q27Interactor(addWallYmin, grid, bcWall,Interactor3D::SOLID)); - D3Q27InteractorPtr addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, bcWall,Interactor3D::SOLID)); - D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, bcWall,Interactor3D::SOLID)); - D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, bcWall,Interactor3D::SOLID)); - - // //inflow - // //double dp_Ph=0.1*10000.0;//dp in Bar - // //double dp_lb=dp_Ph*0.001*(nueLB*dx)*(nueLB*dx);//nue_ph=10e-6 - // //if(myid == 0) UBLOG(logINFO,"dp_lb = " << dp_lb ); - // //double rhoLBinflow = 3.0*(dp_lb-rhoLB); - - D3Q27BoundaryConditionAdapterPtr denBCAdapterInflow(new D3Q27DensityBCAdapter(rhoLBinflow)); - denBCAdapterInflow->setSecondaryBcOption(0); - D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr( new D3Q27Interactor(geoInflow, grid, denBCAdapterInflow, Interactor3D::SOLID)); - - //outflow - D3Q27BoundaryConditionAdapterPtr denBCAdapterOutflow(new D3Q27DensityBCAdapter(rho_LB)); - denBCAdapterOutflow->setSecondaryBcOption(0); - D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr( new D3Q27Interactor(geoOutflow, grid, denBCAdapterOutflow,Interactor3D::SOLID)); - - //////////////////////////////////////////// - //METIS - Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B)); - //////////////////////////////////////////// - /////delete solid blocks - if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - intHelper.addInteractor(boneInt); - intHelper.addInteractor(addWallYminInt); - intHelper.addInteractor(addWallYmaxInt); - intHelper.addInteractor(addWallZminInt); - intHelper.addInteractor(addWallZmaxInt); - intHelper.addInteractor(inflowInt); - intHelper.addInteractor(outflowInt); - intHelper.selectBlocks(); - if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end"); - ////////////////////////////////////// - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor); - grid->accept( setConnsVisitor ); - - //domain decomposition for threads - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - ppblocks->update(0); - ppblocks.reset(); - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nodb = (blocknx1) * (blocknx2) * (blocknx3); - unsigned long nod = nob * (blocknx1) * (blocknx2) * (blocknx3); - unsigned long nodg = nob * (blocknx1+gl) * (blocknx2+gl) * (blocknx3+gl); - double needMemAll = double(nodg*(27*sizeof(double) + sizeof(int) + sizeof(float)*4)); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - if(myid == 0) - { - UBLOG(logINFO,"Number of blocks = " << nob); - UBLOG(logINFO,"Number of nodes = " << nod); - 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*nodb); - } - UBLOG(logINFO,"Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO,"Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO,"Available memory per process = " << availMem << " bytes"); - } - - LBMKernel3DPtr kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx1, blocknx2, blocknx3, LBMKernelETD3Q27CCLB::NORMAL)); - - //mu::Parser fctForcingX1; - //fctForcingX1.SetExpr("Fx1"); - //fctForcingX1.DefineConst("Fx1", forcing); - - //kernel->setForcingX1(fctForcingX1); - //kernel->setWithForcing(true); - - BCProcessorPtr bcProc(new D3Q27ETForThinWallBCProcessor()); - kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nu_LB, availMem, needMem); - grid->accept(kernelVisitor); - - - //if (refineLevel > 0) - //{ - // D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - // grid->accept(undefNodesVisitor); - //} - - //BC - intHelper.setBC(); - - //Press*1.6e8+(14.76-coordsX)/3.5*5000 - //initialization of distributions - mu::Parser fct; - fct.SetExpr("(x1max-x1)/l*dp*3.0"); - fct.DefineConst("dp", dp_LB); - fct.DefineConst("x1max", g_maxX1); - fct.DefineConst("l", g_maxX1-g_minX1); - - D3Q27ETInitDistributionsBlockVisitor initVisitor(nu_LB, rho_LB); - initVisitor.setRho(fct); - //initVisitor.setVx1(fct); - initVisitor.setVx1(0.0); - grid->accept(initVisitor); - - //Postrozess - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, true)); - ppgeo->update(0); - ppgeo.reset(); - - if(myid == 0) UBLOG(logINFO,"Preprozess - end"); - - UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); - NUPSCounterPostprocessor npr(grid, nupsSch, numOfThreads, comm); - - double outTime = 1000; - UbSchedulerPtr stepSch(new UbScheduler(outTime)); - stepSch->addSchedule(10,10,100); - - D3Q27MacroscopicQuantitiesPostprocessor pp(grid, stepSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv); - - - double dxd2 = deltax / 2.0; - D3Q27IntegrateValuesHelperPtr ih1(new D3Q27IntegrateValuesHelper(grid, comm, bone->getX1Minimum() - dxd2, bone->getX2Minimum() - dxd2, bone->getX3Minimum() - dxd2, - bone->getX1Maximum() + dxd2, bone->getX2Maximum() + dxd2, bone->getX3Maximum() + dxd2)); - if (myid == 0) GbSystem3D::writeGeoObject(ih1->getBoundingBox().get(), pathname + "/geo/ih1", WbWriterVtkXmlBinary::getInstance()); - - double factorp = dp_real/dp_LB; - double factorv = dx/dt; - D3Q27MeanValuesPostprocessor mvp1(grid, stepSch, pathname + "/mv/mv1.txt", comm, ih1, factorp, factorv); - - - D3Q27IntegrateValuesHelperPtr ih2(new D3Q27IntegrateValuesHelper(grid, comm, g_maxX1-2.0*deltax, g_minX2, g_minX3, - g_maxX1 - deltax, g_maxX2, g_maxX3)); - if (myid == 0) GbSystem3D::writeGeoObject(ih2->getBoundingBox().get(), pathname + "/geo/ih2", WbWriterVtkXmlBinary::getInstance()); - - D3Q27MeanValuesPostprocessor mvp2(grid, stepSch, pathname + "/mv/mv2.txt", comm, ih2, factorp, factorv); - - if(myid == 0) - { - UBLOG(logINFO,"PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - UBLOG(logINFO,"PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - UBLOG(logINFO,"PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - } - - double endTime = UbSystem::stringTo<double>(cf.getValue("endTime")); //100001;//10001.0; - - CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, stepSch)); - if(myid == 0) UBLOG(logINFO,"Simulation-start"); - calculation->calculate(); - if(myid == 0) UBLOG(logINFO,"Simulation-end"); - } - catch(exception& e) - { - cerr << e.what() << endl << flush; - } - catch(string& s) - { - cerr << s << endl; - } - catch(...) - { - cerr << "unknown exception" << endl; - } - -} -////////////////////////////////////////////////////////////////////////// -int main(int argc, char* argv[]) -{ - - if ( argv != NULL ) - { - sbonepd(argv[1]); - } - - return 0; -} diff --git a/apps/cpu/screw/CMakeLists.txt b/apps/cpu/screw/CMakeLists.txt deleted file mode 100644 index c2fb4e44f90332302a1c6918b31223664b6e539a..0000000000000000000000000000000000000000 --- a/apps/cpu/screw/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(screw) - -INCLUDE(${APPS_ROOT}/IncludsList.cmake) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(screw BINARY) diff --git a/apps/cpu/screw/config.txt b/apps/cpu/screw/config.txt deleted file mode 100644 index 4929670dd07a16078a04b3878937bd8dfe5e9750..0000000000000000000000000000000000000000 --- a/apps/cpu/screw/config.txt +++ /dev/null @@ -1,13 +0,0 @@ -pathname = d:/temp/screw -numOfThreads = 4 -availMem = 8e9 -blocknx = 20 20 20 - -uLB = 6.66666666667e-2 -Re = 7000 -dx = 0.0005 - -endTime = 100000 -outTime = 10000 - -restartStep = 10000 \ No newline at end of file diff --git a/apps/cpu/screw/screw.cpp b/apps/cpu/screw/screw.cpp deleted file mode 100644 index ad7c997743a0ad10b4301765aaf73392f61f4bcc..0000000000000000000000000000000000000000 --- a/apps/cpu/screw/screw.cpp +++ /dev/null @@ -1,257 +0,0 @@ -#include <VirtualFluids.h> - -using namespace std; - -////////////////////////////////////////////////////////////////////////// -int main(int argc, char* argv[]) -{ - try - { - // Verify input arguments - if (argc != 2) - { - std::cout << "Usage: " << argv[0] << " <config file> " << std::endl; - return EXIT_FAILURE; - } - - vf::basics::ConfigurationFile config; - config.load(argv[1]); - - string pathname = config.getString("pathname"); - int numOfThreads = config.getValue<int>("numOfThreads"); - vector<int> blocknx = config.getVector<int>("blocknx"); - double uLB = config.getValue<double>("uLB"); - double Re = config.getValue<double>("Re"); - double dx = config.getValue<double>("dx"); - double endTime = config.getValue<double>("endTime"); - double outTime = config.getValue<double>("outTime"); - double availMem = config.getValue<double>("availMem"); - int restartStep = config.getValue<int>("restartStep"); - - - SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter()); - - const int baseLevel = 0; - - double r = 150e-3; - double h = 45e-3; - - //bounding box - double g_minX1 = 0; - double g_minX2 = 0; - double g_minX3 = 0; - - double g_maxX1 = 2.0*sqrt(2.0*r*h-h*h); - double g_maxX2 = 45e-3; - double g_maxX3 = 10e-3; - - - - double blockLength = (double)blocknx[0]*dx; - - double nuLB = (uLB*(h/dx))/Re; - double rhoLB = 0.0; - - //bc - mu::Parser fctVx; - fctVx.SetExpr("omega*(r-x2)"); - fctVx.DefineConst("omega", uLB); - fctVx.DefineConst("r", r); - - mu::Parser fctVy; - fctVy.SetExpr("omega*(x1-k)"); - fctVy.DefineConst("omega", uLB); - fctVy.DefineConst("k", g_maxX1*0.5); - - mu::Parser fctVz; - fctVz.SetExpr("0.0"); - - SPtr<BCAdapter> velBCAdapter(new VelocityBCAdapter(true, true, true, fctVx,fctVy,fctVz, 0, BCFunction::INFCONST)); - velBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new VelocityBCAlgorithm())); - - SPtr<BCAdapter> slipBCAdapter(new SlipBCAdapter()); - slipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new SlipBCAlgorithm())); - - BoundaryConditionsBlockVisitor bcVisitor; - bcVisitor.addBC(slipBCAdapter); - bcVisitor.addBC(velBCAdapter); - - - SPtr<Grid3D> grid(new Grid3D(comm)); - grid->setPeriodicX1(false); - grid->setPeriodicX2(false); - grid->setPeriodicX3(false); - grid->setDeltaX(dx); - grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - - 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()); - - ////////////////////////////////////////////////////////////////////////// - //restart - SPtr<UbScheduler> rSch(new UbScheduler(restartStep)); - RestartCoProcessor rp(grid, rSch, comm, pathname, RestartCoProcessor::TXT); - ////////////////////////////////////////////////////////////////////////// - - if (grid->getTimeStep() == 0) - { - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - if (myid == 0) - { - UBLOG(logINFO, "Parameters:"); - UBLOG(logINFO, "h = " << h); - UBLOG(logINFO, "rho = " << rhoLB); - UBLOG(logINFO, "nue = " << nuLB); - UBLOG(logINFO, "Re = " << Re); - UBLOG(logINFO, "dx = " << dx); - - //UBLOG(logINFO, "number of levels = " << refineLevel + 1); - UBLOG(logINFO, "numOfThreads = " << numOfThreads); - UBLOG(logINFO, "path = " << pathname); - UBLOG(logINFO, "Preprozess - start"); - } - - //BC - SPtr<GbObject3D> cylinder(new GbCylinder3D(g_maxX1*0.5, r, g_minX3, g_maxX1*0.5, r, g_maxX3, r)); - GbSystem3D::writeGeoObject(cylinder.get(), pathname + "/geo/cylinder", WbWriterVtkXmlBinary::getInstance()); - - GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLength, g_maxX2, g_minX3-blockLength, g_maxX1+blockLength, g_maxX2+blockLength, g_maxX3+blockLength)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance()); - - WriteBlocksSPtr<CoProcessor> ppblocks(new WriteBlocksCoProcessor(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - - //interactors - SPtr<D3Q27Interactor> cylinderInt(new D3Q27Interactor(cylinder, grid, velBCAdapter, Interactor3D::INVERSESOLID)); - SPtr<D3Q27Interactor> addWallYmaxInt(new D3Q27Interactor(addWallZmax, grid, slipBCAdapter, Interactor3D::SOLID)); - - - //////////////////////////////////////////// - //METIS - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B)); - //////////////////////////////////////////// - /////delete solid blocks - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - - intHelper.addInteractor(addWallYmaxInt); - intHelper.addInteractor(cylinderInt); - - intHelper.selectBlocks(); - if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - end"); - ////////////////////////////////////// - - //set connectors - InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator()); - //InterpolationProcessorPtr iProcessor(new CompressibleOffsetInterpolator()); - SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - grid->accept(setConnsVisitor); - - //domain decomposition for threads - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - ppblocks->process(0); - ppblocks.reset(); - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nodb = (blocknx[0]) * (blocknx[1]) * (blocknx[2]); - unsigned long nod = nob * (blocknx[0]) * (blocknx[1]) * (blocknx[2]); - unsigned long nodg = nob * (blocknx[0] + gl) * (blocknx[1] + gl) * (blocknx[1] + gl); - double needMemAll = double(nodg*(27 * sizeof(double) + sizeof(int) + sizeof(float) * 4)); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - if (myid == 0) - { - UBLOG(logINFO, "Number of blocks = " << nob); - UBLOG(logINFO, "Number of nodes = " << nod); - 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*nodb); - } - UBLOG(logINFO, "Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO, "Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO, "Available memory per process = " << availMem << " bytes"); - } - - int kernelType = 2; - SPtr<LBMKernel> kernel; - kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], IncompressibleCumulantLBMKernel::NORMAL)); - //kernel = SPtr<LBMKernel>(new CompressibleCumulantLBMKernel(blocknx[0], blocknx[1], blocknx[2], CompressibleCumulantLBMKernel::NORMAL)); - - SPtr<BCProcessor> bcProc(new BCProcessor()); - kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem); - grid->accept(kernelVisitor); - - //BC - intHelper.setBC(); - - grid->accept(bcVisitor); - - //initialization of distributions - InitDistributionsBlockVisitor initVisitor(nuLB, rhoLB); - initVisitor.setVx1(fctVx); - initVisitor.setVx2(fctVy); - initVisitor.setVx3(fctVz); - grid->accept(initVisitor); - - //Postrozess - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - WriteBoundaryConditionsSPtr<CoProcessor> ppgeo( - new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - ppgeo->process(0); - ppgeo.reset(); - - if (myid == 0) UBLOG(logINFO, "Preprozess - end"); - } - else - { - grid->accept(bcVisitor); - - //set connectors - InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator()); - SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - grid->accept(setConnsVisitor); - - if (myid == 0) UBLOG(logINFO, "Restart - end"); - } - SPtr<UbScheduler> nupsSch(new UbScheduler(10, 30, 100)); - NUPSCounterCoProcessor npr(grid, nupsSch, numOfThreads, comm); - - SPtr<UbScheduler> stepSch(new UbScheduler(outTime)); - - WriteMacroscopicQuantitiesCoProcessor pp(grid, stepSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm); - - const SPtr<ConcreteCalculatorFactory> calculatorFactory = std::make_shared<ConcreteCalculatorFactory>(stepSch); - CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, endTime, calculatorFactory, CalculatorType::HYBRID)); - if (myid == 0) UBLOG(logINFO, "Simulation-start"); - calculation->calculate(); - if (myid == 0) UBLOG(logINFO, "Simulation-end"); - - return EXIT_SUCCESS; - } - catch (std::exception& e) - { - cerr << e.what() << endl << flush; - } - catch (std::string& s) - { - cerr << s << endl; - } - catch (...) - { - cerr << "unknown exception" << endl; - } - -} diff --git a/apps/cpu/shear/CMakeLists.txt b/apps/cpu/shear/CMakeLists.txt deleted file mode 100644 index 5cf6013b9f40e71b05d69672b5d56bb5aef5ad2b..0000000000000000000000000000000000000000 --- a/apps/cpu/shear/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(shear) - -INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(shear BINARY) diff --git a/apps/cpu/shear/shear.cpp b/apps/cpu/shear/shear.cpp deleted file mode 100644 index 6a154c57d62a99130934fd5d6f7ab747689ef35f..0000000000000000000000000000000000000000 --- a/apps/cpu/shear/shear.cpp +++ /dev/null @@ -1,514 +0,0 @@ -#include <iostream> -#include <string> - -#include <vfluids.h> -using namespace std; - - -void run(const char *cstr) -{ - CommunicatorPtr comm(new MPICommunicator()); - try - { - //Sleep(30000); - string machine = QUOTEME(CAB_MACHINE); - string pathname; - string geosphere; - int numOfThreads = 1; - double availMem = 0; - - - int myid = comm->getProcessID(); - - if(machine == "BOMBADIL") - { - pathname = "d:/temp/shear"; - numOfThreads = 1; - availMem = 3.0e9; - geosphere = "d:/Data/Ehsan/Agglomerat_n_00020_fd_1.882437_r_0033.930997.txt"; - } - else if(machine == "M01" || machine == "M02") - { - pathname = "/work/koskuche/scratch/smallAgg80"; - // geosphere = "/work/ehsan/data/Agglomerat4.txt"; - // geosphere = "/work/ehsan/data/Agglomerat_n_00060_fd_1.858514_r_0061.500327.txt"; - // geosphere = "/work/ehsan/data/Agglomerat_n_00080_fd_1.855984_r_0071.870085.txt"; - //geosphere = "/work/ehsan/data/Agglomerat_n_00040_fd_1.864231_r_0049.358563.txt"; - //geosphere = "/work/ehsan/data/Agglomerat_n_00020_fd_1.882437_r_0033.930997.txt"; - geosphere = "/work/ehsan/data/Agglomerat_n_00500_fd_1.850643_r_0193.702967.txt"; - - - - - numOfThreads = 1; - availMem =1.0e10;// 12.0e9; - - if(myid ==0) - { - stringstream logFilename; - logFilename << pathname + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - } - else throw UbException(UB_EXARGS, "unknown CAB_MACHINE"); - - double dx =0.1*4.0; - - double eq_Diameter=2.0*38.0;//55.3586;//61.5003;//80;//71.8701;//61.5003; - double L1 =35.0*eq_Diameter; - double L2, L3, H; - L2 = L3 = H =35.0*eq_Diameter;//1.0;//0.42*3.9; - - LBMReal radius = 6.0; - LBMReal rhoReal = 1.0; //kg/m^3 - //LBMReal uReal = 0.45;//m/s - // LBMReal uLB = 0.05; - LBMReal Re = 0.1; - LBMReal rhoLB = 0.0; - LBMReal l = L2 / dx; - - //LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter(1.0, 1/sqrt(3.0)*(uReal/uLB), 1.0, 1.0/dx, dx*dx*dx)); - LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - - const int baseLevel = 0; - const int refineLevel = 5; - - - - //bounding box - double d_minX1 = 0.0; - double d_minX2 = 0.0; - double d_minX3 = 0.0; - - double d_maxX1 = L1; - double d_maxX2 = L2; - double d_maxX3 = L3; - - const int blocknx1 = 8; - const int blocknx2 = 8; - const int blocknx3 = 8; - - dx =14.4*2.0;// ( 0.9) *(double)(1<<refineLevel); - - double area =/* radius/dx;*/radius*radius*PI/(dx/(double)(1<<refineLevel))/(dx/(double)(1<<refineLevel));//2.0*radius*H; - double nueReal=1e-6;//water - double uReal=Re*nueReal/(2.0*radius);//real velocity - double F_stokss=6*PI*.001/*water*/*radius*uReal; - //LBMReal nueLB = (((4.0/9.0)*uLB)*2.0*(radius/dx))/Re; - LBMReal nueLB =.75/((double)(1<<refineLevel));// ((uLB)*2.0*(radius/dx))/Re; - // LBMReal uLB = ((nueLB)*Re)/ ( 2.0*(radius/dx));//base on the coarsest level - LBMReal uLB = ((0.75)*Re)/ ( 2.0*(radius/(dx/((double)(1<<refineLevel)))));//base on the coarsest level if nueLB =.75/((double)(1<<refineLevel)) and dx = ( 0.9) *(double)(1<<refineLevel) - // LBMReal uLB = ((0.75)*Re)/ ((eq_Diameter/(dx/((double)(1<<refineLevel)))));//base on the coarsest level if nueLB =.75/((double)(1<<refineLevel)) and dx = ( 0.9) *(double)(1<<refineLevel) - double blockLength = blocknx1*dx; - - - double xsphere=1.0*L1/2.0;//0.5; - double ysphere=L2/2.0;//0.75; - double zsphere=L3/2.0;//0.75; - //obstacle - ////////////////////////////////////////////////////////////////////////// - UbFileInputASCII file; - file.open(geosphere); - //file.skipLine();file.skipLine();//2line skiped - std::string NOP=file.readString(); - std::string NOP2=file.readString(); - const int numberOfParticles=file.readDouble(); - if(myid == 0){UBLOG(logINFO,__FILE__<<" " <<__LINE__<<" number of particles="<<numberOfParticles);} - //std::string Dia=file.readString(); - double diameter=2.0*radius;//12;//file.readDouble(); - file.skipLine();file.skipLine();file.skipLine();file.skipLine();file.skipLine();file.skipLine();file.skipLine();//7 line skiped - GbSphere3DPtr *sphereP=new GbSphere3DPtr[numberOfParticles]; - - for (int i=0;i<numberOfParticles;i++) - { - double x=file.readDouble(); - double y=file.readDouble(); - double z=file.readDouble(); - ///0degree in x direction - double x_rotation= x; - double y_rotation= y; - double z_rotation= z; -///180degree in x direction - // double x_rotation= x; - // double y_rotation= -y; - // double z_rotation= -z; - ///90degree in y direction - // double x_rotation=-z; - // double y_rotation= y; - // double z_rotation=x; - // ///90degree in z axis - // double x_rotation=-y; - // double y_rotation=x; - // double z_rotation=z; - //transfer - double x_final=x_rotation/*/1450*/ +xsphere; - double y_final=y_rotation/*/1450*/ +ysphere; - double z_final=z_rotation/*/1450*/ +zsphere; - sphereP[i]=GbSphere3DPtr(new GbSphere3D(x_final, y_final, z_final, diameter/2.0/*/1450*/)); - if(myid == 0)GbSystem3D::writeGeoObject(sphereP[i].get(),pathname + "/sphere/sphere"+ "_" + UbSystem::toString(i), WbWriterVtkXmlASCII::getInstance()); - } - file.close(); -/////////////////////////////// - D3Q27InteractorPtr *spherePInt=new D3Q27InteractorPtr[numberOfParticles]; - double offs = dx; - - //double g_minX1 = d_minX1-offs-0.499999*dx; - double g_minX1 = d_minX1-offs; - double g_minX2 = d_minX2-offs; - double g_minX3 = d_minX3-offs; - - double g_maxX1 = d_maxX1+offs; - double g_maxX2 = d_maxX2+offs; - double g_maxX3 = d_maxX3+offs; - if(myid == 0){UBLOG(logINFO,__FILE__<<" " <<__LINE__);} - GbObject3DPtr gridCube(new GbCuboid3D(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3)); - if(myid == 0){UBLOG(logINFO,__FILE__<<" " <<__LINE__);} - - - //refinement area - double rf = 0.50*blockLength; - // GbObject3DPtr refineCube(new GbCuboid3D(sphereP[0]->getX1Minimum()-rf*3.0/4.0, sphereP[3]->getX2Minimum()-rf*3.0/4.0, sphereP[5]->getX3Minimum()-rf*1.0/2.0, - // sphereP[2]->getX1Maximum()+rf*3.0/4.0, sphereP[4]->getX2Maximum()+rf*3.0/4.0, sphereP[6]->getX3Maximum()+rf*1.0/2.0)); - - ////////// - double level5=xsphere-(xsphere-eq_Diameter/2-0.50*(blocknx1*dx/pow(2.0,5)));//0.065;//.085; - double level4=level5+.1*(blocknx1*dx/pow(2.0,4));//0.015;//0.1; - double level3=level4+0.50*(blocknx1*dx/pow(2.0,3));//0.015;//0.115; - double level2=level3+1.0*(blocknx1*dx/pow(2.0,2));//.035;//0.15; - double level1=level2+1.0*(blocknx1*dx/pow(2.0,1));//.05;//0.2; - - GbCuboid3DPtr refineCube1(new GbCuboid3D( xsphere-level1,ysphere-level1, zsphere-level1,xsphere+level1,ysphere+level1, zsphere+level1)); - GbCuboid3DPtr refineCube2(new GbCuboid3D( xsphere-level2,ysphere-level2, zsphere-level2,xsphere+level2,ysphere+level2, zsphere+level2)); - GbCuboid3DPtr refineCube3(new GbCuboid3D( xsphere-level3,ysphere-level3, zsphere-level3,xsphere+level3,ysphere+level3, zsphere+level3)); - GbCuboid3DPtr refineCube4(new GbCuboid3D( xsphere-level4,ysphere-level4, zsphere-level4,xsphere+level4,ysphere+level4, zsphere+level4)); - GbCuboid3DPtr refineCube5(new GbCuboid3D( xsphere-level5,ysphere-level5, zsphere-level5,xsphere+level5,ysphere+level5, zsphere+level5)); - /////////// - - Grid3DPtr grid(new Grid3D(comm)); - - UbSchedulerPtr rSch(new UbScheduler(100000, 100000)); - //RestartPostprocessorPtr rp(new RestartPostprocessor(grid, rSch, comm, pathname+"/checkpoints", RestartPostprocessor::BINARY)); - - //UbSchedulerPtr emSch(new UbScheduler(1000, 1000)); - //EmergencyExitPostprocessor em(grid, emSch, pathname+"/checkpoints/emex.txt", rp, comm); - - std::string opt; - - if(cstr!= NULL) - opt = std::string(cstr); - - if/*(cstr== NULL)*/(cstr!= NULL) - { - opt = std::string(cstr); - - if(myid==0) UBLOG(logINFO,"Restart step: " << opt); - - //grid = rp->restart(UbSystem::stringTo<int>(opt)); - //rp->reconnect(); - - //cylinderInt = - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27OffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - - //domain decomposition - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - } - else - { - if(myid ==0) - { - UBLOG(logINFO,"L = " << L2/dx ); - UBLOG(logINFO,"v = " << uLB ); - UBLOG(logINFO,"rho = " << rhoLB ); - UBLOG(logINFO,"nue = " << nueLB ); - UBLOG(logINFO,"Re = " << Re ); - UBLOG(logINFO,"F_stokss = " << F_stokss ); - UBLOG(logINFO,"dx = " << dx ); - UBLOG(logINFO,conv->toString() ); - UBLOG(logINFO,"Preprozess - start"); - } - - grid->setDeltaX(dx); - grid->setBlockNX(blocknx1, blocknx2, blocknx3); - grid->setPeriodicX1(false); - grid->setPeriodicX2(true); - grid->setPeriodicX3(true); - - // UbTupleDouble6 bouningBox(gridCube->getX1Minimum(),gridCube->getX2Minimum(),gridCube->getX3Minimum(), - // gridCube->getX1Maximum(),gridCube->getX2Maximum(),gridCube->getX3Maximum()); - // UbTupleInt3 blockNx(blocknx1, blocknx2, blocknx3); - // UbTupleInt3 gridNx(8, 16, 16); - // grid = Grid3DPtr(new Grid3D(bouningBox, blockNx, gridNx)); - - if(myid ==0) GbSystem3D::writeGeoObject(gridCube.get(),pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); - // if(myid ==0) GbSystem3D::writeGeoObject(refineCube.get(),pathname + "/geo/refineCube", WbWriterVtkXmlBinary::getInstance()); - - //// - if(myid ==0) GbSystem3D::writeGeoObject(gridCube.get(),pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); - if(myid ==0) GbSystem3D::writeGeoObject(refineCube1.get(), pathname + "/geo/refineCube1", WbWriterVtkXmlBinary::getInstance()); - if(myid ==0) GbSystem3D::writeGeoObject(refineCube2.get(),pathname + "/geo/refineCube2", WbWriterVtkXmlBinary::getInstance()); - if(myid ==0) GbSystem3D::writeGeoObject(refineCube3.get(),pathname + "/geo/refineCube3", WbWriterVtkXmlBinary::getInstance()); - if(myid ==0) GbSystem3D::writeGeoObject(refineCube4.get(),pathname + "/geo/refineCube4", WbWriterVtkXmlBinary::getInstance()); - if(myid ==0) GbSystem3D::writeGeoObject(refineCube5.get(),pathname + "/geo/refineCube5", WbWriterVtkXmlBinary::getInstance()); - //// - - GenBlocksGridVisitor genBlocks; - genBlocks.addGeoObject(gridCube); - grid->accept(genBlocks); - - //walls - GbCuboid3DPtr addWallYmin (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_minX2, d_maxX3+4.0*blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname+"/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmin (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_minX3)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallYmax (new GbCuboid3D(d_minX1-4.0*blockLength, d_maxX2, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmax (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_maxX3, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance()); - - //inflow - GbCuboid3DPtr geoInflow (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_minX1, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname+"/geo/geoInflow", WbWriterVtkXmlASCII::getInstance()); - - //outflow - GbCuboid3DPtr geoOutflow (new GbCuboid3D(d_maxX1, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); - - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm)); - - if (refineLevel > 0) - { - if(myid == 0) UBLOG(logINFO,"Refinement - start"); - RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel); - refineHelper.addGbObject(refineCube5, refineLevel); - - // refineHelper.addGbObject(refineCube1, refineLevel); - // refineHelper.addGbObject(refineCube2, refineLevel-1); - // refineHelper.addGbObject(refineCube3, refineLevel-2); - // refineHelper.addGbObject(refineCube4, refineLevel-3); - //refineHelper.addGbObject(refineCube5, refineLevel-4); - - - refineHelper.refine(); - if(myid == 0) UBLOG(logINFO,"Refinement - end"); - - } - - MetisPartitioningGridVisitor metisVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B); - grid->accept( metisVisitor ); - - SolidBlocksHelper sd(grid, comm); - - int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr bcObst(new D3Q27NoSlipBCAdapter(bbOption)); - D3Q27BoundaryConditionAdapterPtr bcObst2(new D3Q27SlipBCAdapter(bbOption)); - // cylinderInt = D3Q27InteractorPtr ( new D3Q27Interactor(cylinder, grid, bcObst,Interactor3D::SOLID)); - - for (int i=0;i<numberOfParticles;i++) - { - spherePInt[i]= D3Q27InteractorPtr( new D3Q27Interactor(sphereP[i], grid, bcObst,Interactor3D::SOLID)); - } - //walls - D3Q27InteractorPtr addWallYminInt(new D3Q27Interactor(addWallYmin, grid, bcObst2,Interactor3D::SOLID)); - D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, bcObst2,Interactor3D::SOLID)); - D3Q27InteractorPtr addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, bcObst2,Interactor3D::SOLID)); - D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, bcObst2,Interactor3D::SOLID)); - - //for shear strees =0 - // D3Q27BoundaryConditionAdapterPtr velBCAdapter2(new D3Q27VelocityBCAdapter ()); - // velBCAdapter2->setSecondaryBcOption(1); - // D3Q27InteractorPtr addWallYminInt = D3Q27InteractorPtr( new D3Q27Interactor(addWallYmin, grid, velBCAdapter2, Interactor3D::SOLID)); - // D3Q27InteractorPtr addWallZminInt = D3Q27InteractorPtr( new D3Q27Interactor(addWallZmin, grid, velBCAdapter2, Interactor3D::SOLID)); - // D3Q27InteractorPtr addWallYmaxInt = D3Q27InteractorPtr( new D3Q27Interactor(addWallYmax, grid, velBCAdapter2, Interactor3D::SOLID)); - // D3Q27InteractorPtr addWallZmaxInt = D3Q27InteractorPtr( new D3Q27Interactor(addWallZmax, grid, velBCAdapter2, Interactor3D::SOLID)); - - - - mu::Parser fct; - //fct.SetExpr("16*U*x2*x3*(H-x2)*(H-x3)/H^4"); - //fct.DefineConst("U", uLB); - //fct.DefineConst("H", H); - - fct.SetExpr("U"); - fct.DefineConst("U", uLB); - - //inflow - D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter (true, false ,false ,fct, 0, D3Q27BCFunction::INFCONST)); - velBCAdapter->setSecondaryBcOption(0); - D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr( new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID)); - - //outflow - D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB)); - D3Q27InteractorPtr outflowInt = D3Q27InteractorPtr( new D3Q27Interactor(geoOutflow, grid, denBCAdapter,Interactor3D::SOLID)); - - for (int i=0;i<numberOfParticles;i++) - { - sd.addInteractor(spherePInt[i] ); - } - //sd.addInteractor(cylinderInt); - // sd.addInteractor(addWallYminInt); - // sd.addInteractor(addWallZminInt); - // sd.addInteractor(addWallYmaxInt); - // sd.addInteractor(addWallZmaxInt); - sd.addInteractor(inflowInt); - sd.addInteractor(outflowInt); -if(myid == 0) UBLOG(logINFO,"delete - start"); - sd.deleteSolidBlocks(); -if(myid == 0) UBLOG(logINFO,"delete - end"); - - grid->accept( metisVisitor ); - - sd.setTransBlocks(); - - ppblocks->update(0); - ppblocks.reset(); - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nod = nob * (blocknx1+gl) * (blocknx2+gl) * (blocknx3+gl); - - double needMemAll = double(nod*(27*sizeof(double) + sizeof(int) + sizeof(float)*4)); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - if(myid == 0) - { - UBLOG(logINFO,"Number of blocks = " << nob); - UBLOG(logINFO,"Number of nodes = " << nod); - UBLOG(logINFO,"Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO,"Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO,"Available memory per process = " << availMem << " bytes"); - } - - //LBMKernel3DPtr kernel(new LBMKernelETD3Q27Cascaded(blocknx1, blocknx2, blocknx3)); - //LBMKernel3DPtr kernel(new LBMKernelETD3Q27BGK(blocknx1, blocknx2, blocknx3, true)); - //option = 0 - ohne param., option = 1 - mit param. - int option = 0; - LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(blocknx1, blocknx2, blocknx3, option)); - // LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB_Geier(blocknx1, blocknx2, blocknx3, option)); - -// LBMKernel3DPtr kernel(new LBMKernelETD3Q27Cascaded(blocknx1, blocknx2, blocknx3, option)); - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem); - grid->accept(kernelVisitor); - - if (refineLevel > 0) - { - D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - //walls - // grid->addAndInitInteractor(addWallYminInt); - // grid->addAndInitInteractor(addWallZminInt); - // grid->addAndInitInteractor(addWallYmaxInt); - // grid->addAndInitInteractor(addWallZmaxInt); - - //obstacle - //grid->addAndInitInteractor(cylinderInt); - for (int i=0;i<numberOfParticles;i++) - { - grid->addAndInitInteractor(spherePInt[i] ); - } - - //inflow - grid->addAndInitInteractor(inflowInt); - - //outflow - grid->addAndInitInteractor(outflowInt); - - //domain decomposition - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - //initialization of distributions - D3Q27ETInitDistributionsBlockVisitor initVisitor(rhoLB); - initVisitor.setVx1(fct); - grid->accept(initVisitor); - - //Postrozess - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname + "/grid/nodes", WbWriterVtkXmlBinary::getInstance(), conv, comm, true)); - if(myid == 0) UBLOG(logINFO,"/grid/nodes"); - ppgeo->update(0); - if(myid == 0) UBLOG(logINFO,"line"<<__LINE__); - ppgeo.reset(); - - if(myid == 0) UBLOG(logINFO,"Preprozess - end"); - } - double outTime = 5000.0; - UbSchedulerPtr visSch(new UbScheduler(outTime)); - visSch->addSchedule(1000, 1000, 10000); - visSch->addSchedule(10000, 10000, 50000); - visSch->addSchedule(1000, 1000, 100000); - - D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname + "/steps/step", WbWriterVtkXmlBinary::getInstance(), conv, comm); - - double fdx = grid->getDeltaX(grid->getFinestInitializedLevel()); - double point1[3] = {0.45, 0.20, 0.205}; - double point2[3] = {0.55, 0.20, 0.205}; - - D3Q27IntegrateValuesHelperPtr h1(new D3Q27IntegrateValuesHelper(grid, comm, - point1[0]-1.0*fdx, point1[1]-1.0*fdx, point1[2]-1.0*fdx, - point1[0], point1[1], point1[2])); - if(myid ==0) GbSystem3D::writeGeoObject(h1->getBoundingBox().get(),pathname + "/geo/iv1", WbWriterVtkXmlBinary::getInstance()); - D3Q27IntegrateValuesHelperPtr h2(new D3Q27IntegrateValuesHelper(grid, comm, - point2[0], point2[1]-1.0*fdx, point2[2]-1.0*fdx, - point2[0]+1.0*fdx, point2[1], point2[2])); - if(myid ==0) GbSystem3D::writeGeoObject(h2->getBoundingBox().get(),pathname + "/geo/iv2", WbWriterVtkXmlBinary::getInstance()); - //D3Q27PressureDifferencePostprocessor rhopp(grid, visSch, pathname + "/results/rho_diff.txt", h1, h2, conv, comm); - D3Q27PressureDifferencePostprocessor rhopp(grid, visSch, pathname + "/results/rho_diff.txt", h1, h2, rhoReal, uReal, uLB, comm); - - - double v = uLB;//4.0*uLB/9.0; - // D3Q27ForcesPostprocessor fp(grid, visSch, pathname + "/results/forces.txt", comm, rhoLB, v, area, D3Q27ForcesPostprocessor::X, D3Q27ForcesPostprocessor::Y, D3Q27ForcesPostprocessor::Z); - // for (int i=0;i<numberOfParticles;i++) - //{ - // fp.addInteractor(spherePInt[i] ); - //} - - UbSchedulerPtr nupsSch(new UbScheduler(10, 10, 40)); - NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm); - - double endTime = 65001.0; - 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[]) -{ - - run(argv[1]); - - return 0; -} - diff --git a/apps/cpu/stick/CMakeLists.txt b/apps/cpu/stick/CMakeLists.txt deleted file mode 100644 index 8a8270faa4222ad583aa07ef2d1cb8e10622ba97..0000000000000000000000000000000000000000 --- a/apps/cpu/stick/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(stick) - -INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(stick BINARY) diff --git a/apps/cpu/stick/stick.cpp b/apps/cpu/stick/stick.cpp deleted file mode 100644 index 8bbc820001c2e5e5b87c268d95bfce4f5323df70..0000000000000000000000000000000000000000 --- a/apps/cpu/stick/stick.cpp +++ /dev/null @@ -1,232 +0,0 @@ -#include <iostream> -#include <string> - -#include <boost/pointer_cast.hpp> - -#include "vfluids.h" - -using namespace std; - - - -void main() -{ - - try - { - string machine = QUOTEME(CAB_MACHINE); - string pathname = "d:/temp/stick"; - int numOfThreads = 4; - double availMem = 10e9; - - CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - double dx = 1; - - const int blocknx1 = 10; - const int blocknx2 = 10; - const int blocknx3 = 10; - - const int gridNx1 = 60; - const int gridNx2 = 1; - const int gridNx3 = 8; - - double L1 = gridNx1*blocknx1; - double L2, L3; - L2 = gridNx2*blocknx1; - L3 = gridNx3*blocknx1; - - LBMReal radius = 1.0*dx; - LBMReal uLB = 0.07; - LBMReal Re = 1000.0; - LBMReal rhoLB = 0.0; - LBMReal nueLB = (uLB*1.0*radius)/Re; - - LBMUnitConverterPtr conv = LBMUnitConverterPtr(new LBMUnitConverter()); - - Grid3DPtr grid(new Grid3D(comm)); - grid->setDeltaX(dx); - grid->setBlockNX(blocknx1, blocknx2, blocknx3); - grid->setPeriodicX1(false); - grid->setPeriodicX2(true); - grid->setPeriodicX3(false); - - const int baseLevel = 0; - const int refineLevel = 0; - - //bounding box - double d_minX1 = 0.0; - double d_minX2 = 0.0; - double d_minX3 = 0.0; - - double d_maxX1 = L1; - double d_maxX2 = L2; - double d_maxX3 = L3; - - double blockLength = blocknx1*dx; - - if(myid ==0) - { - UBLOG(logINFO,"Parameters:"); - UBLOG(logINFO,"uLB = " << uLB ); - UBLOG(logINFO,"rhoLB = " << rhoLB ); - UBLOG(logINFO,"nueLB = " << nueLB ); - UBLOG(logINFO,"Re = " << Re ); - UBLOG(logINFO,"dx = " << dx ); - UBLOG(logINFO,"number of levels = " << refineLevel+1 ); - UBLOG(logINFO,"numOfThreads = " << numOfThreads ); - UBLOG(logINFO,"Preprozess - start"); - } - - GbObject3DPtr gridCube(new GbCuboid3D(d_minX1, d_minX2, d_minX3, d_maxX1, d_maxX2, d_maxX3)); - if(myid ==0) GbSystem3D::writeGeoObject(gridCube.get(),pathname + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - //cylinder - //GbObject3DPtr cylinder(new GbCylinder3D(L1/4.0, -2.0, radius, L1/4.0, L2+2.0, radius, radius)); - //GbSystem3D::writeGeoObject(cylinder.get(),pathname + "/geo/cylinder", WbWriterVtkXmlBinary::getInstance()); - - GbCuboid3DPtr stick (new GbCuboid3D(L1/4.0, -2.0, 0.0, L1/4.0+150.0, L2+2.0, radius*3.0)); - if(myid == 0) GbSystem3D::writeGeoObject(stick.get(), pathname+"/geo/stick", WbWriterVtkXmlASCII::getInstance()); - - //walls - GbCuboid3DPtr addWallZmin (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_minX3)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - - GbCuboid3DPtr addWallZmax (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_maxX3, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance()); - - //inflow - GbCuboid3DPtr geoInflow (new GbCuboid3D(d_minX1-4.0*blockLength, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_minX1, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(geoInflow.get(), pathname+"/geo/geoInflow", WbWriterVtkXmlASCII::getInstance()); - - //outflow - GbCuboid3DPtr geoOutflow (new GbCuboid3D(d_maxX1, d_minX2-4.0*blockLength, d_minX3-4.0*blockLength, d_maxX1+4.0*blockLength, d_maxX2+4.0*blockLength, d_maxX3+4.0*blockLength)); - if(myid == 0) GbSystem3D::writeGeoObject(geoOutflow.get(), pathname+"/geo/geoOutflow", WbWriterVtkXmlASCII::getInstance()); - - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname + "/grid/blocks", WbWriterVtkXmlBinary::getInstance(), comm)); - - - //cylinder - int bbOption = 1; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr noSlip(new D3Q27NoSlipBCAdapter(bbOption)); - D3Q27InteractorPtr cylinderInt = D3Q27InteractorPtr ( new D3Q27Interactor(stick, grid, noSlip,Interactor3D::SOLID)); - - //walls - D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, noSlip,Interactor3D::SOLID)); - D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, noSlip,Interactor3D::SOLID)); - - mu::Parser fct; - fct.SetExpr("U"); - fct.DefineConst("U", uLB); - - //inflow - D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter (true, false ,false ,fct, 0, D3Q27BCFunction::INFCONST)); - velBCAdapter->setSecondaryBcOption(2); - D3Q27InteractorPtr inflowInt = D3Q27InteractorPtr( new D3Q27Interactor(geoInflow, grid, velBCAdapter, Interactor3D::SOLID)); - - //outflow - D3Q27BoundaryConditionAdapterPtr denBCAdapter(new D3Q27DensityBCAdapter(rhoLB)); - 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(addWallZminInt); - intHelper.addInteractor(addWallZmaxInt); - intHelper.addInteractor(inflowInt); - intHelper.addInteractor(outflowInt); - intHelper.selectBlocks(); - - //domain decomposition for threads - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - ppblocks->update(0); - ppblocks.reset(); - - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nueLB, iProcessor); - grid->accept( setConnsVisitor ); - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nod = nob * (blocknx1+gl) * (blocknx2+gl) * (blocknx3+gl); - - double needMemAll = double(nod*(27*sizeof(double) + sizeof(int) + sizeof(float)*4)); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - if(myid == 0) - { - UBLOG(logINFO,"Number of blocks = " << nob); - UBLOG(logINFO,"Number of nodes = " << nod); - UBLOG(logINFO,"Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO,"Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO,"Available memory per process = " << availMem << " bytes"); - } - - LBMKernel3DPtr kernel(new LBMKernelETD3Q27CCLB(blocknx1, blocknx2, blocknx3, LBMKernelETD3Q27CCLB::NORMAL)); - - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nueLB, availMem, needMem); - grid->accept(kernelVisitor); - - intHelper.setBC(); - - //initialization of distributions - D3Q27ETInitDistributionsBlockVisitor initVisitor(nueLB, rhoLB); - initVisitor.setVx1(fct); - grid->accept(initVisitor); - - //Postrozess - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, true)); - ppgeo->update(0); - ppgeo.reset(); - - if(myid == 0) UBLOG(logINFO,"Preprozess - end"); - - UbSchedulerPtr stepSch(new UbScheduler(10000)); - //stepSch->addSchedule(1000, 0, 1000000); - D3Q27MacroscopicQuantitiesPostprocessor pp(grid, stepSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv); - - //InSituVTKPostprocessor isp(grid, stepSch, "d:/Data/insituDemo/metafile.csv", conv); - - UbSchedulerPtr nupsSch(new UbScheduler(10, 30, 100)); - NUPSCounterPostprocessor npr(grid, nupsSch, pathname + "/results/nups.txt", comm); - - - CalculationManagerPtr calculation(new CalculationManager(grid, numOfThreads, 1000000, stepSch)); - - 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; - } - -} - - diff --git a/apps/cpu/teperm/CMakeLists.txt b/apps/cpu/teperm/CMakeLists.txt deleted file mode 100644 index 848ac938ec07d34eb90797de7bdecdcc38728396..0000000000000000000000000000000000000000 --- a/apps/cpu/teperm/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(teperm) - -INCLUDE(${APPS_ROOT}/IncludsList.cmake) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES VirtualFluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(teperm BINARY) diff --git a/apps/cpu/teperm/TE-PA80-110gradiert6mm_1.cfg b/apps/cpu/teperm/TE-PA80-110gradiert6mm_1.cfg deleted file mode 100644 index 988ac261d2b0b2d889ce6707cf946d1686f7c547..0000000000000000000000000000000000000000 --- a/apps/cpu/teperm/TE-PA80-110gradiert6mm_1.cfg +++ /dev/null @@ -1,70 +0,0 @@ -#pathname = /work/i5042202/6mm_dir2_results/TE-PA80-110gradiertII/TE_3-part-1 -#pathGeo = /work/i5042202/data/6mm5parts/TE-PA80-110gradiert_II - -pathname = d:/temp/teperm -pathGeo = d:/Data/teperm - -numOfThreads = 4 -availMem = 6e9 -logToFile = faöse - -#porous media -rawFile = true -#sampleFilename = /part1_345x447x447.raw -sampleFilename = /part10_45x225x225.raw - -#diminsions [voxel] -#pmNX1 = 345 -#pmNX2 = 447 -#pmNX3 = 447 - -pmNX1 = 45 -pmNX2 = 225 -pmNX3 = 225 - - -#threshold -lthreshold = 7874 -uthreshold = 65535 - -#deltas [m] -pmDeltaX1 = 13393e-9 -pmDeltaX2 = 13393e-9 -pmDeltaX3 = 13393e-9 - -yDir = true -zDir = false - -#grid -blocknx = 30 -deltax = 13303.71333e-9 - -spongeLayer=false - -#physic -newPressure = false -dp_LB = 1e-6 -newViscosity = false -nu_LB = 0.01 - -vx1=0 -vx2=0 -vx3=0 - -timeSeriesFile = /timeseries/1 -timeSeriesOutTime = 1000 - -newStart = true -restartStep = 1000 -chunk = 100 - -cpStep = 1000 -cpStepStart = 1000 - -outTimeStep = 1000 -outTimeStart = 1000 - -nupsStep = 100 1000 10000000 - -endTime = 1000 - diff --git a/apps/cpu/teperm/teperm.cpp b/apps/cpu/teperm/teperm.cpp deleted file mode 100644 index 78e57d8ef8200c8b0552d7b2670ca43c973e9182..0000000000000000000000000000000000000000 --- a/apps/cpu/teperm/teperm.cpp +++ /dev/null @@ -1,601 +0,0 @@ -#include <iostream> -#include <string> - -#include <VirtualFluids.h> - - -using namespace std; - -void changeDP() -{ -} -////////////////////////////////////////////////////////////////////////// -void run(string configname) -{ - try - { - vf::basics::ConfigurationFile config; - config.load(configname); - - string pathname = config.getString("pathname"); - string pathGeo = config.getString("pathGeo"); - int numOfThreads = config.getValue<int>("numOfThreads"); - string sampleFilename = config.getString("sampleFilename"); - int pmNX1 = config.getValue<int>("pmNX1"); - int pmNX2 = config.getValue<int>("pmNX2"); - int pmNX3 = config.getValue<int>("pmNX3"); - double lthreshold = config.getValue<double>("lthreshold"); - double uthreshold = config.getValue<double>("uthreshold"); - //double pmL1 = config.getValue<double>("pmL1"); - //double pmL2 = config.getValue<double>("pmL2"); - //double pmL3 = config.getValue<double>("pmL3"); - int blocknx = config.getValue<int>("blocknx"); - //double nx3 = config.getValue<double>("nx3"); - double dp_LB = config.getValue<double>("dp_LB"); - double nu_LB = config.getValue<double>("nu_LB"); - string timeSeriesFile = config.getString("timeSeriesFile"); - double restartStep = config.getValue<double>("restartStep"); - //double restartStepStart = config.getValue<double>("restartStepStart"); - int endTime = config.getValue<int>("endTime"); - double outTimeStep = config.getValue<double>("outTimeStep"); - double outTimeStart = config.getValue<double>("outTimeStart"); - double availMem = config.getValue<double>("availMem"); - bool rawFile = config.getValue<bool>("rawFile"); - double timeSeriesOutTime = config.getValue<double>("timeSeriesOutTime"); - bool logToFile = config.getValue<bool>("logToFile"); - bool spongeLayer = config.getValue<bool>("spongeLayer"); - vector<double> nupsStep = config.getVector<double>("nupsStep"); - double deltax = config.getValue<double>("deltax"); - bool newViscosity = config.getValue<bool>("newViscosity"); - bool newPressure = config.getValue<bool>("newPressure"); - //bool pmDeltas = config.getValue<bool>("pmDeltas"); - double pmDeltaX1 = config.getValue<double>("pmDeltaX1"); - double pmDeltaX2 = config.getValue<double>("pmDeltaX2"); - double pmDeltaX3 = config.getValue<double>("pmDeltaX3"); - double vx1 = config.getValue<double>("vx1"); - double vx2 = config.getValue<double>("vx2"); - double vx3 = config.getValue<double>("vx3"); - bool yDir = config.getValue<bool>("yDir"); - bool zDir = config.getValue<bool>("zDir"); - double cpStep = config.getValue<double>("cpStep"); - double cpStepStart = config.getValue<double>("cpStepStart"); - bool newStart = config.getValue<bool>("newStart"); - int chunk = config.getValue<int>("chunk"); - - - SPtr<vf::parallel::Communicator> comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - if (logToFile) - { -#if defined(__unix__) - if (myid==0) - { - const char* str = pathname.c_str(); - int status = 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()); - } - } - - if (myid==0) UBLOG(logINFO, "Testcase permeability"); - - //string machinename = UbSystem::getMachineName(); - //UBLOG(logINFO, "PID = " << myid << " Hostname: " << machinename); - //UBLOG(logINFO, "PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - //UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - //UBLOG(logINFO, "PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - - int blocknx1 = blocknx; - int blocknx2 = blocknx; - int blocknx3 = blocknx; - - LBMReal rho_LB = 0.0; - double rhoLBinflow = dp_LB*3.0; - - SPtr<LBMUnitConverter> conv = SPtr<LBMUnitConverter>(new LBMUnitConverter()); - - const int baseLevel = 0; - - double coord[6]; - //double deltax; - - SPtr<Grid3D> grid(new Grid3D(comm)); - - SPtr<LBMKernel> kernel = SPtr<LBMKernel>(new IncompressibleCumulantLBMKernel()); - SPtr<BCProcessor> bcProc; - bcProc = SPtr<BCProcessor>(new ThinWallBCProcessor()); - kernel->setBCProcessor(bcProc); - - ////////////////////////////////////////////////////////////////////////// - //restart - SPtr<UbScheduler> rSch(new UbScheduler(cpStep, cpStepStart)); - SPtr<MPIIORestartCoProcessor> restartCoProcessor(new MPIIORestartCoProcessor(grid, rSch, pathname, comm)); - restartCoProcessor->setLBMKernel(kernel); - restartCoProcessor->setBCProcessor(bcProc); - ////////////////////////////////////////////////////////////////////////// - - //BC Adapter - ////////////////////////////////////////////////////////////////////////////// - SPtr<BCAdapter> noSlipBCAdapter(new NoSlipBCAdapter()); - noSlipBCAdapter->setBcAlgorithm(SPtr<BCAlgorithm>(new ThinWallNoSlipBCAlgorithm())); - - SPtr<BCAdapter> denBCAdapterInflow(new DensityBCAdapter(rhoLBinflow)); - denBCAdapterInflow->setBcAlgorithm(SPtr<BCAlgorithm>(new NonEqDensityBCAlgorithm())); - - SPtr<BCAdapter> denBCAdapterOutflow(new DensityBCAdapter(rho_LB)); - denBCAdapterOutflow->setBcAlgorithm(SPtr<BCAlgorithm>(new NonEqDensityBCAlgorithm())); - ////////////////////////////////////////////////////////////////////////////////// - //BS visitor - BoundaryConditionsBlockVisitor bcVisitor; - bcVisitor.addBC(noSlipBCAdapter); - bcVisitor.addBC(denBCAdapterInflow); - bcVisitor.addBC(denBCAdapterOutflow); - - if (newStart) - { - if (myid==0) UBLOG(logINFO, "new start.."); - if (myid==0) UBLOG(logINFO, "preprocess start.."); - - //UBLOG(logINFO, "new start PID = " << myid << " Hostname: " << machinename); - //UBLOG(logINFO, "new start PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - //UBLOG(logINFO, "new start PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - //UBLOG(logINFO, "new start PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - - string samplePathname = pathGeo+sampleFilename; - - double deltaVoxelX1 = pmDeltaX1; - double deltaVoxelX2 = pmDeltaX2; - double deltaVoxelX3 = pmDeltaX3; - - if (myid==0) UBLOG(logINFO, "read voxel matrix: start"); - //////////////////////////////////////////////////////////////////////////////////////////////////////////// - SPtr<GbVoxelMatrix3D> sample1(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold)); - if (rawFile) - { - sample1->readMatrixFromRawFile<unsigned short>(samplePathname, GbVoxelMatrix3D::BigEndian); - } - else - { - sample1->readMatrixFromVtiASCIIFile(samplePathname); - } - sample1->setVoxelMatrixDelta((float)deltaVoxelX1, (float)deltaVoxelX2, (float)deltaVoxelX3); - sample1->setVoxelMatrixMininum(0.0, 0.0, 0.0); - - if (myid==0) UBLOG(logINFO, "sample1: rotate voxel matrix: start"); - if (yDir) - { - sample1->rotate90aroundZ(); - } - else if (zDir) - { - sample1->rotate90aroundY(); - } - if (myid==0) UBLOG(logINFO, "sample1: rotate voxel matrix: end"); - - if (myid==0) sample1->writeToVTKImageDataAppended(pathname+"/geo/sample1"); -/////////////////////////////////////////////////////////////////////////////////////////////////////////// - SPtr<GbVoxelMatrix3D> sample2(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold)); - if (rawFile) - { - sample2->readMatrixFromRawFile<unsigned short>(samplePathname, GbVoxelMatrix3D::BigEndian); - } - else - { - sample2->readMatrixFromVtiASCIIFile(samplePathname); - } - sample2->setVoxelMatrixDelta((float)deltaVoxelX1, (float)deltaVoxelX2, (float)deltaVoxelX3); - sample2->setVoxelMatrixMininum(0.0, sample1->getX2Maximum(), 0.0); - if (myid==0) UBLOG(logINFO, "read voxel matrix: end"); - - if (myid==0) UBLOG(logINFO, "sample2: rotate voxel matrix: start"); - if (yDir) - { - sample2->rotate90aroundZ(); - sample2->setVoxelMatrixMinX2(sample1->getX2Maximum()); - } - else if (zDir) - { - sample2->rotate90aroundY(); - } - - sample2->mirrorY(); - - if (myid==0) UBLOG(logINFO, "sample2: rotate voxel matrix: end"); - - if (myid==0) sample2->writeToVTKImageDataAppended(pathname+"/geo/sample2"); - -//////////////////////////////////////////////////////////////////////////////////////////////////////////// - SPtr<GbVoxelMatrix3D> sample3(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold)); - if (rawFile) - { - sample3->readMatrixFromRawFile<unsigned short>(samplePathname, GbVoxelMatrix3D::BigEndian); - } - else - { - sample3->readMatrixFromVtiASCIIFile(samplePathname); - } - sample3->setVoxelMatrixDelta((float)deltaVoxelX1, (float)deltaVoxelX2, (float)deltaVoxelX3); - sample3->setVoxelMatrixMininum(0.0, 0.0, sample1->getX3Maximum()); - if (myid == 0) UBLOG(logINFO, "read voxel matrix: end"); - - if (myid==0) UBLOG(logINFO, "sample3: rotate voxel matrix: start"); - if (yDir) - { - sample3->rotate90aroundZ(); - } - else if (zDir) - { - sample3->rotate90aroundY(); - } - sample3->mirrorZ(); - if (myid==0) UBLOG(logINFO, "sample3: rotate voxel matrix: end"); - - if (myid==0) sample3->writeToVTKImageDataAppended(pathname+"/geo/sample3"); - - //////////////////////////////////////////////////////////////////////////////////////////////////////////// - SPtr<GbVoxelMatrix3D> sample4(new GbVoxelMatrix3D(pmNX1, pmNX2, pmNX3, 0, lthreshold, uthreshold)); - if (rawFile) - { - sample4->readMatrixFromRawFile<unsigned short>(samplePathname, GbVoxelMatrix3D::BigEndian); - } - else - { - sample4->readMatrixFromVtiASCIIFile(samplePathname); - } - sample4->setVoxelMatrixDelta((float)deltaVoxelX1, (float)deltaVoxelX2, (float)deltaVoxelX3); - sample4->setVoxelMatrixMininum(0.0, sample1->getX1Maximum(), sample1->getX3Maximum()); - if (myid == 0) UBLOG(logINFO, "read voxel matrix: end"); - - if (myid==0) UBLOG(logINFO, "sample4: rotate voxel matrix: start"); - - if (yDir) - { - sample4->rotate90aroundZ(); - sample4->setVoxelMatrixMinX2(sample1->getX2Maximum()); - sample4->setVoxelMatrixMinX3(sample1->getX3Maximum()); - } - else if (zDir) - { - sample4->rotate90aroundY(); - } - sample4->mirrorY(); - sample4->mirrorZ(); - if (myid==0) UBLOG(logINFO, "sample4: rotate voxel matrix: end"); - - if (myid==0) sample4->writeToVTKImageDataAppended(pathname+"/geo/sample4"); - - /////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////// - - double offset1 = sample1->getLengthX1()/10.0; - double offset2 = 2.0*offset1; - //double offset2 = offset1; - //bounding box - double g_minX1 = sample1->getX1Minimum()-offset1; - double g_minX2 = sample1->getX2Minimum()-0.5*deltax; - double g_minX3 = sample1->getX3Minimum()-0.5*deltax; - - double g_maxX1 = sample1->getX1Maximum()+offset2; - double g_maxX2 = sample4->getX2Maximum()-0.5*deltax; - double g_maxX3 = sample4->getX3Maximum()-0.5*deltax; - - if (myid==0) - { - UBLOG(logINFO, "g_minX1="<<g_minX1<<",g_minX2="<<g_minX2<<",g_minX3="<<g_minX3<<",g_maxX1="<<g_maxX1<<",g_maxX2="<<g_maxX2<<",g_maxX3="<<g_maxX3); - } - - double blockLength = (double)blocknx1*deltax; - - grid->setPeriodicX1(false); - grid->setPeriodicX2(true); - grid->setPeriodicX3(true); - grid->setDeltaX(deltax); - grid->setBlockNX(blocknx1, blocknx2, blocknx3); - - 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()); - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - if (myid==0) - { - UBLOG(logINFO, "Parameters:"); - UBLOG(logINFO, "rho_LB = "<<rho_LB); - UBLOG(logINFO, "nu_LB = "<<nu_LB); - UBLOG(logINFO, "dp_LB = "<<dp_LB); - UBLOG(logINFO, "dx = "<<deltax<<" m"); - UBLOG(logINFO, "numOfThreads = "<<numOfThreads); - UBLOG(logINFO, "path = "<<pathname); - UBLOG(logINFO, "Preprozess - start"); - } - - //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()); - - SPtr<WriteBlocksCoProcessor> ppblocks(new WriteBlocksCoProcessor(grid, SPtr<UbScheduler>(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - - //PM interactor - SPtr<D3Q27Interactor> sample1Int(new D3Q27Interactor(sample1, grid, noSlipBCAdapter, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> sample2Int(new D3Q27Interactor(sample2, grid, noSlipBCAdapter, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> sample3Int(new D3Q27Interactor(sample3, grid, noSlipBCAdapter, Interactor3D::SOLID)); - SPtr<D3Q27Interactor> sample4Int(new D3Q27Interactor(sample4, grid, noSlipBCAdapter, Interactor3D::SOLID)); - //inflow - SPtr<D3Q27Interactor> inflowInt(new D3Q27Interactor(geoInflow, grid, denBCAdapterInflow, Interactor3D::SOLID)); - //outflow - SPtr<D3Q27Interactor> outflowInt(new D3Q27Interactor(geoOutflow, grid, denBCAdapterOutflow, Interactor3D::SOLID)); - - //////////////////////////////////////////// - //METIS - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::BSW, MetisPartitioner::RECURSIVE)); - //////////////////////////////////////////// - - /////delete solid blocks - if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - intHelper.addInteractor(inflowInt); - intHelper.addInteractor(outflowInt); - intHelper.addInteractor(sample1Int); - intHelper.addInteractor(sample2Int); - intHelper.addInteractor(sample3Int); - intHelper.addInteractor(sample4Int); - intHelper.selectBlocks(); - if (myid==0) UBLOG(logINFO, "deleteSolidBlocks - end"); - ////////////////////////////////////// - - //set connectors - InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator()); - SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor); - grid->accept(setConnsVisitor); - - //domain decomposition for threads - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - ppblocks->process(0); - ppblocks.reset(); - - - unsigned long nob = grid->getNumberOfBlocks(); - int gl = 3; - unsigned long nodb = (blocknx1)* (blocknx2)* (blocknx3); - unsigned long nod = nob * (blocknx1)* (blocknx2)* (blocknx3); - unsigned long nodg = nob * (blocknx1+gl) * (blocknx2+gl) * (blocknx3+gl); - double needMemAll = double(nodg*(27*sizeof(double)+sizeof(int)+sizeof(float)*4)); - double needMem = needMemAll/double(comm->getNumberOfProcesses()); - - if (myid==0) - { - UBLOG(logINFO, "Number of blocks = "<<nob); - UBLOG(logINFO, "Number of nodes = "<<nod); - 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*nodb); - } - UBLOG(logINFO, "Necessary memory = "<<needMemAll<<" bytes"); - UBLOG(logINFO, "Necessary memory per process = "<<needMem<<" bytes"); - UBLOG(logINFO, "Available memory per process = "<<availMem<<" bytes"); - } - - kernel->setBCProcessor(bcProc); - - SetKernelBlockVisitor kernelVisitor(kernel, nu_LB, availMem, needMem); - grid->accept(kernelVisitor); - - //BC - intHelper.setBC(); - - //BS visitor - grid->accept(bcVisitor); - - //Press*1.6e8+(14.76-coordsX)/3.5*5000 - //initialization of distributions - mu::Parser fct; - fct.SetExpr("(x1max-x1)/l*dp*3.0"); - fct.DefineConst("dp", dp_LB); - fct.DefineConst("x1max", g_maxX1); - fct.DefineConst("l", g_maxX1-g_minX1); - - InitDistributionsBlockVisitor initVisitor; - initVisitor.setRho(fct); - grid->accept(initVisitor); - - //Postrozess - SPtr<UbScheduler> geoSch(new UbScheduler(1)); - SPtr<WriteBoundaryConditionsCoProcessor> ppgeo( - new WriteBoundaryConditionsCoProcessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - ppgeo->process(0); - ppgeo.reset(); - - coord[0] = sample1->getX1Minimum(); - coord[1] = sample1->getX2Minimum(); - coord[2] = sample1->getX3Minimum(); - coord[3] = sample4->getX1Maximum(); - coord[4] = sample4->getX2Maximum(); - coord[5] = sample4->getX3Maximum(); - - //////////////////////////////////////////////////////// - UbFileOutputASCII outf(pathname+"/checkpoints/coord.txt"); - outf.writeDouble(deltax); - outf.writeDouble(coord[0]); - outf.writeDouble(coord[1]); - outf.writeDouble(coord[2]); - outf.writeDouble(coord[3]); - outf.writeDouble(coord[4]); - outf.writeDouble(coord[5]); - outf.writeDouble(g_minX1); - outf.writeDouble(g_maxX1); - outf.writeDouble(availMem); - outf.writeDouble(needMem); - //////////////////////////////////////////////////////// - - grid->addInteractor(inflowInt); - - if (myid==0) UBLOG(logINFO, "Preprozess - end"); - } - else - { - //////////////////////////////////////////////////////// - UbFileInputASCII inf(pathname+"/checkpoints/coord.txt"); - deltax = inf.readDouble(); - coord[0] = inf.readDouble(); - coord[1] = inf.readDouble(); - coord[2] = inf.readDouble(); - coord[3] = inf.readDouble(); - coord[4] = inf.readDouble(); - coord[5] = inf.readDouble(); - double g_minX1 = inf.readDouble(); - double g_maxX1 = inf.readDouble(); - double availMem = inf.readDouble(); - double needMem = inf.readDouble(); - //////////////////////////////////////////////////////// - - restartCoProcessor->restart((int)restartStep); - grid->setTimeStep(restartStep); - - - //new nu - //if (newViscosity) - //{ - // ViscosityBlockVisitor nuVisitor(nu_LB); - // grid->accept(nuVisitor); - //} - - ////new dp - //if (newPressure) - //{ - // Grid3D::Interactor3DSet interactors = grid->getInteractors(); - // interactors[0]->setGrid3D(grid); - // boost::dynamic_pointer_cast<D3Q27Interactor>(interactors[0])->deleteBCAdapter(); - // BCAdapterPtr denBCAdapterFront(new DensityBCAdapter(rhoLBinflow)); - // denBCAdapterFront->setBcAlgorithm(BCAlgorithmPtr(new EqDensityBCAlgorithm())); - // boost::dynamic_pointer_cast<D3Q27Interactor>(interactors[0])->addBCAdapter(denBCAdapterFront); - // interactors[0]->updateInteractor(); - //} - - if (myid==0) - { - UBLOG(logINFO, "Parameters:"); UBLOG(logINFO, "PID = "<<myid<<" Total Physical Memory (RAM): "<<Utilities::getTotalPhysMem()); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used: "<<Utilities::getPhysMemUsed()); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()); - UBLOG(logINFO, "rho_LB = "<<rho_LB); - UBLOG(logINFO, "nu_LB = "<<nu_LB); - UBLOG(logINFO, "dp_LB = "<<dp_LB); - UBLOG(logINFO, "dx = "<<deltax<<" m"); - } - - //set connectors - InterpolationProcessorPtr iProcessor(new IncompressibleOffsetInterpolator()); - SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nu_LB, iProcessor); - grid->accept(setConnsVisitor); - - //domain decomposition for threads - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - - //BS visitor - grid->accept(bcVisitor); - - if (myid==0) UBLOG(logINFO, "Restart - end"); - } - - - - SPtr<UbScheduler> nupsSch(new UbScheduler(nupsStep[0], nupsStep[1], nupsStep[2])); - //nupsSch->addSchedule(nupsStep[0], nupsStep[1], nupsStep[2]); - SPtr<NUPSCounterCoProcessor> npr(new NUPSCounterCoProcessor(grid, nupsSch, numOfThreads, comm)); - - SPtr<UbScheduler> stepSch(new UbScheduler(outTimeStep, outTimeStart)); - - SPtr<WriteMacroscopicQuantitiesCoProcessor> pp(new WriteMacroscopicQuantitiesCoProcessor(grid, stepSch, pathname, WbWriterVtkXmlBinary::getInstance(), conv, comm)); - - deltax = grid->getDeltaX(baseLevel); - double dxd2 = deltax/2.0; - - SPtr<IntegrateValuesHelper> ih1(new IntegrateValuesHelper(grid, comm, coord[0]-dxd2*10.0, coord[1]-dxd2, coord[2]-dxd2, - coord[0]-dxd2*10.0-2.0*dxd2, coord[4]+dxd2, coord[5]+dxd2)); - - SPtr<IntegrateValuesHelper> ih2(new IntegrateValuesHelper(grid, comm, coord[0], coord[1], coord[2], coord[3], coord[4], coord[5])); - - SPtr<IntegrateValuesHelper> ih3(new IntegrateValuesHelper(grid, comm, coord[3]+dxd2*10.0, coord[1]-dxd2, coord[2]-dxd2, - coord[3]+dxd2*10.0+2.0*dxd2, coord[4]+dxd2, coord[5]+dxd2)); - - if (myid==0) GbSystem3D::writeGeoObject(ih1->getBoundingBox().get(), pathname+"/geo/ih1", WbWriterVtkXmlBinary::getInstance()); - if (myid==0) GbSystem3D::writeGeoObject(ih2->getBoundingBox().get(), pathname+"/geo/ih2", WbWriterVtkXmlBinary::getInstance()); - if (myid==0) GbSystem3D::writeGeoObject(ih3->getBoundingBox().get(), pathname+"/geo/ih3", WbWriterVtkXmlBinary::getInstance()); - - double factorp = 1; // dp_real / dp_LB; - double factorv = 1;// dx / dt; - SPtr<UbScheduler> stepMV(new UbScheduler(timeSeriesOutTime)); - - SPtr<TimeseriesCoProcessor> tsp1(new TimeseriesCoProcessor(grid, stepMV, ih1, pathname+timeSeriesFile+"_1", comm)); - SPtr<TimeseriesCoProcessor> tsp2(new TimeseriesCoProcessor(grid, stepMV, ih2, pathname+timeSeriesFile+"_2", comm)); - SPtr<TimeseriesCoProcessor> tsp3(new TimeseriesCoProcessor(grid, stepMV, ih3, pathname+timeSeriesFile+"_3", comm)); - - if (myid==0) - { - UBLOG(logINFO, "PID = "<<myid<<" Total Physical Memory (RAM): "<<Utilities::getTotalPhysMem()); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used: "<<Utilities::getPhysMemUsed()); - UBLOG(logINFO, "PID = "<<myid<<" Physical Memory currently used by current process: "<<Utilities::getPhysMemUsedByMe()); - } - - omp_set_num_threads(numOfThreads); - SPtr<Calculator> calculator(new BasicCalculator(grid, stepSch, endTime)); - calculator->addCoProcessor(npr); - calculator->addCoProcessor(restartCoProcessor); - calculator->addCoProcessor(pp); - calculator->addCoProcessor(tsp1); - calculator->addCoProcessor(tsp2); - calculator->addCoProcessor(tsp3); - if (myid==0) UBLOG(logINFO, "Simulation-start"); - calculator->calculate(); - if (myid==0) UBLOG(logINFO, "Simulation-end"); - } - catch (exception& e) - { - cerr<<e.what()<<endl<<flush; - } - catch (string& s) - { - cerr<<s<<endl; - } - catch (...) - { - cerr<<"unknown exception"<<endl; - } - -} -////////////////////////////////////////////////////////////////////////// -int main(int argc, char* argv[]) -{ - - if (argv!=NULL) - { - if (argv[1]!=NULL) - { - run(string(argv[1])); - } - else - { - cout<<"Configuration file is missing!"<<endl; - } - } - - return 0; -} diff --git a/apps/cpu/town/CMakeLists.txt b/apps/cpu/town/CMakeLists.txt deleted file mode 100644 index af95da2b793379871b33d6f7aefcb9fd2c08663c..0000000000000000000000000000000000000000 --- a/apps/cpu/town/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(town) - -INCLUDE(${SOURCE_ROOT}/lib/IncludsList.txt) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES vfluids) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(town BINARY) diff --git a/apps/cpu/town/town.cpp b/apps/cpu/town/town.cpp deleted file mode 100644 index 7fcb83b314188d93a3778d06b439c5ff8e384d25..0000000000000000000000000000000000000000 --- a/apps/cpu/town/town.cpp +++ /dev/null @@ -1,464 +0,0 @@ -#include <iostream> -#include <string> -#include <math.h> - -#include <vfluids.h> - -using namespace std; - -void run(const char *cstr1, const char *cstr2) -{ - try - { - string pathname; - string pathGeo; - string pathLog; - int numOfThreads = 1; - bool logfile = false; - stringstream logFilename; - double availMem = 0; - - CommunicatorPtr comm = vf::parallel::MPICommunicator::getInstance(); - int myid = comm->getProcessID(); - - string machine = string(cstr1); - - if(machine == "my") - { - //Sleep(30000); - pathname = "d:/temp/town"; - pathGeo = "d:/Data/town"; - pathLog = "d:/temp/town"; - numOfThreads = 1; - logfile = false; - availMem = 15.0e9; - } - else if(machine == "Ludwig") - { - pathname = "/work/koskuche/town"; - pathGeo = "/home/koskuche/data/town"; - pathLog = pathname; - numOfThreads = 8; - availMem = 12.0e9;///8*numOfThreads; - logfile = true; - } - else if(machine == "HLRS") - { - pathname = "/univ_1/ws1/ws/xrmkuchr-plate3-0"; - pathGeo = "/zhome/academic/HLRS/xrm/xrmkuchr/data/plate"; - pathLog = "/zhome/academic/HLRS/xrm/xrmkuchr/work/plate"; - numOfThreads = 16; - availMem = 2.0e9; - logfile = true; - } - else if(machine == "HLRN") - { - pathname = "/gfs1/work/niivfcpu/scratch/plateEx"; - pathGeo = "/gfs1/work/niivfcpu/data/plate"; - pathLog = pathname; - numOfThreads = 24; - availMem = 64.0e9/24.0*numOfThreads; - logfile = true; - } - else throw UbException(UB_EXARGS, "unknown CAB_MACHINE"); - -#if defined(__unix__) - if (myid==0) - { - const char* str = pathLog.c_str(); - int status=mkdir(str, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); - } -#endif - - if(myid == 0 && logfile) - { - //UbLog::reportingLevel() = logDEBUG5; - logFilename << pathLog + "/logfile"+UbSystem::toString(UbSystem::getTimeStamp())+"_"+UbSystem::toString(myid)+".txt"; - UbLog::output_policy::setStream(logFilename.str()); - } - - if(myid==0) UBLOG(logINFO,"Testcase town"); - - //string townFilename = pathGeo + "/Manhattan.stl"; - string townFilename = pathGeo + "/town.stl"; - - - ///////////////Knotenabmessungen: - int blocknx[3], nx[3]; - blocknx[0] = 8; - blocknx[1] = 8; - blocknx[2] = 8; - - nx[0] = 12; - nx[1] = 12; - nx[2] = 3; - - int baseLevel = 0; - int refineLevel = 2; - - LBMUnitConverterPtr unitConverter = LBMUnitConverterPtr(new LBMUnitConverter()); - - ////////////////////////////////////////////////////////////////////////// - //physik - ////////////////////////////////////////////////////////////////////////// - LBMReal uLB = 0.05; - LBMReal rhoLB = 0.0; - LBMReal nuLB = 1e-5; - - Grid3DPtr grid(new Grid3D(comm)); - - ////////////////////////////////////////////////////////////////////////// - //restart - UbSchedulerPtr rSch(new UbScheduler(1000,1000,10000000)); - RestartPostprocessor rp(grid, rSch, comm, pathname, RestartPostprocessor::BINARY); - ////////////////////////////////////////////////////////////////////////// - - if (grid->getTimeStep() == 0) - { - - if(myid==0) UBLOG(logINFO,"Neustart.."); - - ////////////////////////////////////////////////////////////////////////// - //town - GbTriFaceMesh3DPtr town(GbTriFaceMesh3DCreator::getInstance()->readMeshFromSTLFile(townFilename, "Netz")); - if(myid == 0) GbSystem3D::writeGeoObject( town.get(), pathname+"/geo/town", WbWriterVtkXmlBinary::getInstance() ); - ////////////////////////////////////////////////////////////////////////// - - //double cdx = 0.8; - double cdx = town->getX3Maximum() / (double)(nx[2] * blocknx[2]); - double fdx = cdx/double(1<<refineLevel); - - double blockLengthx = blocknx[0]*cdx; //geowerte - - double geoLength[] = { nx[0] * blockLengthx, nx[1] * blockLengthx, nx[2] * blockLengthx }; - - double originX1 = town->getX1Minimum(); - double originX2 = town->getX2Minimum(); - double originX3 = town->getX3Minimum(); - - - bool periodicx1 = true; - bool periodicx2 = true; - bool periodicx3 = false; - - //bounding box - double g_minX1 = originX1-3.0*blockLengthx; - double g_minX2 = originX2-3.0*blockLengthx; - double g_minX3 = originX3; - - double g_maxX1 = originX1 + geoLength[0]+3.0*blockLengthx; - double g_maxX2 = originX2 + geoLength[1]+1.0*blockLengthx; - double g_maxX3 = originX3 + geoLength[2]+2.0*blockLengthx; - - //double g_maxX1 = town->getX1Maximum()+blockLengthx; - //double g_maxX2 = town->getX2Maximum()+2.0*blockLengthx; - //double g_maxX3 = town->getX3Maximum()+2.0*blockLengthx; - - - //set grid - grid->setDeltaX(cdx); - grid->setBlockNX(blocknx[0], blocknx[1], blocknx[2]); - grid->setPeriodicX1(periodicx1); - grid->setPeriodicX2(periodicx2); - grid->setPeriodicX3(periodicx3); - - 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", WbWriterVtkXmlASCII::getInstance()); - - GenBlocksGridVisitor genBlocks(gridCube); - grid->accept(genBlocks); - - - ////////////////////////////////////////////////////////////////////////// - if(myid == 0) - { - UBLOG(logINFO, "*****************************************"); - UBLOG(logINFO, "* Parameters *"); - //UBLOG(logINFO, "* Re ="<<Re); - UBLOG(logINFO, "* nuLB ="<<nuLB); - UBLOG(logINFO, "* uLB ="<<uLB); - UBLOG(logINFO, "* cdx ="<<cdx); - UBLOG(logINFO, "* fdx ="<<fdx); - UBLOG(logINFO, "* blocknx1/2/3 ="<<blocknx[0]<<"/"<<blocknx[1]<<"/"<<blocknx[2]); - UBLOG(logINFO, "* x1Periodic ="<<periodicx1); - UBLOG(logINFO, "* x2Periodic ="<<periodicx2); - UBLOG(logINFO, "* x3Periodic ="<<periodicx3); - UBLOG(logINFO, "* number of levels ="<<refineLevel+1); - UBLOG(logINFO, "* path ="<<pathname); - - UBLOG(logINFO, "*****************************************"); - UBLOG(logINFO, "* number of threads ="<<numOfThreads); - UBLOG(logINFO, "* number of processes ="<<comm->getNumberOfProcesses()); - UBLOG(logINFO, "*****************************************"); - UBLOG(logINFO, "*****************************************"); - } - ////////////////////////////////////////////////////////////////////////// - - - ////////////////////////////////////////////////////////////////////////// - //refinement - - ///////////////////////////////////////////////// - ///interactor - int bbOption1 = 1; //0=simple Bounce Back, 1=quadr. BB - D3Q27BoundaryConditionAdapterPtr bcNoSlip(new D3Q27NoSlipBCAdapter(bbOption1)); - D3Q27TriFaceMeshInteractorPtr triTownInteractor(new D3Q27TriFaceMeshInteractor(town, grid, bcNoSlip, Interactor3D::SOLID)); - - GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLengthx, g_minX2-blockLengthx, g_maxX3, g_maxX1+blockLengthx, g_maxX2+blockLengthx, g_maxX3+blockLengthx)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance()); - D3Q27InteractorPtr velBCInteractor(new D3Q27Interactor(addWallZmax, grid, Interactor3D::SOLID)); - - double raiseVelSteps = 0; - vector<D3Q27BCFunction> velcX2BCs, dummy; - - mu::Parser inflowProfile; - inflowProfile.SetExpr("uLB"); - inflowProfile.DefineConst("uLB", uLB); - velcX2BCs.push_back(D3Q27BCFunction(inflowProfile, raiseVelSteps, D3Q27BCFunction::INFCONST)); - - D3Q27BoundaryConditionAdapterPtr velBCAdapter(new D3Q27VelocityBCAdapter(dummy, velcX2BCs, dummy)); - velBCInteractor->addBCAdapter(velBCAdapter); - - GbCuboid3DPtr addWallZmin(new GbCuboid3D(g_minX1-blockLengthx, g_minX2-blockLengthx, g_minX3-blockLengthx, g_maxX1+blockLengthx, g_maxX2+blockLengthx, g_minX3)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallZmin.get(), pathname+"/geo/addWallZmin", WbWriterVtkXmlASCII::getInstance()); - D3Q27InteractorPtr addWallZminInt(new D3Q27Interactor(addWallZmin, grid, bcNoSlip, Interactor3D::SOLID)); - - //GbCuboid3DPtr addWallZmax(new GbCuboid3D(g_minX1-blockLengthx, g_minX2-blockLengthx, g_maxX3, g_maxX1+blockLengthx, g_maxX2+blockLengthx, g_maxX3+blockLengthx)); - //if (myid == 0) GbSystem3D::writeGeoObject(addWallZmax.get(), pathname+"/geo/addWallZmax", WbWriterVtkXmlASCII::getInstance()); - //D3Q27InteractorPtr addWallZmaxInt(new D3Q27Interactor(addWallZmax, grid, bcNoSlip, Interactor3D::SOLID)); - - GbCuboid3DPtr addWallYmin(new GbCuboid3D(g_minX1-blockLengthx, g_minX2-blockLengthx, g_minX3-blockLengthx, g_maxX1+blockLengthx, g_minX2, g_maxX3+blockLengthx)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallYmin.get(), pathname+"/geo/addWallYmin", WbWriterVtkXmlASCII::getInstance()); - D3Q27InteractorPtr addWallYminInt(new D3Q27Interactor(addWallYmin, grid, bcNoSlip, Interactor3D::SOLID)); - - GbCuboid3DPtr addWallYmax(new GbCuboid3D(g_minX1-blockLengthx, g_minX2-blockLengthx, g_maxX3, g_maxX1+blockLengthx, g_maxX2+blockLengthx, g_maxX3+blockLengthx)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallYmax.get(), pathname+"/geo/addWallYmax", WbWriterVtkXmlASCII::getInstance()); - D3Q27InteractorPtr addWallYmaxInt(new D3Q27Interactor(addWallYmax, grid, bcNoSlip, Interactor3D::SOLID)); - - GbCuboid3DPtr addWallXmin(new GbCuboid3D(g_minX1-blockLengthx, g_minX2-blockLengthx, g_minX3-blockLengthx, g_minX1, g_maxX2+blockLengthx, g_maxX3+blockLengthx)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallXmin.get(), pathname+"/geo/addWallXmin", WbWriterVtkXmlASCII::getInstance()); - D3Q27InteractorPtr addWallXminInt(new D3Q27Interactor(addWallXmin, grid, bcNoSlip, Interactor3D::SOLID)); - - GbCuboid3DPtr addWallXmax(new GbCuboid3D(g_maxX1, g_minX2-blockLengthx, g_minX3-blockLengthx, g_maxX1+blockLengthx, g_maxX2+blockLengthx, g_maxX3+blockLengthx)); - if (myid == 0) GbSystem3D::writeGeoObject(addWallXmax.get(), pathname+"/geo/addWallXmax", WbWriterVtkXmlASCII::getInstance()); - D3Q27InteractorPtr addWallXmaxInt(new D3Q27Interactor(addWallXmax, grid, bcNoSlip, Interactor3D::SOLID)); - - GbCuboid3DPtr refineTownBox(new GbCuboid3D(town->getX1Minimum(), town->getX2Minimum(), town->getX3Minimum(), town->getX1Maximum(), town->getX2Maximum(), town->getX3Maximum())); - if (myid == 0) GbSystem3D::writeGeoObject(refineTownBox.get(), pathname + "/geo/refineTownBox", WbWriterVtkXmlASCII::getInstance()); - - if (refineLevel > 0) - { - if(myid == 0) UBLOG(logINFO,"Refinement - start"); - //RefineAroundGbObjectHelper refineHelper(grid, refineLevel, boost::dynamic_pointer_cast<D3Q27TriFaceMeshInteractor>(triTownInteractor), 0.0, 3.0, comm); - RefineCrossAndInsideGbObjectHelper refineHelper(grid, refineLevel); - //refineHelper.addGbObject(refineTownBox, refineLevel); - refineHelper.addGbObject(town, refineLevel); - refineHelper.refine(); - if(myid == 0) UBLOG(logINFO,"Refinement - end"); - } - - //Grid3D::BlockIDMap bmap = grid->getBlockIDs(); - //bmap.clear(); - //(grid->getBlockIDs()).clear(); - //grid->deleteBlockIDs(); - - //RenumberBlockVisitor renumber; - //grid->accept(renumber); - - - //////////////////////////////////////////// - //METIS - Grid3DVisitorPtr metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, D3Q27System::B)); - - //////////////////////////////////////////// - /////delete solid blocks - if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - start"); - InteractorsHelper intHelper(grid, metisVisitor); - //intHelper.addInteractor(triTownInteractor); - intHelper.addInteractor(velBCInteractor); - intHelper.addInteractor(addWallZminInt); - //intHelper.addInteractor(addWallZmaxInt); - //intHelper.addInteractor(addWallYminInt); - //intHelper.addInteractor(addWallYmaxInt); - //intHelper.addInteractor(addWallXminInt); - //intHelper.addInteractor(addWallXmaxInt); - intHelper.selectBlocks(); - if(myid == 0) UBLOG(logINFO,"deleteSolidBlocks - end"); - ////////////////////////////////////// - - //grid->accept(renumber); - - //if (myid == 0) - { - UBLOG(logINFO, "Write blocks - start"); - BlocksPostprocessorPtr ppblocks(new BlocksPostprocessor(grid, UbSchedulerPtr(new UbScheduler(1)), pathname, WbWriterVtkXmlBinary::getInstance(), comm)); - ppblocks->update(0); - UBLOG(logINFO, "Write blocks - end"); - } - - - - - //domain decomposition for threads - if(numOfThreads > 1) - { - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - } - - - unsigned long nob = grid->getNumberOfBlocks(); - unsigned long nod = nob * blocknx[0]*blocknx[1]*blocknx[2]; - unsigned long nod_real = nob * (blocknx[0]+3)*(blocknx[1]+3)*(blocknx[2]+3); - unsigned long nodb = (blocknx[0]) * (blocknx[1]) * (blocknx[2]); - - double needMemAll = double(nod_real*(27*sizeof(double) + sizeof(int))); - double needMem = needMemAll / double(comm->getNumberOfProcesses()); - - double nup = 0; - - if(myid == 0) - { - UBLOG(logINFO,"Number of blocks = " << nob); - UBLOG(logINFO,"Number of nodes = " << nod); - 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*nodb); - nup += nobl*nodb*double(1<<level); - } - UBLOG(logINFO,"Hypothetically time for calculation step for 120 nodes = " << nup/6.0e5/(120*8) << " s"); - UBLOG(logINFO,"Necessary memory = " << needMemAll << " bytes"); - UBLOG(logINFO,"Necessary memory per process = " << needMem << " bytes"); - UBLOG(logINFO,"Available memory per process = " << availMem << " bytes"); - UBLOG(logINFO,"Available memory per node/8.0 = " << (availMem/8.0) << " bytes"); - } - ////////////////////////////////////////// - //set connectors - if(myid == 0) UBLOG(logINFO,"set connectors - start"); - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - grid->accept( setConnsVisitor ); - if(myid == 0) UBLOG(logINFO,"set connectors - end"); - - //////////////////////////// - LBMKernel3DPtr kernel; - kernel = LBMKernel3DPtr(new LBMKernelETD3Q27CCLB(blocknx[0], blocknx[1], blocknx[2], LBMKernelETD3Q27CCLB::NORMAL)); - - //mu::Parser fctForcingX2; - //fctForcingX2.SetExpr("Fx2*dx"); - //fctForcingX2.DefineConst("Fx2", 5e-6); - - //kernel->setForcingX2(fctForcingX2); - //kernel->setWithForcing(true); - - BCProcessorPtr bcProc(new D3Q27ETBCProcessor()); - //BCProcessorPtr bcProc(new D3Q27ETForThinWallBCProcessor()); - kernel->setBCProcessor(bcProc); - SetKernelBlockVisitor kernelVisitor(kernel, nuLB, availMem, needMem); - grid->accept(kernelVisitor); - ////////////////////////////////// - //undef nodes - if (refineLevel > 0) - { - D3Q27SetUndefinedNodesBlockVisitor undefNodesVisitor; - grid->accept(undefNodesVisitor); - } - - - intHelper.setBC(); - - //initialization of decompositions - D3Q27ETInitDistributionsBlockVisitor initVisitor( nuLB,rhoLB); - initVisitor.setVx2(uLB); - grid->accept(initVisitor); - - //Postprozess - UbSchedulerPtr geoSch(new UbScheduler(1)); - D3Q27MacroscopicQuantitiesPostprocessorPtr ppgeo( - new D3Q27MacroscopicQuantitiesPostprocessor(grid, geoSch, pathname, WbWriterVtkXmlBinary::getInstance(), - unitConverter, true)); - ppgeo->update(0); - ppgeo.reset(); - geoSch.reset(); - - if(myid == 0) UBLOG(logINFO,"Preprozess - end"); - } - else - { - //domain decomposition for threads - if(numOfThreads > 1) - { - PQueuePartitioningGridVisitor pqPartVisitor(numOfThreads); - grid->accept(pqPartVisitor); - } - //set connectors - D3Q27InterpolationProcessorPtr iProcessor(new D3Q27IncompressibleOffsetInterpolationProcessor()); - D3Q27SetConnectorsBlockVisitor setConnsVisitor(comm, true, D3Q27System::ENDDIR, nuLB, iProcessor); - grid->accept( setConnsVisitor ); - - if(myid == 0) UBLOG(logINFO,"Restart - end"); - } - UbSchedulerPtr visSch(new UbScheduler()); - visSch->addSchedule(1,0,3); - //visSch->addSchedule(100,100,1000); - //visSch->addSchedule(1000,1000,5000); - //visSch->addSchedule(5000,5000,100000); - //visSch->addSchedule(100000,100000,10000000); - - visSch->addSchedule(1000,1000,10000000); - - D3Q27MacroscopicQuantitiesPostprocessor pp(grid, visSch, pathname, WbWriterVtkXmlBinary::getInstance(), unitConverter); - - UbSchedulerPtr nupsSch(new UbScheduler(10, 10, 30)); - nupsSch->addSchedule(500,500,1e6); - NUPSCounterPostprocessor npr(grid, nupsSch, numOfThreads, comm); - - //UbSchedulerPtr emSch(new UbScheduler(100)); - //EmergencyExitPostprocessor empr(grid, emSch, pathname, RestartPostprocessorPtr(&rp), comm); - - if(myid == 0) - { - UBLOG(logINFO,"PID = " << myid << " Total Physical Memory (RAM): " << Utilities::getTotalPhysMem()); - UBLOG(logINFO,"PID = " << myid << " Physical Memory currently used: " << Utilities::getPhysMemUsed()); - UBLOG(logINFO,"PID = " << myid << " Physical Memory currently used by current process: " << Utilities::getPhysMemUsedByMe()); - } - - string lastStep = "1000000";// string(cstr2); - double endTime = UbSystem::stringTo<double>(lastStep); - 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[]) -{ - if (argc == 1) - { - cout<<"Command line argument isn't specified!"<<endl; - cout<<"plate2 <machine name>"<<endl; - return 1; - } - run(argv[1], argv[2]); - - return 0; -} - diff --git a/apps/cpu/vfscript/CMakeLists.txt b/apps/cpu/vfscript/CMakeLists.txt deleted file mode 100644 index 264a306a98ca5a36bb76f4a907e9664fe9aa70ef..0000000000000000000000000000000000000000 --- a/apps/cpu/vfscript/CMakeLists.txt +++ /dev/null @@ -1,29 +0,0 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) - -######################################################## -## C++ PROJECT ### -######################################################## -PROJECT(vfscript) - -INCLUDE(${SOURCE_ROOT}/core/IncludsList.txt) - -################################################################# -### LOCAL FILES ### -################################################################# -FILE(GLOB SPECIFIC_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.h - ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/*.hpp ) - -SET(ALL_SOURCES ${ALL_SOURCES} ${SPECIFIC_FILES}) -SOURCE_GROUP(src FILES ${SPECIFIC_FILES}) - -SET(CAB_ADDITIONAL_LINK_LIBRARIES core) - -#YAML support -SET(LINK_LIBRARY optimized ${YAML_RELEASE_LIBRARY} debug ${YAML_DEBUG_LIBRARY}) -SET(CAB_ADDITIONAL_LINK_LIBRARIES ${CAB_ADDITIONAL_LINK_LIBRARIES} ${LINK_LIBRARY}) - -################################################################# -### CREATE PROJECT ### -################################################################# -CREATE_CAB_PROJECT(vfscript BINARY) diff --git a/apps/cpu/vfscript/input.json b/apps/cpu/vfscript/input.json deleted file mode 100644 index 0b4c9c5bd612a8c2e33c6711dec257f4c8afe21c..0000000000000000000000000000000000000000 --- a/apps/cpu/vfscript/input.json +++ /dev/null @@ -1,35 +0,0 @@ -{"Simulation": { - "GeoObjectList": - ["GeoObject" : { - "ID": "channel", - "GeoType": "GbCuboid3D", - "Point1": [0.0, 0.0, 0.0], - "Point2": [5.0, 5.0, 5.0], - "Properties": { - "Physics": { - "Rho": 1.0, - "Vx1": 0.001 - }, - "Numerical":{ - "BC": { - "Type": "NoSlip", - "State": "Fluid", - "SecondaryBcOptions": "SimpleBounceBack" - } - } - } - "GeoObject" : { - "ID": "sphere", - "GeoType": "GbSphere3D", - "Center": [2.5, 2.5, 2.5], - "Radius": 1.5, - "Properties": { - "Numerical":{ - "BC": { - "Type": "NoSlip", - "State": "Solid", - "SecondaryBcOptions": "SimpleBounceBack" - } - } - }] -}} \ No newline at end of file diff --git a/apps/cpu/vfscript/sphere.yaml b/apps/cpu/vfscript/sphere.yaml deleted file mode 100644 index 5a2d91a284128f8f70bc2c0c636c2a0847f4f183..0000000000000000000000000000000000000000 --- a/apps/cpu/vfscript/sphere.yaml +++ /dev/null @@ -1,37 +0,0 @@ -#flow around sphere - -SimulationParametrs: - OutputPath: c:\temp\sphere\out - Steps: 1000 - Output: 100 - -Grid: - NumberOfThreads: 4 - Block: [10, 10, 10] - BlockSize: [1.0, 1.0, 1.0] - RefineLevel: 1 - -GeoObjects: - - ID: channel - GeoType: GbCuboid3D, - Point1: [0.0, 0.0, 0.0] - Point2: [5.0, 5.0, 5.0] - Properties: - Physics: - Rho: 1.0 - Vx1: 0.001 - Numerical: - BC: - Type: NoSlip - State: Fluid - SecondaryBcOptions: SimpleBounceBack - - ID: sphere - GeoType: GbSphere3D - Center: [2.5, 2.5, 2.5] - Radius: 1.5 - Properties: - Numerical: - BC: - Type: NoSlip - State: Solid - SecondaryBcOptions: SecondOrderBounceBack diff --git a/apps/cpu/vfscript/vfscript.cpp b/apps/cpu/vfscript/vfscript.cpp deleted file mode 100644 index 13e26d36719045997cc738c250089484f34051cc..0000000000000000000000000000000000000000 --- a/apps/cpu/vfscript/vfscript.cpp +++ /dev/null @@ -1,120 +0,0 @@ -#include <iostream> -#include <string> - -#include "geometry3d/CoordinateTransformation3D.h" -#include "Grid3D.h" -#include "GenBlocksGridVisitor.h" -#include "geometry3d/GbSystem3D.h" -#include "geometry3d/GbCuboid3D.h" -#include "geometry3d/GbCylinder3D.h" -#include <geometry3d/GbSphere3D.h> -#include "basics/writer/WbWriterVtkXmlASCII.h" -#include "basics/writer/WbWriterVtkXmlBinary.h" -#include "RefineCrossAndInsideGbObjectBlockVisitor.h" -#include "RatioBlockVisitor.h" -#include "RatioSmoothBlockVisitor.h" -#include "OverlapBlockVisitor.h" -#include "RefineInterGbObjectsVisitor.h" -#include "RefineCrossAndInsideGbObjectBlockVisitor.h" -#include "SetKernelBlockVisitor.h" -#include "LBMKernelETD3Q27Cascaded.h" -#include "D3Q27MacroscopicQuantitiesPostprocessor.h" -#include "MPICommunicator.h" -#include "D3Q27ETBCProcessor.h" -#include "SimulationParameters.h" -#include "D3Q27SetUndefinedNodesBlockVisitor.h" -#include "SetInterpolationDirsBlockVisitor.h" -#include "D3Q27SetConnectorsBlockVisitor.h" -#include "NullCommunicator.h" -#include "D3Q27ETInitDistributionsBlockVisitor.h" -#include "CalculationManager.h" -#include "PQueuePartitioningGridVisitor.h" -#include "MetisPartitioningGridVisitor.h" -#include "D3Q27Interactor.h" -#include "D3Q27NoSlipBCAdapter.h" -#include "D3Q27VelocityBCAdapter.h" -#include "D3Q27DensityBCAdapter.h" -#include "D3Q27BoundaryConditionAdapter.h" -#include "StringUtil.hpp" -//#include "rapidjson/document.h" // rapidjson's DOM-style API -//#include "rapidjson/filestream.h" - -#include <fstream> -#include "yaml-cpp/yaml.h" - -using namespace std; - - -void run(const char *istr) -{ - try - { - //// Prepare reader and input stream. - //rapidjson::Reader reader; - ////rapidjson::Document reader; - //FILE* fp; - //fp = fopen(istr, "r"); - //rapidjson::FileStream is(fp); - - //rapidjson::Document document; // Default template parameter uses UTF8 and MemoryPoolAllocator. - - //if (document.ParseStream<0>(is).HasParseError()) - //{ - // //UBLOG(logINFO,"JSON parcing is fail" ); - // fprintf(stderr, "\nError(%u): %s\n", (unsigned)document.GetErrorOffset(), document.GetParseError()); - // return; - //} - - //fclose(fp); - - std::ifstream fin(istr); - YAML::Parser parser(fin); - YAML::Node doc; - parser.GetNextDocument(doc); - - if(doc.FindValue("GeoObjects")) - { - const YAML::Node& geoObjects = doc["GeoObjects"]; - string id; - for(unsigned i=0;i<geoObjects.size();i++) - { - geoObjects[i]["ID"] >> id; - std::cout << id << "\n"; - } - } - - } - catch(YAML::ParserException& e) { - std::cout << e.what() << "\n"; - } - 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[]) -{ - if ( argv != NULL ) - { - if (argc > 1) - { - run(argv[1]); - } - else - { - cout << "Input file must be set!: " << argv[0] << " <input file>" << endl << std::flush; - } - } - - return 0; -} - diff --git a/cpu.cmake b/cpu.cmake index 226791b1bef78cf7c76c916424889982c7ce6073..f8ee4ca36a6156860ecb8f679d23ef3fc480f60b 100644 --- a/cpu.cmake +++ b/cpu.cmake @@ -27,10 +27,6 @@ SET(VFCPU_USE_VTK OFF CACHE BOOL "include VTK library support") SET(VFCPU_USE_CATALYST OFF CACHE BOOL "include Paraview Catalyst support") SET(VFCPU_USE_HLRN_LUSTRE OFF CACHE BOOL "include HLRN Lustre support") -SET(VFCPU_ENABLE_LiggghtsCoupling OFF CACHE BOOL "enable coupling with LIGGGHTS library") -SET(VFCPU_ENABLE_NonNewtonianFluids ON CACHE BOOL "enable non-Newtonian fluids module") -SET(VFCPU_ENABLE_MultiphaseFlow ON CACHE BOOL "enable multiphase flow module") - if(BUILD_VF_ALL_SAMPLES) set(VFCPU_ENABLE_NonNewtonianFluids ON) set(VFCPU_ENABLE_MultiphaseFlow ON) @@ -42,12 +38,6 @@ IF((NOT ${CMAKE_CXX_COMPILER} MATCHES mpicxx) AND (NOT ${CMAKE_CXX_COMPILER} MAT ENDIF() #SET(MPI_CXX_LINK_FLAGS -mpe=mpilog) -if(VFCPU_ENABLE_LiggghtsCoupling) - add_subdirectory(src/cpu/LiggghtsCoupling) - SET(VFCPU_USE_VTK ON CACHE BOOL "include VTK library support" FORCE) -endif() - - #VTK IF(${VFCPU_USE_VTK}) FIND_PACKAGE(VTK REQUIRED) @@ -94,13 +84,5 @@ if(BUILD_VF_PYTHON_BINDINGS) add_subdirectory(src/cpu/simulationconfig) endif() -if(VFCPU_ENABLE_NonNewtonianFluids) - add_subdirectory(src/cpu/NonNewtonianFluids) -endif() - -if(VFCPU_ENABLE_MultiphaseFlow) - add_subdirectory(src/cpu/MultiphaseFlow) -endif() - set (APPS_ROOT_CPU "${VF_ROOT_DIR}/apps/cpu/") include(${APPS_ROOT_CPU}/Applications.cmake) \ No newline at end of file diff --git a/src/cpu/LiggghtsCoupling/3rdParty/LiggghtsCouplingWrapper.cpp b/src/cpu/LiggghtsCoupling/3rdParty/LiggghtsCouplingWrapper.cpp deleted file mode 100644 index c745e8a67b5a628321e27ea1132b55fba4bebd95..0000000000000000000000000000000000000000 --- a/src/cpu/LiggghtsCoupling/3rdParty/LiggghtsCouplingWrapper.cpp +++ /dev/null @@ -1,85 +0,0 @@ -/* - * This file is part of the LBDEMcoupling software. - * - * LBDEMcoupling 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, version 3. - * - * This program 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 this program. If not, see <http://www.gnu.org/licenses/>. - * - * Copyright 2014 Johannes Kepler University Linz - * - * Author: Philippe Seil (philippe.seil@jku.at) - */ - -#include "LiggghtsCouplingWrapper.h" -#include "mpi.h" -#include <iostream> -#include <sstream> - -LiggghtsCouplingWrapper::LiggghtsCouplingWrapper(char **argv, MPI_Comm communicator) - : lmp(0) -{ - // todo: get LAMMPS to recognize command line options - int argc_lmp = 1; - char **argv_lmp = 0; - argv_lmp = new char*[1]; - argv_lmp[0] = argv[0]; - - lmp = new LAMMPS_NS::LAMMPS(argc_lmp,argv_lmp,communicator); - - // delete[] argv_lmp[0]; - delete[] argv_lmp; -} -void LiggghtsCouplingWrapper::execFile(char* const fname) -{ - lmp->input->file(fname); -} -void LiggghtsCouplingWrapper::execCommand(std::stringstream const &cmd) -{ - lmp->input->one(cmd.str().c_str()); -} -void LiggghtsCouplingWrapper::execCommand(char* const cmd) -{ - lmp->input->one(cmd); -} -int LiggghtsCouplingWrapper::getNumParticles() -{ - return lammps_get_natoms(lmp); -} -void LiggghtsCouplingWrapper::setVariable(char const *name, double value) -{ - std::stringstream cmd; - cmd << "variable " << name << " equal " << value; - std::cout << cmd.str() << std::endl; - execCommand(cmd); -} -void LiggghtsCouplingWrapper::setVariable(char const *name, std::string &value) -{ - std::stringstream cmd; - cmd << "variable " << name << " string " << value; - std::cout << cmd.str() << std::endl; - execCommand(cmd); -} -void LiggghtsCouplingWrapper::run(int nSteps) -{ - std::stringstream cmd; - cmd << "run " << nSteps << " pre no post no"; - execCommand(cmd); -} -void LiggghtsCouplingWrapper::runUpto(int nSteps) -{ - std::stringstream cmd; - cmd << "run " << nSteps << " upto"; - execCommand(cmd); -} - - - - diff --git a/src/cpu/LiggghtsCoupling/3rdParty/LiggghtsCouplingWrapper.h b/src/cpu/LiggghtsCoupling/3rdParty/LiggghtsCouplingWrapper.h deleted file mode 100644 index a745a7e967ee7852a11cd37452012951e421c347..0000000000000000000000000000000000000000 --- a/src/cpu/LiggghtsCoupling/3rdParty/LiggghtsCouplingWrapper.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * This file is part of the LBDEMcoupling software. - * - * LBDEMcoupling 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, version 3. - * - * This program 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 this program. If not, see <http://www.gnu.org/licenses/>. - * - * Copyright 2014 Johannes Kepler University Linz - * - * Author: Philippe Seil (philippe.seil@jku.at) - */ - -#ifndef LIGGGHTSCOUPLINGWRAPPER_H -#define LIGGGHTSCOUPLINGWRAPPER_H - -// necessary LAMMPS/LIGGGHTS includes - -#include "lammps.h" -#include "input.h" -#include "library.h" -#include "library_cfd_coupling.h" - -class LiggghtsCouplingWrapper { -public: - LiggghtsCouplingWrapper(char **argv, MPI_Comm communicator); - void execFile(char* const fname); - void execCommand(std::stringstream const &cmd); - void execCommand(char* const cmd); - void run(int nSteps); - void runUpto(int nSteps); - int getNumParticles(); - void setVariable(char const *name, double value); - void setVariable(char const *name, std::string &value); - - //private: - LAMMPS_NS::LAMMPS *lmp; -}; - -#endif /* LIGGGHTSCOUPLINGWRAPPER_H */ diff --git a/src/cpu/LiggghtsCoupling/CMakeLists.txt b/src/cpu/LiggghtsCoupling/CMakeLists.txt deleted file mode 100644 index 3aa679efdd83810ec0e55f651589e7b531d3971b..0000000000000000000000000000000000000000 --- a/src/cpu/LiggghtsCoupling/CMakeLists.txt +++ /dev/null @@ -1,10 +0,0 @@ - -set(LIGGGHTS_LIBRARIES optimized ${LIGGGHTS_RELEASE_LIBRARY} debug ${LIGGGHTS_DEBUG_LIBRARY}) - -vf_add_library(BUILDTYPE static PUBLIC_LINK basics muparser MPI::MPI_CXX cpu_core ${LIGGGHTS_LIBRARIES}) - -vf_get_library_name(library_name) - -#target_link_directories(${library_name} PUBLIC ${LIGGGHTS_BINARY_DIR}) -target_include_directories(${library_name} PUBLIC ${LIGGGHTS_SOURCE_DIR}) - diff --git a/src/cpu/LiggghtsCoupling/LBM/IBcumulantK17LBMKernel.cpp b/src/cpu/LiggghtsCoupling/LBM/IBcumulantK17LBMKernel.cpp deleted file mode 100644 index 7c85c77b87f6d0079e5cd82520b932e76433d012..0000000000000000000000000000000000000000 --- a/src/cpu/LiggghtsCoupling/LBM/IBcumulantK17LBMKernel.cpp +++ /dev/null @@ -1,909 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file IBcumulantK17LBMKernel.cpp -//! \ingroup LiggghtsCoupling -//! \author Konstantin Kutscher, Martin Geier -//======================================================================================= -#include "IBcumulantK17LBMKernel.h" -#include "D3Q27System.h" -#include "D3Q27EsoTwist3DSplittedVector.h" -#include <cmath> -#include "DataSet3D.h" -#include "LBMKernel.h" -#include "Block3D.h" -#include "BCArray3D.h" - -#define PROOF_CORRECTNESS - -//using namespace UbMath; - -////////////////////////////////////////////////////////////////////////// -IBcumulantK17LBMKernel::IBcumulantK17LBMKernel() -{ - this->compressible = true; - forcingX1 = 0.0; - forcingX2 = 0.0; - forcingX3 = 0.0; -} -////////////////////////////////////////////////////////////////////////// -void IBcumulantK17LBMKernel::initDataSet() -{ - SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9)); - dataSet->setFdistributions(d); - - particleData = std::make_shared<CbArray3D<SPtr<IBdynamicsParticleData>, IndexerX3X2X1>>(nx[0] + 2, nx[1] + 2, nx[2] + 2); - - int minX1 = 0; - int minX2 = 0; - int minX3 = 0; - int maxX1 = nx[0]+2; - int maxX2 = nx[1]+2; - int maxX3 = nx[2]+2; - - LBMReal omega = collFactor; - - for (int x3 = minX3; x3 < maxX3; x3++) { - for (int x2 = minX2; x2 < maxX2; x2++) { - for (int x1 = minX1; x1 < maxX1; x1++) { - (*particleData)(x1, x2, x3) = std::make_shared<IBdynamicsParticleData>(); - } - } - } - -} -////////////////////////////////////////////////////////////////////////// -SPtr<LBMKernel> IBcumulantK17LBMKernel::clone() -{ - SPtr<LBMKernel> kernel(new IBcumulantK17LBMKernel()); - kernel->setNX(nx); - std::dynamic_pointer_cast<IBcumulantK17LBMKernel>(kernel)->initDataSet(); - kernel->setCollisionFactor(this->collFactor); - kernel->setBCSet(bcSet->clone(kernel)); - kernel->setWithForcing(withForcing); - kernel->setForcingX1(muForcingX1); - kernel->setForcingX2(muForcingX2); - kernel->setForcingX3(muForcingX3); - kernel->setIndex(ix1, ix2, ix3); - kernel->setDeltaT(deltaT); - kernel->setBlock(block.lock()); - - return kernel; -} -////////////////////////////////////////////////////////////////////////// -void IBcumulantK17LBMKernel::calculate(int step) -{ - ////////////////////////////////////////////////////////////////////////// - //! Cumulant K17 Kernel is based on - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! and - //! <a href="https://doi.org/10.1016/j.jcp.2017.07.004"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.07.004 ]</b></a> - //! - //! The cumulant kernel is executed in the following steps - //! - //////////////////////////////////////////////////////////////////////////////// - //! - Get node index coordinates from thredIdx, blockIdx, blockDim and gridDim. - //! - - using namespace std; - using namespace vf::basics::constant; - - //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); - } - ///////////////////////////////////// - - localDistributionsF = dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); - nonLocalDistributionsF = dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); - restDistributionsF = dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - const int bcArrayMaxX1 = (int)bcArray->getNX1(); - const int bcArrayMaxX2 = (int)bcArray->getNX2(); - const int bcArrayMaxX3 = (int)bcArray->getNX3(); - - int minX1 = ghostLayerWidth; - int minX2 = ghostLayerWidth; - int minX3 = ghostLayerWidth; - int maxX1 = bcArrayMaxX1 - ghostLayerWidth; - int maxX2 = bcArrayMaxX2 - ghostLayerWidth; - int maxX3 = bcArrayMaxX3 - ghostLayerWidth; - - LBMReal omega = collFactor; - - - - for (int x3 = minX3; x3 < maxX3; x3++) - { - for (int x2 = minX2; x2 < maxX2; x2++) - { - for (int x1 = minX1; x1 < maxX1; x1++) - { - if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { - int x1p = x1 + 1; - int x2p = x2 + 1; - int x3p = x3 + 1; - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - //! - Read distributions: style of reading and writing the distributions from/to stored arrays - //! dependent on timestep is based on the esoteric twist algorithm <a - //! href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), - //! DOI:10.3390/computation5020019 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - - // E N T - // c c c - ////////// - // W S B - // a a a - - // Rest is b - - // mfxyz - // a - negative - // b - null - // c - positive - - // a b c - //-1 0 1 - - 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->restDistributionsF)(x1, x2, x3); - - LBMReal f[D3Q27System::ENDF + 1]; - LBMReal fEq[D3Q27System::ENDF + 1]; - LBMReal fEqSolid[D3Q27System::ENDF + 1]; - LBMReal fPre[D3Q27System::ENDF + 1]; - - f[vf::lbm::dir::d000] = mfbbb; - - f[vf::lbm::dir::dP00] = mfcbb; - f[vf::lbm::dir::d0P0] = mfbcb; - f[vf::lbm::dir::d00P] = mfbbc; - f[vf::lbm::dir::dPP0] = mfccb; - f[vf::lbm::dir::dMP0] = mfacb; - f[vf::lbm::dir::dP0P] = mfcbc; - f[vf::lbm::dir::dM0P] = mfabc; - f[vf::lbm::dir::d0PP] = mfbcc; - f[vf::lbm::dir::d0MP] = mfbac; - f[vf::lbm::dir::dPPP] = mfccc; - f[vf::lbm::dir::dMPP] = mfacc; - f[vf::lbm::dir::dPMP] = mfcac; - f[vf::lbm::dir::dMMP] = mfaac; - - f[vf::lbm::dir::dM00] = mfabb; - f[vf::lbm::dir::d0M0] = mfbab; - f[vf::lbm::dir::d00M] = mfbba; - f[vf::lbm::dir::dMM0] = mfaab; - f[vf::lbm::dir::dPM0] = mfcab; - f[vf::lbm::dir::dM0M] = mfaba; - f[vf::lbm::dir::dP0M] = mfcba; - f[vf::lbm::dir::d0MM] = mfbaa; - f[vf::lbm::dir::d0PM] = mfbca; - f[vf::lbm::dir::dMMM] = mfaaa; - f[vf::lbm::dir::dPMM] = mfcaa; - f[vf::lbm::dir::dMPM] = mfaca; - f[vf::lbm::dir::dPPM] = mfcca; - - if ((*particleData)(x1, x2, x3)->solidFraction > SOLFRAC_MIN) { - fPre[vf::lbm::dir::d000] = mfbbb; - - fPre[vf::lbm::dir::dP00] = mfcbb; - fPre[vf::lbm::dir::d0P0] = mfbcb; - fPre[vf::lbm::dir::d00P] = mfbbc; - fPre[vf::lbm::dir::dPP0] = mfccb; - fPre[vf::lbm::dir::dMP0] = mfacb; - fPre[vf::lbm::dir::dP0P] = mfcbc; - fPre[vf::lbm::dir::dM0P] = mfabc; - fPre[vf::lbm::dir::d0PP] = mfbcc; - fPre[vf::lbm::dir::d0MP] = mfbac; - fPre[vf::lbm::dir::dPPP] = mfccc; - fPre[vf::lbm::dir::dMPP] = mfacc; - fPre[vf::lbm::dir::dPMP] = mfcac; - fPre[vf::lbm::dir::dMMP] = mfaac; - - fPre[vf::lbm::dir::dM00] = mfabb; - fPre[vf::lbm::dir::d0M0] = mfbab; - fPre[vf::lbm::dir::d00M] = mfbba; - fPre[vf::lbm::dir::dMM0] = mfaab; - fPre[vf::lbm::dir::dPM0] = mfcab; - fPre[vf::lbm::dir::dM0M] = mfaba; - fPre[vf::lbm::dir::dP0M] = mfcba; - fPre[vf::lbm::dir::d0MM] = mfbaa; - fPre[vf::lbm::dir::d0PM] = mfbca; - fPre[vf::lbm::dir::dMMM] = mfaaa; - fPre[vf::lbm::dir::dPMM] = mfcaa; - fPre[vf::lbm::dir::dMPM] = mfaca; - fPre[vf::lbm::dir::dPPM] = mfcca; - } - - (*particleData)(x1, x2, x3)->hydrodynamicForce.fill(0.0); - - if ((*particleData)(x1, x2, x3)->solidFraction <= SOLFRAC_MAX) { - - //////////////////////////////////////////////////////////////////////////////////// - //! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. - //! (J1)-(J3) <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), - //! DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - LBMReal drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + - ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb)) + (mfbba + mfbbc)) + - mfbbb; - - LBMReal rho = c1o1 + drho; - LBMReal OOrho = c1o1 / rho; - //////////////////////////////////////////////////////////////////////////////////// - LBMReal vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)) / - rho; - LBMReal vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)) / - rho; - LBMReal vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)) / - rho; - //////////////////////////////////////////////////////////////////////////////////// - // forcing - /////////////////////////////////////////////////////////////////////////////////////////// - if (withForcing) { - muX1 = static_cast<double>(x1 - 1 + ix1 * maxX1); - muX2 = static_cast<double>(x2 - 1 + ix2 * maxX2); - muX3 = static_cast<double>(x3 - 1 + ix3 * maxX3); - - forcingX1 = muForcingX1.Eval(); - forcingX2 = muForcingX2.Eval(); - forcingX3 = muForcingX3.Eval(); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Add half of the acceleration (body force) to the velocity as in Eq. (42) - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), - //! DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - vvx += forcingX1 * deltaT * c1o2; // X - vvy += forcingX2 * deltaT * c1o2; // Y - vvz += forcingX3 * deltaT * c1o2; // Z - } - //////////////////////////////////////////////////////////////////////////////////// - // calculate the square of velocities for this lattice node - LBMReal vx2 = vvx * vvx; - LBMReal vy2 = vvy * vvy; - LBMReal vz2 = vvz * vvz; - //////////////////////////////////////////////////////////////////////////////////// - //! - Set relaxation limiters for third order cumulants to default value \f$ \lambda=0.001 \f$ - //! according to section 6 in <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et - //! al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - LBMReal wadjust; - LBMReal qudricLimitP = c1o100; - LBMReal qudricLimitM = c1o100; - LBMReal qudricLimitD = c1o100; - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from well conditioned distributions to central moments as defined in - //! Appendix J in <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), - //! DOI:10.1016/j.camwa.2015.05.001 ]</b></a> see also Eq. (6)-(14) in <a - //! href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), - //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - forwardInverseChimeraWithK(mfaaa, mfaab, mfaac, vvz, vz2, c36o1, c1o36); - forwardInverseChimeraWithK(mfaba, mfabb, mfabc, vvz, vz2, c9o1, c1o9); - forwardInverseChimeraWithK(mfaca, mfacb, mfacc, vvz, vz2, c36o1, c1o36); - forwardInverseChimeraWithK(mfbaa, mfbab, mfbac, vvz, vz2, c9o1, c1o9); - forwardInverseChimeraWithK(mfbba, mfbbb, mfbbc, vvz, vz2, c9o4, c4o9); - forwardInverseChimeraWithK(mfbca, mfbcb, mfbcc, vvz, vz2, c9o1, c1o9); - forwardInverseChimeraWithK(mfcaa, mfcab, mfcac, vvz, vz2, c36o1, c1o36); - forwardInverseChimeraWithK(mfcba, mfcbb, mfcbc, vvz, vz2, c9o1, c1o9); - forwardInverseChimeraWithK(mfcca, mfccb, mfccc, vvz, vz2, c36o1, c1o36); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - forwardInverseChimeraWithK(mfaaa, mfaba, mfaca, vvy, vy2, c6o1, c1o6); - forwardChimera(mfaab, mfabb, mfacb, vvy, vy2); - forwardInverseChimeraWithK(mfaac, mfabc, mfacc, vvy, vy2, c18o1, c1o18); - forwardInverseChimeraWithK(mfbaa, mfbba, mfbca, vvy, vy2, c3o2, c2o3); - forwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2); - forwardInverseChimeraWithK(mfbac, mfbbc, mfbcc, vvy, vy2, c9o2, c2o9); - forwardInverseChimeraWithK(mfcaa, mfcba, mfcca, vvy, vy2, c6o1, c1o6); - forwardChimera(mfcab, mfcbb, mfccb, vvy, vy2); - forwardInverseChimeraWithK(mfcac, mfcbc, mfccc, vvy, vy2, c18o1, c1o18); - - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - forwardInverseChimeraWithK(mfaaa, mfbaa, mfcaa, vvx, vx2, c1o1, c1o1); - forwardChimera(mfaba, mfbba, mfcba, vvx, vx2); - forwardInverseChimeraWithK(mfaca, mfbca, mfcca, vvx, vx2, c3o1, c1o3); - forwardChimera(mfaab, mfbab, mfcab, vvx, vx2); - forwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2); - forwardChimera(mfacb, mfbcb, mfccb, vvx, vx2); - forwardInverseChimeraWithK(mfaac, mfbac, mfcac, vvx, vx2, c3o1, c1o3); - forwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2); - forwardInverseChimeraWithK(mfacc, mfbcc, mfccc, vvx, vx2, c9o1, c1o9); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Setting relaxation rates for non-hydrodynamic cumulants (default values). Variable names and - //! equations according to <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. - //! (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! => [NAME IN PAPER]=[NAME IN CODE]=[DEFAULT VALUE]. - //! - Trace of second order cumulants \f$ C_{200}+C_{020}+C_{002} \f$ used to adjust bulk - //! viscosity:\f$\omega_2=OxxPyyPzz=1.0 \f$. - //! - Third order cumulants \f$ C_{120}+C_{102} \f$, \f$ C_{210}+C_{012} \f$, \f$ C_{201}+C_{021} - //! \f$: \f$\omega_3=OxyyPxzz\f$ set according to Eq. (111) with simplifications assuming - //! \f$\omega_2=1.0\f$. - //! - Third order cumulants \f$ C_{120}-C_{102} \f$, \f$ C_{210}-C_{012} \f$, \f$ C_{201}-C_{021} - //! \f$: \f$\omega_4 = OxyyMxzz\f$ set according to Eq. (112) with simplifications assuming - //! \f$\omega_2 = 1.0\f$. - //! - Third order cumulants \f$ C_{111} \f$: \f$\omega_5 = Oxyz\f$ set according to Eq. (113) with - //! simplifications assuming \f$\omega_2 = 1.0\f$ (modify for different bulk viscosity). - //! - Fourth order cumulants \f$ C_{220} \f$, \f$ C_{202} \f$, \f$ C_{022} \f$, \f$ C_{211} \f$, - //! \f$ C_{121} \f$, \f$ C_{112} \f$: for simplification all set to the same default value \f$ - //! \omega_6=\omega_7=\omega_8=O4=1.0 \f$. - //! - Fifth order cumulants \f$ C_{221}\f$, \f$C_{212}\f$, \f$C_{122}\f$: \f$\omega_9=O5=1.0\f$. - //! - Sixth order cumulant \f$ C_{222}\f$: \f$\omega_{10}=O6=1.0\f$. - //! - //////////////////////////////////////////////////////////// - // 2. - LBMReal OxxPyyPzz = c1o1; - //////////////////////////////////////////////////////////// - // 3. - LBMReal OxyyPxzz = - c8o1 * (-c2o1 + omega) * (c1o1 + c2o1 * omega) / (-c8o1 - c14o1 * omega + c7o1 * omega * omega); - LBMReal OxyyMxzz = - c8o1 * (-c2o1 + omega) * (-c7o1 + c4o1 * omega) / (c56o1 - c50o1 * omega + c9o1 * omega * omega); - LBMReal Oxyz = c24o1 * (-c2o1 + omega) * (-c2o1 - c7o1 * omega + c3o1 * omega * omega) / - (c48o1 + c152o1 * omega - c130o1 * omega * omega + c29o1 * omega * omega * omega); - //////////////////////////////////////////////////////////// - // 4. - LBMReal O4 = c1o1; - //////////////////////////////////////////////////////////// - // 5. - LBMReal O5 = c1o1; - //////////////////////////////////////////////////////////// - // 6. - LBMReal O6 = c1o1; - - //////////////////////////////////////////////////////////////////////////////////// - //! - A and B: parameters for fourth order convergence of the diffusion term according to Eq. (114) - //! and (115) <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), - //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> with simplifications assuming \f$\omega_2 = 1.0\f$ - //! (modify for different bulk viscosity). - //! - LBMReal A = (c4o1 + c2o1 * omega - c3o1 * omega * omega) / (c2o1 - c7o1 * omega + c5o1 * omega * omega); - LBMReal B = (c4o1 + c28o1 * omega - c14o1 * omega * omega) / (c6o1 - c21o1 * omega + c15o1 * omega * omega); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Compute cumulants from central moments according to Eq. (20)-(23) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), - //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////// - // 4. - LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) * OOrho; - LBMReal CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) * OOrho; - LBMReal CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) * OOrho; - - LBMReal CUMcca = mfcca - (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) * OOrho - - c1o9 * (drho * OOrho)); - LBMReal CUMcac = mfcac - (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) * OOrho - - c1o9 * (drho * OOrho)); - LBMReal CUMacc = mfacc - (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) * OOrho - - c1o9 * (drho * OOrho)); - //////////////////////////////////////////////////////////// - // 5. - LBMReal CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + - c1o3 * (mfbca + mfbac)) * OOrho; - LBMReal CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + - c1o3 * (mfcba + mfabc)) * OOrho; - LBMReal CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + - c1o3 * (mfacb + mfcab)) * OOrho; - //////////////////////////////////////////////////////////// - // 6. - LBMReal CUMccc = - mfccc + ((-c4o1 * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) * - OOrho + - (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) + - c2o1 * (mfcaa * mfaca * mfaac) + c16o1 * mfbba * mfbab * mfabb) * - OOrho * OOrho - - c1o3 * (mfacc + mfcac + mfcca) * OOrho - c1o9 * (mfcaa + mfaca + mfaac) * OOrho + - (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) + - (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 * (mfaac + mfaca + mfcaa)) * - OOrho * OOrho * c2o3 + - c1o27 * ((drho * drho - drho) * OOrho * OOrho)); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Compute linear combinations of second and third order cumulants - //! - //////////////////////////////////////////////////////////// - // 2. - LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac; - LBMReal mxxMyy = mfcaa - mfaca; - LBMReal mxxMzz = mfcaa - mfaac; - //////////////////////////////////////////////////////////// - // 3. - LBMReal mxxyPyzz = mfcba + mfabc; - LBMReal mxxyMyzz = mfcba - mfabc; - - LBMReal mxxzPyyz = mfcab + mfacb; - LBMReal mxxzMyyz = mfcab - mfacb; - - LBMReal mxyyPxzz = mfbca + mfbac; - LBMReal mxyyMxzz = mfbca - mfbac; - - //////////////////////////////////////////////////////////////////////////////////// - // incl. correction - //////////////////////////////////////////////////////////// - //! - Compute velocity gradients from second order cumulants according to Eq. (27)-(32) - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), - //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> Further explanations of the correction in viscosity in - //! Appendix H of <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), - //! DOI:10.1016/j.camwa.2015.05.001 ]</b></a> Note that the division by rho is omitted here as we - //! need rho times the gradients later. - //! - LBMReal Dxy = -c3o1 * omega * mfbba; - LBMReal Dxz = -c3o1 * omega * mfbab; - LBMReal Dyz = -c3o1 * omega * mfabb; - LBMReal dxux = c1o2 * (-omega) * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - LBMReal dyuy = dxux + omega * c3o2 * mxxMyy; - LBMReal dzuz = dxux + omega * c3o2 * mxxMzz; - //////////////////////////////////////////////////////////// - //! - Relaxation of second order cumulants with correction terms according to Eq. (33)-(35) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), - //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - mxxPyyPzz += OxxPyyPzz * (mfaaa - mxxPyyPzz) - - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////no correction - // mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz); - // mxxMyy += -(-omega) * (-mxxMyy); - // mxxMzz += -(-omega) * (-mxxMzz); - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - - //////////////////////////////////////////////////////////////////////////////////// - // relax - ////////////////////////////////////////////////////////////////////////// - // incl. limiter - //! - Relaxation of third order cumulants including limiter according to Eq. (116)-(123) - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), - //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - wadjust = Oxyz + (c1o1 - Oxyz) * abs(mfbbb) / (abs(mfbbb) + qudricLimitD); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz) * abs(mxxyPyzz) / (abs(mxxyPyzz) + qudricLimitP); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz) * abs(mxxyMyzz) / (abs(mxxyMyzz) + qudricLimitM); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz) * abs(mxxzPyyz) / (abs(mxxzPyyz) + qudricLimitP); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz) * abs(mxxzMyyz) / (abs(mxxzMyyz) + qudricLimitM); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz) * abs(mxyyPxzz) / (abs(mxyyPxzz) + qudricLimitP); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz) * abs(mxyyMxzz) / (abs(mxyyMxzz) + qudricLimitM); - mxyyMxzz += wadjust * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - // no limiter - // mfbbb += OxyyMxzz * (-mfbbb); - // mxxyPyzz += OxyyPxzz * (-mxxyPyzz); - // mxxyMyzz += OxyyMxzz * (-mxxyMyzz); - // mxxzPyyz += OxyyPxzz * (-mxxzPyyz); - // mxxzMyyz += OxyyMxzz * (-mxxzMyyz); - // mxyyPxzz += OxyyPxzz * (-mxyyPxzz); - // mxyyMxzz += OxyyMxzz * (-mxyyMxzz); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Compute inverse linear combinations of second and third order cumulants - //! - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1 * mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - c2o1 * mxxMzz + mxxPyyPzz); - - mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // 4. - // no limiter - //! - Relax fourth order cumulants to modified equilibrium for fourth order convergence of diffusion - //! according to Eq. (43)-(48) <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et - //! al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - CUMacc = -O4 * (c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc); - CUMcac = -O4 * (c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac); - CUMcca = -O4 * (c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca); - CUMbbc = -O4 * (c1o1 / omega - c1o2) * Dxy * c1o3 * B + (c1o1 - O4) * (CUMbbc); - CUMbcb = -O4 * (c1o1 / omega - c1o2) * Dxz * c1o3 * B + (c1o1 - O4) * (CUMbcb); - CUMcbb = -O4 * (c1o1 / omega - c1o2) * Dyz * c1o3 * B + (c1o1 - O4) * (CUMcbb); - - ////////////////////////////////////////////////////////////////////////// - // 5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - ////////////////////////////////////////////////////////////////////////// - // 6. - CUMccc += O6 * (-CUMccc); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Compute central moments from post collision cumulants according to Eq. (53)-(56) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), - //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - - ////////////////////////////////////////////////////////////////////////// - // 4. - mfcbb = CUMcbb + c1o3 * ((c3o1 * mfcaa + c1o1) * mfabb + c6o1 * mfbba * mfbab) * OOrho; - mfbcb = CUMbcb + c1o3 * ((c3o1 * mfaca + c1o1) * mfbab + c6o1 * mfbba * mfabb) * OOrho; - mfbbc = CUMbbc + c1o3 * ((c3o1 * mfaac + c1o1) * mfbba + c6o1 * mfbab * mfabb) * OOrho; - - mfcca = CUMcca + (((mfcaa * mfaca + c2o1 * mfbba * mfbba) * c9o1 + c3o1 * (mfcaa + mfaca)) * OOrho - - (drho * OOrho)) * - c1o9; - mfcac = CUMcac + (((mfcaa * mfaac + c2o1 * mfbab * mfbab) * c9o1 + c3o1 * (mfcaa + mfaac)) * OOrho - - (drho * OOrho)) * - c1o9; - mfacc = CUMacc + (((mfaac * mfaca + c2o1 * mfabb * mfabb) * c9o1 + c3o1 * (mfaac + mfaca)) * OOrho - - (drho * OOrho)) * - c1o9; - - ////////////////////////////////////////////////////////////////////////// - // 5. - mfbcc = CUMbcc + c1o3 * - (c3o1 * (mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + - c2o1 * (mfbab * mfacb + mfbba * mfabc)) + - (mfbca + mfbac)) * - OOrho; - mfcbc = CUMcbc + c1o3 * - (c3o1 * (mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + - c2o1 * (mfabb * mfcab + mfbba * mfbac)) + - (mfcba + mfabc)) * - OOrho; - mfccb = CUMccb + c1o3 * - (c3o1 * (mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + - c2o1 * (mfbab * mfbca + mfabb * mfcba)) + - (mfacb + mfcab)) * - OOrho; - - ////////////////////////////////////////////////////////////////////////// - // 6. - mfccc = - CUMccc - ((-c4o1 * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) * - OOrho + - (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) + - c2o1 * (mfcaa * mfaca * mfaac) + c16o1 * mfbba * mfbab * mfabb) * - OOrho * OOrho - - c1o3 * (mfacc + mfcac + mfcca) * OOrho - c1o9 * (mfcaa + mfaca + mfaac) * OOrho + - (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) + - (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 * (mfaac + mfaca + mfcaa)) * - OOrho * OOrho * c2o3 + - c1o27 * ((drho * drho - drho) * OOrho * OOrho)); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Add acceleration (body force) to first order cumulants according to Eq. (85)-(87) in - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), - //! DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - mfbaa = -mfbaa; - mfaba = -mfaba; - mfaab = -mfaab; - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from central moments to well conditioned distributions as defined in - //! Appendix J in <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), - //! DOI:10.1016/j.camwa.2015.05.001 ]</b></a> see also Eq. (88)-(96) in <a - //! href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), - //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - backwardInverseChimeraWithK(mfaaa, mfbaa, mfcaa, vvx, vx2, c1o1, c1o1); - backwardChimera(mfaba, mfbba, mfcba, vvx, vx2); - backwardInverseChimeraWithK(mfaca, mfbca, mfcca, vvx, vx2, c3o1, c1o3); - backwardChimera(mfaab, mfbab, mfcab, vvx, vx2); - backwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2); - backwardChimera(mfacb, mfbcb, mfccb, vvx, vx2); - backwardInverseChimeraWithK(mfaac, mfbac, mfcac, vvx, vx2, c3o1, c1o3); - backwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2); - backwardInverseChimeraWithK(mfacc, mfbcc, mfccc, vvx, vx2, c9o1, c1o9); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - backwardInverseChimeraWithK(mfaaa, mfaba, mfaca, vvy, vy2, c6o1, c1o6); - backwardChimera(mfaab, mfabb, mfacb, vvy, vy2); - backwardInverseChimeraWithK(mfaac, mfabc, mfacc, vvy, vy2, c18o1, c1o18); - backwardInverseChimeraWithK(mfbaa, mfbba, mfbca, vvy, vy2, c3o2, c2o3); - backwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2); - backwardInverseChimeraWithK(mfbac, mfbbc, mfbcc, vvy, vy2, c9o2, c2o9); - backwardInverseChimeraWithK(mfcaa, mfcba, mfcca, vvy, vy2, c6o1, c1o6); - backwardChimera(mfcab, mfcbb, mfccb, vvy, vy2); - backwardInverseChimeraWithK(mfcac, mfcbc, mfccc, vvy, vy2, c18o1, c1o18); - - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - backwardInverseChimeraWithK(mfaaa, mfaab, mfaac, vvz, vz2, c36o1, c1o36); - backwardInverseChimeraWithK(mfaba, mfabb, mfabc, vvz, vz2, c9o1, c1o9); - backwardInverseChimeraWithK(mfaca, mfacb, mfacc, vvz, vz2, c36o1, c1o36); - backwardInverseChimeraWithK(mfbaa, mfbab, mfbac, vvz, vz2, c9o1, c1o9); - backwardInverseChimeraWithK(mfbba, mfbbb, mfbbc, vvz, vz2, c9o4, c4o9); - backwardInverseChimeraWithK(mfbca, mfbcb, mfbcc, vvz, vz2, c9o1, c1o9); - backwardInverseChimeraWithK(mfcaa, mfcab, mfcac, vvz, vz2, c36o1, c1o36); - backwardInverseChimeraWithK(mfcba, mfcbb, mfcbc, vvz, vz2, c9o1, c1o9); - backwardInverseChimeraWithK(mfcca, mfccb, mfccc, vvz, vz2, c36o1, c1o36); - //////////////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // proof correctness - ////////////////////////////////////////////////////////////////////////// -#ifdef PROOF_CORRECTNESS - 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 = drho - drho_post; -#ifdef SINGLEPRECISION - if (dif > 10.0E-7 || dif < -10.0E-7) -#else - if (dif > 10.0E-15 || dif < -10.0E-15) -#endif - { - UB_THROW(UbException( - UB_EXARGS, - "rho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(drho_post) + - " dif=" + UbSystem::toString(dif) + " rho is not correct for node " + - UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3) + - " in " + block.lock()->toString() + " step = " + UbSystem::toString(step))); - } -#endif - //////////////////////////////////////////////////////////////////////////////////// - //! - Write distributions: style of reading and writing the distributions from/to stored arrays - //! dependent on timestep is based on the esoteric twist algorithm <a - //! href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), - //! DOI:10.3390/computation5020019 ]</b></a> - //! - (*this->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->restDistributionsF)(x1, x2, x3) = mfbbb; - ////////////////////////////////////////////////////////////////////////// - f[vf::lbm::dir::d000] = mfbbb; - - f[vf::lbm::dir::dP00] = mfcbb; - f[vf::lbm::dir::d0P0] = mfbcb; - f[vf::lbm::dir::d00P] = mfbbc; - f[vf::lbm::dir::dPP0] = mfccb; - f[vf::lbm::dir::dMP0] = mfacb; - f[vf::lbm::dir::dP0P] = mfcbc; - f[vf::lbm::dir::dM0P] = mfabc; - f[vf::lbm::dir::d0PP] = mfbcc; - f[vf::lbm::dir::d0MP] = mfbac; - f[vf::lbm::dir::dPPP] = mfccc; - f[vf::lbm::dir::dMPP] = mfacc; - f[vf::lbm::dir::dPMP] = mfcac; - f[vf::lbm::dir::dMMP] = mfaac; - - f[vf::lbm::dir::dM00] = mfabb; - f[vf::lbm::dir::d0M0] = mfbab; - f[vf::lbm::dir::d00M] = mfbba; - f[vf::lbm::dir::dMM0] = mfaab; - f[vf::lbm::dir::dPM0] = mfcab; - f[vf::lbm::dir::dM0M] = mfaba; - f[vf::lbm::dir::dP0M] = mfcba; - f[vf::lbm::dir::d0MM] = mfbaa; - f[vf::lbm::dir::d0PM] = mfbca; - f[vf::lbm::dir::dMMM] = mfaaa; - f[vf::lbm::dir::dPMM] = mfcaa; - f[vf::lbm::dir::dMPM] = mfaca; - f[vf::lbm::dir::dPPM] = mfcca; - } - if ((*particleData)(x1, x2, x3)->solidFraction >= SOLFRAC_MIN) { - // if ((*particleData)(x1, x2, x3)->solidFraction < SOLFRAC_MIN) - // continue; - // - LBMReal vx1, vx2, vx3, drho; - D3Q27System::calcCompMacroscopicValues(f, drho, vx1, vx2, vx3); - D3Q27System::calcCompFeq(fEq, drho, vx1, vx2, vx3); - - std::array<double, 3> uPart; - uPart[0] = (*particleData)(x1, x2, x3)->uPart[0] * (1. + drho); - uPart[1] = (*particleData)(x1, x2, x3)->uPart[1] * (1. + drho); - uPart[2] = (*particleData)(x1, x2, x3)->uPart[2] * (1. + drho); - - D3Q27System::calcCompFeq(fEqSolid, drho, uPart[0], uPart[1], uPart[2]); - - if ((*particleData)(x1, x2, x3)->solidFraction > SOLFRAC_MAX) { - double const bb0 = fEq[vf::lbm::dir::d000] - fEqSolid[vf::lbm::dir::d000]; - f[vf::lbm::dir::d000] = fPre[vf::lbm::dir::d000] + bb0; - for (int iPop = D3Q27System::FSTARTDIR; iPop <= D3Q27System::FENDDIR; iPop++) { - const int iOpp = D3Q27System::INVDIR[iPop]; - double const bb = ((fPre[iOpp] - fEq[iOpp]) - (fPre[iPop] - fEqSolid[iPop])); - double const bbOpp = ((fPre[iPop] - fEq[iPop]) - (fPre[iOpp] - fEqSolid[iOpp])); - - - f[iPop] = fPre[iPop] + bb; - f[iOpp] = fPre[iOpp] + bbOpp; - - (*particleData)(x1, x2, x3)->hydrodynamicForce[0] -= D3Q27System::DX1[iPop] * (bb - bbOpp); - (*particleData)(x1, x2, x3)->hydrodynamicForce[1] -= D3Q27System::DX2[iPop] * (bb - bbOpp); - (*particleData)(x1, x2, x3)->hydrodynamicForce[2] -= D3Q27System::DX3[iPop] * (bb - bbOpp); - } - } else { /* particleData.solidFraction < SOLFRAC_MAX */ - //#ifdef LBDEM_USE_WEIGHING - double const ooo = 1. / omega - 0.5; - double const B = (*particleData)(x1, x2, x3)->solidFraction * ooo / ((1. - (*particleData)(x1, x2, x3)->solidFraction) + ooo); - //#else - // T const B = particleData.solidFraction; - //#endif - double const oneMinB = 1. - B; - - double const bb0 = fEq[vf::lbm::dir::d000] - fEqSolid[vf::lbm::dir::d000]; - f[vf::lbm::dir::d000] = fPre[vf::lbm::dir::d000] + oneMinB * (f[vf::lbm::dir::d000] - fPre[vf::lbm::dir::d000]) + B * bb0; - - for (int iPop = D3Q27System::FSTARTDIR; iPop <= D3Q27System::FENDDIR; iPop++) { - int const iOpp = D3Q27System::INVDIR[iPop]; - double const bb = B * ((fPre[iOpp] - fEq[iOpp]) - (fPre[iPop] - fEqSolid[iPop])); - double const bbOpp = B * ((fPre[iPop] - fEq[iPop]) - (fPre[iOpp] - fEqSolid[iOpp])); - - f[iPop] = fPre[iPop] + oneMinB * (f[iPop] - fPre[iPop]) + bb; - f[iOpp] = fPre[iOpp] + oneMinB * (f[iOpp] - fPre[iOpp]) + bbOpp; - - (*particleData)(x1, x2, x3)->hydrodynamicForce[0] -= D3Q27System::DX1[iPop] * (bb - bbOpp); - (*particleData)(x1, x2, x3)->hydrodynamicForce[1] -= D3Q27System::DX2[iPop] * (bb - bbOpp); - (*particleData)(x1, x2, x3)->hydrodynamicForce[2] -= D3Q27System::DX3[iPop] * (bb - bbOpp); - } - } /* if solidFraction > SOLFRAC_MAX */ - - (*this->restDistributionsF)(x1, x2, x3) = f[vf::lbm::dir::d000]; - - (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = f[vf::lbm::dir::dM00]; - (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = f[vf::lbm::dir::d0M0]; - (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = f[vf::lbm::dir::d00M]; - (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = f[vf::lbm::dir::dMM0]; - (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = f[vf::lbm::dir::dPM0]; - (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = f[vf::lbm::dir::dM0M]; - (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = f[vf::lbm::dir::dP0M]; - (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = f[vf::lbm::dir::d0MM]; - (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = f[vf::lbm::dir::d0PM]; - (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = f[vf::lbm::dir::dMMM]; - (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = f[vf::lbm::dir::dPMM]; - (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = f[vf::lbm::dir::dMPM]; - (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[vf::lbm::dir::dPPM]; - - (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = f[vf::lbm::dir::dP00]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = f[vf::lbm::dir::d0P0]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = f[vf::lbm::dir::d00P]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = f[vf::lbm::dir::dPP0]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = f[vf::lbm::dir::dMP0]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = f[vf::lbm::dir::dP0P]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = f[vf::lbm::dir::dM0P]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = f[vf::lbm::dir::d0PP]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = f[vf::lbm::dir::d0MP]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[vf::lbm::dir::dPPP]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = f[vf::lbm::dir::dMPP]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[vf::lbm::dir::dPMP]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = f[vf::lbm::dir::dMMP]; - } - } - } - } - } -} -////////////////////////////////////////////////////////////////////////// - diff --git a/src/cpu/LiggghtsCoupling/LBM/IBcumulantK17LBMKernel.h b/src/cpu/LiggghtsCoupling/LBM/IBcumulantK17LBMKernel.h deleted file mode 100644 index d675e72aabd3122a01e092e99fa22eb491270805..0000000000000000000000000000000000000000 --- a/src/cpu/LiggghtsCoupling/LBM/IBcumulantK17LBMKernel.h +++ /dev/null @@ -1,149 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file IBcumulantK17LBMKernel.h -//! \ingroup LiggghtsCoupling -//! \author Konstantin Kutscher, Martin Geier -//======================================================================================= - -#ifndef IBcumulantK17LBMKernel_h__ -#define IBcumulantK17LBMKernel_h__ - -#include "LiggghtsCouplingLBMKernel.h" -#include "BCSet.h" -#include "D3Q27System.h" -#include "UbTiming.h" -#include "CbArray4D.h" -#include "CbArray3D.h" -#include "IBdynamicsParticleData.h" - - -//! \brief Compressible cumulant LBM kernel. -//! \details LBM implementation that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model -//! -//! The model is publisched in -//! <a href="http://dx.doi.org/10.1016/j.jcp.2017.05.040"><b>[ Geier et al., (2017), 10.1016/j.jcp.2017.05.040]</b></a>, -//! <a href="http://dx.doi.org/10.1016/j.jcp.2017.07.004"><b>[ Geier et al., (2017), 10.1016/j.jcp.2017.07.004]</b></a> -//! -class IBcumulantK17LBMKernel : public LiggghtsCouplingLBMKernel -{ -public: - IBcumulantK17LBMKernel(); - ~IBcumulantK17LBMKernel() = default; - void calculate(int step) override; - SPtr<LBMKernel> clone() override; - double getCalculationTime() override { return .0; } - -protected: - inline void forwardInverseChimeraWithK(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2, LBMReal Kinverse, LBMReal K); - inline void backwardInverseChimeraWithK(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2, LBMReal Kinverse, LBMReal K); - inline void forwardChimera(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2); - inline void backwardChimera(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2); - - virtual void initDataSet(); - - CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF; - CbArray4D<LBMReal, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF; - CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr restDistributionsF; - - mu::value_type muX1, muX2, muX3; - mu::value_type muDeltaT; - mu::value_type muNu; - LBMReal forcingX1; - LBMReal forcingX2; - LBMReal forcingX3; - -}; - -//////////////////////////////////////////////////////////////////////////////// -//! \brief forward chimera transformation \ref forwardInverseChimeraWithK -//! Transformation from distributions to central moments according to Eq. (6)-(14) in -//! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> -//! Modified for lower round-off errors. -//////////////////////////////////////////////////////////////////////////////// -inline void IBcumulantK17LBMKernel::forwardInverseChimeraWithK(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2, LBMReal Kinverse, LBMReal K) -{ - using namespace vf::basics::constant; - LBMReal m2 = mfa + mfc; - LBMReal m1 = mfc - mfa; - LBMReal m0 = m2 + mfb; - mfa = m0; - m0 *= Kinverse; - m0 += c1o1; - mfb = (m1 * Kinverse - m0 * vv) * K; - mfc = ((m2 - c2o1 * m1 * vv) * Kinverse + v2 * m0) * K; -} -//////////////////////////////////////////////////////////////////////////////// -//! \brief backward chimera transformation \ref backwardInverseChimeraWithK -//! Transformation from central moments to distributions according to Eq. (57)-(65) in -//! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> -//! ] Modified for lower round-off errors. -//////////////////////////////////////////////////////////////////////////////// -inline void IBcumulantK17LBMKernel::backwardInverseChimeraWithK(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2, LBMReal Kinverse, LBMReal K) -{ - using namespace vf::basics::constant; - LBMReal m0 = (((mfc - mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + c1o1) * (v2 - vv) * c1o2) * K; - LBMReal m1 = (((mfa - mfc) - c2o1 * mfb * vv) * Kinverse + (mfa * Kinverse + c1o1) * (-v2)) * K; - mfc = (((mfc + mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + c1o1) * (v2 + vv) * c1o2) * K; - mfa = m0; - mfb = m1; -} -//////////////////////////////////////////////////////////////////////////////// -//! \brief forward chimera transformation \ref forwardChimera -//! Transformation from distributions to central moments according to Eq. (6)-(14) in -//! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> -//! for \f$ K_{abc}=0 \f$. This is to avoid unnessary floating point operations. -//! Modified for lower round-off errors. -//////////////////////////////////////////////////////////////////////////////// -inline void IBcumulantK17LBMKernel::forwardChimera(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2) -{ - using namespace vf::basics::constant; - LBMReal m1 = (mfa + mfc) + mfb; - LBMReal m2 = mfc - mfa; - mfc = (mfc + mfa) + (v2 * m1 - c2o1 * vv * m2); - mfb = m2 - vv * m1; - mfa = m1; -} -//////////////////////////////////////////////////////////////////////////////// -//! \brief backward chimera transformation \ref backwardChimera -//! Transformation from central moments to distributions according to Eq. (57)-(65) in -//! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> -//! for \f$ K_{abc}=0 \f$. This is to avoid unnessary floating point operations. -//! Modified for lower round-off errors. -//////////////////////////////////////////////////////////////////////////////// -inline void IBcumulantK17LBMKernel::backwardChimera(LBMReal& mfa, LBMReal& mfb, LBMReal& mfc, LBMReal vv, LBMReal v2) -{ - using namespace vf::basics::constant; - LBMReal ma = (mfc + mfa * (v2 - vv)) * c1o2 + mfb * (vv - c1o2); - LBMReal mb = ((mfa - mfc) - mfa * v2) - c2o1 * mfb * vv; - mfc = (mfc + mfa * (v2 + vv)) * c1o2 + mfb * (vv + c1o2); - mfb = mb; - mfa = ma; -} - -#endif // IBcumulantK17LBMKernel_h__ \ No newline at end of file diff --git a/src/cpu/LiggghtsCoupling/LBM/IBdynamicsParticleData.h b/src/cpu/LiggghtsCoupling/LBM/IBdynamicsParticleData.h deleted file mode 100644 index 6593a96542bb21ba03bbc1f76f731a416f8314a5..0000000000000000000000000000000000000000 --- a/src/cpu/LiggghtsCoupling/LBM/IBdynamicsParticleData.h +++ /dev/null @@ -1,61 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file DataSet3D.h -//! \ingroup LiggghtsCoupling -//! \author Konstantin Kutscher -//======================================================================================= - -#ifndef IBdynamicsParticleData_h -#define IBdynamicsParticleData_h - -#include<array> - -constexpr auto SOLFRAC_MIN = 0.001; -constexpr auto SOLFRAC_MAX = 0.999; - -struct IBdynamicsParticleData { -public: - IBdynamicsParticleData() - : partId(0), solidFraction(0.) - { - uPart[0] = 0.; - uPart[1] = 0.; - uPart[2] = 0.; - - hydrodynamicForce[0] = 0.; - hydrodynamicForce[1] = 0.; - hydrodynamicForce[2] = 0.; - }; - int partId; - double solidFraction; - std::array<double, 3> uPart; - std::array<double, 3> hydrodynamicForce; -}; - -#endif diff --git a/src/cpu/LiggghtsCoupling/LBM/IBsharpInterfaceLBMKernel.cpp b/src/cpu/LiggghtsCoupling/LBM/IBsharpInterfaceLBMKernel.cpp deleted file mode 100644 index 6d3270248db924c51d5a9ad9cbe8bd0e3fdd60aa..0000000000000000000000000000000000000000 --- a/src/cpu/LiggghtsCoupling/LBM/IBsharpInterfaceLBMKernel.cpp +++ /dev/null @@ -1,1795 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file IBsharpInterfaceLBMKernel.cpp -//! \ingroup LBMKernel -//! \author M. Geier, K. Kutscher, Hesameddin Safari -//======================================================================================= - -#include "BCArray3D.h" -#include "Block3D.h" -#include "D3Q27EsoTwist3DSplittedVector.h" -#include "D3Q27System.h" -#include "DataSet3D.h" -#include "LBMKernel.h" -#include "IBsharpInterfaceLBMKernel.h" -#include "NonNewtonianFluids/LBM/Rheology.h" -#include <cmath> -#include <iostream> -#include <string> - -#define PROOF_CORRECTNESS - -using namespace vf::lbm::dir; -using namespace vf::basics::constant; - -////////////////////////////////////////////////////////////////////////// -IBsharpInterfaceLBMKernel::IBsharpInterfaceLBMKernel() -{ - this->compressible = false; -} -////////////////////////////////////////////////////////////////////////// -void IBsharpInterfaceLBMKernel::initDataSet() -{ - SPtr<DistributionArray3D> f(new D3Q27EsoTwist3DSplittedVector(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9)); - SPtr<DistributionArray3D> h(new D3Q27EsoTwist3DSplittedVector(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9)); // For phase-field - // SPtr<DistributionArray3D> h2(new D3Q27EsoTwist3DSplittedVector(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9)); - // SPtr<PhaseFieldArray3D> divU1(new PhaseFieldArray3D( nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - // CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure(new CbArray3D<real, IndexerX3X2X1>( nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - // pressureOld = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - // p1Old = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - - rhoNode = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - vxNode = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - vyNode = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - vzNode = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - dataSet->setFdistributions(f); - dataSet->setHdistributions(h); // For phase-field - // dataSet->setH2distributions(h2); - // dataSet->setPhaseField(divU1); - // dataSet->setPressureField(pressure); - - phaseField = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.0)); - phaseFieldOld = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 999.0)); - - particleData = std::make_shared<CbArray3D<SPtr<IBdynamicsParticleData>, IndexerX3X2X1>>(nx[0] + 4, nx[1] + 4, nx[2] + 4); - - // divU = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - int minX1 = 0; - int minX2 = 0; - int minX3 = 0; - int maxX1 = nx[0] + 4; - int maxX2 = nx[1] + 4; - int maxX3 = nx[2] + 4; - - for (int x3 = minX3; x3 < maxX3; x3++) { - for (int x2 = minX2; x2 < maxX2; x2++) { - for (int x1 = minX1; x1 < maxX1; x1++) { - (*particleData)(x1, x2, x3) = std::make_shared<IBdynamicsParticleData>(); - } - } - } -} -////////////////////////////////////////////////////////////////////////// -SPtr<LBMKernel> IBsharpInterfaceLBMKernel::clone() -{ - SPtr<LBMKernel> kernel(new IBsharpInterfaceLBMKernel()); - kernel->setNX(nx); - dynamicPointerCast<IBsharpInterfaceLBMKernel>(kernel)->initDataSet(); - kernel->setCollisionFactorMultiphase(this->collFactorL, this->collFactorG); - kernel->setDensityRatio(this->densityRatio); - // kernel->setMultiphaseModelParameters(this->beta, this->kappa); - kernel->setSigma(this->sigma); - kernel->setContactAngle(this->contactAngle); - kernel->setPhiL(this->phiL); - kernel->setPhiH(this->phiH); - kernel->setPhaseFieldRelaxation(this->tauH); - kernel->setMobility(this->mob); - kernel->setInterfaceWidth(this->interfaceWidth); - - kernel->setBCSet(bcSet->clone(kernel)); - kernel->setWithForcing(withForcing); - kernel->setForcingX1(muForcingX1); - kernel->setForcingX2(muForcingX2); - kernel->setForcingX3(muForcingX3); - kernel->setIndex(ix1, ix2, ix3); - kernel->setDeltaT(deltaT); - kernel->setGhostLayerWidth(2); - dynamicPointerCast<IBsharpInterfaceLBMKernel>(kernel)->initForcing(); - - return kernel; -} -////////////////////////////////////////////////////////////////////////// -void IBsharpInterfaceLBMKernel::forwardInverseChimeraWithKincompressible(real &mfa, real &mfb, real &mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) -{ - // using namespace UbMath; - real m2 = mfa + mfc; - real m1 = mfc - mfa; - real m0 = m2 + mfb; - mfa = m0; - m0 *= Kinverse; - m0 += oneMinusRho; - mfb = (m1 * Kinverse - m0 * vv) * K; - mfc = ((m2 - c2o1 * m1 * vv) * Kinverse + v2 * m0) * K; -} - -//////////////////////////////////////////////////////////////////////////////// -void IBsharpInterfaceLBMKernel::backwardInverseChimeraWithKincompressible(real &mfa, real &mfb, real &mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) -{ - // using namespace UbMath; - real m0 = (((mfc - mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 - vv) * c1o2) * K; - real m1 = (((mfa - mfc) - c2o1 * mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (-v2)) * K; - mfc = (((mfc + mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 + vv) * c1o2) * K; - mfa = m0; - mfb = m1; -} - -//////////////////////////////////////////////////////////////////////////////// -void IBsharpInterfaceLBMKernel::forwardChimera(real &mfa, real &mfb, real &mfc, real vv, real v2) -{ - // using namespace UbMath; - real m1 = (mfa + mfc) + mfb; - real m2 = mfc - mfa; - mfc = (mfc + mfa) + (v2 * m1 - c2o1 * vv * m2); - mfb = m2 - vv * m1; - mfa = m1; -} - -void IBsharpInterfaceLBMKernel::backwardChimera(real &mfa, real &mfb, real &mfc, real vv, real v2) -{ - // using namespace UbMath; - real ma = (mfc + mfa * (v2 - vv)) * c1o2 + mfb * (vv - c1o2); - real mb = ((mfa - mfc) - mfa * v2) - c2o1 * mfb * vv; - mfc = (mfc + mfa * (v2 + vv)) * c1o2 + mfb * (vv + c1o2); - mfb = mb; - mfa = ma; -} - -void IBsharpInterfaceLBMKernel::calculate(int step) -{ - using namespace D3Q27System; - // using namespace UbMath; - - forcingX1 = 0.0; - forcingX2 = 0.0; - forcingX3 = 0.0; - - real oneOverInterfaceScale = c4o1 / interfaceWidth; // 1.0;//1.5; - ///////////////////////////////////// - - localDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); - nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); - restDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); - - localDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions(); - nonLocalDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions(); - restDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions(); - - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure = dataSet->getPressureField(); - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - const int bcArrayMaxX1 = (int)bcArray->getNX1(); - const int bcArrayMaxX2 = (int)bcArray->getNX2(); - const int bcArrayMaxX3 = (int)bcArray->getNX3(); - - int minX1 = ghostLayerWidth; - int minX2 = ghostLayerWidth; - int minX3 = ghostLayerWidth; - int maxX1 = bcArrayMaxX1 - ghostLayerWidth; - int maxX2 = bcArrayMaxX2 - ghostLayerWidth; - int maxX3 = bcArrayMaxX3 - ghostLayerWidth; - // real omegaDRho = 1.0;// 1.25;// 1.3; - for (int x3 = minX3 - ghostLayerWidth; x3 < maxX3 + ghostLayerWidth; x3++) { - for (int x2 = minX2 - ghostLayerWidth; x2 < maxX2 + ghostLayerWidth; x2++) { - for (int x1 = minX1 - ghostLayerWidth; x1 < maxX1 + ghostLayerWidth; x1++) { - if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { - int x1p = x1 + 1; - int x2p = x2 + 1; - int x3p = x3 + 1; - - real mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - real mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - real mfbbb = (*this->restDistributionsH1)(x1, x2, x3); - - // omegaDRho = 2.0;// 1.5; - // real phiOld = (*phaseField)(x1, x2, x3); - - (*phaseField)(x1, x2, x3) = - (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca) + (mfcaa + mfacc))) + (((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) { - (*phaseField)(x1, x2, x3) = c1o1; - } - - if ((*phaseField)(x1, x2, x3) < 0) { - (*phaseField)(x1, x2, x3) = 0; - } - } - } - } - } - - this->swapDistributions(); - for (int x3 = minX3 - ghostLayerWidth + 1; x3 < maxX3 + ghostLayerWidth - 1; x3++) { - for (int x2 = minX2 - ghostLayerWidth + 1; x2 < maxX2 + ghostLayerWidth - 1; x2++) { - for (int x1 = minX1 - ghostLayerWidth + 1; x1 < maxX1 + ghostLayerWidth - 1; x1++) { - if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { - // int x1p = x1 + 1; - // int x2p = x2 + 1; - // int x3p = x3 + 1; - - SPtr<DistributionArray3D> distributionH = this->getDataSet()->getHdistributions(); - real hh[27]; - distributionH->getPostCollisionDistribution(hh, x1, x2, x3); - real phiD, vxP, vyP, vzP; - - D3Q27System::calcIncompMacroscopicValues(hh, phiD, vxP, vyP, vzP); - (*phaseFieldOld)(x1, x2, x3) = phiD; - - SPtr<DistributionArray3D> distribution = this->getDataSet()->getFdistributions(); - real ff[27]; - distribution->getPostCollisionDistribution(ff, x1, x2, x3); - real rhoG, vx, vy, vz; - - D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz); - - (*rhoNode)(x1, x2, x3) = rhoG; // *((*phaseField)(x1, x2, x3) > c1o2 ? densityRatio : c1o1); - (*vxNode)(x1, x2, x3) = vx; - (*vyNode)(x1, x2, x3) = vy; - (*vzNode)(x1, x2, x3) = vz; - } - } - } - } - - SPtr<DistributionArray3D> distribution = this->getDataSet()->getFdistributions(); - real ff[27]; - for (int x3 = minX3 - 1; x3 < maxX3 + 1; x3++) { - for (int x2 = minX2 - 1; x2 < maxX2 + 1; x2++) { - for (int x1 = minX1 - 1; x1 < maxX1 + 1; x1++) { - if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { - // int x1p = x1 + 1; - // int x2p = x2 + 1; - // int x3p = x3 + 1; - findNeighbors(phaseFieldOld, x1, x2, x3); - ////////////////////////////////Momentum conservation experiment 06.03.2023 - // surfacetension - - if ((((*phaseField)(x1, x2, x3) <= c1o2) || phi[d000] <= c1o2) && - ((phi[dP00] > c1o2) || (phi[dM00] > c1o2) || (phi[d00P] > c1o2) || (phi[d00M] > c1o2) || (phi[d0M0] > c1o2) || (phi[d0P0] > c1o2) || (phi[dPP0] > c1o2) || (phi[dPM0] > c1o2) || (phi[dP0P] > c1o2) || (phi[dP0M] > c1o2) || (phi[dMP0] > c1o2) || - (phi[dMM0] > c1o2) || (phi[dM0P] > c1o2) || (phi[dM0M] > c1o2) || (phi[d0PM] > c1o2) || (phi[d0MM] > c1o2) || (phi[d0PP] > c1o2) || (phi[d0MP] > c1o2) || (phi[dPPP] > c1o2) || (phi[dPMP] > c1o2) || (phi[dMPP] > c1o2) || (phi[dMMP] > c1o2) || - (phi[dPPM] > c1o2) || (phi[dPMM] > c1o2) || (phi[dMPM] > c1o2) || (phi[dMMM] > c1o2))) { - real vx = (*vxNode)(x1, x2, x3); - real vy = (*vyNode)(x1, x2, x3); - real vz = (*vzNode)(x1, x2, x3); - findNeighbors(phaseField, x1, x2, x3); - real laplacePressure = c12o1 * sigma * computeCurvature_phi(); - // if (step > 5000) - // UBLOG(logINFO, x1 << ","<< x2 << ","<< x3 << " "<< "3*dP=" << laplacePressure << " dP=" << laplacePressure / 3.0<< " phi=" << phi[d000]<< "\n"); - findNeighbors(phaseFieldOld, x1, x2, x3); - - // 16.03.23 c: BB gas side with updated boundary velocity - - distribution->getPostCollisionDistribution(ff, x1, x2, x3); - real rhoG; - if (phi[d000] > c1o2) { // initialization necessary - real sumRho = 0; - real sumWeight = 1.e-100; - for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - if ((phi[fdir] <= c1o2)) { - sumRho += WEIGTH[fdir] * (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); - sumWeight += WEIGTH[fdir]; - } - } - rhoG = sumRho / sumWeight; // uncheck excpetion: what if there is no adequate neighbor? - for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - if ((phi[fdir] > c1o2)) { - real vxBC = ((*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real vyBC = ((*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real vzBC = ((*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC); - real vDir = (D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + D3Q27System::DX3[fdir] * vz); - vBC = (vBC + vDir) / (c2o1 + vBC - vDir); - real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - - if ((phi[D3Q27System::INVDIR[fdir]] > c1o2)) { - /// here we need reconstruction from scrach - real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), - (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), - (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), - (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew; - - // real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - // real fGEQOld = D3Q27System::getIncompFeqForDirection(fdir, (*rhoNode)(x1, x2, x3), vx, vy, vz); - // real fGEQNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz); - real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew; // fL -feqOLD + feqNew; - // real fBC = fGG - c6o1 * WEIGTH[fdir] * (vBC); - distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - ///// other possibility is tor replace the node itself instead of the neighbor (only c1o1 of them is allowed!) - // real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - // real feqOLD = D3Q27System::getIncompFeqForDirection(fdir, (*rhoNode)(x1 , x2 , x3 ), (*vxNode)(x1 , x2 , x3 ), (*vyNode)(x1 , x2 , x3 ), (*vzNode)(x1 , x2 , x3 )); - // real feqNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG, (*vxNode)(x1 , x2 , x3 ), (*vyNode)(x1 , x2 , x3 ), (*vzNode)(x1, x2, x3 )); - // real fBC = fG - feqOLD + feqNew; - // distribution->setPostCollisionDistributionForDirection(fBC, x1, x2, x3, fdir); - } - } - } - // distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1, x2, x3, d000); - { - real fL = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, d000); - real feqOLD = D3Q27System::getIncompFeqForDirection(d000, (*rhoNode)(x1, x2, x3), vx, vy, vz); - real feqNew = D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz); - distribution->setPostCollisionDistributionForDirection(fL - feqOLD + feqNew, x1, x2, x3, d000); - } - - } else { // no refill of gas required - rhoG = (*rhoNode)(x1, x2, x3); - if ((*phaseField)(x1, x2, x3) <= c1o2) { // no refill liquid - for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - if ((phi[fdir] > c1o2)) { - real vxBC = ((*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real vyBC = ((*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real vzBC = ((*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC); - real vDir = (D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + D3Q27System::DX3[fdir] * vz); - // real dvDir = vBC - vDir; - vBC = (vBC + vDir) / (c2o1 + vBC - vDir); - real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - real fBC = fG - c6o1 * WEIGTH[fdir] * (vBC); - // real fGEQ = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz); - // real fBC = (-fGInv + fGInvEQ + fGEQ - c6o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC); - // real fBC = (fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC); - - // real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + - // D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); real feqNew = - // D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + - // D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / - // (c1o1 / collFactorL - c1o1) + feqNew; - - // if ((*phaseField)(x1, x2, x3) <= c1o2) - distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) { - // real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real vzBC = c1o2 * (vz + (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + - // D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); real feqL = - // D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + - // D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * - // (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * - // (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + - // D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * - // (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - - // distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio*0 - fL - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, - // x2, x3, fdir); distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL-2*fL+2*feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * - // D3Q27System::DX3[fdir]), x1, x2, x3, fdir); real flW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC; real flWW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0 - // - c1o1) * vBC; real fLi = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir); real number = 666; distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * - // 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC, x1, x2, x3, fdir); - //// real eqBC= D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, vx, vy, vz); - //// real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); - // real eqBC = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + - //D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + - //D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - - ////real flNew = (fBC + fG-eqBC-eqG) / densityRatio +eqBC+eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC; - // distribution->setPostCollisionDistributionForDirection(c2o1*laplacePressure * WEIGTH[fdir] +(fBC + fG - eqBC - eqG) / densityRatio + (eqBC + eqG) - fL, x1, x2, x3, fdir);// -0* (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, - //fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - // //if (vxBC != 0) { - // // int set = 0; - // //} - - real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), - (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), - (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), - (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), - (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - - real eqBC = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, vx, vy, vz); - real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); - real eqBCN = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), - (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real eqGN = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), - (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - - // real flNew = (fBC + fG-eqBC-eqG) / densityRatio +eqBC+eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC; - real laplacePressureBC; - if ((x1 + D3Q27System::DX1[fdir] > 0) && (x1 + D3Q27System::DX1[fdir] < maxX1 + 1) && (x2 + D3Q27System::DX2[fdir] > 0) && (x2 + D3Q27System::DX2[fdir] < maxX2 + 1) && (x3 + D3Q27System::DX3[fdir] > 0) && (x3 + D3Q27System::DX3[fdir] < maxX3 + 1)) { - findNeighbors(phaseField, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); - laplacePressureBC = c6o1 * c2o1 * computeCurvature_phi() * sigma; - findNeighbors(phaseFieldOld, x1, x2, x3); - } else - laplacePressureBC = laplacePressure; // curv; // reset to the above - laplacePressureBC = laplacePressure * (c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) / - (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) + - laplacePressureBC * (-c1o1 + c2o1 * (*phaseField)(x1, x2, x3)) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // laplacePressureBC *= sigma; - distribution->setPostCollisionDistributionForDirection(laplacePressureBC * WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio * 0) - fL - 0 * (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, - x2, x3, fdir); - } - } - } - } else { // refill liquid - - for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - if ((phi[fdir] > c1o2)) { - real vxBC = ((*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real vyBC = ((*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real vzBC = ((*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC); - real vDir = (D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + D3Q27System::DX3[fdir] * vz); - // real dvDir = vBC - vDir; - vBC = (vBC + vDir) / (c2o1 + vBC - vDir); - real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - real fBC = fG - c6o1 * WEIGTH[fdir] * (vBC); - - // real fGEQ = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz); - // real fBC = (-fGInv + fGInvEQ + fGEQ - c6o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC); - // real fBC = (fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC); - - // real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + - // D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); real feqNew = - // D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + - // D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / - // (c1o1 / collFactorL - c1o1) + feqNew; - - ff[D3Q27System::INVDIR[fdir]] = fBC; - if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) { - // real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + - // D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); real feqL = - // D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + - // D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * - // (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * - // (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + - // D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * - // (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - - // distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio*0 - fL- (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vBC), x1, x2, x3, fdir); - // distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * - // D3Q27System::DX3[fdir]), x1, x2, x3, fdir); distribution->setPostCollisionDistributionForDirection(0, x1, x2, x3, fdir); real flW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC; real flWW = (fBC + fG) / densityRatio * 0 - // - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC; real fLi = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir); - // real eqBC = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + - //D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + - //D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // //real flNew = (fBC + fG - eqBC - eqG) / densityRatio + eqBC + eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC; - // distribution->setPostCollisionDistributionForDirection(c2o1*laplacePressure* WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBC + eqG) - fL, x1, x2, x3, fdir);// - 0*(feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, - //fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - - //// real number = 666; - - real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), - (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), - (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), - (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), - (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - - real eqBC = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, vx, vy, vz); - real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); - real eqBCN = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), - (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real eqGN = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), - (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - - // real flNew = (fBC + fG-eqBC-eqG) / densityRatio +eqBC+eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC; - real laplacePressureBC; - if ((x1 + D3Q27System::DX1[fdir] > 0) && (x1 + D3Q27System::DX1[fdir] < maxX1 + 1) && (x2 + D3Q27System::DX2[fdir] > 0) && (x2 + D3Q27System::DX2[fdir] < maxX2 + 1) && (x3 + D3Q27System::DX3[fdir] > 0) && (x3 + D3Q27System::DX3[fdir] < maxX3 + 1)) { - findNeighbors(phaseField, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); - laplacePressureBC = c12o1 * computeCurvature_phi() * sigma; - findNeighbors(phaseFieldOld, x1, x2, x3); - } else - laplacePressureBC = laplacePressure; // curv; // reset to the above - laplacePressureBC = laplacePressure * (c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) / - (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) + - laplacePressureBC * (-c1o1 + c2o1 * (*phaseField)(x1, x2, x3)) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // laplacePressureBC *= sigma; - distribution->setPostCollisionDistributionForDirection(laplacePressureBC * WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio * 0) - fL - 0 * (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, - x2, x3, fdir); - } - - } else { - ff[D3Q27System::INVDIR[fdir]] = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - ; - } - } - - real sum2 = 1e-100; - real sumRho = 0; - real sumVx = 0; - real sumVy = 0; - real sumVz = 0; - for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - if ((phi[fdir] > c1o2)) { - - sumRho += WEIGTH[fdir] * (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); // * tempRho; - sumVx += WEIGTH[fdir] * (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); - sumVy += WEIGTH[fdir] * (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); - sumVz += WEIGTH[fdir] * (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); - sum2 += WEIGTH[fdir]; - } - } - real rhoL; - D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz); - rhoL = sumRho / sum2; - // vx = sumVx / sum2; - // vy = sumVy / sum2; - // vz = sumVz / sum2; - // rhoL = (*rhoNode)(x1, x2, x3)/densityRatio; - - // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // ff[D3Q27System::INVDIR[fdir]] = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - // } - - for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - if (((phi[fdir] <= c1o2))) //&& (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2))) - { - real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vx, vy, vz); - real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoL, vx, vy, vz); - ff[D3Q27System::INVDIR[fdir]] = (ff[D3Q27System::INVDIR[fdir]] - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew; - distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - } - } - - // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // if ((phi[D3Q27System::INVDIR[fdir]] <= c1o2) && (phi[fdir] > c1o2)) { - // //real vxBC = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // //real vyBC = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // //real vzBC = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // //real vBC = -(D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX2[fdir] * vzBC); - // real vDir = -(D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + D3Q27System::DX2[fdir] * vz); - // //vBC = (vBC + vDir) / (c2o1 -( vBC - vDir)); - // //real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) - c6o1 * WEIGTH[fdir] * vDir; - // //real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) + c6o1 * WEIGTH[fdir] * (vx * D3Q27System::DX1[fdir] + vy * D3Q27System::DX2[fdir] + vz * - //D3Q27System::DX3[fdir]); real fL= D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz); distribution->setPostCollisionDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); ff[fdir] = fL; - // } - // if (!(phi[fdir] > c1o2)) { - // //std::cout << "Eq at dir=" << fdir << "\n"; - // real vxBC = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // real vyBC = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // real vzBC = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // real feqL = D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz); - // distribution->setPostCollisionDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); - // ff[fdir] = feqL; - // } - // } - // real sumRho2= 0; - // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // sumRho2 += ff[fdir];// -D3Q27System::getIncompFeqForDirection(fdir, 0, sumVx, sumVy, sumVz); - // } - // ff[d000] = rhoL - sumRho2; - // rhoL = 27.0 / 18.0 * sumRho2; - // std::cout << "rhoL=" << rhoL <<" sumRho="<< 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "\n"; - D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz); - // std::cout << "RecalCrhoL=" << rhoL << " sumRho=" << 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "ffRest="<<ff[d000]<<"\n"; - // distribution->setPostCollisionDistributionForDirection(ff[d000], x1, x2, x3, d000); - { - real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, d000); - real feqOLD = D3Q27System::getIncompFeqForDirection(d000, (*rhoNode)(x1, x2, x3), vx, vy, vz); - real feqNew = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz); - distribution->setPostCollisionDistributionForDirection(fG - feqOLD + feqNew, x1, x2, x3, d000); - } - // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // ff[D3Q27System::INVDIR[fdir]]=distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - // } - // D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz); - // std::cout << "AfterRead rhoL=" << rhoL << " rhoGToL=" << rhoG/densityRatio << " vx=" << vx << " vy=" << vy << "ffRest=" << ff[d000] <<" x="<<x1<<" y="<<x2<<" z="<<x3<< "\n"; - - // real feqL = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz); - // distribution->setPostCollisionDistributionForDirection(feqL, x1, x2, x3, d000); - } - } - - } // end Loop - } - } - } - } - - this->swapDistributions(); - - real collFactorM; - - 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; - - findNeighbors(phaseField, x1, x2, x3); - - real mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3); - real mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p); - real mfbbb = (*this->restDistributionsF)(x1, x2, x3); - - real f[D3Q27System::ENDF + 1]; - real fEq[D3Q27System::ENDF + 1]; - real fEqSolid[D3Q27System::ENDF + 1]; - real fPre[D3Q27System::ENDF + 1]; - - f[vf::lbm::dir::d000] = mfbbb; - - f[vf::lbm::dir::dP00] = mfcbb; - f[vf::lbm::dir::d0P0] = mfbcb; - f[vf::lbm::dir::d00P] = mfbbc; - f[vf::lbm::dir::dPP0] = mfccb; - f[vf::lbm::dir::dMP0] = mfacb; - f[vf::lbm::dir::dP0P] = mfcbc; - f[vf::lbm::dir::dM0P] = mfabc; - f[vf::lbm::dir::d0PP] = mfbcc; - f[vf::lbm::dir::d0MP] = mfbac; - f[vf::lbm::dir::dPPP] = mfccc; - f[vf::lbm::dir::dMPP] = mfacc; - f[vf::lbm::dir::dPMP] = mfcac; - f[vf::lbm::dir::dMMP] = mfaac; - - f[vf::lbm::dir::dM00] = mfabb; - f[vf::lbm::dir::d0M0] = mfbab; - f[vf::lbm::dir::d00M] = mfbba; - f[vf::lbm::dir::dMM0] = mfaab; - f[vf::lbm::dir::dPM0] = mfcab; - f[vf::lbm::dir::dM0M] = mfaba; - f[vf::lbm::dir::dP0M] = mfcba; - f[vf::lbm::dir::d0MM] = mfbaa; - f[vf::lbm::dir::d0PM] = mfbca; - f[vf::lbm::dir::dMMM] = mfaaa; - f[vf::lbm::dir::dPMM] = mfcaa; - f[vf::lbm::dir::dMPM] = mfaca; - f[vf::lbm::dir::dPPM] = mfcca; - - if ((*particleData)(x1, x2, x3)->solidFraction > SOLFRAC_MIN) { - fPre[vf::lbm::dir::d000] = mfbbb; - - fPre[vf::lbm::dir::dP00] = mfcbb; - fPre[vf::lbm::dir::d0P0] = mfbcb; - fPre[vf::lbm::dir::d00P] = mfbbc; - fPre[vf::lbm::dir::dPP0] = mfccb; - fPre[vf::lbm::dir::dMP0] = mfacb; - fPre[vf::lbm::dir::dP0P] = mfcbc; - fPre[vf::lbm::dir::dM0P] = mfabc; - fPre[vf::lbm::dir::d0PP] = mfbcc; - fPre[vf::lbm::dir::d0MP] = mfbac; - fPre[vf::lbm::dir::dPPP] = mfccc; - fPre[vf::lbm::dir::dMPP] = mfacc; - fPre[vf::lbm::dir::dPMP] = mfcac; - fPre[vf::lbm::dir::dMMP] = mfaac; - - fPre[vf::lbm::dir::dM00] = mfabb; - fPre[vf::lbm::dir::d0M0] = mfbab; - fPre[vf::lbm::dir::d00M] = mfbba; - fPre[vf::lbm::dir::dMM0] = mfaab; - fPre[vf::lbm::dir::dPM0] = mfcab; - fPre[vf::lbm::dir::dM0M] = mfaba; - fPre[vf::lbm::dir::dP0M] = mfcba; - fPre[vf::lbm::dir::d0MM] = mfbaa; - fPre[vf::lbm::dir::d0PM] = mfbca; - fPre[vf::lbm::dir::dMMM] = mfaaa; - fPre[vf::lbm::dir::dPMM] = mfcaa; - fPre[vf::lbm::dir::dMPM] = mfaca; - fPre[vf::lbm::dir::dPPM] = mfcca; - } - - (*particleData)(x1, x2, x3)->hydrodynamicForce.fill(0.0); - - - - real rhoH = 1.0; - real rhoL = 1.0 / densityRatio; - - // real rhoToPhi = (rhoH - rhoL) / (phiH - phiL); - - real dX1_phi = gradX1_phi(); - real dX2_phi = gradX2_phi(); - real dX3_phi = gradX3_phi(); - - real denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi) + 1.0e-20; //+ 1e-9+1e-3; - // 01.09.2022: unclear what value we have to add to the normal: lager values better cut of in gas phase? - real normX1 = dX1_phi / denom; - real normX2 = dX2_phi / denom; - real normX3 = dX3_phi / denom; - - collFactorM = phi[d000] > c1o2 ? collFactorL : collFactorG; - // real collFactorMInv = phi[d000] > c1o2 ? collFactorG : collFactorL; - - // real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi(); - - //----------- Calculating Macroscopic Values ------------- - real rho = phi[d000] > c1o2 ? rhoH : rhoL; - - real m0, m1, m2; - real rhoRef = c1o1; - - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + (mfcbb - mfabb)) / rhoRef; - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + (mfbcb - mfbab)) / rhoRef; - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + (mfbbc - mfbba)) / rhoRef; - ///////////////////// - - forcingX1 = 0.0; - forcingX2 = 0.0; - forcingX3 = 0.0; - - if (withForcing) { - muRho = rho; - muPhi = phi[d000]; - forcingX1 += muForcingX1.Eval(); - forcingX2 += muForcingX2.Eval(); - forcingX3 += muForcingX3.Eval(); - - vvx += (forcingX1)*deltaT * c1o2; - vvy += (forcingX2)*deltaT * c1o2; - vvz += (forcingX3)*deltaT * c1o2; - } - if ((*particleData)(x1, x2, x3)->solidFraction <= SOLFRAC_MAX) { - real vx2; - real vy2; - real vz2; - vx2 = vvx * vvx; - vy2 = vvy * vvy; - vz2 = vvz * vvz; - /////////////////////////////////////////////////////////////////////////////////////////// - real oMdrho; - /////////////// - - oMdrho = mfccc + mfaaa; - m0 = mfaca + mfcac; - m1 = mfacc + mfcaa; - m2 = mfaac + mfcca; - oMdrho += m0; - m1 += m2; - oMdrho += m1; - m0 = mfbac + mfbca; - m1 = mfbaa + mfbcc; - m0 += m1; - m1 = mfabc + mfcba; - m2 = mfaba + mfcbc; - m1 += m2; - m0 += m1; - m1 = mfacb + mfcab; - m2 = mfaab + mfccb; - m1 += m2; - m0 += m1; - oMdrho += m0; - m0 = mfabb + mfcbb; - m1 = mfbab + mfbcb; - m2 = mfbba + mfbbc; - m0 += m1 + m2; - m0 += mfbbb; // hat gefehlt - oMdrho = (rhoRef - (oMdrho + m0)) / rhoRef; // 12.03.21 check derivation!!!! - - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - // real qudricLimit = 0.01 / (c1o1 + 1.0e4 * phi[d000] * (c1o1 - phi[d000])); - // real qudricLimit = 0.01 / (c1o1 + (((*phaseField)(x1, x2, x3) > c1o2) ? 1.0e6 * phi[d000] * (c1o1 - phi[d000]):c0o1)); - real qudricLimit = 0.01; - - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (6)-(14) in \ref - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, vvz, vz2, c36o1, c1o36, oMdrho); - forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, vvz, vz2, c9o1, c1o9, oMdrho); - forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, vvz, vz2, c36o1, c1o36, oMdrho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, vvz, vz2, c9o1, c1o9, oMdrho); - forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, vvz, vz2, c9o4, c4o9, oMdrho); - forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, vvz, vz2, c9o1, c1o9, oMdrho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, vvz, vz2, c36o1, c1o36, oMdrho); - forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, vvz, vz2, c9o1, c1o9, oMdrho); - forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, vvz, vz2, c36o1, c1o36, oMdrho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, vvy, vy2, c6o1, c1o6, oMdrho); - forwardChimera(mfaab, mfabb, mfacb, vvy, vy2); - forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, vvy, vy2, c18o1, c1o18, oMdrho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, vvy, vy2, c3o2, c2o3, oMdrho); - forwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2); - forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, vvy, vy2, c9o2, c2o9, oMdrho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, vvy, vy2, c6o1, c1o6, oMdrho); - forwardChimera(mfcab, mfcbb, mfccb, vvy, vy2); - forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, vvy, vy2, c18o1, c1o18, oMdrho); - - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, vvx, vx2, c1o1, c1o1, oMdrho); - forwardChimera(mfaba, mfbba, mfcba, vvx, vx2); - forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, vvx, vx2, c3o1, c1o3, oMdrho); - forwardChimera(mfaab, mfbab, mfcab, vvx, vx2); - forwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2); - forwardChimera(mfacb, mfbcb, mfccb, vvx, vx2); - forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, vvx, vx2, c3o1, c1o3, oMdrho); - forwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2); - forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, vvx, vx2, c3o1, c1o9, oMdrho); - - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - - // mfaaa = 0.0; - real OxxPyyPzz = 1.0; // omega2 or bulk viscosity - // real OxyyPxzz = 1.;//-s9;//2+s9;// - // real OxyyMxzz = 1.;//2+s9;// - real O4 = 1.; - real O5 = 1.; - real O6 = 1.; - ///// - - /////fourth order parameters; here only for test. Move out of loop! - - real OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0))); - real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM); - real Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / - (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0)); - real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - // FIXME: warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::B' ) - real BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / - (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - - // Cum 4. - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab); - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); - - real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - - // Cum 5. - real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho; - real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho; - real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho; - - // Cum 6. - real 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 - real mxxPyyPzz = mfcaa + mfaca + mfaac; - mxxPyyPzz -= mfaaa; // 12.03.21 shifted by mfaaa - // mxxPyyPzz-=(mfaaa+mfaaaS)*c1o2;//12.03.21 shifted by mfaaa - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - /// - real mmfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - real mmfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz); - real mmfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz); - real mmfabb = mfabb; - real mmfbab = mfbab; - real mmfbba = mfbba; - /// - - real dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz) * 0; - // real dxux = -c1o2 * (mxxMyy + mxxMzz) * collFactorM - mfaaa * c1o3* omegaDRho; - real dyuy = dxux + collFactorM * c3o2 * mxxMyy; - real dzuz = dxux + collFactorM * c3o2 * mxxMzz; - real Dxy = -c3o1 * collFactorM * mfbba; - real Dxz = -c3o1 * collFactorM * mfbab; - real Dyz = -c3o1 * collFactorM * mfabb; - - if (phi[d000] > c1o2) { - /// QR eddyviscosity: - real eddyR = -(Dxy * Dxy + Dxz * Dxz + c1o3 * dxux * dxux) * (dxux) - (Dxy * Dxy + Dyz * Dyz + c1o3 * dyuy * dyuy) * dyuy - (Dxz * Dxz + Dyz * Dyz + c1o3 * dzuz * dzuz) * dzuz - c2o1 * Dxy * Dxz * Dyz; - real eddyQ = Dxy * Dxz + Dxy * Dyz + Dxz * Dyz + c1o2 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz); - real nuEddy = 5.0e1 * (eddyR / (eddyQ + 1e-100)) * (dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi); - nuEddy = (nuEddy < c1o1 / collFactorM) ? c1o1 / collFactorM : nuEddy; - collFactorM = c1o1 / nuEddy; - // collFactorM = c1o1 / (c1o1 / collFactorM +1.e2*nuEddy*(dX1_phi*dX1_phi+dX2_phi*dX2_phi+dX3_phi*dX3_phi)); - collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM; - OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0))); - OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM); - Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / - (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0)); - A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / - (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // non Newtonian fluid collision factor - if (phi[d000] > c1o2) { - real shearRate = sqrt(c2o1 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz); - collFactorM = Rheology::getBinghamCollFactor(collFactorM, shearRate, c1o1); - collFactorM = (collFactorM < c1o1) ? c1o1 : collFactorM; - } - // omega = Rheology::getHerschelBulkleyCollFactor(omega, shearRate, drho); - // omega = Rheology::getBinghamCollFactor(omega, shearRate, drho); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - ///////// - // real mxxMyyh = -c2o1 * (dxux - dyuy) / collFactorMInv * c1o3; - // real mxxMzzh = -c2o1 * (dxux - dzuz) / collFactorMInv * c1o3; - - // relax - mxxPyyPzz += OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vz2 * dzuz); - - mfabb += collFactorM * (-mfabb); - mfbab += collFactorM * (-mfbab); - mfbba += collFactorM * (-mfbba); - - // mxxMyyh += collFactorMInv * (-mxxMyyh) - 3. * (1. - c1o2 * collFactorMInv) * (vx2 * dxux - vy2 * dyuy); - // mxxMzzh += collFactorMInv * (-mxxMzzh) - 3. * (1. - c1o2 * collFactorMInv) * (vx2 * dxux - vz2 * dzuz); - - mxxPyyPzz += mfaaa; // 12.03.21 shifted by mfaaa - - // mxxPyyPzz += (mfaaa + mfaaaS) * c1o2; - // mfaaa = mfaaaS; - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz); - - // 3. - // linear combinations - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - mmfcaa += c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz - mfaaa); - mmfaca += c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz - mfaaa); - mmfaac += c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz - mfaaa); - mmfabb += mfabb; - mmfbab += mfbab; - mmfbba += mfbba; - - // relax - wadjust = Oxyz + (1. - Oxyz) * 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 * (c1o1 / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc); - CUMcac = -O4 * (c1o1 / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac); - CUMcca = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca); - CUMbbc = -O4 * (c1o1 / collFactorM - c1o2) * Dxy * c1o3 * BB + (c1o1 - O4) * (CUMbbc); - CUMbcb = -O4 * (c1o1 / collFactorM - c1o2) * Dxz * c1o3 * BB + (c1o1 - O4) * (CUMbcb); - CUMcbb = -O4 * (c1o1 / collFactorM - c1o2) * Dyz * c1o3 * BB + (c1o1 - O4) * (CUMcbb); - - // 5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - // 6. - CUMccc += O6 * (-CUMccc); - - // back cumulants to central moments - // 4. - mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 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 - c1o1) * oMdrho; - mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho; - mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * 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; - - backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, vvx, vx2, c1o1, c1o1, oMdrho); - backwardChimera(mfaba, mfbba, mfcba, vvx, vx2); - backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, vvx, vx2, c3o1, c1o3, oMdrho); - backwardChimera(mfaab, mfbab, mfcab, vvx, vx2); - backwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2); - backwardChimera(mfacb, mfbcb, mfccb, vvx, vx2); - backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, vvx, vx2, c3o1, c1o3, oMdrho); - backwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2); - backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, vvx, vx2, c9o1, c1o9, oMdrho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, vvy, vy2, c6o1, c1o6, oMdrho); - backwardChimera(mfaab, mfabb, mfacb, vvy, vy2); - backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, vvy, vy2, c18o1, c1o18, oMdrho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, vvy, vy2, c3o2, c2o3, oMdrho); - backwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2); - backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, vvy, vy2, c9o2, c2o9, oMdrho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, vvy, vy2, c6o1, c1o6, oMdrho); - backwardChimera(mfcab, mfcbb, mfccb, vvy, vy2); - backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, vvy, vy2, c18o1, c1o18, oMdrho); - - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, vvz, vz2, c36o1, c1o36, oMdrho); - backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, vvz, vz2, c9o1, c1o9, oMdrho); - backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, vvz, vz2, c36o1, c1o36, oMdrho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, vvz, vz2, c9o1, c1o9, oMdrho); - backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, vvz, vz2, c9o4, c4o9, oMdrho); - backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, vvz, vz2, c9o1, c1o9, oMdrho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, vvz, vz2, c36o1, c1o36, oMdrho); - backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, vvz, vz2, c9o1, c1o9, oMdrho); - backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, vvz, vz2, c36o1, c1o36, oMdrho); - ////////////////////////////////////////////////////////////////////////// - // proof correctness - ////////////////////////////////////////////////////////////////////////// - // #ifdef PROOF_CORRECTNESS - real rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - - if (UbMath::isNaN(rho_post) || UbMath::isInfinity(rho_post)) UB_THROW(UbException(UB_EXARGS, "rho_post is not a number (nan or -1.#IND) or infinity number -1.#INF, node=" + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3))); - - ////////////////////////////////////////////////////////////////////////// - // write distribution - ////////////////////////////////////////////////////////////////////////// - // if (phi[d000] < c1o2) { - (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb; //* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab; //* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba; //* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab; //* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab; //* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba; //* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba; //* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa; //* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca; //* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa; //* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa; //* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca; //* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca; //* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb; //* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb; //* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc; //* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb; //* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb; //* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc; //* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc; //* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc; //* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac; //* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc; //* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc; //* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac; //* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac; //* rho * c1o3; - - (*this->restDistributionsF)(x1, x2, x3) = mfbbb; // *rho* c1o3; - - f[vf::lbm::dir::d000] = mfbbb; - - f[vf::lbm::dir::dP00] = mfcbb; - f[vf::lbm::dir::d0P0] = mfbcb; - f[vf::lbm::dir::d00P] = mfbbc; - f[vf::lbm::dir::dPP0] = mfccb; - f[vf::lbm::dir::dMP0] = mfacb; - f[vf::lbm::dir::dP0P] = mfcbc; - f[vf::lbm::dir::dM0P] = mfabc; - f[vf::lbm::dir::d0PP] = mfbcc; - f[vf::lbm::dir::d0MP] = mfbac; - f[vf::lbm::dir::dPPP] = mfccc; - f[vf::lbm::dir::dMPP] = mfacc; - f[vf::lbm::dir::dPMP] = mfcac; - f[vf::lbm::dir::dMMP] = mfaac; - - f[vf::lbm::dir::dM00] = mfabb; - f[vf::lbm::dir::d0M0] = mfbab; - f[vf::lbm::dir::d00M] = mfbba; - f[vf::lbm::dir::dMM0] = mfaab; - f[vf::lbm::dir::dPM0] = mfcab; - f[vf::lbm::dir::dM0M] = mfaba; - f[vf::lbm::dir::dP0M] = mfcba; - f[vf::lbm::dir::d0MM] = mfbaa; - f[vf::lbm::dir::d0PM] = mfbca; - f[vf::lbm::dir::dMMM] = mfaaa; - f[vf::lbm::dir::dPMM] = mfcaa; - f[vf::lbm::dir::dMPM] = mfaca; - f[vf::lbm::dir::dPPM] = mfcca; - } - if ((*particleData)(x1, x2, x3)->solidFraction >= SOLFRAC_MIN) { - real vx1, vx2, vx3, drho; - D3Q27System::calcIncompMacroscopicValues(f, drho, vx1, vx2, vx3); - D3Q27System::calcIncompFeq(fEq, drho, vx1, vx2, vx3); - - std::array<double, 3> uPart; - uPart[0] = (*particleData)(x1, x2, x3)->uPart[0]; - uPart[1] = (*particleData)(x1, x2, x3)->uPart[1]; - uPart[2] = (*particleData)(x1, x2, x3)->uPart[2]; - - D3Q27System::calcIncompFeq(fEqSolid, drho, uPart[0], uPart[1], uPart[2]); - real rhoPhaseField = (phi[d000] > c1o2) ? c1o1 : c1o1 / densityRatio; - if ((*particleData)(x1, x2, x3)->solidFraction > SOLFRAC_MAX) { - double const bb0 = fEq[vf::lbm::dir::d000] - fEqSolid[vf::lbm::dir::d000]; - f[vf::lbm::dir::d000] = fPre[vf::lbm::dir::d000] + bb0; - for (int iPop = D3Q27System::FSTARTDIR; iPop <= D3Q27System::FENDDIR; iPop++) { - const int iOpp = D3Q27System::INVDIR[iPop]; - double const bb = ((fPre[iOpp] - fEq[iOpp]) - (fPre[iPop] - fEqSolid[iPop])); - double const bbOpp = ((fPre[iPop] - fEq[iPop]) - (fPre[iOpp] - fEqSolid[iOpp])); - - f[iPop] = fPre[iPop] + bb; - f[iOpp] = fPre[iOpp] + bbOpp; - - (*particleData)(x1, x2, x3)->hydrodynamicForce[0] -= D3Q27System::DX1[iPop] * (bb - bbOpp) * rhoPhaseField; - (*particleData)(x1, x2, x3)->hydrodynamicForce[1] -= D3Q27System::DX2[iPop] * (bb - bbOpp) * rhoPhaseField; - (*particleData)(x1, x2, x3)->hydrodynamicForce[2] -= D3Q27System::DX3[iPop] * (bb - bbOpp) * rhoPhaseField; - } - } else { /* particleData.solidFraction < SOLFRAC_MAX */ - // #ifdef LBDEM_USE_WEIGHING - double const ooo = 1. / collFactorM - 0.5; - double const B = (*particleData)(x1, x2, x3)->solidFraction * ooo / ((1. - (*particleData)(x1, x2, x3)->solidFraction) + ooo); - // #else - // T const B = particleData.solidFraction; - // #endif - double const oneMinB = 1. - B; - - double const bb0 = fEq[vf::lbm::dir::d000] - fEqSolid[vf::lbm::dir::d000]; - f[vf::lbm::dir::d000] = fPre[vf::lbm::dir::d000] + oneMinB * (f[vf::lbm::dir::d000] - fPre[vf::lbm::dir::d000]) + B * bb0; - - for (int iPop = D3Q27System::FSTARTDIR; iPop <= D3Q27System::FENDDIR; iPop++) { - int const iOpp = D3Q27System::INVDIR[iPop]; - double const bb = B * ((fPre[iOpp] - fEq[iOpp]) - (fPre[iPop] - fEqSolid[iPop])); - double const bbOpp = B * ((fPre[iPop] - fEq[iPop]) - (fPre[iOpp] - fEqSolid[iOpp])); - - f[iPop] = fPre[iPop] + oneMinB * (f[iPop] - fPre[iPop]) + bb; - f[iOpp] = fPre[iOpp] + oneMinB * (f[iOpp] - fPre[iOpp]) + bbOpp; - - (*particleData)(x1, x2, x3)->hydrodynamicForce[0] -= D3Q27System::DX1[iPop] * (bb - bbOpp) * rhoPhaseField; - (*particleData)(x1, x2, x3)->hydrodynamicForce[1] -= D3Q27System::DX2[iPop] * (bb - bbOpp) * rhoPhaseField; - (*particleData)(x1, x2, x3)->hydrodynamicForce[2] -= D3Q27System::DX3[iPop] * (bb - bbOpp) * rhoPhaseField; - } - } /* if solidFraction > SOLFRAC_MAX */ - - (*this->restDistributionsF)(x1, x2, x3) = f[vf::lbm::dir::d000]; - - (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = f[vf::lbm::dir::dM00]; - (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = f[vf::lbm::dir::d0M0]; - (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = f[vf::lbm::dir::d00M]; - (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = f[vf::lbm::dir::dMM0]; - (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = f[vf::lbm::dir::dPM0]; - (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = f[vf::lbm::dir::dM0M]; - (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = f[vf::lbm::dir::dP0M]; - (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = f[vf::lbm::dir::d0MM]; - (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = f[vf::lbm::dir::d0PM]; - (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = f[vf::lbm::dir::dMMM]; - (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = f[vf::lbm::dir::dPMM]; - (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = f[vf::lbm::dir::dMPM]; - (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[vf::lbm::dir::dPPM]; - - (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = f[vf::lbm::dir::dP00]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = f[vf::lbm::dir::d0P0]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = f[vf::lbm::dir::d00P]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = f[vf::lbm::dir::dPP0]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = f[vf::lbm::dir::dMP0]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = f[vf::lbm::dir::dP0P]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = f[vf::lbm::dir::dM0P]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = f[vf::lbm::dir::d0PP]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = f[vf::lbm::dir::d0MP]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[vf::lbm::dir::dPPP]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = f[vf::lbm::dir::dMPP]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[vf::lbm::dir::dPMP]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = f[vf::lbm::dir::dMMP]; - } - - - - ///////////////////// P H A S E - F I E L D S O L V E R - //////////////////////////////////////////// - /////CUMULANT PHASE-FIELD - real omegaD = 1.0 / (3.0 * mob + 0.5); - { - mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - mfbbb = (*this->restDistributionsH1)(x1, x2, x3); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // second component - real concentration = - ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; - //////////////////////////////////////////////////////////////////////////////////// - real oneMinusRho = c1o1 - concentration; - - real cx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + (mfcbb - mfabb)); - real cy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + (mfbcb - mfbab)); - real cz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + (mfbbc - mfbba)); - - //////////////////////////////////////////////////////////////////////////////////// - // calculate the square of velocities for this lattice node - real cx2 = cx * cx; - real cy2 = cy * cy; - real cz2 = cz * cz; - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (6)-(14) in \ref - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho); - forwardChimera(mfaab, mfabb, mfacb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho); - forwardChimera(mfbab, mfbbb, mfbcb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho); - forwardChimera(mfcab, mfcbb, mfccb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho); - forwardChimera(mfaba, mfbba, mfcba, cx, cx2); - forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho); - forwardChimera(mfaab, mfbab, mfcab, cx, cx2); - forwardChimera(mfabb, mfbbb, mfcbb, cx, cx2); - forwardChimera(mfacb, mfbcb, mfccb, cx, cx2); - forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho); - forwardChimera(mfabc, mfbbc, mfcbc, cx, cx2); - forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c3o1, c1o9, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - //! - experimental Cumulant ... to be published ... hopefully - //! - - // linearized orthogonalization of 3rd order central moments - real Mabc = mfabc - mfaba * c1o3; - real Mbca = mfbca - mfbaa * c1o3; - real Macb = mfacb - mfaab * c1o3; - real Mcba = mfcba - mfaba * c1o3; - real Mcab = mfcab - mfaab * c1o3; - real Mbac = mfbac - mfbaa * c1o3; - // linearized orthogonalization of 5th order central moments - real Mcbc = mfcbc - mfaba * c1o9; - real Mbcc = mfbcc - mfbaa * c1o9; - real Mccb = mfccb - mfaab * c1o9; - - // 31.05.2022 addaptive mobility - // omegaD = c1o1 + (sqrt((cx - vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration))) / (sqrt((cx - vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * - // concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration)) + fabs((1.0 - concentration) * (concentration)) * c1o6 * oneOverInterfaceScale+1.0e-200); omegaD = c2o1 * (concentration * (concentration - c1o1)) / (-c6o1 * (sqrt((cx - - // vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration))) + (concentration * (concentration - c1o1))+1.0e-200); - // collision of 1st order moments - cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration)*c1o3 * oneOverInterfaceScale; - cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration)*c1o3 * oneOverInterfaceScale; - cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration)*c1o3 * oneOverInterfaceScale; - - cx2 = cx * cx; - cy2 = cy * cy; - cz2 = cz * cz; - - // equilibration of 2nd order moments - mfbba = c0o1; - mfbab = c0o1; - mfabb = c0o1; - - mfcaa = c1o3 * concentration; - mfaca = c1o3 * concentration; - mfaac = c1o3 * concentration; - - // equilibration of 3rd order moments - Mabc = c0o1; - Mbca = c0o1; - Macb = c0o1; - Mcba = c0o1; - Mcab = c0o1; - Mbac = c0o1; - mfbbb = c0o1; - - // from linearized orthogonalization 3rd order central moments to central moments - mfabc = Mabc + mfaba * c1o3; - mfbca = Mbca + mfbaa * c1o3; - mfacb = Macb + mfaab * c1o3; - mfcba = Mcba + mfaba * c1o3; - mfcab = Mcab + mfaab * c1o3; - mfbac = Mbac + mfbaa * c1o3; - - // equilibration of 4th order moments - mfacc = c1o9 * concentration; - mfcac = c1o9 * concentration; - mfcca = c1o9 * concentration; - - mfcbb = c0o1; - mfbcb = c0o1; - mfbbc = c0o1; - - // equilibration of 5th order moments - Mcbc = c0o1; - Mbcc = c0o1; - Mccb = c0o1; - - // from linearized orthogonalization 5th order central moments to central moments - mfcbc = Mcbc + mfaba * c1o9; - mfbcc = Mbcc + mfbaa * c1o9; - mfccb = Mccb + mfaab * c1o9; - - // equilibration of 6th order moment - mfccc = c1o27 * concentration; - - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (88)-(96) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho); - backwardChimera(mfaba, mfbba, mfcba, cx, cx2); - backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho); - backwardChimera(mfaab, mfbab, mfcab, cx, cx2); - backwardChimera(mfabb, mfbbb, mfcbb, cx, cx2); - backwardChimera(mfacb, mfbcb, mfccb, cx, cx2); - backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho); - backwardChimera(mfabc, mfbbc, mfcbc, cx, cx2); - backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c9o1, c1o9, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho); - backwardChimera(mfaab, mfabb, mfacb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho); - backwardChimera(mfbab, mfbbb, mfbcb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho); - backwardChimera(mfcab, mfcbb, mfccb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho); - - (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3) = mfabb; - (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3) = mfbab; - (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3) = mfbba; - (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3) = mfaab; - (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab; - (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3) = mfaba; - (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba; - (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa; - (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca; - (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa; - (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa; - (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca; - (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca; - - (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac; - - (*this->restDistributionsH1)(x1, x2, x3) = mfbbb; - - } - } - } - } - } -} -////////////////////////////////////////////////////////////////////////// - -real IBsharpInterfaceLBMKernel::gradX1_phi() -{ - using namespace D3Q27System; - return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP]))) + - WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) + - +WEIGTH[d0P0] * (phi[dP00] - phi[dM00])); -} - -real IBsharpInterfaceLBMKernel::gradX2_phi() -{ - using namespace D3Q27System; - return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP]) - (phi[dPMP] - phi[dMPM]))) + - WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0]) - (phi[dPM0] - phi[dMP0])))) + - +WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0])); -} - -real IBsharpInterfaceLBMKernel::gradX3_phi() -{ - using namespace D3Q27System; - return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP]))) + - WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) + - +WEIGTH[d0P0] * (phi[d00P] - phi[d00M])); -} - -real IBsharpInterfaceLBMKernel::gradX1_rhoInv(real rhoL, real rhoDIV) -{ - using namespace D3Q27System; - return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) + (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + - ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) + (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])))) + - WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) + (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) + - ((1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0])) + (1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0]))))) + - +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[dP00]) - 1.0 / (rhoL + rhoDIV * phi[dM00]))); -} - -real IBsharpInterfaceLBMKernel::gradX2_rhoInv(real rhoL, real rhoDIV) -{ - using namespace D3Q27System; - return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + - ((1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])) - (1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])))) + - WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM])) + (1.0 / (rhoL + rhoDIV * phi[d0PM]) - 1.0 / (rhoL + rhoDIV * phi[d0MP]))) + - ((1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0])) - (1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0]))))) + - +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d0P0]) - 1.0 / (rhoL + rhoDIV * phi[d0M0]))); -} - -real IBsharpInterfaceLBMKernel::gradX3_rhoInv(real rhoL, real rhoDIV) -{ - using namespace D3Q27System; - return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + - ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) - (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])))) + - WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) - (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) + - ((1.0 / (rhoL + rhoDIV * phi[d0MP]) - 1.0 / (rhoL + rhoDIV * phi[d0PM])) + (1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM]))))) + - +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d00P]) - 1.0 / (rhoL + rhoDIV * phi[d00M]))); -} - -real IBsharpInterfaceLBMKernel::gradX1_phi2() -{ - using namespace D3Q27System; - return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP]))) + - WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) + - +WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00])); -} - -real IBsharpInterfaceLBMKernel::gradX2_phi2() -{ - using namespace D3Q27System; - return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM]))) + - WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) + - +WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0])); -} - -real IBsharpInterfaceLBMKernel::gradX3_phi2() -{ - using namespace D3Q27System; - return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP]))) + - WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) + - +WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M])); -} - -real IBsharpInterfaceLBMKernel::nabla2_phi() -{ - using namespace D3Q27System; - real sum = 0.0; - sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000]))) + (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000])))); - sum += WEIGTH[d0PP] * ((((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000]))) + (((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000]))) + - (((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000])))); - sum += WEIGTH[d00P] * (((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000])) + ((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000])) + ((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000]))); - - return 6.0 * sum; -} - -real IBsharpInterfaceLBMKernel::computeCurvature_phi() -{ - using namespace D3Q27System; - using namespace UbMath; - - real phiX = gradX1_phi(); - real phiY = gradX2_phi(); - real phiZ = gradX3_phi(); - real phiXX = - c4o9 * (phi[dP00] - c2o1 * phi[d000] + phi[dM00]) + (c1o9 * (((phi[dPP0] - c2o1 * phi[d0P0] + phi[dMP0]) + (phi[dPM0] - c2o1 * phi[d0M0] + phi[dMM0])) + ((phi[dP0P] - c2o1 * phi[d00P] + phi[dM0P]) + (phi[dP0M] - c2o1 * phi[d00M] + phi[dM0M]))) + - c1o36 * (((phi[dPPP] - c2o1 * phi[d0PP] + phi[dMPP]) + (phi[dPMP] - c2o1 * phi[d0MP] + phi[dMMP])) + ((phi[dPPM] - c2o1 * phi[d0PM] + phi[dMPM]) + (phi[dPMM] - c2o1 * phi[d0MM] + phi[dMMM])))); - real phiYY = - c4o9 * (phi[d0P0] - c2o1 * phi[d000] + phi[d0M0]) + (c1o9 * (((phi[dPP0] - c2o1 * phi[dP00] + phi[dPM0]) + (phi[dMP0] - c2o1 * phi[dM00] + phi[dMM0])) + ((phi[d0PP] - c2o1 * phi[d00P] + phi[d0MP]) + (phi[d0PM] - c2o1 * phi[d00M] + phi[d0MM]))) + - c1o36 * (((phi[dPPP] - c2o1 * phi[dP0P] + phi[dPMP]) + (phi[dMPM] - c2o1 * phi[dM0M] + phi[dMMM])) + ((phi[dMPP] - c2o1 * phi[dM0P] + phi[dMMP]) + (phi[dPPM] - c2o1 * phi[dP0M] + phi[dPMM])))); - real phiZZ = - c4o9 * (phi[d00P] - c2o1 * phi[d000] + phi[d00M]) + (c1o9 * (((phi[dM0P] - c2o1 * phi[dM00] + phi[dM0M]) + (phi[dP0P] - c2o1 * phi[dP00] + phi[dP0M])) + ((phi[d0MP] - c2o1 * phi[d0M0] + phi[d0MM]) + (phi[d0PP] - c2o1 * phi[d0P0] + phi[d0PM]))) + - c1o36 * (((phi[dMPP] - c2o1 * phi[dMP0] + phi[dMPM]) + (phi[dPMP] - c2o1 * phi[dPM0] + phi[dPMM])) + ((phi[dMMP] - c2o1 * phi[dMM0] + phi[dMMM]) + (phi[dPPP] - c2o1 * phi[dPP0] + phi[dPPM])))); - real phiXY = c1o4 * (c2o3 * (phi[dMM0] - phi[dPM0] + phi[dPP0] - phi[dMP0]) + c1o6 * ((phi[dMMP] - phi[dPMP] + phi[dPPP] - phi[dMPP]) + (phi[dMMM] - phi[dPMM] + phi[dPPM] - phi[dMPM]))); - real phiXZ = c1o4 * (c2o3 * (phi[dM0M] - phi[dP0M] + phi[dP0P] - phi[dM0P]) + c1o6 * ((phi[dMPM] - phi[dPPM] + phi[dPPP] - phi[dMPP]) + (phi[dMMM] - phi[dPMM] + phi[dPMP] - phi[dMMP]))); - real phiYZ = c1o4 * (c2o3 * (phi[d0MM] - phi[d0MP] + phi[d0PP] - phi[d0PM]) + c1o6 * ((phi[dMMM] - phi[dMMP] + phi[dMPP] - phi[dMPM]) + (phi[dPMM] - phi[dPMP] + phi[dPPP] - phi[dPPM]))); - - // non isotropic FD (to be improved): - // real phiX = (phi[dP00] - phi[dM00]) * c1o2; //gradX1_phi(); - // real phiY = (phi[d0P0] - phi[d0M0]) * c1o2; //gradX2_phi(); - // real phiZ = (phi[d00P] - phi[d00M]) * c1o2; //gradX3_phi(); - - // real phiXX = phi[dP00] - c2o1 * phi[d000] + phi[dM00]; - // real phiYY = phi[d0P0] - c2o1 * phi[d000] + phi[d0M0]; - // real phiZZ =( phi[d00P] - c2o1 * phi[d000] + phi[d00M]); - // real phiXY = c1o4 * (phi[dMM0] - phi[dPM0] + phi[dPP0] - phi[dMP0]); - // real phiXZ = c1o4 * (phi[dM0M] - phi[dP0M] + phi[dP0P] - phi[dM0P]); - // real phiYZ = c1o4 * (phi[d0MM] - phi[d0MP] + phi[d0PP] - phi[d0PM]); - // real back= (c2o1 * (phiX * phiY * phiXY + phiX * phiZ * phiXZ + phiY * phiZ * phiYZ) - phiXX * (phiY * phiY + phiZ * phiZ) - phiYY * (phiX * phiX + phiZ * phiZ) - phiZZ * (phiX * phiX + phiY * phiY)) / (c2o1 * pow(phiX * phiX + phiY * phiY + phiZ * phiZ, c3o2)); - return (c2o1 * (phiX * phiY * phiXY + phiX * phiZ * phiXZ + phiY * phiZ * phiYZ) - phiXX * (phiY * phiY + phiZ * phiZ) - phiYY * (phiX * phiX + phiZ * phiZ) - phiZZ * (phiX * phiX + phiY * phiY)) / (c2o1 * pow(phiX * phiX + phiY * phiY + phiZ * phiZ, c3o2)); -} - -void IBsharpInterfaceLBMKernel::computePhasefield() -{ - using namespace D3Q27System; - SPtr<DistributionArray3D> distributionsH = dataSet->getHdistributions(); - - 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[dP00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - h[d0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - h[d00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - h[dPP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - h[dMP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - h[dP0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - h[dM0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - h[d0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - h[d0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - - h[dM00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - h[d0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - h[d00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - h[dMM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - h[dPM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - h[dM0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - h[dP0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - h[d0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - h[d0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - - h[d000] = (*this->restDistributionsH1)(x1, x2, x3); - } - } - } - } -} - -void IBsharpInterfaceLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, int x3) -{ - using namespace D3Q27System; - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - phi[d000] = (*ph)(x1, x2, x3); - - 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 { - phi[k] = (*ph)(x1, x2, x3); // neutral wetting - // phi[k] = 0.0;//unwetting - } - } -} - -void IBsharpInterfaceLBMKernel::findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, int x3) -{ - using namespace D3Q27System; - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - phi2[d000] = (*ph)(x1, x2, x3); - - for (int k = FSTARTDIR; k <= FENDDIR; k++) { - - if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) { - phi2[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]); - } else { - phi2[k] = 0.05; - } - } -} - -void IBsharpInterfaceLBMKernel::swapDistributions() -{ - LBMKernel::swapDistributions(); - dataSet->getHdistributions()->swap(); -} - -void IBsharpInterfaceLBMKernel::initForcing() -{ - 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); - - muForcingX1.DefineVar("rho", &muRho); - muForcingX2.DefineVar("rho", &muRho); - muForcingX3.DefineVar("rho", &muRho); -} diff --git a/src/cpu/LiggghtsCoupling/LBM/IBsharpInterfaceLBMKernel.h b/src/cpu/LiggghtsCoupling/LBM/IBsharpInterfaceLBMKernel.h deleted file mode 100644 index a24131488a642a0a44712dd73fe4188cfeafaab2..0000000000000000000000000000000000000000 --- a/src/cpu/LiggghtsCoupling/LBM/IBsharpInterfaceLBMKernel.h +++ /dev/null @@ -1,133 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file IBsharpInterfaceLBMKernel.h -//! \ingroup LBMKernel -//! \author M. Geier, K. Kutscher, Hesameddin Safari -//======================================================================================= - -#ifndef IBsharpInterfaceLBMKernel_H -#define IBsharpInterfaceLBMKernel_H - -#include "BCSet.h" -#include "D3Q27System.h" -#include "LiggghtsCouplingLBMKernel.h" -#include "basics/container/CbArray3D.h" -#include "basics/container/CbArray4D.h" -#include "basics/utilities/UbTiming.h" -#include "IBdynamicsParticleData.h" - -//! \brief Multiphase Cascaded Cumulant LBM kernel. -//! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model -//! \author M. Geier, K. Kutscher, Hesameddin Safari -class IBsharpInterfaceLBMKernel : public LiggghtsCouplingLBMKernel -{ -public: - IBsharpInterfaceLBMKernel(); - virtual ~IBsharpInterfaceLBMKernel(void) = default; - void calculate(int step) override; - SPtr<LBMKernel> clone() override; - - /// refactor - // CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure; - - double getCalculationTime() override - { - return .0; - } - -protected: - virtual void initDataSet(); - void swapDistributions() override; - - void initForcing(); - - void forwardInverseChimeraWithKincompressible(real &mfa, real &mfb, real &mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho); - void backwardInverseChimeraWithKincompressible(real &mfa, real &mfb, real &mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho); - void forwardChimera(real &mfa, real &mfb, real &mfc, real vv, real v2); - void backwardChimera(real &mfa, real &mfb, real &mfc, real vv, real v2); - - real f1[D3Q27System::ENDF + 1]; - - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF; - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr restDistributionsF; - - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH1; - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH1; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr restDistributionsH1; - - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressureOld; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr p1Old; - - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseFieldOld; - // CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr divU; - - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr rhoNode; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr vxNode; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr vyNode; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr vzNode; - - real h[D3Q27System::ENDF + 1]; - // real h2[D3Q27System::ENDF + 1]; - // real g [D3Q27System::ENDF+1]; - real phi[D3Q27System::ENDF + 1]; - real phi2[D3Q27System::ENDF + 1]; - // real pr1[D3Q27System::ENDF+1]; - real phi_cutoff[D3Q27System::ENDF + 1]; - - real gradX1_phi(); - real gradX2_phi(); - real gradX3_phi(); - real gradX1_rhoInv(real rhoL, real rhoDIV); - real gradX2_rhoInv(real rhoL, real rhoDIV); - real gradX3_rhoInv(real rhoL, real rhoDIV); - real gradX1_phi2(); - real gradX2_phi2(); - real gradX3_phi2(); - void computePhasefield(); - void findNeighbors(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, int x1, int x2, int x3); - void findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, int x3); - - real nabla2_phi(); - - real computeCurvature_phi(); - - mu::value_type muX1, muX2, muX3; - mu::value_type muDeltaT; - mu::value_type muNu; - mu::value_type muRho; - mu::value_type muPhi; - real forcingX1; - real forcingX2; - real forcingX3; - -}; - -#endif diff --git a/src/cpu/LiggghtsCoupling/LBM/LiggghtsCouplingLBMKernel.cpp b/src/cpu/LiggghtsCoupling/LBM/LiggghtsCouplingLBMKernel.cpp deleted file mode 100644 index 44109a14c34745af6a7fbc13ca71fc7cdbb405fb..0000000000000000000000000000000000000000 --- a/src/cpu/LiggghtsCoupling/LBM/LiggghtsCouplingLBMKernel.cpp +++ /dev/null @@ -1,92 +0,0 @@ -#include "LiggghtsCouplingLBMKernel.h" -#include "D3Q27System.h" - -//void LiggghtsCouplingLBMKernel::collisionOperator(int x1, int x2, int x3, real collFactorM, real fPre[]) -//{ -// //if ((*particleData)(x1, x2, x3)->solidFraction >= SOLFRAC_MIN) { -// LBMReal f[D3Q27System::ENDF + 1]; -// LBMReal fEq[D3Q27System::ENDF + 1]; -// LBMReal fEqSolid[D3Q27System::ENDF + 1]; -// LBMReal vx1, vx2, vx3, drho; -// D3Q27System::calcIncompMacroscopicValues(f, drho, vx1, vx2, vx3); -// D3Q27System::calcIncompFeq(fEq, drho, vx1, vx2, vx3); -// -// std::array<double, 3> uPart; -// uPart[0] = (*particleData)(x1, x2, x3)->uPart[0]; -// uPart[1] = (*particleData)(x1, x2, x3)->uPart[1]; -// uPart[2] = (*particleData)(x1, x2, x3)->uPart[2]; -// -// D3Q27System::calcIncompFeq(fEqSolid, drho, uPart[0], uPart[1], uPart[2]); -// real rhoPhaseField = (phi[d000] > c1o2) ? c1o1 : c1o1 / densityRatio; -// if ((*particleData)(x1, x2, x3)->solidFraction > SOLFRAC_MAX) { -// double const bb0 = fEq[vf::lbm::dir::d000] - fEqSolid[vf::lbm::dir::d000]; -// f[vf::lbm::dir::d000] = fPre[vf::lbm::dir::d000] + bb0; -// for (int iPop = D3Q27System::FSTARTDIR; iPop <= D3Q27System::FENDDIR; iPop++) { -// const int iOpp = D3Q27System::INVDIR[iPop]; -// double const bb = ((fPre[iOpp] - fEq[iOpp]) - (fPre[iPop] - fEqSolid[iPop])); -// double const bbOpp = ((fPre[iPop] - fEq[iPop]) - (fPre[iOpp] - fEqSolid[iOpp])); -// -// f[iPop] = fPre[iPop] + bb; -// f[iOpp] = fPre[iOpp] + bbOpp; -// -// (*particleData)(x1, x2, x3)->hydrodynamicForce[0] -= D3Q27System::DX1[iPop] * (bb - bbOpp) * rhoPhaseField; -// (*particleData)(x1, x2, x3)->hydrodynamicForce[1] -= D3Q27System::DX2[iPop] * (bb - bbOpp) * rhoPhaseField; -// (*particleData)(x1, x2, x3)->hydrodynamicForce[2] -= D3Q27System::DX3[iPop] * (bb - bbOpp) * rhoPhaseField; -// } -// } else { /* particleData.solidFraction < SOLFRAC_MAX */ -// // #ifdef LBDEM_USE_WEIGHING -// double const ooo = 1. / collFactorM - 0.5; -// double const B = (*particleData)(x1, x2, x3)->solidFraction * ooo / ((1. - (*particleData)(x1, x2, x3)->solidFraction) + ooo); -// // #else -// // T const B = particleData.solidFraction; -// // #endif -// double const oneMinB = 1. - B; -// -// double const bb0 = fEq[vf::lbm::dir::d000] - fEqSolid[vf::lbm::dir::d000]; -// f[vf::lbm::dir::d000] = fPre[vf::lbm::dir::d000] + oneMinB * (f[vf::lbm::dir::d000] - fPre[vf::lbm::dir::d000]) + B * bb0; -// -// for (int iPop = D3Q27System::FSTARTDIR; iPop <= D3Q27System::FENDDIR; iPop++) { -// int const iOpp = D3Q27System::INVDIR[iPop]; -// double const bb = B * ((fPre[iOpp] - fEq[iOpp]) - (fPre[iPop] - fEqSolid[iPop])); -// double const bbOpp = B * ((fPre[iPop] - fEq[iPop]) - (fPre[iOpp] - fEqSolid[iOpp])); -// -// f[iPop] = fPre[iPop] + oneMinB * (f[iPop] - fPre[iPop]) + bb; -// f[iOpp] = fPre[iOpp] + oneMinB * (f[iOpp] - fPre[iOpp]) + bbOpp; -// -// (*particleData)(x1, x2, x3)->hydrodynamicForce[0] -= D3Q27System::DX1[iPop] * (bb - bbOpp) * rhoPhaseField; -// (*particleData)(x1, x2, x3)->hydrodynamicForce[1] -= D3Q27System::DX2[iPop] * (bb - bbOpp) * rhoPhaseField; -// (*particleData)(x1, x2, x3)->hydrodynamicForce[2] -= D3Q27System::DX3[iPop] * (bb - bbOpp) * rhoPhaseField; -// } -// } /* if solidFraction > SOLFRAC_MAX */ -// -// // (*this->restDistributionsF)(x1, x2, x3) = f[vf::lbm::dir::d000]; -// -// // (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = f[vf::lbm::dir::dM00]; -// // (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = f[vf::lbm::dir::d0M0]; -// // (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = f[vf::lbm::dir::d00M]; -// // (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = f[vf::lbm::dir::dMM0]; -// // (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = f[vf::lbm::dir::dPM0]; -// // (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = f[vf::lbm::dir::dM0M]; -// // (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = f[vf::lbm::dir::dP0M]; -// // (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = f[vf::lbm::dir::d0MM]; -// // (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = f[vf::lbm::dir::d0PM]; -// // (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = f[vf::lbm::dir::dMMM]; -// // (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = f[vf::lbm::dir::dPMM]; -// // (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = f[vf::lbm::dir::dMPM]; -// // (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[vf::lbm::dir::dPPM]; -// -// // (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = f[vf::lbm::dir::dP00]; -// // (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = f[vf::lbm::dir::d0P0]; -// // (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = f[vf::lbm::dir::d00P]; -// // (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = f[vf::lbm::dir::dPP0]; -// // (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = f[vf::lbm::dir::dMP0]; -// // (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = f[vf::lbm::dir::dP0P]; -// // (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = f[vf::lbm::dir::dM0P]; -// // (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = f[vf::lbm::dir::d0PP]; -// // (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = f[vf::lbm::dir::d0MP]; -// // (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[vf::lbm::dir::dPPP]; -// // (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = f[vf::lbm::dir::dMPP]; -// // (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[vf::lbm::dir::dPMP]; -// // (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = f[vf::lbm::dir::dMMP]; -// //} -//} \ No newline at end of file diff --git a/src/cpu/LiggghtsCoupling/LBM/LiggghtsCouplingLBMKernel.h b/src/cpu/LiggghtsCoupling/LBM/LiggghtsCouplingLBMKernel.h deleted file mode 100644 index 86ac895486d357e9facc30c210b325af527dfbf2..0000000000000000000000000000000000000000 --- a/src/cpu/LiggghtsCoupling/LBM/LiggghtsCouplingLBMKernel.h +++ /dev/null @@ -1,66 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file LiggghtsCouplingLBMKernel.h -//! \ingroup LBM -//! \author Konstantin Kutscher -//======================================================================================= - -#ifndef LiggghtsCouplingLBMKernel_h -#define LiggghtsCouplingLBMKernel_h - -#include "LBMKernel.h" -#include "IBdynamicsParticleData.h" -#include "basics/container/CbArray3D.h" -#include "basics/container/CbArray4D.h" - -class LiggghtsCouplingLBMKernel : public LBMKernel -{ -public: - virtual ~LiggghtsCouplingLBMKernel() = default; - - CbArray3D<SPtr<IBdynamicsParticleData>, IndexerX3X2X1>::CbArray3DPtr getParticleData() - { - return particleData; - }; - void setParticleData(CbArray3D<SPtr<IBdynamicsParticleData>, IndexerX3X2X1>::CbArray3DPtr particleData) - { - this->particleData = particleData; - }; - - - protected: - //void collisionOperator(); - CbArray3D<SPtr<IBdynamicsParticleData>, IndexerX3X2X1>::CbArray3DPtr particleData; - - //CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF; - //CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF; - //CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr restDistributionsF; -}; - -#endif \ No newline at end of file diff --git a/src/cpu/LiggghtsCoupling/LiggghtsCoupling.h b/src/cpu/LiggghtsCoupling/LiggghtsCoupling.h deleted file mode 100644 index 42b127f730e1c6ba58d9da93fe7653e5f9f7407c..0000000000000000000000000000000000000000 --- a/src/cpu/LiggghtsCoupling/LiggghtsCoupling.h +++ /dev/null @@ -1,43 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file LiggghtsCoupling.h -//! \ingroup LiggghtsCoupling -//! \author Konstantin Kutscher -//======================================================================================= - -#ifndef LiggghtsCoupling_h -#define LiggghtsCoupling_h - -#include "LiggghtsCoupling/3rdParty/LiggghtsCouplingWrapper.h" -#include "LiggghtsCoupling/LBM/IBcumulantK17LBMKernel.h" -#include "LiggghtsCoupling/LBM/IBsharpInterfaceLBMKernel.h" -#include "LiggghtsCoupling/SimulationObserver/LiggghtsCouplingSimulationObserver.h" -#include "LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.h" - -#endif \ No newline at end of file diff --git a/src/cpu/LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.cpp b/src/cpu/LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.cpp deleted file mode 100644 index ad192bf91868a321577f4e79f0729b2947bb0411..0000000000000000000000000000000000000000 --- a/src/cpu/LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.cpp +++ /dev/null @@ -1,82 +0,0 @@ -#include "LiggghtsPartitioningGridVisitor.h" -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// 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 LiggghtsPartitioningGridVisitor.cpp -//! \ingroup LiggghtsCoupling -//! \author Konstantin Kutscher -//======================================================================================= - -#include <comm.h> -#include "LiggghtsPartitioningGridVisitor.h" -#include "cpu/core/Simulation/Grid3D.h" -#include "cpu/core/Simulation/Block3D.h" - -LiggghtsPartitioningGridVisitor::LiggghtsPartitioningGridVisitor(int nx, int ny, int nz, LAMMPS_NS::LAMMPS *lmp) : nx(nx), ny(ny), nz(nz), lmp(*lmp) -{ - -} - -LiggghtsPartitioningGridVisitor::~LiggghtsPartitioningGridVisitor() -{ - -} - -void LiggghtsPartitioningGridVisitor::visit(SPtr<Grid3D> grid) -{ - npx = lmp.comm->procgrid[0]; - npy = lmp.comm->procgrid[1]; - npz = lmp.comm->procgrid[2]; - - for (int i = 0; i <= npx; i++) - xVal.push_back(round(lmp.comm->xsplit[i] * (double)nx)); - for (int i = 0; i <= npy; i++) - yVal.push_back(round(lmp.comm->ysplit[i] * (double)ny)); - for (int i = 0; i <= npz; i++) - zVal.push_back(round(lmp.comm->zsplit[i] * (double)nz)); - - UbTupleInt3 blockNX = grid->getBlockNX(); - - for (int iX = 0; iX < xVal.size() - 1; ++iX) { - for (int iY = 0; iY < yVal.size() - 1; ++iY) { - for (int iZ = 0; iZ < zVal.size() - 1; ++iZ) { - - int rank = (int)lmp.comm->grid2proc[iX][iY][iZ]; - int blockX1 = xVal[iX] / val<1>(blockNX); - int blockX2 = yVal[iY] / val<2>(blockNX); - int blockX3 = zVal[iZ] / val<3>(blockNX); - SPtr<Block3D> block = grid->getBlock(blockX1, blockX2, blockX3, 0); - block->setRank(rank); - } - } - } - - xVal.clear(); - yVal.clear(); - zVal.clear(); -} diff --git a/src/cpu/LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.h b/src/cpu/LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.h deleted file mode 100644 index 02a44807604cb7b122ec0a00a54dd90bc56b9ae6..0000000000000000000000000000000000000000 --- a/src/cpu/LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.h +++ /dev/null @@ -1,59 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file LiggghtsPartitioningGridVisitor.h -//! \ingroup LiggghtsCoupling -//! \author Konstantin Kutscher -//======================================================================================= -#ifndef LiggghtsPartitioningGridVisitor_h -#define LiggghtsPartitioningGridVisitor_h - -#include <lammps.h> -#include <vector> -#include "basics/PointerDefinitions.h" -#include "cpu/core/Visitors/Grid3DVisitor.h" - -class LiggghtsCouplingWrapper; -class Grid3D; - -class LiggghtsPartitioningGridVisitor : public Grid3DVisitor -{ -public: - LiggghtsPartitioningGridVisitor(int nx, int ny, int nz, LAMMPS_NS::LAMMPS *lmp); - - ~LiggghtsPartitioningGridVisitor() override; - - void visit(SPtr<Grid3D> grid) override; - -private: - int nx, ny, nz; - LAMMPS_NS::LAMMPS &lmp; - int npx{ 0 }, npy{ 0 }, npz{ 0 }; - std::vector<int> xVal, yVal, zVal; -}; -#endif \ No newline at end of file diff --git a/src/cpu/LiggghtsCoupling/SimulationObserver/LiggghtsCouplingSimulationObserver.cpp b/src/cpu/LiggghtsCoupling/SimulationObserver/LiggghtsCouplingSimulationObserver.cpp deleted file mode 100644 index 8d4c069c7d3f93ace398acc60b07a018577a3ec9..0000000000000000000000000000000000000000 --- a/src/cpu/LiggghtsCoupling/SimulationObserver/LiggghtsCouplingSimulationObserver.cpp +++ /dev/null @@ -1,445 +0,0 @@ -#include "LiggghtsCouplingSimulationObserver.h" -#include "GbSphere3D.h" -#include "parallel/MPICommunicator.h" -#include "SimulationObserver.h" -#include "LiggghtsCoupling/3rdParty/LiggghtsCouplingWrapper.h" -#include "Grid3D.h" -#include "Block3D.h" -#include "LBMKernel.h" -#include "DistributionArray3D.h" -#include "DataSet3D.h" -#include "LiggghtsCoupling/LBM/IBcumulantK17LBMKernel.h" -#include "LiggghtsCoupling/LBM/IBsharpInterfaceLBMKernel.h" -#include "LBMUnitConverter.h" -#include "fix_lb_coupling_onetoone.h" - -LiggghtsCouplingSimulationObserver::LiggghtsCouplingSimulationObserver(SPtr<Grid3D> grid, SPtr<UbScheduler> s, - SPtr<vf::parallel::Communicator> comm, - LiggghtsCouplingWrapper &wrapper, int demSteps, - SPtr<LBMUnitConverter> units) - : SimulationObserver(grid, s), comm(comm), wrapper(wrapper), demSteps(demSteps), units(units) -{ - -} - -LiggghtsCouplingSimulationObserver::~LiggghtsCouplingSimulationObserver() -{ -} - -void LiggghtsCouplingSimulationObserver::update(double actualTimeStep) -{ - //if (comm->getProcessID() == 0) - // std::cout << "LiggghtsCouplingSimulationObserver step: " << actualTimeStep << "\n"; - - //comm->barrier(); - - getForcesFromLattice(); - - //comm->barrier(); - - wrapper.run(demSteps); - - //comm->barrier(); - - setSpheresOnLattice(); - - //comm->barrier(); -} - -void LiggghtsCouplingSimulationObserver::setSpheresOnLattice() -{ - std::vector<int> excludeType; - - int nPart = wrapper.lmp->atom->nlocal + wrapper.lmp->atom->nghost; - - for (int iS = 0; iS < nPart; iS++) - { - int type = (int)wrapper.lmp->atom->type[iS]; - bool excludeFlag(false); - for (int iT = 0; iT < excludeType.size(); iT++) { - //std::cout << iS << " " << type << " " << excludeType[iT] << std::endl; - if (type == excludeType[iT]) { - excludeFlag = true; - break; - } - } - - if (excludeFlag) - continue; - - double x[3] = { 0, 0, 0 }, v[3] = { 0, 0, 0 }, omega[3] = { 0, 0, 0 }; - double r; - int id = wrapper.lmp->atom->tag[iS]; - - for (int i = 0; i < 3; i++) - { - x[i] = wrapper.lmp->atom->x[iS][i]; // * units->getFactorLentghWToLb(); // - 0.5; ???? - v[i] = wrapper.lmp->atom->v[iS][i] * units->getFactorVelocityWToLb(); - omega[i] = wrapper.lmp->atom->omega[iS][i] / units->getFactorTimeWToLb(); - } - - r = wrapper.lmp->atom->radius[iS]; // * units->getFactorLentghWToLb(); - - //std::cout << "x[0] = " << x[0] << ", x[1] = " << x[1] << ", x[2] = " << x[2] << std::endl; - //std::cout << "v[0] = " << v[0] << ", v[1] = " << v[1] << ", v[2] = " << v[2] << std::endl; - //std::cout << "omega[0] = " << omega[0] << ", omega[1] = " << omega[1] << ", omega[2] = " << omega[2] << std::endl; - //std::cout << "r = " << r << std::endl; - - setSingleSphere3D(x, v, omega, r, id); - } -} - -void LiggghtsCouplingSimulationObserver::setSingleSphere3D(double *x, double *v, double *omega, /* double *com,*/ double r, - int id /*, bool initVelFlag*/) -{ - int level = 0; - //UbTupleInt3 bi = grid->getBlockIndexes(x[0], x[1], x[2], level); - //SPtr<Block3D> block = grid->getBlock(val<1>(bi), val<2>(bi), val<3>(bi), level); - - std::vector<SPtr<Block3D>> blocks; - grid->getBlocksByCuboid(level, x[0] - r, x[1] - r, x[2] - r, x[0] + r, x[1] + r, x[2] + r, blocks); - - //DEBUG - /////////////////////// - if (blocks.size() == 2) - int test = 0; - - /////////////////////// - - for (SPtr<Block3D> block : blocks) { - if (block) { - SPtr<ILBMKernel> kernel = block->getKernel(); - SPtr<DistributionArray3D> distributions = kernel->getDataSet()->getFdistributions(); - - CbArray3D<SPtr<IBdynamicsParticleData>, IndexerX3X2X1>::CbArray3DPtr particleData = - dynamicPointerCast<LiggghtsCouplingLBMKernel>(kernel)->getParticleData(); - - if (!particleData) - continue; - - int minX1b = 1; - int minX2b = 1; - int minX3b = 1; - - int maxX1b = (int)(distributions->getNX1()) - 2; - int maxX2b = (int)(distributions->getNX2()) - 2; - int maxX3b = (int)(distributions->getNX3()) - 2; - - real deltax = grid->getDeltaX(block); - - UbTupleInt3 nodesMin = grid->getNodeIndexes(block, x[0] - r - deltax, x[1] - r - deltax, x[2] - r - deltax); - UbTupleInt3 nodesMax = grid->getNodeIndexes(block, x[0] + r + deltax, x[1] + r + deltax, x[2] + r + deltax); - - int minX1 = (val<1>(nodesMin) < minX1b) ? minX1b : val<1>(nodesMin); - int minX2 = (val<2>(nodesMin) < minX2b) ? minX2b : val<2>(nodesMin); - int minX3 = (val<3>(nodesMin) < minX3b) ? minX3b : val<3>(nodesMin); - - int maxX1 = (val<1>(nodesMax) > maxX1b) ? maxX1b : val<1>(nodesMax); - int maxX2 = (val<2>(nodesMax) > maxX2b) ? maxX2b : val<2>(nodesMax); - int maxX3 = (val<3>(nodesMax) > maxX3b) ? maxX3b : val<3>(nodesMax); - - //int minX1 = minX1b; - //int minX2 = minX2b; - //int minX3 = minX3b; - - //int maxX1 = maxX1b; - //int maxX2 = maxX2b; - //int maxX3 = maxX3b; - - - for (int ix3 = minX3; ix3 <= maxX3; ix3++) { - for (int ix2 = minX2; ix2 <= maxX2; ix2++) { - for (int ix1 = minX1; ix1 <= maxX1; ix1++) { - - //UbTupleInt3 blockNX = grid->getBlockNX(); - - //double const dx = val<1>(blockNX) * block->getX1() + ix1 - x[0]; - //double const dy = val<2>(blockNX) * block->getX2() + ix2 - x[1]; - //double const dz = val<3>(blockNX) * block->getX3() + ix3 - x[2]; - - Vector3D worldCoordinates = grid->getNodeCoordinates(block, ix1, ix2, ix3); - - double const dx = (worldCoordinates[0] - x[0]) * units->getFactorLentghWToLb(); - double const dy = (worldCoordinates[1] - x[1]) * units->getFactorLentghWToLb(); - double const dz = (worldCoordinates[2] - x[2]) * units->getFactorLentghWToLb(); - - double const sf = calcSolidFraction(dx, dy, dz, r * units->getFactorLentghWToLb()); - - double const sf_old = (*particleData)(ix1,ix2,ix3)->solidFraction; - int const id_old = (int)(*particleData)(ix1,ix2,ix3)->partId; - - int const decFlag = (sf > SOLFRAC_MIN) + 2 * (sf_old > SOLFRAC_MIN); - - switch (decFlag) { - case 0: // sf == 0 && sf_old == 0 - setToZero(*(*particleData)(ix1, ix2, ix3).get()); - break; // do nothing - case 1: // sf > 0 && sf_old == 0 - setValues(*(*particleData)(ix1, ix2, ix3).get(), id, sf, v, dx, dy, dz, omega); - break; - case 2: // sf == 0 && sf_old > 0 - if (id_old == id) // then particle has left this cell - setToZero(*(*particleData)(ix1, ix2, ix3).get()); - break; // else do nothing - case 3: // sf > 0 && sf_old > 0 - if (sf > sf_old || id_old == id) - setValues(*(*particleData)(ix1, ix2, ix3).get(), id, sf, v, dx, dy, dz, omega); - break; // else do nothing - } - // if desired, initialize interior of sphere with sphere velocity - // if (initVelFlag && sf > SOLFRAC_MAX) - // cell.defineVelocity(particleData->uPart); - - //if (sf > 0) { - // std::cout << "sf = " << sf << std::endl; - // std::cout << "ix1 = " << ix1 << ", ix2 = " << ix2 << ", ix3 = " << ix3 << std::endl; - //} - } - } - } - } - } - -} - -double LiggghtsCouplingSimulationObserver::calcSolidFraction(double const dx_, double const dy_, double const dz_, - double const r_) -{ - static int const slicesPerDim = 5; - static double const sliceWidth = 1. / ((double)slicesPerDim); - static double const fraction = 1. / ((double)(slicesPerDim * slicesPerDim * slicesPerDim)); - - // should be sqrt(3.)/2. - // add a little to avoid roundoff errors - static const double sqrt3half = (double)sqrt(3.1) / 2.; - - double const dist = dx_ * dx_ + dy_ * dy_ + dz_ * dz_; - - double const r_p = r_ + sqrt3half; - if (dist > r_p * r_p) - return 0; - - double const r_m = r_ - sqrt3half; - if (dist < r_m * r_m) - return 1; - - double const r_sq = r_ * r_; - double dx_sq[slicesPerDim] = { 0, 0, 0, 0, 0 }, dy_sq[slicesPerDim] = { 0, 0, 0, 0, 0 }, dz_sq[slicesPerDim] = { 0, 0, 0, 0, 0 }; - - // pre-calculate d[xyz]_sq for efficiency - for (int i = 0; i < slicesPerDim; i++) { - double const delta = -0.5 + ((double)i + 0.5) * sliceWidth; - double const dx = dx_ + delta; - dx_sq[i] = dx * dx; - double const dy = dy_ + delta; - dy_sq[i] = dy * dy; - double const dz = dz_ + delta; - dz_sq[i] = dz * dz; - } - - unsigned int n(0); - for (int i = 0; i < slicesPerDim; i++) { - for (int j = 0; j < slicesPerDim; j++) { - for (int k = 0; k < slicesPerDim; k++) { - n += (dx_sq[i] + dy_sq[j] + dz_sq[k] < r_sq); - } - } - } - - return fraction * ((double)n); -} - - void LiggghtsCouplingSimulationObserver::setValues(IBdynamicsParticleData &p, int const id, double const sf, double const *v, double const dx, double const dy, double const dz, double const *omega) -{ - p.uPart[0] = v[0]; - p.uPart[1] = v[1]; - p.uPart[2] = v[2]; - - if (omega != 0) { - p.uPart[0] += omega[1] * dz - omega[2] * dy; - p.uPart[1] += -omega[0] * dz + omega[2] * dx; - p.uPart[2] += omega[0] * dy - omega[1] * dx; - } - p.solidFraction = sf; - p.partId = id; -} - - -void LiggghtsCouplingSimulationObserver::setToZero(IBdynamicsParticleData &p) -{ - p.uPart[0] = 0; - p.uPart[1] = 0; - p.uPart[2] = 0; - p.solidFraction = 0; - p.partId = 0; -} - -void LiggghtsCouplingSimulationObserver::getForcesFromLattice() -{ - static std::vector<double> force, torque; - static typename ParticleData::ParticleDataArrayVector x_lb; - - int const nPart = wrapper.lmp->atom->nlocal + wrapper.lmp->atom->nghost; - int const n_force = nPart * 3; - - if (nPart == 0) - return; // no particles - no work - - if (nPart > (int)x_lb.size()) { - for (int iPart = 0; iPart < (int)x_lb.size(); iPart++) { - x_lb[iPart][0] = wrapper.lmp->atom->x[iPart][0]; - x_lb[iPart][1] = wrapper.lmp->atom->x[iPart][1]; - x_lb[iPart][2] = wrapper.lmp->atom->x[iPart][2]; - } - for (int iPart = (int)x_lb.size(); iPart < nPart; iPart++) { - std::array<double, 3> ar = {wrapper.lmp->atom->x[iPart][0], - wrapper.lmp->atom->x[iPart][1], - wrapper.lmp->atom->x[iPart][2]}; - x_lb.push_back(ar); - } - - - } else { - for (int iPart = 0; iPart < nPart; iPart++) { - x_lb[iPart][0] = wrapper.lmp->atom->x[iPart][0]; - x_lb[iPart][1] = wrapper.lmp->atom->x[iPart][1]; - x_lb[iPart][2] = wrapper.lmp->atom->x[iPart][2]; - } - } - - if (n_force > (int)force.size()) { - for (int i = 0; i < (int)force.size(); i++) { - force[i] = 0; - torque[i] = 0; - } - for (int i = (int)force.size(); i < n_force; i++) { - force.push_back(0.); - torque.push_back(0.); - } - } else { - for (int i = 0; i < n_force; i++) { - force[i] = 0; - torque[i] = 0; - } - } - - SumForceTorque3D(x_lb, &force.front(), &torque.front()); - - LAMMPS_NS::FixLbCouplingOnetoone *couplingFix = - dynamic_cast<LAMMPS_NS::FixLbCouplingOnetoone *>(wrapper.lmp->modify->find_fix_style("couple/lb/onetoone", 0)); - - double **f_liggghts = couplingFix->get_force_ptr(); - double **t_liggghts = couplingFix->get_torque_ptr(); - - for (int iPart = 0; iPart < nPart; iPart++) - for (int j = 0; j < 3; j++) { - f_liggghts[iPart][j] = 0; - t_liggghts[iPart][j] = 0; - } - - for (int iPart = 0; iPart < nPart; iPart++) { - int tag = wrapper.lmp->atom->tag[iPart]; - int liggghts_ind = wrapper.lmp->atom->map(tag); - - for (int j = 0; j < 3; j++) { - f_liggghts[liggghts_ind][j] += force[3 * iPart + j] * units->getFactorForceLbToW(); - t_liggghts[liggghts_ind][j] += torque[3 * iPart + j] * units->getFactorTorqueLbToW(); - } - } - couplingFix->comm_force_torque(); -} - -void LiggghtsCouplingSimulationObserver::SumForceTorque3D(ParticleData::ParticleDataArrayVector &x, double *force, double *torque) -{ - int nx = grid->getNX1(), ny = grid->getNX2(), nz = grid->getNX3(); - - std::vector < SPtr < Block3D > > blocks; - int level = 0; - grid->getBlocks(level, grid->getRank(), true, blocks); - - - for (SPtr<Block3D> block : blocks) { - if (block) { - SPtr<ILBMKernel> kernel = block->getKernel(); - SPtr<DistributionArray3D> distributions = kernel->getDataSet()->getFdistributions(); - - CbArray3D<SPtr<IBdynamicsParticleData>, IndexerX3X2X1>::CbArray3DPtr particleData = - dynamicPointerCast<LiggghtsCouplingLBMKernel>(kernel)->getParticleData(); - - if (!particleData) - continue; - - int minX1 = 1; - int minX2 = 1; - int minX3 = 1; - - int maxX1 = (int)(distributions->getNX1()) - 1; - int maxX2 = (int)(distributions->getNX2()) - 1; - int maxX3 = (int)(distributions->getNX3()) - 1; - - for (int ix3 = minX3; ix3 < maxX3; ix3++) { - for (int ix2 = minX2; ix2 < maxX2; ix2++) { - for (int ix1 = minX1; ix1 < maxX1; ix1++) { - - // LIGGGHTS indices start at 1 - int const id = (*particleData)(ix1, ix2, ix3)->partId; - if (id < 1) - continue; // no particle here - - int const ind = wrapper.lmp->atom->map(id); - - if (ind < 0) continue; // no particle here - - Vector3D worldCoordinates = grid->getNodeCoordinates(block, ix1, ix2, ix3); - - double dx = (worldCoordinates[0] - x[ind][0]) * units->getFactorLentghWToLb(); - double dy = (worldCoordinates[1] - x[ind][1]) * units->getFactorLentghWToLb(); - double dz = (worldCoordinates[2] - x[ind][2]) * units->getFactorLentghWToLb(); - - // minimum image convention, needed if - // (1) PBC are used and - // (2) both ends of PBC lie on the same processor - if ((int)dx > nx / 2) - dx -= nx; - else if ((int)dx < -nx / 2) - dx += nx; - if ((int)dy > ny / 2) - dy -= ny; - else if ((int)dy < -ny / 2) - dy += ny; - if ((int)dz > nz / 2) - dz -= nz; - else if ((int)dz < -nz / 2) - dz += nz; - - double const forceX = (*particleData)(ix1, ix2, ix3)->hydrodynamicForce[0]; - double const forceY = (*particleData)(ix1, ix2, ix3)->hydrodynamicForce[1]; - double const forceZ = (*particleData)(ix1, ix2, ix3)->hydrodynamicForce[2]; - - double const torqueX = dy * forceZ - dz * forceY; - double const torqueY = -dx * forceZ + dz * forceX; - double const torqueZ = dx * forceY - dy * forceX; - - addForce(ind, 0, forceX, force); - addForce(ind, 1, forceY, force); - addForce(ind, 2, forceZ, force); - - addTorque(ind, 0, torqueX, torque); - addTorque(ind, 1, torqueY, torque); - addTorque(ind, 2, torqueZ, torque); - } - } - } - } - } - } - -void LiggghtsCouplingSimulationObserver::addForce(int const partId, int const coord, double const value, double *force) -{ - force[3 * partId + coord] += value; -} - -void LiggghtsCouplingSimulationObserver::addTorque(int const partId, int const coord, double const value, double *torque) -{ - torque[3 * partId + coord] += value; -} \ No newline at end of file diff --git a/src/cpu/LiggghtsCoupling/SimulationObserver/LiggghtsCouplingSimulationObserver.h b/src/cpu/LiggghtsCoupling/SimulationObserver/LiggghtsCouplingSimulationObserver.h deleted file mode 100644 index fb4938328b9d18e8cef614a09cbad8894c5aa497..0000000000000000000000000000000000000000 --- a/src/cpu/LiggghtsCoupling/SimulationObserver/LiggghtsCouplingSimulationObserver.h +++ /dev/null @@ -1,104 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file LiggghtsCouplingSimulationObserver.h -//! \ingroup LiggghtsCoupling -//! \author Konstantin Kutscher -//======================================================================================= - -#ifndef LiggghtsCouplingSimulationObserver_h -#define LiggghtsCouplingSimulationObserver_h - -#include "SimulationObserver.h" - -#include "lammps.h" -#include "input.h" -#include "atom.h" -#include "modify.h" - -#include <memory> -#include <vector> - - -class SimulationObserver; -namespace vf::parallel {class Communicator;} -class LiggghtsCouplingWrapper; -class Grid3D; -class Block3D; -struct IBdynamicsParticleData; -class LBMUnitConverter; - -struct ParticleData { - typedef typename std::vector<std::array<double, 3>> ParticleDataArrayVector; - typedef typename std::vector<double> ParticleDataScalarVector; -}; - -class LiggghtsCouplingSimulationObserver : public SimulationObserver -{ -public: - LiggghtsCouplingSimulationObserver(SPtr<Grid3D> grid, SPtr<UbScheduler> s, SPtr<vf::parallel::Communicator> comm, - LiggghtsCouplingWrapper &wrapper, int demSteps, SPtr<LBMUnitConverter> units); - virtual ~LiggghtsCouplingSimulationObserver(); - - void update(double actualTimeStep) override; - - -protected: - void setSpheresOnLattice(); - - void setSingleSphere3D(double *x, double *v, double *omega, double r, int id /*, bool initVelFlag*/); - - double calcSolidFraction(double const dx_, double const dy_, double const dz_, double const r_); - - void setValues(IBdynamicsParticleData &p, int const id, double const sf, double const *v, double const dx, double const dy, double const dz, double const *omega); - - void setToZero(IBdynamicsParticleData &p); - - void getForcesFromLattice(); - - void SumForceTorque3D(ParticleData::ParticleDataArrayVector &x, double *force, double *torque); - - void addForce(int const partId, int const coord, double const value, double *force); - - void addTorque(int const partId, int const coord, double const value, double *torque); - -private: - SPtr<vf::parallel::Communicator> comm; - LiggghtsCouplingWrapper &wrapper; - SPtr<LBMUnitConverter> units; - int demSteps; - //std::vector<std::vector<SPtr<Block3D>>> blockVector; - //int minInitLevel; - //int maxInitLevel; - //int gridRank; - - double *force, *torque; -}; - -#endif - diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseBCStrategy.h b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseBCStrategy.h deleted file mode 100644 index b2d114672e8d3cc103c2b085db12caa414ad8131..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseBCStrategy.h +++ /dev/null @@ -1,56 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseBCStrategy.h -//! \ingroup BoundaryConditions -//! \author Konstantin Kutscher -//======================================================================================= - -#ifndef MultiphaseBCStrategy_H -#define MultiphaseBCStrategy_H - -#include "BCStrategy.h" - -class DistributionArray3D; - -class MultiphaseBCStrategy : public BCStrategy -{ -public: - MultiphaseBCStrategy() = default; - virtual ~MultiphaseBCStrategy() = default; - - virtual void addDistributionsH(SPtr<DistributionArray3D> distributionsH) {} - virtual void addDistributionsH2(SPtr<DistributionArray3D> distributionsH2) {} - -protected: - SPtr<DistributionArray3D> distributionsH; - SPtr<DistributionArray3D> distributionsH2; -}; - - -#endif \ No newline at end of file diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.cpp b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.cpp deleted file mode 100644 index eca58e904c4704106d757535563948151ee7c84e..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.cpp +++ /dev/null @@ -1,103 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseNoSlipBCStrategy.cpp -//! \ingroup BoundarConditions -//! \author Hesameddin Safari -//======================================================================================= - -#include "MultiphaseNoSlipBCStrategy.h" -#include "BoundaryConditions.h" -#include "DistributionArray3D.h" - -MultiphaseNoSlipBCStrategy::MultiphaseNoSlipBCStrategy() -{ - BCStrategy::preCollision = false; -} -////////////////////////////////////////////////////////////////////////// -MultiphaseNoSlipBCStrategy::~MultiphaseNoSlipBCStrategy() -{ -} -////////////////////////////////////////////////////////////////////////// -SPtr<BCStrategy> MultiphaseNoSlipBCStrategy::clone() -{ - SPtr<BCStrategy> bc(new MultiphaseNoSlipBCStrategy()); - return bc; -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseNoSlipBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions) -{ - this->distributions = distributions; -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseNoSlipBCStrategy::addDistributionsH(SPtr<DistributionArray3D> distributionsH) -{ - this->distributionsH = distributionsH; -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseNoSlipBCStrategy::applyBC() -{ - real f[D3Q27System::ENDF+1]; - real h[D3Q27System::ENDF+1]; - real h2[D3Q27System::ENDF + 1]; - //LBMReal feq[D3Q27System::ENDF+1]; - //LBMReal heq[D3Q27System::ENDF+1]; - distributions ->getPostCollisionDistribution(f, x1, x2, x3); - if (distributionsH2) - distributionsH2->getPostCollisionDistribution(h2, x1, x2, x3); - distributionsH->getPostCollisionDistribution(h, x1, x2, x3); - // LBMReal phi, vx1, vx2, vx3, p1; - - // D3Q27System::calcDensity(h, phi); - - // calcMacrosFct(f, p1, vx1, vx2, vx3); - // D3Q27System::calcMultiphaseFeqVB(feq, p1, vx1, vx2, vx3); - // D3Q27System::calcMultiphaseHeq(heq, phi, vx1, vx2, vx3); - - for (int fdir = D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++) - { - if (bcPtr->hasNoSlipBoundaryFlag(fdir)) - { - //quadratic bounce back - const int invDir = D3Q27System::INVDIR[fdir]; - real fReturn = f[invDir]; - //distributions->setPostCollisionDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); - distributions->setPostCollisionDistributionForDirection(fReturn, x1, x2, x3, invDir);//delay BB - real hReturn = h[invDir]; - // distributionsH->setPostCollisionDistributionForDirection(hReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); - distributionsH->setPostCollisionDistributionForDirection(hReturn, x1, x2, x3, invDir);//delay BB - if (distributionsH2) - { - real h2Return = h2[invDir]; - distributionsH2->setPostCollisionDistributionForDirection(h2Return, x1, x2, x3, invDir);//delay BB - // distributionsH2->setPostCollisionDistributionForDirection(h2Return, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir); - - } - } - } -} diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.h b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.h deleted file mode 100644 index f9a62a8a47041fd3f50ba350e8856fcde147c710..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.h +++ /dev/null @@ -1,50 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseNoSlipBCStrategy.h -//! \ingroup BoundarConditions -//! \author Hesameddin Safari -//======================================================================================= - -#ifndef MultiphaseNoSlipBCStrategy_h__ -#define MultiphaseNoSlipBCStrategy_h__ - -#include "MultiphaseBCStrategy.h" - -//! A class implements no-slip boundary condition for multiphase simulations -class MultiphaseNoSlipBCStrategy : public MultiphaseBCStrategy -{ -public: - MultiphaseNoSlipBCStrategy(); - virtual ~MultiphaseNoSlipBCStrategy(); - SPtr<BCStrategy> clone() override; - void addDistributions(SPtr<DistributionArray3D> distributions) override; - void addDistributionsH(SPtr<DistributionArray3D> distributionsH) override; - void applyBC() override; -}; -#endif // MultiphaseNoSlipBCStrategy_h__ diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.cpp b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.cpp deleted file mode 100644 index 192af1af727806445eac65b8b35b79d5c279f793..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.cpp +++ /dev/null @@ -1,498 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseNonReflectingOutflowBCStrategy.cpp -//! \ingroup BoundarConditions -//! \author Hesameddin Safari -//======================================================================================= - -#include "MultiphaseNonReflectingOutflowBCStrategy.h" -#include "BoundaryConditions.h" -#include "D3Q27System.h" -#include "DistributionArray3D.h" - -MultiphaseNonReflectingOutflowBCStrategy::MultiphaseNonReflectingOutflowBCStrategy() -{ - BCStrategy::preCollision = true; -} -////////////////////////////////////////////////////////////////////////// -MultiphaseNonReflectingOutflowBCStrategy::~MultiphaseNonReflectingOutflowBCStrategy() -{ -} -////////////////////////////////////////////////////////////////////////// -SPtr<BCStrategy> MultiphaseNonReflectingOutflowBCStrategy::clone() -{ - SPtr<BCStrategy> bc(new MultiphaseNonReflectingOutflowBCStrategy()); - return bc; -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseNonReflectingOutflowBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions) -{ - this->distributions = distributions; -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseNonReflectingOutflowBCStrategy::addDistributionsH(SPtr<DistributionArray3D> distributionsH) -{ - this->distributionsH = distributionsH; -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseNonReflectingOutflowBCStrategy::addDistributionsH2(SPtr<DistributionArray3D> distributionsH2) -{ - this->distributionsH2 = distributionsH2; -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseNonReflectingOutflowBCStrategy::applyBC() -{ - using namespace D3Q27System; -// using namespace UbMath; - using namespace vf::lbm::dir; - using namespace vf::basics::constant; - - real f[ENDF + 1]; - real ftemp[ENDF + 1]; - real h[D3Q27System::ENDF + 1]; - real htemp[ENDF + 1]; - real h2[D3Q27System::ENDF + 1]; - real h2temp[ENDF + 1]; - - int nx1 = x1; - int nx2 = x2; - int nx3 = x3; - int direction = -1; - - // flag points in direction of fluid - if (bcPtr->hasDensityBoundaryFlag(dP00)) { - nx1 += 1; - direction = dP00; - } else if (bcPtr->hasDensityBoundaryFlag(dM00)) { - nx1 -= 1; - direction = dM00; - } else if (bcPtr->hasDensityBoundaryFlag(d0P0)) { - nx2 += 1; - direction = d0P0; - } else if (bcPtr->hasDensityBoundaryFlag(d0M0)) { - nx2 -= 1; - direction = d0M0; - } else if (bcPtr->hasDensityBoundaryFlag(d00P)) { - nx3 += 1; - direction = d00P; - } else if (bcPtr->hasDensityBoundaryFlag(d00M)) { - nx3 -= 1; - direction = d00M; - } else - UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary...")); - - distributions->getPreCollisionDistribution(f, x1, x2, x3); - distributions->getPreCollisionDistribution(ftemp, nx1, nx2, nx3); - distributionsH->getPreCollisionDistribution(h, x1, x2, x3); - distributionsH->getPreCollisionDistribution(htemp, nx1, nx2, nx3); - distributionsH2->getPreCollisionDistribution(h2, x1, x2, x3); - distributionsH2->getPreCollisionDistribution(h2temp, nx1, nx2, nx3); - - real /* phi,*/ p1, vx1, vx2, vx3; - - // D3Q27System::calcDensity(h, phi); - - calcMacrosFct(f, p1, vx1, vx2, vx3); - - switch (direction) { - case dP00: - f[dP00] = ftemp[dP00] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP00]; - f[dPP0] = ftemp[dPP0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPP0]; - f[dPM0] = ftemp[dPM0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPM0]; - f[dP0P] = ftemp[dP0P] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP0P]; - f[dP0M] = ftemp[dP0M] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP0M]; - f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPPP]; - f[dPMP] = ftemp[dPMP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPMP]; - f[dPPM] = ftemp[dPPM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPPM]; - f[dPMM] = ftemp[dPMM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPMM]; - - distributions->setPreCollisionDistributionForDirection(f[dP00], x1 + DX1[dM00], x2 + DX2[dM00], x3 + DX3[dM00], dM00); - distributions->setPreCollisionDistributionForDirection(f[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0); - distributions->setPreCollisionDistributionForDirection(f[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0); - distributions->setPreCollisionDistributionForDirection(f[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M); - distributions->setPreCollisionDistributionForDirection(f[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P); - distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); - distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); - distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); - distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); - - h[dP00] = htemp[dP00] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dP00]; - h[dPP0] = htemp[dPP0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPP0]; - h[dPM0] = htemp[dPM0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPM0]; - h[dP0P] = htemp[dP0P] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dP0P]; - h[dP0M] = htemp[dP0M] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dP0M]; - h[dPPP] = htemp[dPPP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPPP]; - h[dPMP] = htemp[dPMP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPMP]; - h[dPPM] = htemp[dPPM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPPM]; - h[dPMM] = htemp[dPMM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPMM]; - - distributionsH->setPreCollisionDistributionForDirection(h[dP00], x1 + DX1[dM00], x2 + DX2[dM00], x3 + DX3[dM00], dM00); - distributionsH->setPreCollisionDistributionForDirection(h[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0); - distributionsH->setPreCollisionDistributionForDirection(h[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0); - distributionsH->setPreCollisionDistributionForDirection(h[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M); - distributionsH->setPreCollisionDistributionForDirection(h[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P); - distributionsH->setPreCollisionDistributionForDirection(h[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); - distributionsH->setPreCollisionDistributionForDirection(h[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); - distributionsH->setPreCollisionDistributionForDirection(h[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); - distributionsH->setPreCollisionDistributionForDirection(h[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); - - h2[dP00] = c1o2 * (h2temp[dP00] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dP00]); - h2[dPP0] = c1o2 * (h2temp[dPP0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dPP0]); - h2[dPM0] = c1o2 * (h2temp[dPM0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dPM0]); - h2[dP0P] = c1o2 * (h2temp[dP0P] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dP0P]); - h2[dP0M] = c1o2 * (h2temp[dP0M] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dP0M]); - h2[dPPP] = c1o2 * (h2temp[dPPP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dPPP]); - h2[dPMP] = c1o2 * (h2temp[dPMP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dPMP]); - h2[dPPM] = c1o2 * (h2temp[dPPM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dPPM]); - h2[dPMM] = c1o2 * (h2temp[dPMM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dPMM]); - - distributionsH2->setPreCollisionDistributionForDirection(h2[dP00], x1 + DX1[dM00], x2 + DX2[dM00], x3 + DX3[dM00], dM00); - distributionsH2->setPreCollisionDistributionForDirection(h2[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0); - distributionsH2->setPreCollisionDistributionForDirection(h2[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0); - distributionsH2->setPreCollisionDistributionForDirection(h2[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M); - distributionsH2->setPreCollisionDistributionForDirection(h2[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P); - distributionsH2->setPreCollisionDistributionForDirection(h2[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); - distributionsH2->setPreCollisionDistributionForDirection(h2[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); - distributionsH2->setPreCollisionDistributionForDirection(h2[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); - distributionsH2->setPreCollisionDistributionForDirection(h2[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); - - break; - case dM00: - f[dM00] = ftemp[dM00] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM00]; - f[dMP0] = ftemp[dMP0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMP0]; - f[dMM0] = ftemp[dMM0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMM0]; - f[dM0P] = ftemp[dM0P] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM0P]; - f[dM0M] = ftemp[dM0M] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM0M]; - f[dMPP] = ftemp[dMPP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMPP]; - f[dMMP] = ftemp[dMMP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMMP]; - f[dMPM] = ftemp[dMPM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMPM]; - f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMMM]; - - distributions->setPreCollisionDistributionForDirection(f[dM00], x1 + DX1[dP00], x2 + DX2[dP00], x3 + DX3[dP00], dP00); - distributions->setPreCollisionDistributionForDirection(f[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0); - distributions->setPreCollisionDistributionForDirection(f[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0); - distributions->setPreCollisionDistributionForDirection(f[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M); - distributions->setPreCollisionDistributionForDirection(f[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P); - distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); - distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); - distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); - distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); - - h[dM00] = htemp[dM00] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dM00]; - h[dMP0] = htemp[dMP0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMP0]; - h[dMM0] = htemp[dMM0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMM0]; - h[dM0P] = htemp[dM0P] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dM0P]; - h[dM0M] = htemp[dM0M] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dM0M]; - h[dMPP] = htemp[dMPP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMPP]; - h[dMMP] = htemp[dMMP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMMP]; - h[dMPM] = htemp[dMPM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMPM]; - h[dMMM] = htemp[dMMM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMMM]; - - distributionsH->setPreCollisionDistributionForDirection(h[dM00], x1 + DX1[dP00], x2 + DX2[dP00], x3 + DX3[dP00], dP00); - distributionsH->setPreCollisionDistributionForDirection(h[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0); - distributionsH->setPreCollisionDistributionForDirection(h[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0); - distributionsH->setPreCollisionDistributionForDirection(h[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M); - distributionsH->setPreCollisionDistributionForDirection(h[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P); - distributionsH->setPreCollisionDistributionForDirection(h[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); - distributionsH->setPreCollisionDistributionForDirection(h[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); - distributionsH->setPreCollisionDistributionForDirection(h[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); - distributionsH->setPreCollisionDistributionForDirection(h[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); - - h2[dM00] = c1o2 * (htemp[dM00] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dM00]); - h2[dMP0] = c1o2 * (htemp[dMP0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dMP0]); - h2[dMM0] = c1o2 * (htemp[dMM0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dMM0]); - h2[dM0P] = c1o2 * (htemp[dM0P] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dM0P]); - h2[dM0M] = c1o2 * (htemp[dM0M] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dM0M]); - h2[dMPP] = c1o2 * (htemp[dMPP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dMPP]); - h2[dMMP] = c1o2 * (htemp[dMMP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dMMP]); - h2[dMPM] = c1o2 * (htemp[dMPM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dMPM]); - h2[dMMM] = c1o2 * (htemp[dMMM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dMMM]); - - distributionsH2->setPreCollisionDistributionForDirection(h2[dM00], x1 + DX1[dP00], x2 + DX2[dP00], x3 + DX3[dP00], dP00); - distributionsH2->setPreCollisionDistributionForDirection(h2[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0); - distributionsH2->setPreCollisionDistributionForDirection(h2[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0); - distributionsH2->setPreCollisionDistributionForDirection(h2[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M); - distributionsH2->setPreCollisionDistributionForDirection(h2[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P); - distributionsH2->setPreCollisionDistributionForDirection(h2[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); - distributionsH2->setPreCollisionDistributionForDirection(h2[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); - distributionsH2->setPreCollisionDistributionForDirection(h2[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); - distributionsH2->setPreCollisionDistributionForDirection(h2[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); - break; - case d0P0: - f[d0P0] = ftemp[d0P0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0P0]; - f[dPP0] = ftemp[dPP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPP0]; - f[dMP0] = ftemp[dMP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMP0]; - f[d0PP] = ftemp[d0PP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0PP]; - f[d0PM] = ftemp[d0PM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0PM]; - f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPPP]; - f[dMPP] = ftemp[dMPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMPP]; - f[dPPM] = ftemp[dPPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPPM]; - f[dMPM] = ftemp[dMPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMPM]; - - distributions->setPreCollisionDistributionForDirection(f[d0P0], x1 + DX1[d0M0], x2 + DX2[d0M0], x3 + DX3[d0M0], d0M0); - distributions->setPreCollisionDistributionForDirection(f[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0); - distributions->setPreCollisionDistributionForDirection(f[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0); - distributions->setPreCollisionDistributionForDirection(f[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM); - distributions->setPreCollisionDistributionForDirection(f[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP); - distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); - distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); - distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); - distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); - - h[d0P0] = htemp[d0P0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[d0P0]; - h[dPP0] = htemp[dPP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dPP0]; - h[dMP0] = htemp[dMP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dMP0]; - h[d0PP] = htemp[d0PP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[d0PP]; - h[d0PM] = htemp[d0PM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[d0PM]; - h[dPPP] = htemp[dPPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dPPP]; - h[dMPP] = htemp[dMPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dMPP]; - h[dPPM] = htemp[dPPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dPPM]; - h[dMPM] = htemp[dMPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dMPM]; - - distributionsH->setPreCollisionDistributionForDirection(h[d0P0], x1 + DX1[d0M0], x2 + DX2[d0M0], x3 + DX3[d0M0], d0M0); - distributionsH->setPreCollisionDistributionForDirection(h[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0); - distributionsH->setPreCollisionDistributionForDirection(h[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0); - distributionsH->setPreCollisionDistributionForDirection(h[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM); - distributionsH->setPreCollisionDistributionForDirection(h[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP); - distributionsH->setPreCollisionDistributionForDirection(h[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); - distributionsH->setPreCollisionDistributionForDirection(h[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); - distributionsH->setPreCollisionDistributionForDirection(h[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); - distributionsH->setPreCollisionDistributionForDirection(h[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); - - h2[d0P0] = c1o2 * (htemp[d0P0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[d0P0]); - h2[dPP0] = c1o2 * (htemp[dPP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[dPP0]); - h2[dMP0] = c1o2 * (htemp[dMP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[dMP0]); - h2[d0PP] = c1o2 * (htemp[d0PP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[d0PP]); - h2[d0PM] = c1o2 * (htemp[d0PM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[d0PM]); - h2[dPPP] = c1o2 * (htemp[dPPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[dPPP]); - h2[dMPP] = c1o2 * (htemp[dMPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[dMPP]); - h2[dPPM] = c1o2 * (htemp[dPPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[dPPM]); - h2[dMPM] = c1o2 * (htemp[dMPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[dMPM]); - - distributionsH2->setPreCollisionDistributionForDirection(h2[d0P0], x1 + DX1[d0M0], x2 + DX2[d0M0], x3 + DX3[d0M0], d0M0); - distributionsH2->setPreCollisionDistributionForDirection(h2[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0); - distributionsH2->setPreCollisionDistributionForDirection(h2[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0); - distributionsH2->setPreCollisionDistributionForDirection(h2[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM); - distributionsH2->setPreCollisionDistributionForDirection(h2[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP); - distributionsH2->setPreCollisionDistributionForDirection(h2[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); - distributionsH2->setPreCollisionDistributionForDirection(h2[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); - distributionsH2->setPreCollisionDistributionForDirection(h2[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); - distributionsH2->setPreCollisionDistributionForDirection(h2[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); - - break; - case d0M0: - f[d0M0] = ftemp[d0M0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0M0]; - f[dPM0] = ftemp[dPM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPM0]; - f[dMM0] = ftemp[dMM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMM0]; - f[d0MP] = ftemp[d0MP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0MP]; - f[d0MM] = ftemp[d0MM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0MM]; - f[dPMP] = ftemp[dPMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPMP]; - f[dMMP] = ftemp[dMMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMMP]; - f[dPMM] = ftemp[dPMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPMM]; - f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMMM]; - - distributions->setPreCollisionDistributionForDirection(f[d0M0], x1 + DX1[d0P0], x2 + DX2[d0P0], x3 + DX3[d0P0], d0P0); - distributions->setPreCollisionDistributionForDirection(f[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0); - distributions->setPreCollisionDistributionForDirection(f[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0); - distributions->setPreCollisionDistributionForDirection(f[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM); - distributions->setPreCollisionDistributionForDirection(f[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP); - distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); - distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); - distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); - distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); - - h[d0M0] = htemp[d0M0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[d0M0]; - h[dPM0] = htemp[dPM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dPM0]; - h[dMM0] = htemp[dMM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dMM0]; - h[d0MP] = htemp[d0MP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[d0MP]; - h[d0MM] = htemp[d0MM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[d0MM]; - h[dPMP] = htemp[dPMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dPMP]; - h[dMMP] = htemp[dMMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dMMP]; - h[dPMM] = htemp[dPMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dPMM]; - h[dMMM] = htemp[dMMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dMMM]; - - distributionsH->setPreCollisionDistributionForDirection(h[d0M0], x1 + DX1[d0P0], x2 + DX2[d0P0], x3 + DX3[d0P0], d0P0); - distributionsH->setPreCollisionDistributionForDirection(h[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0); - distributionsH->setPreCollisionDistributionForDirection(h[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0); - distributionsH->setPreCollisionDistributionForDirection(h[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM); - distributionsH->setPreCollisionDistributionForDirection(h[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP); - distributionsH->setPreCollisionDistributionForDirection(h[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); - distributionsH->setPreCollisionDistributionForDirection(h[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); - distributionsH->setPreCollisionDistributionForDirection(h[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); - distributionsH->setPreCollisionDistributionForDirection(h[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); - - h2[d0M0] = c1o2 * (htemp[d0M0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[d0M0]); - h2[dPM0] = c1o2 * (htemp[dPM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[dPM0]); - h2[dMM0] = c1o2 * (htemp[dMM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[dMM0]); - h2[d0MP] = c1o2 * (htemp[d0MP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[d0MP]); - h2[d0MM] = c1o2 * (htemp[d0MM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[d0MM]); - h2[dPMP] = c1o2 * (htemp[dPMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[dPMP]); - h2[dMMP] = c1o2 * (htemp[dMMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[dMMP]); - h2[dPMM] = c1o2 * (htemp[dPMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[dPMM]); - h2[dMMM] = c1o2 * (htemp[dMMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[dMMM]); - - distributionsH2->setPreCollisionDistributionForDirection(h2[d0M0], x1 + DX1[d0P0], x2 + DX2[d0P0], x3 + DX3[d0P0], d0P0); - distributionsH2->setPreCollisionDistributionForDirection(h2[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0); - distributionsH2->setPreCollisionDistributionForDirection(h2[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0); - distributionsH2->setPreCollisionDistributionForDirection(h2[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM); - distributionsH2->setPreCollisionDistributionForDirection(h2[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP); - distributionsH2->setPreCollisionDistributionForDirection(h2[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); - distributionsH2->setPreCollisionDistributionForDirection(h2[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); - distributionsH2->setPreCollisionDistributionForDirection(h2[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); - distributionsH2->setPreCollisionDistributionForDirection(h2[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); - - break; - case d00P: - f[d00P] = ftemp[d00P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d00P]; - f[dP0P] = ftemp[dP0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dP0P]; - f[dM0P] = ftemp[dM0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dM0P]; - f[d0PP] = ftemp[d0PP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d0PP]; - f[d0MP] = ftemp[d0MP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d0MP]; - f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dPPP]; - f[dMPP] = ftemp[dMPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dMPP]; - f[dPMP] = ftemp[dPMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dPMP]; - f[dMMP] = ftemp[dMMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dMMP]; - - distributions->setPreCollisionDistributionForDirection(f[d00P], x1 + DX1[d00M], x2 + DX2[d00M], x3 + DX3[d00M], d00M); - distributions->setPreCollisionDistributionForDirection(f[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M); - distributions->setPreCollisionDistributionForDirection(f[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M); - distributions->setPreCollisionDistributionForDirection(f[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM); - distributions->setPreCollisionDistributionForDirection(f[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM); - distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); - distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); - distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); - distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); - - h[d00P] = htemp[d00P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[d00P]; - h[dP0P] = htemp[dP0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dP0P]; - h[dM0P] = htemp[dM0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dM0P]; - h[d0PP] = htemp[d0PP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[d0PP]; - h[d0MP] = htemp[d0MP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[d0MP]; - h[dPPP] = htemp[dPPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dPPP]; - h[dMPP] = htemp[dMPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dMPP]; - h[dPMP] = htemp[dPMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dPMP]; - h[dMMP] = htemp[dMMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dMMP]; - - distributionsH->setPreCollisionDistributionForDirection(h[d00P], x1 + DX1[d00M], x2 + DX2[d00M], x3 + DX3[d00M], d00M); - distributionsH->setPreCollisionDistributionForDirection(h[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M); - distributionsH->setPreCollisionDistributionForDirection(h[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M); - distributionsH->setPreCollisionDistributionForDirection(h[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM); - distributionsH->setPreCollisionDistributionForDirection(h[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM); - distributionsH->setPreCollisionDistributionForDirection(h[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); - distributionsH->setPreCollisionDistributionForDirection(h[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); - distributionsH->setPreCollisionDistributionForDirection(h[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); - distributionsH->setPreCollisionDistributionForDirection(h[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); - - h2[d00P] = c1o2 * (htemp[d00P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[d00P]); - h2[dP0P] = c1o2 * (htemp[dP0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[dP0P]); - h2[dM0P] = c1o2 * (htemp[dM0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[dM0P]); - h2[d0PP] = c1o2 * (htemp[d0PP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[d0PP]); - h2[d0MP] = c1o2 * (htemp[d0MP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[d0MP]); - h2[dPPP] = c1o2 * (htemp[dPPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[dPPP]); - h2[dMPP] = c1o2 * (htemp[dMPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[dMPP]); - h2[dPMP] = c1o2 * (htemp[dPMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[dPMP]); - h2[dMMP] = c1o2 * (htemp[dMMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[dMMP]); - - distributionsH2->setPreCollisionDistributionForDirection(h2[d00P], x1 + DX1[d00M], x2 + DX2[d00M], x3 + DX3[d00M], d00M); - distributionsH2->setPreCollisionDistributionForDirection(h2[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M); - distributionsH2->setPreCollisionDistributionForDirection(h2[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M); - distributionsH2->setPreCollisionDistributionForDirection(h2[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM); - distributionsH2->setPreCollisionDistributionForDirection(h2[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM); - distributionsH2->setPreCollisionDistributionForDirection(h2[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); - distributionsH2->setPreCollisionDistributionForDirection(h2[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); - distributionsH2->setPreCollisionDistributionForDirection(h2[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); - distributionsH2->setPreCollisionDistributionForDirection(h2[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); - - break; - case d00M: - f[d00M] = ftemp[d00M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d00M]; - f[dP0M] = ftemp[dP0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dP0M]; - f[dM0M] = ftemp[dM0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dM0M]; - f[d0PM] = ftemp[d0PM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d0PM]; - f[d0MM] = ftemp[d0MM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d0MM]; - f[dPPM] = ftemp[dPPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dPPM]; - f[dMPM] = ftemp[dMPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dMPM]; - f[dPMM] = ftemp[dPMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dPMM]; - f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dMMM]; - - distributions->setPreCollisionDistributionForDirection(f[d00M], x1 + DX1[d00P], x2 + DX2[d00P], x3 + DX3[d00P], d00P); - distributions->setPreCollisionDistributionForDirection(f[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P); - distributions->setPreCollisionDistributionForDirection(f[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P); - distributions->setPreCollisionDistributionForDirection(f[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP); - distributions->setPreCollisionDistributionForDirection(f[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP); - distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); - distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); - distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); - distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); - - h[d00M] = htemp[d00M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[d00M]; - h[dP0M] = htemp[dP0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dP0M]; - h[dM0M] = htemp[dM0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dM0M]; - h[d0PM] = htemp[d0PM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[d0PM]; - h[d0MM] = htemp[d0MM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[d0MM]; - h[dPPM] = htemp[dPPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dPPM]; - h[dMPM] = htemp[dMPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dMPM]; - h[dPMM] = htemp[dPMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dPMM]; - h[dMMM] = htemp[dMMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dMMM]; - - distributionsH->setPreCollisionDistributionForDirection(h[d00M], x1 + DX1[d00P], x2 + DX2[d00P], x3 + DX3[d00P], d00P); - distributionsH->setPreCollisionDistributionForDirection(h[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P); - distributionsH->setPreCollisionDistributionForDirection(h[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P); - distributionsH->setPreCollisionDistributionForDirection(h[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP); - distributionsH->setPreCollisionDistributionForDirection(h[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP); - distributionsH->setPreCollisionDistributionForDirection(h[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); - distributionsH->setPreCollisionDistributionForDirection(h[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); - distributionsH->setPreCollisionDistributionForDirection(h[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); - distributionsH->setPreCollisionDistributionForDirection(h[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); - - h2[d00M] = c1o2 * (htemp[d00M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[d00M]); - h2[dP0M] = c1o2 * (htemp[dP0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[dP0M]); - h2[dM0M] = c1o2 * (htemp[dM0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[dM0M]); - h2[d0PM] = c1o2 * (htemp[d0PM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[d0PM]); - h2[d0MM] = c1o2 * (htemp[d0MM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[d0MM]); - h2[dPPM] = c1o2 * (htemp[dPPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[dPPM]); - h2[dMPM] = c1o2 * (htemp[dMPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[dMPM]); - h2[dPMM] = c1o2 * (htemp[dPMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[dPMM]); - h2[dMMM] = c1o2 * (htemp[dMMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[dMMM]); - - distributionsH2->setPreCollisionDistributionForDirection(h2[d00M], x1 + DX1[d00P], x2 + DX2[d00P], x3 + DX3[d00P], d00P); - distributionsH2->setPreCollisionDistributionForDirection(h2[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P); - distributionsH2->setPreCollisionDistributionForDirection(h2[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P); - distributionsH2->setPreCollisionDistributionForDirection(h2[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP); - distributionsH2->setPreCollisionDistributionForDirection(h2[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP); - distributionsH2->setPreCollisionDistributionForDirection(h2[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); - distributionsH2->setPreCollisionDistributionForDirection(h2[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); - distributionsH2->setPreCollisionDistributionForDirection(h2[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); - distributionsH2->setPreCollisionDistributionForDirection(h2[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); - - break; - default: - UB_THROW(UbException(UB_EXARGS, "It isn't implemented non reflecting density boundary for this direction!")); - } -} diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.h b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.h deleted file mode 100644 index 874a120790300eafffe98d5bf8511565322f83fe..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.h +++ /dev/null @@ -1,50 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseNonReflectingOutflowBCStrategy.h -//! \ingroup BoundarConditions -//! \author Hesameddin Safari -//======================================================================================= - -#ifndef MultiphaseNonReflectingOutflowBCStrategy_h__ -#define MultiphaseNonReflectingOutflowBCStrategy_h__ - -#include "MultiphaseBCStrategy.h" -//! A class implements non reflecting outflow boundary condition for multiphase simulations -class MultiphaseNonReflectingOutflowBCStrategy : public MultiphaseBCStrategy -{ -public: - MultiphaseNonReflectingOutflowBCStrategy(); - ~MultiphaseNonReflectingOutflowBCStrategy(); - SPtr<BCStrategy> clone(); - void addDistributions(SPtr<DistributionArray3D> distributions); - void addDistributionsH(SPtr<DistributionArray3D> distributionsH); - void addDistributionsH2(SPtr<DistributionArray3D> distributionsH2); - void applyBC(); -}; -#endif // MultiphaseNonReflectingOutflowBCStrategy_h__ diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.cpp b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.cpp deleted file mode 100644 index eb5b429a6750d936b6f9807204c95d3b5c2449cd..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.cpp +++ /dev/null @@ -1,120 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphasePressureBCStrategy.cpp -//! \ingroup BoundarConditions -//! \author Hesameddin Safari -//======================================================================================= - -#include "MultiphasePressureBCStrategy.h" -#include "DistributionArray3D.h" -#include "BoundaryConditions.h" - - -MultiphasePressureBCStrategy::MultiphasePressureBCStrategy() -{ - BCStrategy::preCollision = false; -} -////////////////////////////////////////////////////////////////////////// -MultiphasePressureBCStrategy::~MultiphasePressureBCStrategy() -{ -} -////////////////////////////////////////////////////////////////////////// -SPtr<BCStrategy> MultiphasePressureBCStrategy::clone() -{ - SPtr<BCStrategy> bc(new MultiphasePressureBCStrategy()); - return bc; -} -////////////////////////////////////////////////////////////////////////// -void MultiphasePressureBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions) -{ - this->distributions = distributions; -} -////////////////////////////////////////////////////////////////////////// -void MultiphasePressureBCStrategy::addDistributionsH(SPtr<DistributionArray3D> distributionsH) -{ - this->distributionsH = distributionsH; -} -////////////////////////////////////////////////////////////////////////// -void MultiphasePressureBCStrategy::addDistributionsH2(SPtr<DistributionArray3D> distributionsH) -{ - this->distributionsH2 = distributionsH; -} -////////////////////////////////////////////////////////////////////////// -void MultiphasePressureBCStrategy::applyBC() -{ - using namespace vf::lbm::dir; - - LBMReal f[D3Q27System::ENDF+1]; - LBMReal h[D3Q27System::ENDF+1]; - LBMReal h2[D3Q27System::ENDF + 1]; - LBMReal feq[D3Q27System::ENDF+1]; - //LBMReal heq[D3Q27System::ENDF+1]; - LBMReal htemp[D3Q27System::ENDF+1]; - - distributions->getPostCollisionDistribution(f, x1, x2, x3); - distributionsH->getPostCollisionDistribution(h, x1, x2, x3); - if (distributionsH2) - distributionsH2->getPostCollisionDistribution(h2, x1, x2, x3); - LBMReal phi, vx1, vx2, vx3, p1, phiBC; - - D3Q27System::calcDensity(h, phi); - - calcMacrosFct(f, p1, vx1, vx2, vx3); - p1 = 0.0; - - phiBC = bcPtr->getBoundaryPhaseField(); - LBMReal rhoBC = bcPtr->getBoundaryDensity(); - D3Q27System::calcIncompFeq(feq, rhoBC, vx1, vx2, vx3); - - D3Q27System::calcMultiphaseHeq(htemp, phiBC, vx1, vx2, vx3); - - for (int fdir = D3Q27System::STARTF; fdir <= D3Q27System::ENDF; fdir++) { - if (bcPtr->hasDensityBoundaryFlag(fdir)) { - // //if(D3Q27System::DX1[fdir]*vx1+D3Q27System::DX2[fdir]*vx2+D3Q27System::DX3[fdir]*vx3 <= 0) - // if (false)//(phi<0.01) - // { - // LBMReal ftemp = -f[D3Q27System::INVDIR[fdir]] + feq[fdir] + feq[D3Q27System::INVDIR[fdir]]; - // distributions->setPostCollisionDistributionForDirection(ftemp, x1, x2, x3, D3Q27System::INVDIR[fdir]); - - // LBMReal hReturn = 0; - // //h[fdir]; //-h[D3Q27System::INVDIR[fdir]] + htemp[fdir] + - // //htemp[D3Q27System::INVDIR[fdir]]; - // distributionsH->setPostCollisionDistributionForDirection(hReturn, x1, x2, x3, D3Q27System::INVDIR[fdir]); - // } - - // else{ - // // //distributions->setPostCollisionDistributionForDirection(rhoBC*D3Q27System::WEIGTH[fdir], x1, x2, x3, D3Q27System::INVDIR[fdir]); - // // //distributionsH->setPostCollisionDistributionForDirection(phiBC*D3Q27System::WEIGTH[fdir], x1, x2, x3, D3Q27System::INVDIR[fdir]); - distributions->setPostCollisionDistributionForDirection(0.7*f[D3Q27System::INVDIR[fdir]], x1, x2, x3, D3Q27System::INVDIR[fdir]); - distributionsH->setPostCollisionDistributionForDirection(0.7*h[D3Q27System::INVDIR[fdir]], x1, x2, x3, D3Q27System::INVDIR[fdir]); - // } - } - } -} - diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.h b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.h deleted file mode 100644 index f22efefdd9d7a33adee201061f56e8b298e9beb7..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.h +++ /dev/null @@ -1,52 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphasePressureBCStrategy.h -//! \ingroup BoundarConditions -//! \author Hesameddin Safari -//======================================================================================= - -#ifndef MultiphasePressureBCStrategy_h__ -#define MultiphasePressureBCStrategy_h__ - -#include "MultiphaseBCStrategy.h" -//! A class implements velocity boundary condition for multiphase simulations -class MultiphasePressureBCStrategy : public MultiphaseBCStrategy -{ -public: - MultiphasePressureBCStrategy(); - ~MultiphasePressureBCStrategy(); - SPtr<BCStrategy> clone() override; - void addDistributions(SPtr<DistributionArray3D> distributions) override; - void addDistributionsH(SPtr<DistributionArray3D> distributionsH) override; - void addDistributionsH2(SPtr<DistributionArray3D> distributionsH2) override; - void applyBC() override; -}; - -#endif // MultiphasePressureBCStrategy_h__ - diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.cpp b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.cpp deleted file mode 100644 index 91b141cce30a5363996714f00f68462a189cc76f..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.cpp +++ /dev/null @@ -1,142 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseSlipBCStrategy.cpp -//! \ingroup BoundarConditions -//! \author Hesameddin Safari -//======================================================================================= - -#include "MultiphaseSlipBCStrategy.h" -#include "DistributionArray3D.h" -#include "BoundaryConditions.h" - -MultiphaseSlipBCStrategy::MultiphaseSlipBCStrategy() -{ - BCStrategy::preCollision = false; -} -////////////////////////////////////////////////////////////////////////// -MultiphaseSlipBCStrategy::~MultiphaseSlipBCStrategy() -{ - -} -////////////////////////////////////////////////////////////////////////// -SPtr<BCStrategy> MultiphaseSlipBCStrategy::clone() -{ - SPtr<BCStrategy> bc(new MultiphaseSlipBCStrategy()); - return bc; -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseSlipBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions) -{ - this->distributions = distributions; -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseSlipBCStrategy::addDistributionsH(SPtr<DistributionArray3D> distributionsH) -{ - this->distributionsH = distributionsH; -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseSlipBCStrategy::applyBC() -{ - using namespace vf::lbm::dir; - - real f[D3Q27System::ENDF+1]; - real h[D3Q27System::ENDF+1]; - real feq[D3Q27System::ENDF+1]; - real heq[D3Q27System::ENDF+1]; - distributions->getPostCollisionDistribution(f, x1, x2, x3); - distributionsH->getPostCollisionDistribution(h, x1, x2, x3); - - real p1, vx1, vx2, vx3, phi, rho; - - D3Q27System::calcDensity(h, phi); - //real 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(); - real 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]; - real q = bcPtr->getQ(invDir);// m+m q=0 stabiler - //vx3=0; - real velocity = vf::basics::constant::c0o1; - switch (invDir) - { - case dP00: velocity = (vf::basics::constant::c4o9*(+vx1)); break; //(2/cs^2)(=6)*rho_0(=1 bei imkompr)*wi*u*ei mit cs=1/sqrt(3) - case dM00: velocity = (vf::basics::constant::c4o9*(-vx1)); break; //z.B. aus paper manfred MRT LB models in three dimensions (2002) - case d0P0: velocity = (vf::basics::constant::c4o9*(+vx2)); break; - case d0M0: velocity = (vf::basics::constant::c4o9*(-vx2)); break; - case d00P: velocity = (vf::basics::constant::c4o9*(+vx3)); break; - case d00M: velocity = (vf::basics::constant::c4o9*(-vx3)); break; - case dPP0: velocity = (vf::basics::constant::c1o9*(+vx1+vx2)); break; - case dMM0: velocity = (vf::basics::constant::c1o9*(-vx1-vx2)); break; - case dPM0: velocity = (vf::basics::constant::c1o9*(+vx1-vx2)); break; - case dMP0: velocity = (vf::basics::constant::c1o9*(-vx1+vx2)); break; - case dP0P: velocity = (vf::basics::constant::c1o9*(+vx1+vx3)); break; - case dM0M: velocity = (vf::basics::constant::c1o9*(-vx1-vx3)); break; - case dP0M: velocity = (vf::basics::constant::c1o9*(+vx1-vx3)); break; - case dM0P: velocity = (vf::basics::constant::c1o9*(-vx1+vx3)); break; - case d0PP: velocity = (vf::basics::constant::c1o9*(+vx2+vx3)); break; - case d0MM: velocity = (vf::basics::constant::c1o9*(-vx2-vx3)); break; - case d0PM: velocity = (vf::basics::constant::c1o9*(+vx2-vx3)); break; - case d0MP: velocity = (vf::basics::constant::c1o9*(-vx2+vx3)); break; - case dPPP: velocity = (vf::basics::constant::c1o36*(+vx1+vx2+vx3)); break; - case dMMM: velocity = (vf::basics::constant::c1o36*(-vx1-vx2-vx3)); break; - case dPPM: velocity = (vf::basics::constant::c1o36*(+vx1+vx2-vx3)); break; - case dMMP: velocity = (vf::basics::constant::c1o36*(-vx1-vx2+vx3)); break; - case dPMP: velocity = (vf::basics::constant::c1o36*(+vx1-vx2+vx3)); break; - case dMPM: velocity = (vf::basics::constant::c1o36*(-vx1+vx2-vx3)); break; - case dPMM: velocity = (vf::basics::constant::c1o36*(+vx1-vx2-vx3)); break; - case dMPP: velocity = (vf::basics::constant::c1o36*(-vx1+vx2+vx3)); break; - default: throw UbException(UB_EXARGS, "unknown error"); - } - real fReturn = ((vf::basics::constant::c1o1-q)/(vf::basics::constant::c1o1+q))*((f[invDir]-feq[invDir])/(vf::basics::constant::c1o1-collFactor)+feq[invDir])+((q*(f[invDir]+f[fdir])-velocity*rho)/(vf::basics::constant::c1o1+q)); - distributions->setPostCollisionDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); - - //real hReturn = ((1.0-q)/(1.0+q))*((h[invDir]-heq[invDir])/(1.0-collFactorPh)+heq[invDir])+((q/(1.0+q))*(h[invDir]+h[fdir])); - real hReturn = h[invDir]; - distributionsH->setPostCollisionDistributionForDirection(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/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.h b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.h deleted file mode 100644 index 990615907c981ce0057d7933b72d955a0278d3b4..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.h +++ /dev/null @@ -1,51 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseSlipBCStrategy.h -//! \ingroup BoundarConditions -//! \author Hesameddin Safari -//======================================================================================= - -#ifndef MultiphaseSlipBCStrategy_h__ -#define MultiphaseSlipBCStrategy_h__ - -#include "MultiphaseBCStrategy.h" - -//! A class implements slip boundary condition for multiphase simulation -class MultiphaseSlipBCStrategy : public MultiphaseBCStrategy -{ -public: - MultiphaseSlipBCStrategy(); - virtual ~MultiphaseSlipBCStrategy(); - SPtr<BCStrategy> clone() override; - void addDistributions(SPtr<DistributionArray3D> distributions) override; - void addDistributionsH(SPtr<DistributionArray3D> distributionsH) override; - void applyBC() override; - -}; -#endif // SlipBCStrategy_h__ diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBC.cpp b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBC.cpp deleted file mode 100644 index b71bb2135b634abe1e58a081be80cfd13eec9cbe..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBC.cpp +++ /dev/null @@ -1,345 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseVelocityBC.cpp -//! \ingroup BoundarConditions -//! \author Hesameddin Safari -//======================================================================================= - -#include "MultiphaseVelocityBC.h" -#include "basics/utilities/UbLogger.h" -#include "basics/utilities/UbMath.h" -#include "basics/utilities/UbTuple.h" - -using namespace std; - - -MultiphaseVelocityBC::MultiphaseVelocityBC(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(); -} -/*==========================================================*/ -MultiphaseVelocityBC::MultiphaseVelocityBC(const bool& vx1, const bool& vx2, const bool& vx3, const mu::Parser& function, const real& phiBC, const real& startTime, const real& 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); - -} -/*==========================================================*/ -MultiphaseVelocityBC::MultiphaseVelocityBC(const bool& vx1, const bool& vx2, const bool& vx3, const mu::Parser& function1, const mu::Parser& function2, const mu::Parser& function3, const real& phiBC, const real& startTime, const real& 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(); -} -/*==========================================================*/ -MultiphaseVelocityBC::MultiphaseVelocityBC(const bool& vx1, const bool& vx2, const bool& vx3, const string& functionstring, const real& startTime, const real& 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(); -} -/*==========================================================*/ -MultiphaseVelocityBC::MultiphaseVelocityBC(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(); -} -/*==========================================================*/ -MultiphaseVelocityBC::MultiphaseVelocityBC(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(); -} -/*==========================================================*/ -MultiphaseVelocityBC::MultiphaseVelocityBC(const vector< BCFunction >& velVx1BCs, const vector< BCFunction >& velVx2BCs, const vector< BCFunction >& velVx3BCs) -{ - this->vx1BCs = velVx1BCs; - this->vx2BCs = velVx2BCs; - this->vx3BCs = velVx3BCs; - this->init(); -} -/*==========================================================*/ -MultiphaseVelocityBC::MultiphaseVelocityBC(const real& vx1, const real& vx1StartTime, const real& vx1EndTime, - const real& vx2, const real& vx2StartTime, const real& vx2EndTime, - const real& vx3, const real& vx3StartTime, const real& 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(); -} -/*==========================================================*/ -MultiphaseVelocityBC::MultiphaseVelocityBC(const string& vx1Function, const real& vx1StartTime, const real& vx1EndTime, - const string& vx2Function, const real& vx2StartTime, const real& vx2EndTime, - const string& vx3Function, const real& vx3StartTime, const real& 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 MultiphaseVelocityBC::setNewVelocities(const real& vx1, const real& vx1StartTime, const real& vx1EndTime, - const real& vx2, const real& vx2StartTime, const real& vx2EndTime, - const real& vx3, const real& vx3StartTime, const real& 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 MultiphaseVelocityBC::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 MultiphaseVelocityBC::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 MultiphaseVelocityBC::init(const D3Q27Interactor* const& interactor, const real& time) -{ - this->timeStep = time; - this->tmpVx1Function = this->tmpVx2Function = this->tmpVx3Function = NULL; - - //aktuelle velocityfunction bestimmen - real 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(), (real)BCFunction::INFCONST ) - || UbMath::equal( vx1BCs[pos].getEndTime(), (real)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(), (real)BCFunction::INFCONST ) - || UbMath::equal( vx2BCs[pos].getEndTime(), (real)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(), (real)BCFunction::INFCONST ) - || UbMath::equal( vx3BCs[pos].getEndTime(), (real)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,"D3Q27VelocityBC::init(time="<<time<<") " - <<", vx1= \""<<(tmpVx1Function ? tmpVx1Function->GetExpr() : "-")<<"\"" - <<", vx2= \""<<(tmpVx2Function ? tmpVx2Function->GetExpr() : "-")<<"\"" - <<", vx3= \""<<(tmpVx3Function ? tmpVx3Function->GetExpr() : "-")<<"\"" - <<", timedependent="<<boolalpha<<this->isTimeDependent() ); -} -/*==========================================================*/ -void MultiphaseVelocityBC::update( const D3Q27Interactor* const& interactor, const real& time ) -{ - this->init(interactor,time); -} -/*==========================================================*/ -void MultiphaseVelocityBC::adaptBCForDirection( const D3Q27Interactor& interactor, SPtr<BoundaryConditions> bc, const real& worldX1, const real& worldX2, const real& worldX3, const real& q, const int& fdirection, const real& time ) -{ - bc->setVelocityBoundaryFlag(D3Q27System::INVDIR[fdirection],secondaryBcOption); - bc->setQ((real)q,fdirection); -} -/*==========================================================*/ -void MultiphaseVelocityBC::adaptBC( const D3Q27Interactor& interactor, SPtr<BoundaryConditions> bc, const real& worldX1, const real& worldX2, const real& worldX3, const real& time ) -{ - this->setNodeVelocity(interactor,bc,worldX1,worldX2,worldX3,time); - bc->setBCStrategyKey(bcStrategyKey); -} -/*==========================================================*/ -void MultiphaseVelocityBC::setNodeVelocity( const D3Q27Interactor& interactor, SPtr<BoundaryConditions> bc, const real& worldX1, const real& worldX2, const real& worldX3, const real& timestep) -{ - //Geschwindigkeiten setzen - try - { - //PunktKoordinaten bestimmen - this->x1 = worldX1; - this->x2 = worldX2; - this->x3 = worldX3; - this->timeStep = timestep; - - if(tmpVx1Function) bc->setBoundaryVelocityX1((real)tmpVx1Function->Eval()); - if(tmpVx2Function) bc->setBoundaryVelocityX2((real)tmpVx2Function->Eval()); - if(tmpVx3Function) bc->setBoundaryVelocityX3((real)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 MultiphaseVelocityBC::getVelocity(const real& x1, const real& x2, const real& x3, const real& timeStep) const -{ - real vx1 = vf::basics::constant::c0o1; - real vx2 = vf::basics::constant::c0o1; - real vx3 = vf::basics::constant::c0o1; - 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 MultiphaseVelocityBC::toString() -{ - stringstream info; - info<<"D3Q27VelocityBC:\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/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBC.h b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBC.h deleted file mode 100644 index 8618d797245a641b8c6ce7fc30fee46a3bfeed22..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBC.h +++ /dev/null @@ -1,169 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseVelocityBC.h -//! \ingroup BoundarConditions -//! \author Hesameddin Safari -//======================================================================================= -#ifndef MultiphaseVelocityBC_H -#define MultiphaseVelocityBC_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 <BC.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 -//! -//! VelocityBC BC(vx1BCs,vx2BCs,vx3BCs); -//! BC.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 for vmax fct.DefineConst("x3Vmax", 0.0 -//! ); //x3-Pos for vmax fct.DefineConst("H" , diameterOfPipe); fct.DefineConst("vmax" , vmax ); -//! VelocityBC velBC(true, false ,false ,fct, 0, BCFunction::INFCONST); -//! \endcode - -class MultiphaseVelocityBC : public BC -{ -public: - //constructors - MultiphaseVelocityBC() { this->init(); } - - MultiphaseVelocityBC(const bool& vx1, const bool& vx2, const bool& vx3, const BCFunction& velVxBC ); - - MultiphaseVelocityBC(const bool& vx1, const bool& vx2, const bool& vx3, const mu::Parser& function, const real& phiBC, const real& startTime, const real& endTime ); - - MultiphaseVelocityBC(const bool& vx1, const bool& vx2, const bool& vx3, const mu::Parser& function1, const mu::Parser& function2, const mu::Parser& function3, const real& phiBC, const real& startTime, const real& endTime ); - - MultiphaseVelocityBC(const bool& vx1, const bool& vx2, const bool& vx3, const std::string& functionstring, const real& startTime, const real& endTime ); - - MultiphaseVelocityBC(const BCFunction& velBC, bool x1Dir, bool x2Dir, bool x3Dir); - - MultiphaseVelocityBC(const BCFunction& velVx1BC, const BCFunction& velVx2BC, const BCFunction& velVx3BC); - - MultiphaseVelocityBC(const std::vector< BCFunction >& velVx1BCs, const std::vector< BCFunction >& velVx2BCs, const std::vector< BCFunction >& velVx3BCs); - - MultiphaseVelocityBC(const real& vx1, const real& vx1StartTime, const real& vx1EndTime, - const real& vx2, const real& vx2StartTime, const real& vx2EndTime, - const real& vx3, const real& vx3StartTime, const real& vx3EndTime); - - MultiphaseVelocityBC(const std::string& vx1Function, const real& vx1StartTime, const real& vx1EndTime, - const std::string& vx2Function, const real& vx2StartTime, const real& vx2EndTime, - const std::string& vx3Function, const real& vx3StartTime, const real& 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 real& vx1, const real& vx1StartTime, const real& vx1EndTime, - const real& vx2, const real& vx2StartTime, const real& vx2EndTime, - const real& vx3, const real& vx3StartTime, const real& vx3EndTime); - - - //------------- implements D3Q27BoundaryConditionAdapter ----- start - std::string toString(); - - void init(const D3Q27Interactor* const& interactor, const real& time=0); - void update(const D3Q27Interactor* const& interactor, const real& time=0); - - void adaptBCForDirection(const D3Q27Interactor &interactor, SPtr<BoundaryConditions> bc, const real &worldX1, - const real &worldX2, const real &worldX3, const real &q, const int &fdirection, - const real &time = 0); - void adaptBC(const D3Q27Interactor &interactor, SPtr<BoundaryConditions> bc, const real &worldX1, - const real &worldX2, const real &worldX3, const real &time = 0); - - //------------- implements D3Q27BoundaryConditionAdapter ----- end - - UbTupleDouble3 getVelocity(const real& x1, const real& x2, const real& x3, const real& 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 real& worldX1, const real& worldX2, const real& worldX3, const real& 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; - - real phiBC; -}; - -#endif diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.cpp b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.cpp deleted file mode 100644 index f26be9d6bfa8eb28f3d8e3630b2ba19144e9c1b5..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.cpp +++ /dev/null @@ -1,141 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseVelocityBCStrategy.cpp -//! \ingroup BoundarConditions -//! \author Hesameddin Safari -//======================================================================================= - -#include "MultiphaseVelocityBCStrategy.h" -#include "DistributionArray3D.h" -#include "BoundaryConditions.h" - -MultiphaseVelocityBCStrategy::MultiphaseVelocityBCStrategy() -{ - BCStrategy::preCollision = false; -} -////////////////////////////////////////////////////////////////////////// -MultiphaseVelocityBCStrategy::~MultiphaseVelocityBCStrategy() -{ -} -////////////////////////////////////////////////////////////////////////// -SPtr<BCStrategy> MultiphaseVelocityBCStrategy::clone() -{ - SPtr<BCStrategy> bc(new MultiphaseVelocityBCStrategy()); - return bc; -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseVelocityBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions) -{ - this->distributions = distributions; -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseVelocityBCStrategy::addDistributionsH(SPtr<DistributionArray3D> distributionsH) -{ - this->distributionsH = distributionsH; -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseVelocityBCStrategy::addDistributionsH2(SPtr<DistributionArray3D> distributionsH) -{ - this->distributionsH2 = distributionsH; -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseVelocityBCStrategy::applyBC() -{ - using namespace vf::lbm::dir; - - real f[D3Q27System::ENDF+1]; - real h[D3Q27System::ENDF+1]; - real h2[D3Q27System::ENDF + 1]; - real feq[D3Q27System::ENDF+1]; - real heq[D3Q27System::ENDF+1]; - real htemp[D3Q27System::ENDF+1]; - - distributions->getPostCollisionDistribution(f, x1, x2, x3); - distributionsH->getPostCollisionDistribution(h, x1, x2, x3); - if (distributionsH2) - distributionsH2->getPostCollisionDistribution(h2, x1, x2, x3); - real phi, vx1, vx2, vx3, p1, phiBC; - - D3Q27System::calcDensity(h, phi); - - phi = 1; - - calcMacrosFct(f, p1, vx1, vx2, vx3); - vx1 = bcPtr->getBoundaryVelocityX1(); - vx2 = bcPtr->getBoundaryVelocityX2(); - vx3 = bcPtr->getBoundaryVelocityX3(); - p1 = vf::basics::constant::c0o1; - D3Q27System::calcMultiphaseFeqVB(feq, p1, vx1, vx2, vx3); - D3Q27System::calcMultiphaseHeq(heq, phi, vx1, vx2, vx3); - - ///// added for phase field ////// - - phiBC = bcPtr->getBoundaryPhaseField(); - - D3Q27System::calcMultiphaseHeq(htemp, phiBC, vx1, vx2, vx3); - //D3Q27System::calcMultiphaseHeq(htemp, phiBC, bcPtr->getBoundaryVelocityX1(), bcPtr->getBoundaryVelocityX2(), bcPtr->getBoundaryVelocityX2());//30.03.2021 EQ phase field BC! - //for (int fdir = D3Q27System::STARTF; fdir<=D3Q27System::ENDF; fdir++) - //{ - // if (bcPtr->hasVelocityBoundaryFlag(fdir)) - // { - // LBMReal hReturn = htemp[fdir]+h[fdir]-heq[fdir]; - // //17.03.2021 Let us just set the plain eq - // //LBMReal hReturn = htemp[fdir]; - // distributionsH->setPostCollisionDistributionForDirection(hReturn, nx1, nx2, nx3, fdir); - // // if (distributionsH2) - // // distributionsH2->setPostCollisionDistributionForDirection(0, 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 - real velocity = bcPtr->getBoundaryVelocity(invDir); - //16.03.2021 quick fix for velocity BC - real fReturn = f[invDir] - velocity; - //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->setPostCollisionDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);//no delay BB - distributions->setPostCollisionDistributionForDirection(fReturn, x1, x2, x3, invDir);//delay BB - - real hReturn = htemp[invDir] + h[invDir] - heq[invDir] - velocity*phi; - distributionsH->setPostCollisionDistributionForDirection(hReturn, x1, x2, x3, invDir);//delay BB - if (distributionsH2) { - fReturn = h2[invDir] ; - // distributionsH2->setPostCollisionDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir); - distributionsH2->setPostCollisionDistributionForDirection(fReturn, x1, x2, x3, invDir);//delay BB - } - - } - } - -} - diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.h b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.h deleted file mode 100644 index 217e141f516f3b409155e99516843c4844680ee7..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.h +++ /dev/null @@ -1,52 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseVelocityBCStrategy.h -//! \ingroup BoundarConditions -//! \author Hesameddin Safari -//======================================================================================= - -#ifndef MultiphaseVelocityBCStrategy_h__ -#define MultiphaseVelocityBCStrategy_h__ - -#include "MultiphaseBCStrategy.h" -//! A class implements velocity boundary condition for multiphase simulations -class MultiphaseVelocityBCStrategy : public MultiphaseBCStrategy -{ -public: - MultiphaseVelocityBCStrategy(); - ~MultiphaseVelocityBCStrategy(); - SPtr<BCStrategy> clone() override; - void addDistributions(SPtr<DistributionArray3D> distributions) override; - void addDistributionsH(SPtr<DistributionArray3D> distributionsH) override; - void addDistributionsH2(SPtr<DistributionArray3D> distributionsH2) override; - void applyBC() override; -}; - -#endif // MultiphaseVelocityBCStrategy_h__ - diff --git a/src/cpu/MultiphaseFlow/CMakeLists.txt b/src/cpu/MultiphaseFlow/CMakeLists.txt deleted file mode 100644 index 261919282ce830bfcf1e364443c439338b642d88..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -vf_add_library(PUBLIC_LINK cpu_core) \ No newline at end of file diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseCumulantLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseCumulantLBMKernel.cpp deleted file mode 100644 index f98663a3a2b7cb32e4b62c98abb354dc55b82564..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/LBM/MultiphaseCumulantLBMKernel.cpp +++ /dev/null @@ -1,1312 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file 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->setBCSet(bcSet->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; - using namespace vf::lbm::dir; - using namespace vf::basics::constant; - - 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(); - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - const int bcArrayMaxX1 = (int)bcArray->getNX1(); - const int bcArrayMaxX2 = (int)bcArray->getNX2(); - const int bcArrayMaxX3 = (int)bcArray->getNX3(); - - int minX1 = ghostLayerWidth; - int minX2 = ghostLayerWidth; - int minX3 = ghostLayerWidth; - int maxX1 = bcArrayMaxX1 - ghostLayerWidth; - int maxX2 = bcArrayMaxX2 - ghostLayerWidth; - int maxX3 = bcArrayMaxX3 - ghostLayerWidth; - - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField( - new CbArray3D<real, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0)); - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr divU( - new CbArray3D<real, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, 0.0)); - - - 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; - - real mfcbb = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3); - real mfabb = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p); - - real mfbbb = (*this->zeroDistributionsH)(x1, x2, x3); - (*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; - } - } - } - } - - real collFactorM; - real forcingTerm[D3Q27System::ENDF + 1]; - - 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 - - findNeighbors(phaseField, x1, x2, x3); - - real mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3); - real mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p); - - real mfbbb = (*this->zeroDistributionsF)(x1, x2, x3); - - real rhoH = 1.0; - real rhoL = 1.0 / densityRatio; - - real rhoToPhi = (rhoH - rhoL) / (phiH - phiL); - - real dX1_phi = gradX1_phi(); - real dX2_phi = gradX2_phi(); - real dX3_phi = gradX3_phi(); - - real denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi) + 1e-9; - collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL); - - - real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi(); - - //----------- Calculating Macroscopic Values ------------- - real rho = rhoH + rhoToPhi * (phi[d000] - phiH); - - 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); - - muForcingX1.DefineVar("rho",&muRho); - muForcingX2.DefineVar("rho",&muRho); - muForcingX3.DefineVar("rho",&muRho); - - muRho = rho; - - forcingX1 = muForcingX1.Eval(); - forcingX2 = muForcingX2.Eval(); - forcingX3 = muForcingX3.Eval(); - - real 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 - } - - real 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); - - real 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); - - real 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); - - //-------------------------------------------------------- - - real ux2 = ux * ux; - real uy2 = uy * uy; - real uz2 = uz * uz; - - //----------- Calculating Forcing Terms * ------------- - for (int dir = FSTARTDIR; dir <= FENDDIR; dir++) { - real velProd = DX1[dir] * ux + DX2[dir] * uy + DX3[dir] * uz; - real velSq1 = velProd * velProd; - real gamma = WEIGTH[dir] * (1.0 + 3 * velProd + 4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2)); - - real fac1 = (gamma - WEIGTH[dir]) * c1o3 * rhoToPhi; - - 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)); - } - - real gamma = WEIGTH[d000] * (1.0 - 1.5 * (ux2 + uy2 + uz2)); - real fac1 = (gamma - WEIGTH[d000]) * c1o3 * rhoToPhi; - forcingTerm[d000] = (-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)); - - //-------------------------------------------------------- - - mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[dP00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; - mfbcb = 3.0 * (mfbcb + 0.5 * forcingTerm[d0P0]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; - mfbbc = 3.0 * (mfbbc + 0.5 * forcingTerm[d00P]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; - mfccb = 3.0 * (mfccb + 0.5 * forcingTerm[dPP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; - mfacb = 3.0 * (mfacb + 0.5 * forcingTerm[dMP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NW ]; - mfcbc = 3.0 * (mfcbc + 0.5 * forcingTerm[dP0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TE ]; - mfabc = 3.0 * (mfabc + 0.5 * forcingTerm[dM0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TW ]; - mfbcc = 3.0 * (mfbcc + 0.5 * forcingTerm[d0PP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TN ]; - mfbac = 3.0 * (mfbac + 0.5 * forcingTerm[d0MP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TS ]; - mfccc = 3.0 * (mfccc + 0.5 * forcingTerm[dPPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNE]; - mfacc = 3.0 * (mfacc + 0.5 * forcingTerm[dMPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNW]; - mfcac = 3.0 * (mfcac + 0.5 * forcingTerm[dPMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSE]; - mfaac = 3.0 * (mfaac + 0.5 * forcingTerm[dMMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSW]; - mfabb = 3.0 * (mfabb + 0.5 * forcingTerm[dM00]) / rho; //-(3.0*p1 - rho)*WEIGTH[W ]; - mfbab = 3.0 * (mfbab + 0.5 * forcingTerm[d0M0]) / rho; //-(3.0*p1 - rho)*WEIGTH[S ]; - mfbba = 3.0 * (mfbba + 0.5 * forcingTerm[d00M]) / rho; //-(3.0*p1 - rho)*WEIGTH[B ]; - mfaab = 3.0 * (mfaab + 0.5 * forcingTerm[dMM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SW ]; - mfcab = 3.0 * (mfcab + 0.5 * forcingTerm[dPM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SE ]; - mfaba = 3.0 * (mfaba + 0.5 * forcingTerm[dM0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BW ]; - mfcba = 3.0 * (mfcba + 0.5 * forcingTerm[dP0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BE ]; - mfbaa = 3.0 * (mfbaa + 0.5 * forcingTerm[d0MM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BS ]; - mfbca = 3.0 * (mfbca + 0.5 * forcingTerm[d0PM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BN ]; - mfaaa = 3.0 * (mfaaa + 0.5 * forcingTerm[dMMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSW]; - mfcaa = 3.0 * (mfcaa + 0.5 * forcingTerm[dPMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSE]; - mfaca = 3.0 * (mfaca + 0.5 * forcingTerm[dMPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNW]; - mfcca = 3.0 * (mfcca + 0.5 * forcingTerm[dPPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNE]; - mfbbb = 3.0 * (mfbbb + 0.5 * forcingTerm[d000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST]; - - real 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; - - - real 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); - - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real 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 - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = 1.; // omega2 or bulk viscosity - real OxyyPxzz = 1.; //-s9;//2+s9;// - real OxyyMxzz = 1.; // 2+s9;// - real O4 = 1.; - real O5 = 1.; - real O6 = 1.; - - // Cum 4. - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab); - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); - - real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + - c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho); - real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + - c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho); - real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + - c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho); - - // Cum 5. - real CUMbcc = mfbcc - - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + - 2. * (mfbab * mfacb + mfbba * mfabc)) - - c1o3 * (mfbca + mfbac) * oMdrho; - real CUMcbc = mfcbc - - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + - 2. * (mfabb * mfcab + mfbba * mfbac)) - - c1o3 * (mfcba + mfabc) * oMdrho; - real CUMccb = mfccb - - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + - 2. * (mfbab * mfbca + mfabb * mfcba)) - - c1o3 * (mfacb + mfcab) * oMdrho; - - // Cum 6. - real 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 - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - real dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + collFactorM * c3o2 * mxxMyy; - real dzuz = dxux + collFactorM * c3o2 * mxxMzz; - - (*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 - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - // relax - wadjust = OxyyMxzz + (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) * mfabb + 2. * mfbba * mfbab); - mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); - mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); - - mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + - c1o9 * (oMdrho - 1) * oMdrho; - mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + - c1o9 * (oMdrho - 1) * oMdrho; - mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + - c1o9 * (oMdrho - 1) * oMdrho; - - // 5. - mfbcc = CUMbcc + - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + - 2. * (mfbab * mfacb + mfbba * mfabc)) + - c1o3 * (mfbca + mfbac) * oMdrho; - mfcbc = CUMcbc + - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + - 2. * (mfabb * mfcab + mfbba * mfbac)) + - c1o3 * (mfcba + mfabc) * oMdrho; - mfccb = CUMccb + - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + - 2. * (mfbab * mfbca + mfabb * mfcba)) + - c1o3 * (mfacb + mfcab) * oMdrho; - - // 6. - mfccc = CUMccc - - ((-4. * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) - - 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) + - (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) + - 2. * (mfcaa * mfaca * mfaac) + 16. * mfbba * mfbab * mfabb) - - c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho - - c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - - c1o27 * oMdrho * oMdrho * (-2. * oMdrho) + - (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) + - (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * - c2o3 * oMdrho) - - c1o27 * oMdrho; - - //////////////////////////////////////////////////////////////////////////////////// - // 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 - real rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) + - (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + - (mfbaa + mfbac + mfbca + mfbcc) + (mfabb + mfcbb) + (mfbab + mfbcb) + - (mfbba + mfbbc) + mfbbb; - - real 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))); - } -#endif - - mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[dP00]; - mfbcb = rho * c1o3 * (mfbcb) + 0.5 * forcingTerm[d0P0]; - mfbbc = rho * c1o3 * (mfbbc) + 0.5 * forcingTerm[d00P]; - mfccb = rho * c1o3 * (mfccb) + 0.5 * forcingTerm[dPP0]; - mfacb = rho * c1o3 * (mfacb) + 0.5 * forcingTerm[dMP0]; - mfcbc = rho * c1o3 * (mfcbc) + 0.5 * forcingTerm[dP0P]; - mfabc = rho * c1o3 * (mfabc) + 0.5 * forcingTerm[dM0P]; - mfbcc = rho * c1o3 * (mfbcc) + 0.5 * forcingTerm[d0PP]; - mfbac = rho * c1o3 * (mfbac) + 0.5 * forcingTerm[d0MP]; - mfccc = rho * c1o3 * (mfccc) + 0.5 * forcingTerm[dPPP]; - mfacc = rho * c1o3 * (mfacc) + 0.5 * forcingTerm[dMPP]; - mfcac = rho * c1o3 * (mfcac) + 0.5 * forcingTerm[dPMP]; - mfaac = rho * c1o3 * (mfaac) + 0.5 * forcingTerm[dMMP]; - mfabb = rho * c1o3 * (mfabb) + 0.5 * forcingTerm[dM00]; - mfbab = rho * c1o3 * (mfbab) + 0.5 * forcingTerm[d0M0]; - mfbba = rho * c1o3 * (mfbba) + 0.5 * forcingTerm[d00M]; - mfaab = rho * c1o3 * (mfaab) + 0.5 * forcingTerm[dMM0]; - mfcab = rho * c1o3 * (mfcab) + 0.5 * forcingTerm[dPM0]; - mfaba = rho * c1o3 * (mfaba) + 0.5 * forcingTerm[dM0M]; - mfcba = rho * c1o3 * (mfcba) + 0.5 * forcingTerm[dP0M]; - mfbaa = rho * c1o3 * (mfbaa) + 0.5 * forcingTerm[d0MM]; - mfbca = rho * c1o3 * (mfbca) + 0.5 * forcingTerm[d0PM]; - mfaaa = rho * c1o3 * (mfaaa) + 0.5 * forcingTerm[dMMM]; - mfcaa = rho * c1o3 * (mfcaa) + 0.5 * forcingTerm[dPMM]; - mfaca = rho * c1o3 * (mfaca) + 0.5 * forcingTerm[dMPM]; - mfcca = rho * c1o3 * (mfcca) + 0.5 * forcingTerm[dPPM]; - mfbbb = rho * c1o3 * (mfbbb) + 0.5 * forcingTerm[d000]; - - ////////////////////////////////////////////////////////////////////////// - // 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[dP00] = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); - h[d0P0] = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3); - h[d00P] = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3); - h[dPP0] = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3); - h[dMP0] = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3); - h[dP0P] = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3); - h[dM0P] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3); - h[d0PP] = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3); - h[d0MP] = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3); - h[dPPP] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3); - h[dMPP] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3); - h[dPMP] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3); - h[dMMP] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3); - - h[dM00] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3); - h[d0M0] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3); - h[d00M] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p); - h[dMM0] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3); - h[dPM0] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3); - h[dM0M] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p); - h[dP0M] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p); - h[d0MM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p); - h[d0PM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p); - h[dMMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p); - h[dPMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p); - h[dMPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p); - h[dPPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p); - - h[d000] = (*this->zeroDistributionsH)(x1, x2, x3); - - for (int dir = STARTF; dir < (ENDF + 1); dir++) { - real velProd = DX1[dir] * ux + DX2[dir] * uy + DX3[dir] * uz; - real velSq1 = velProd * velProd; - real hEq; //, gEq; - - if (dir != d000) { - real dirGrad_phi = (phi[dir] - phi[INVDIR[dir]]) / 2.0; - real hSource = (tauH - 0.5) * (1.0 - phi[d000]) * (phi[d000]) * (dirGrad_phi) / denom; - hEq = phi[d000] * WEIGTH[dir] * (1.0 + 3.0 * velProd + 4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2)) + hSource * WEIGTH[dir]; - - // This corresponds with the collision factor of 1.0 which equals (tauH + 0.5). - h[dir] = h[dir] - (h[dir] - hEq) / (tauH); - - } else { - hEq = phi[d000] * WEIGTH[d000] * (1.0 - 1.5 * (ux2 + uy2 + uz2)); - h[d000] = h[d000] - (h[d000] - hEq) / (tauH); - } - } - - (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3) = h[iP00]; - (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3) = h[i0P0]; - (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3) = h[i00P]; - (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3) = h[iPP0]; - (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3) = h[iMP0]; - (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3) = h[iP0P]; - (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3) = h[iM0P]; - (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3) = h[i0PP]; - (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3) = h[i0MP]; - (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3) = h[iPPP]; - (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3) = h[iMPP]; - (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3) = h[iPMP]; - (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = h[iMMP]; - - (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3) = h[iM00]; - (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3) = h[i0M0]; - (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p) = h[i00M]; - (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3) = h[iMM0]; - (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3) = h[iPM0]; - (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p) = h[iM0M]; - (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p) = h[iP0M]; - (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p) = h[i0MM]; - (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p) = h[i0PM]; - (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = h[iMMM]; - (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p) = h[iPMM]; - (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p) = h[iMPM]; - (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p) = h[iPPM]; - - (*this->zeroDistributionsH)(x1, x2, x3) = h[d000]; - - ///////////////////// END OF OLD BGK SOLVER /////////////////////////////// - } - } - } - } - dataSet->setPhaseField(divU); - } - -////////////////////////////////////////////////////////////////////////// - -real MultiphaseCumulantLBMKernel::gradX1_phi() -{ - using namespace D3Q27System; - real sum = 0.0; - for (int k = FSTARTDIR; k <= FENDDIR; k++) { - sum += WEIGTH[k] * DX1[k] * phi[k]; - } - return 3.0 * sum; -} - -real MultiphaseCumulantLBMKernel::gradX2_phi() -{ - using namespace D3Q27System; - real sum = 0.0; - for (int k = FSTARTDIR; k <= FENDDIR; k++) { - sum += WEIGTH[k] * DX2[k] * phi[k]; - } - return 3.0 * sum; -} - -real MultiphaseCumulantLBMKernel::gradX3_phi() -{ - using namespace D3Q27System; - real sum = 0.0; - for (int k = FSTARTDIR; k <= FENDDIR; k++) { - sum += WEIGTH[k] * DX3[k] * phi[k]; - } - return 3.0 * sum; -} - -real MultiphaseCumulantLBMKernel::nabla2_phi() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - real sum = 0.0; - for (int k = FSTARTDIR; k <= FENDDIR; k++) { - sum += WEIGTH[k] * (phi[k] - phi[d000]); - } - return 6.0 * sum; -} - -void MultiphaseCumulantLBMKernel::computePhasefield() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - SPtr<DistributionArray3D> distributionsH = dataSet->getHdistributions(); - - 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[dP00] = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); - h[d0P0] = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3); - h[d00P] = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3); - h[dPP0] = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3); - h[dMP0] = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3); - h[dP0P] = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3); - h[dM0P] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3); - h[d0PP] = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3); - h[d0MP] = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3); - h[dPPP] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3); - h[dMPP] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3); - h[dPMP] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3); - h[dMMP] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3); - - h[dM00] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3); - h[d0M0] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3); - h[d00M] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p); - h[dMM0] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3); - h[dPM0] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3); - h[dM0M] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p); - h[dP0M] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p); - h[d0MM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p); - h[d0PM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p); - h[dMMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p); - h[dPMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p); - h[dMPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p); - h[dPPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p); - - h[d000] = (*this->zeroDistributionsH)(x1, x2, x3); - } - } - } - } -} - -void MultiphaseCumulantLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, - int x3) -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - phi[d000] = (*ph)(x1, x2, x3); - - 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 { - - phi[k] = 0.;//16.03.2021 quick fix for uninitialized variables, might influence contact angle! - } - } -} - -void MultiphaseCumulantLBMKernel::swapDistributions() -{ - LBMKernel::swapDistributions(); - dataSet->getHdistributions()->swap(); -} \ No newline at end of file diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseCumulantLBMKernel.h b/src/cpu/MultiphaseFlow/LBM/MultiphaseCumulantLBMKernel.h deleted file mode 100644 index a42f6d5eaf907cd3706546c7afcd67d93e9985f2..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/LBM/MultiphaseCumulantLBMKernel.h +++ /dev/null @@ -1,100 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseCumulantLBMKernel.h -//! \ingroup LBMKernel -//! \author Hesameddin Safari -//======================================================================================= - -#ifndef MultiphaseCumulantLBMKernel_H -#define MultiphaseCumulantLBMKernel_H - -#include "LBMKernel.h" -#include "BCSet.h" -#include "D3Q27System.h" -#include "basics/utilities/UbTiming.h" -#include "basics/container/CbArray4D.h" -#include "basics/container/CbArray3D.h" - -//! \brief 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; - real getCalculationTime() override { return .0; } -protected: - virtual void initDataSet(); - void swapDistributions() override; - real f1[D3Q27System::ENDF+1]; - - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF; - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF; - CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr zeroDistributionsF; - - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH; - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH; - CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr zeroDistributionsH; - - //CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr phaseField; - - real h [D3Q27System::ENDF+1]; - real g [D3Q27System::ENDF+1]; - real phi[D3Q27System::ENDF+1]; - real pr1[D3Q27System::ENDF+1]; - real phi_cutoff[D3Q27System::ENDF+1]; - - real gradX1_phi(); - real gradX2_phi(); - real gradX3_phi(); - //LBMReal gradX1_pr1(); - //LBMReal gradX2_pr1(); - //LBMReal gradX3_pr1(); - //LBMReal dirgradC_phi(int n, int k); - void computePhasefield(); - void findNeighbors(CbArray3D<real,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*/); - - real nabla2_phi(); - - - mu::value_type muX1,muX2,muX3; - mu::value_type muDeltaT; - mu::value_type muNu; - mu::value_type muRho; - real forcingX1; - real forcingX2; - real forcingX3; -}; - -#endif diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterCompressibleAirLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterCompressibleAirLBMKernel.cpp deleted file mode 100644 index e8776121b19b3d2a8e3b8f315a18433092c8559a..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterCompressibleAirLBMKernel.cpp +++ /dev/null @@ -1,1698 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphasePressureFilterCompressibleAirLBMKernel.cpp -//! \ingroup LBMKernel -//! \author M. Geier, K. Kutscher, Hesameddin Safari -//======================================================================================= - -#include "MultiphasePressureFilterCompressibleAirLBMKernel.h" -#include "BCArray3D.h" -#include "Block3D.h" -#include "D3Q27EsoTwist3DSplittedVector.h" -#include "D3Q27System.h" -#include "DataSet3D.h" -#include "LBMKernel.h" -#include <cmath> -#include "UbMath.h" - -#define PROOF_CORRECTNESS - -////////////////////////////////////////////////////////////////////////// -MultiphasePressureFilterCompressibleAirLBMKernel::MultiphasePressureFilterCompressibleAirLBMKernel() { this->compressible = false; } -////////////////////////////////////////////////////////////////////////// -void MultiphasePressureFilterCompressibleAirLBMKernel::initDataSet() -{ - SPtr<DistributionArray3D> f(new D3Q27EsoTwist3DSplittedVector( nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9)); - SPtr<DistributionArray3D> h(new D3Q27EsoTwist3DSplittedVector( nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9)); // For phase-field - - SPtr<PhaseFieldArray3D> divU1(new PhaseFieldArray3D( nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure(new CbArray3D<real, IndexerX3X2X1>( nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - pressureOld = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - dataSet->setFdistributions(f); - dataSet->setHdistributions(h); // For phase-field - dataSet->setPhaseField(divU1); - dataSet->setPressureField(pressure); - - phaseField = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.0)); - - divU = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); -} -////////////////////////////////////////////////////////////////////////// -SPtr<LBMKernel> MultiphasePressureFilterCompressibleAirLBMKernel::clone() -{ - SPtr<LBMKernel> kernel(new MultiphasePressureFilterCompressibleAirLBMKernel()); - kernel->setNX(nx); - dynamicPointerCast<MultiphasePressureFilterCompressibleAirLBMKernel>(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->setInterfaceWidth(this->interfaceWidth); - - kernel->setBCSet(bcSet->clone(kernel)); - kernel->setWithForcing(withForcing); - kernel->setForcingX1(muForcingX1); - kernel->setForcingX2(muForcingX2); - kernel->setForcingX3(muForcingX3); - kernel->setIndex(ix1, ix2, ix3); - kernel->setDeltaT(deltaT); - kernel->setGhostLayerWidth(2); - dynamicPointerCast<MultiphasePressureFilterCompressibleAirLBMKernel>(kernel)->initForcing(); - - return kernel; -} -////////////////////////////////////////////////////////////////////////// -void MultiphasePressureFilterCompressibleAirLBMKernel::forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) { -// using namespace UbMath; - using namespace vf::basics::constant; - - real m2 = mfa + mfc; - real m1 = mfc - mfa; - real m0 = m2 + mfb; - mfa = m0; - m0 *= Kinverse; - m0 += oneMinusRho; - mfb = (m1 * Kinverse - m0 * vv) * K; - mfc = ((m2 - c2o1 * m1 * vv) * Kinverse + v2 * m0) * K; -} - -//////////////////////////////////////////////////////////////////////////////// -void MultiphasePressureFilterCompressibleAirLBMKernel::backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) { -// using namespace UbMath; - using namespace vf::basics::constant; - - real m0 = (((mfc - mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 - vv) * c1o2) * K; - real m1 = (((mfa - mfc) - c2o1 * mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (-v2)) * K; - mfc = (((mfc + mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 + vv) * c1o2) * K; - mfa = m0; - mfb = m1; -} - - -//////////////////////////////////////////////////////////////////////////////// -void MultiphasePressureFilterCompressibleAirLBMKernel::forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) { -// using namespace UbMath; - using namespace vf::basics::constant; - - real m1 = (mfa + mfc) + mfb; - real m2 = mfc - mfa; - mfc = (mfc + mfa) + (v2 * m1 - c2o1 * vv * m2); - mfb = m2 - vv * m1; - mfa = m1; -} - - -void MultiphasePressureFilterCompressibleAirLBMKernel::backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) { -// using namespace UbMath; - using namespace vf::basics::constant; - - real ma = (mfc + mfa * (v2 - vv)) * c1o2 + mfb * (vv - c1o2); - real mb = ((mfa - mfc) - mfa * v2) - c2o1 * mfb * vv; - mfc = (mfc + mfa * (v2 + vv)) * c1o2 + mfb * (vv + c1o2); - mfb = mb; - mfa = ma; -} - - -void MultiphasePressureFilterCompressibleAirLBMKernel::calculate(int step) -{ - using namespace D3Q27System; -// using namespace UbMath; - using namespace vf::lbm::dir; - using namespace vf::basics::constant; - - forcingX1 = 0.0; - forcingX2 = 0.0; - forcingX3 = 0.0; - - real oneOverInterfaceScale = c4o1 / interfaceWidth; //1.0;//1.5; - ///////////////////////////////////// - - localDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); - nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); - zeroDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); - - localDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions(); - nonLocalDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions(); - zeroDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions(); - - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure = dataSet->getPressureField(); - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - const int bcArrayMaxX1 = (int)bcArray->getNX1(); - const int bcArrayMaxX2 = (int)bcArray->getNX2(); - const int bcArrayMaxX3 = (int)bcArray->getNX3(); - - int minX1 = ghostLayerWidth; - int minX2 = ghostLayerWidth; - int minX3 = ghostLayerWidth; - int maxX1 = bcArrayMaxX1 - ghostLayerWidth; - int maxX2 = bcArrayMaxX2 - ghostLayerWidth; - int maxX3 = bcArrayMaxX3 - ghostLayerWidth; - - for (int x3 = minX3-ghostLayerWidth; x3 < maxX3+ghostLayerWidth; x3++) { - for (int x2 = minX2-ghostLayerWidth; x2 < maxX2+ghostLayerWidth; x2++) { - for (int x1 = minX1-ghostLayerWidth; x1 < maxX1+ghostLayerWidth; x1++) { - if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { - int x1p = x1 + 1; - int x2p = x2 + 1; - int x3p = x3 + 1; - - real mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - real mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - - real mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3); - (*phaseField)(x1, x2, x3) = (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca) + (mfcaa + mfacc)) ) + - (((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) + - ((mfbaa + mfbac) + (mfbca + mfbcc))) + ((mfabb + mfcbb) + - (mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb; - - ////// read F-distributions for velocity formalism - - 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); - - real rhoH = 1.0; - real rhoL = 1.0 / densityRatio; - - real rhoToPhi = (rhoH - rhoL) / (phiH - phiL); - - real drho = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) - + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) - + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - - real rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) - phiH); //Incompressible - //LBMReal rho = rhoH + rhoToPhi * ((*pressure)(x1, x2, x3) - phiH); //wrong? - //! variable density -> TRANSFER! - //LBMReal rho = rhoH * ((*phaseField)(x1, x2, x3)) + rhoL * ((*phaseField2)(x1, x2, x3)); - - (*pressureOld)(x1, x2, x3) = (*pressure)(x1, x2, x3) + rho * c1o3 * drho; - - //(*pressure)(x1, x2, x3) = (((*phaseField)(x1, x2, x3)) + ((*phaseField2)(x1, x2, x3)) - c1) * c1o3; - ////!!!!!! relplace by pointer swap! - //(*pressureOld)(x1, x2, x3) = (*pressure)(x1, x2, x3); - } - } - } - } - - real collFactorM; - - ////Periodic Filter - for (int x3 = minX3-1; x3 <= maxX3; x3++) { - for (int x2 = minX2-1; x2 <= maxX2; x2++) { - for (int x1 = minX1-1; x1 <= maxX1; x1++) { - if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { - - real sum = 0.; - - ///Version for boundaries - for (int xx = -1; xx <= 1; xx++) { - //int xxx = (xx+x1 <= maxX1) ? ((xx + x1 > 0) ? xx + x1 : maxX1) : 0; - int xxx = xx + x1; - - for (int yy = -1; yy <= 1; yy++) { - //int yyy = (yy+x2 <= maxX2) ?( (yy + x2 > 0) ? yy + x2 : maxX2) : 0; - int yyy = yy + x2; - - for (int zz = -1; zz <= 1; zz++) { - //int zzz = (zz+x3 <= maxX3) ? zzz = ((zz + x3 > 0) ? zz + x3 : maxX3 ): 0; - int zzz = zz + x3; - - if (!bcArray->isSolid(xxx, yyy, zzz) && !bcArray->isUndefined(xxx, yyy, zzz)) { - sum+= 64.0/(216.0*(c1o1+c3o1*abs(xx))* (c1o1 + c3o1 * abs(yy))* (c1o1 + c3o1 * abs(zz)))*(*pressureOld)(xxx, yyy, zzz); - } - else{ sum+= 64.0 / (216.0 * (c1o1 + c3o1 * abs(xx)) * (c1o1 + c3o1 * abs(yy)) * (c1o1 + c3o1 * abs(zz))) * (*pressureOld)(x1, x2, x3); - } - - - } - } - } - (*pressure)(x1, x2, x3) = sum; - } - } - } - } - - ////!filter - - 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 - - findNeighbors(phaseField, x1, x2, x3); - - real mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3); - real mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p); - - real mfbbb = (*this->zeroDistributionsF)(x1, x2, x3); - - real rhoH = 1.0; - real rhoL = 1.0 / densityRatio; - - real rhoToPhi = (rhoH - rhoL) / (phiH - phiL); - - real dX1_phi = gradX1_phi(); - real dX2_phi = gradX2_phi(); - real dX3_phi = gradX3_phi(); - - real denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi) + 1e-9; - real normX1 = dX1_phi / denom; - real normX2 = dX2_phi / denom; - real normX3 = dX3_phi / denom; - - - - collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL); - - - real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi(); - - //----------- Calculating Macroscopic Values ------------- - real rho = rhoH + rhoToPhi * (phi[d000] - phiH); //Incompressible - //LBMReal rho = rhoL + (rhoH - rhoL) * phi[REST] + (one - phi[REST]) * (*pressure)(x1, x2, x3) * three; //compressible - - real m0, m1, m2; - real rhoRef=c1o1; - - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb))/rhoRef; - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab))/rhoRef; - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba))/rhoRef; - - real gradPx = 0.0; - real gradPy = 0.0; - real gradPz = 0.0; - for (int dir1 = -1; dir1 <= 1; dir1++) { - for (int dir2 = -1; dir2 <= 1; dir2++) { - int yyy = x2 + dir1; - int zzz = x3 + dir2; - if (!bcArray->isSolid(x1-1, yyy, zzz) && !bcArray->isUndefined(x1-1, yyy, zzz)) { - gradPx -= (*pressure)(x1 - 1, yyy, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - else { - gradPx -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - if (!bcArray->isSolid(x1 + 1, yyy, zzz) && !bcArray->isUndefined(x1 + 1, yyy, zzz)) { - gradPx += (*pressure)(x1 + 1, yyy, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - else { - gradPx += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - - int xxx = x1 + dir1; - if (!bcArray->isSolid(xxx, x2-1, zzz) && !bcArray->isUndefined(xxx, x2-1, zzz)) { - gradPy -= (*pressure)(xxx, x2-1, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - else { - gradPy -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - if (!bcArray->isSolid(xxx, x2+1, zzz) && !bcArray->isUndefined(xxx, x2+1, zzz)) { - gradPy += (*pressure)(xxx, x2+1, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - else { - gradPy += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - - yyy = x2 + dir2; - if (!bcArray->isSolid(xxx, yyy, x3-1) && !bcArray->isUndefined(xxx, yyy, x3-1)) { - gradPz -= (*pressure)(xxx, yyy, x3-1) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - else { - gradPz -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - if (!bcArray->isSolid(xxx, yyy, x3+1) && !bcArray->isUndefined(xxx, yyy, x3+1)) { - gradPz += (*pressure)(xxx, yyy, x3+1) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - else { - gradPz += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - - } - } - - //Viscosity increase by pressure gradient - real errPhi = (((1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale)- denom); - //LBMReal limVis = 0.0000001*10;//0.01; - // collFactorM =collFactorM/(c1+limVis*(errPhi*errPhi)*collFactorM); - // collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM; - errPhi = errPhi * errPhi* errPhi * errPhi * errPhi * errPhi; - //collFactorM = collFactorM + (1.8 - collFactorM) * errPhi / (errPhi + limVis); - - //3.0 * ((WEIGTH[TNE] * (((phi2[TNE] - phi2[BSW]) - (phi2[BSE] - phi2[TNW])) + ((phi2[TSE] - phi2[BNW]) - (phi2[BNE] - phi2[TSW]))) - //+WEIGTH[NE] * (((phi2[TE] - phi2[BW]) - (phi2[BE] - phi2[TW])) + ((phi2[TS] - phi2[BN]) + (phi2[TN] - phi2[BS])))) + - //+WEIGTH[N] * (phi2[T] - phi2[B])); - - muRho = rho; - - forcingX1 = muForcingX1.Eval()/rho - gradPx/rho; - forcingX2 = muForcingX2.Eval()/rho - gradPy/rho; - forcingX3 = muForcingX3.Eval()/rho - gradPz/rho; - - vvx += forcingX1 * deltaT * 0.5; // X - vvy += forcingX2 * deltaT * 0.5; // Y - vvz += forcingX3 * deltaT * 0.5; // Z - - ///surface tension force - vvx += mu * dX1_phi * c1o2 / rho; - vvy += mu * dX2_phi * c1o2 / rho ; - vvz += mu * dX3_phi * c1o2 / rho; - - real vx2; - real vy2; - real vz2; - vx2 = vvx * vvx; - vy2 = vvy * vvy; - vz2 = vvz * vvz; - /////////////////////////////////////////////////////////////////////////////////////////// - real oMdrho; - - - oMdrho = mfccc + mfaaa; - m0 = mfaca + mfcac; - m1 = mfacc + mfcaa; - m2 = mfaac + mfcca; - oMdrho += m0; - m1 += m2; - oMdrho += m1; - m0 = mfbac + mfbca; - m1 = mfbaa + mfbcc; - m0 += m1; - m1 = mfabc + mfcba; - m2 = mfaba + mfcbc; - m1 += m2; - m0 += m1; - m1 = mfacb + mfcab; - m2 = mfaab + mfccb; - m1 += m2; - m0 += m1; - oMdrho += m0; - m0 = mfabb + mfcbb; - m1 = mfbab + mfbcb; - m2 = mfbba + mfbbc; - m0 += m1 + m2; - m0 += mfbbb; //hat gefehlt - oMdrho = (rhoRef - (oMdrho + m0))/rhoRef;// 12.03.21 check derivation!!!! - - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimit = 0.01; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += 1. * oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - - // mfaaa = 0.0; - real OxxPyyPzz = 1.; //omega2 or bulk viscosity - // LBMReal OxyyPxzz = 1.;//-s9;//2+s9;// - // LBMReal OxyyMxzz = 1.;//2+s9;// - real O4 = 1.; - real O5 = 1.; - real O6 = 1.; - - /////fourth order parameters; here only for test. Move out of loop! - - real OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0))); - real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM); - // LBMReal Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0)); - real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - //FIXME: warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::d00M' ) - real BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - - - //Cum 4. - //LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015 - //LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015 - //LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015 - - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab); - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); - - real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - - //Cum 5. - real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho; - real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho; - real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho; - - //Cum 6. - real 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 - real mxxPyyPzz = mfcaa + mfaca + mfaac; - - // LBMReal mfaaaS = (mfaaa * (-4 - 3 * OxxPyyPzz * (-1 + rho)) + 6 * mxxPyyPzz * OxxPyyPzz * (-1 + rho)) / (-4 + 3 * OxxPyyPzz * (-1 + rho)); - mxxPyyPzz -= mfaaa ;//12.03.21 shifted by mfaaa - //mxxPyyPzz-=(mfaaa+mfaaaS)*c1o2;//12.03.21 shifted by mfaaa - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - real dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz); - real dyuy = dxux + collFactorM * c3o2 * mxxMyy; - real dzuz = dxux + collFactorM * c3o2 * mxxMzz; - - real Dxy = -c3o1 * collFactorM * mfbba; - real Dxz = -c3o1 * collFactorM * mfbab; - real Dyz = -c3o1 * collFactorM * mfabb; - - //relax - mxxPyyPzz += OxxPyyPzz * (/*mfaaa*/ - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vz2 * dzuz); - - mfabb += collFactorM * (-mfabb); - mfbab += collFactorM * (-mfbab); - mfbba += collFactorM * (-mfbba); - - ////updated pressure - //mfaaa += (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling; - mfaaa = 0.0; // Pressure elimination as in standard velocity model - // mfaaa += (rho - c1) * (dxux + dyuy + dzuz); - - mxxPyyPzz += mfaaa; // 12.03.21 shifted by mfaaa - - // mxxPyyPzz += (mfaaa + mfaaaS) * c1o2; - //mfaaa = mfaaaS; - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - wadjust = OxyyMxzz + (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 * (c1o1 / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc); - CUMcac = -O4 * (c1o1 / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac); - CUMcca = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca); - CUMbbc = -O4 * (c1o1 / collFactorM - c1o2) * Dxy * c1o3 * BB + (c1o1 - O4) * (CUMbbc); - CUMbcb = -O4 * (c1o1 / collFactorM - c1o2) * Dxz * c1o3 * BB + (c1o1 - O4) * (CUMbcb); - CUMcbb = -O4 * (c1o1 / collFactorM - c1o2) * Dyz * c1o3 * BB + (c1o1 - O4) * (CUMcbb); - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - //back cumulants to central moments - //4. - //mfcbb = CUMcbb + ((mfcaa + c1o3 * 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 - c1o1) * oMdrho; - mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho; - mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * 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; - ////////////////////////////////////////////////////////////////////////////////////// - mfbaa += c1o3 * (c1o1 / collFactorM - c1o2) * rhoToPhi * (2 * dxux * dX1_phi + Dxy * dX2_phi + Dxz * dX3_phi) / (rho); - mfaba += c1o3 * (c1o1 / collFactorM - c1o2) * rhoToPhi * (Dxy * dX1_phi + 2 * dyuy * dX2_phi + Dyz * dX3_phi) / (rho); - mfaab += c1o3 * (c1o1 / collFactorM - c1o2) * rhoToPhi * (Dxz * dX1_phi + Dyz * dX2_phi + 2 * dyuy * dX3_phi) / (rho); - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + 1. * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - 2. * mfaab * vvz + mfaaa * (1. - vz2) - 1. * oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + 1. * oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - 2. * mfabb * vvz + mfaba * (1. - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - 2. * mfacb * vvz + mfaca * (1. - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - 2. * mfbab * vvz + mfbaa * (1. - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - 2. * mfbbb * vvz + mfbba * (1. - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - 2. * mfbcb * vvz + mfbca * (1. - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - 2. * mfcab * vvz + mfcaa * (1. - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - 2. * mfcbb * vvz + mfcba * (1. - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - 2. * mfccb * vvz + mfcca * (1. - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - 2. * mfaba * vvy + mfaaa * (1. - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - 2. * mfabb * vvy + mfaab * (1. - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - 2. * mfabc * vvy + mfaac * (1. - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - 2. * mfbba * vvy + mfbaa * (1. - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - 2. * mfbbb * vvy + mfbab * (1. - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - 2. * mfbbc * vvy + mfbac * (1. - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - 2. * mfcba * vvy + mfcaa * (1. - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - 2. * mfcbb * vvy + mfcab * (1. - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - 2. * mfcbc * vvy + mfcac * (1. - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - 2. * mfbaa * vvx + mfaaa * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - 2. * mfbba * vvx + mfaba * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - 2. * mfbca * vvx + mfaca * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - 2. * mfbab * vvx + mfaab * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - 2. * mfbbb * vvx + mfabb * (1. - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - 2. * mfbcb * vvx + mfacb * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - 2. * mfbac * vvx + mfaac * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - 2. * mfbbc * vvx + mfabc * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - 2. * mfbcc * vvx + mfacc * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - - ////////////////////////////////////////////////////////////////////////// - //proof correctness - ////////////////////////////////////////////////////////////////////////// - //#ifdef PROOF_CORRECTNESS - real rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) - + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) - + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - // //LBMReal dif = fabs(drho - rho_post); - // LBMReal dif = drho + (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling - rho_post; - //#ifdef SINGLEPRECISION - // if (dif > 10.0E-7 || dif < -10.0E-7) - //#else - // if (dif > 10.0E-15 || dif < -10.0E-15) - //#endif - // { - // UB_THROW(UbException(UB_EXARGS, "drho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(rho_post) - // + " dif=" + UbSystem::toString(dif) - // + " drho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3))); - // //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): drho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3)); - // //exit(EXIT_FAILURE); - // } - //#endif - - if (UbMath::isNaN(rho_post) || UbMath::isInfinity(rho_post)) - UB_THROW(UbException( - UB_EXARGS, "rho_post is not a number (nan or -1.#IND) or infinity number -1.#INF, node=" + UbSystem::toString(x1) + "," + - UbSystem::toString(x2) + "," + UbSystem::toString(x3))); - - ////////////////////////////////////////////////////////////////////////// - //write distribution - ////////////////////////////////////////////////////////////////////////// - (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac ;//* rho * c1o3; - - (*this->zeroDistributionsF)(x1, x2, x3) = mfbbb;// *rho* c1o3; - // !Old Kernel -///////////////////// P H A S E - F I E L D S O L V E R -//////////////////////////////////////////// -/////CUMULANT PHASE-FIELD - real omegaD =1.0/( 3.0 * mob + 0.5); - { - mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3); - - - //////////////////////////////////////////////////////////////////////////////////// - //! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // second component - real concentration = - ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; - //////////////////////////////////////////////////////////////////////////////////// - real oneMinusRho = c1o1 - concentration; - - real cx = - ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)); - real cy = - ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)); - real cz = - ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)); - - //////////////////////////////////////////////////////////////////////////////////// - // calculate the square of velocities for this lattice node - real cx2 = cx * cx; - real cy2 = cy * cy; - real cz2 = cz * cz; - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (6)-(14) in \ref - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho); - forwardChimera(mfaab, mfabb, mfacb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho); - forwardChimera(mfbab, mfbbb, mfbcb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho); - forwardChimera(mfcab, mfcbb, mfccb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho); - forwardChimera(mfaba, mfbba, mfcba, cx, cx2); - forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho); - forwardChimera(mfaab, mfbab, mfcab, cx, cx2); - forwardChimera(mfabb, mfbbb, mfcbb, cx, cx2); - forwardChimera(mfacb, mfbcb, mfccb, cx, cx2); - forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho); - forwardChimera(mfabc, mfbbc, mfcbc, cx, cx2); - forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c3o1, c1o9, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - //! - experimental Cumulant ... to be published ... hopefully - //! - - // linearized orthogonalization of 3rd order central moments - real Mabc = mfabc - mfaba * c1o3; - real Mbca = mfbca - mfbaa * c1o3; - real Macb = mfacb - mfaab * c1o3; - real Mcba = mfcba - mfaba * c1o3; - real Mcab = mfcab - mfaab * c1o3; - real Mbac = mfbac - mfbaa * c1o3; - // linearized orthogonalization of 5th order central moments - real Mcbc = mfcbc - mfaba * c1o9; - real Mbcc = mfbcc - mfbaa * c1o9; - real Mccb = mfccb - mfaab * c1o9; - - // collision of 1st order moments - cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + - normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; - cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + - normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; - cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + - normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; - - cx2 = cx * cx; - cy2 = cy * cy; - cz2 = cz * cz; - - // equilibration of 2nd order moments - mfbba = c0o1; - mfbab = c0o1; - mfabb = c0o1; - - mfcaa = c1o3 * concentration; - mfaca = c1o3 * concentration; - mfaac = c1o3 * concentration; - - // equilibration of 3rd order moments - Mabc = c0o1; - Mbca = c0o1; - Macb = c0o1; - Mcba = c0o1; - Mcab = c0o1; - Mbac = c0o1; - mfbbb = c0o1; - - // from linearized orthogonalization 3rd order central moments to central moments - mfabc = Mabc + mfaba * c1o3; - mfbca = Mbca + mfbaa * c1o3; - mfacb = Macb + mfaab * c1o3; - mfcba = Mcba + mfaba * c1o3; - mfcab = Mcab + mfaab * c1o3; - mfbac = Mbac + mfbaa * c1o3; - - // equilibration of 4th order moments - mfacc = c1o9 * concentration; - mfcac = c1o9 * concentration; - mfcca = c1o9 * concentration; - - mfcbb = c0o1; - mfbcb = c0o1; - mfbbc = c0o1; - - // equilibration of 5th order moments - Mcbc = c0o1; - Mbcc = c0o1; - Mccb = c0o1; - - // from linearized orthogonalization 5th order central moments to central moments - mfcbc = Mcbc + mfaba * c1o9; - mfbcc = Mbcc + mfbaa * c1o9; - mfccb = Mccb + mfaab * c1o9; - - // equilibration of 6th order moment - mfccc = c1o27 * concentration; - - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (88)-(96) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho); - backwardChimera(mfaba, mfbba, mfcba, cx, cx2); - backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho); - backwardChimera(mfaab, mfbab, mfcab, cx, cx2); - backwardChimera(mfabb, mfbbb, mfcbb, cx, cx2); - backwardChimera(mfacb, mfbcb, mfccb, cx, cx2); - backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho); - backwardChimera(mfabc, mfbbc, mfcbc, cx, cx2); - backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c9o1, c1o9, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho); - backwardChimera(mfaab, mfabb, mfacb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho); - backwardChimera(mfbab, mfbbb, mfbcb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho); - backwardChimera(mfcab, mfcbb, mfccb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho); - - - - (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3) = mfabb; - (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3) = mfbab; - (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3) = mfbba; - (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3) = mfaab; - (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab; - (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3) = mfaba; - (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba; - (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa; - (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca; - (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa; - (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa; - (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca; - (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca; - - (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3 ) = mfcbb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3 ) = mfbcb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3 ) = mfccb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3 ) = mfacb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac; - - (*this->zeroDistributionsH1)(x1,x2,x3) = mfbbb; - } - } - } - } - } -} -////////////////////////////////////////////////////////////////////////// - -real MultiphasePressureFilterCompressibleAirLBMKernel::gradX1_phi() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP]))) - + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) + - +WEIGTH[d0P0] * (phi[dP00] - phi[dM00])); -} - -real MultiphasePressureFilterCompressibleAirLBMKernel::gradX2_phi() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM]))) - + WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) + - +WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0])); -} - -real MultiphasePressureFilterCompressibleAirLBMKernel::gradX3_phi() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP]))) - + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) + - +WEIGTH[d0P0] * (phi[d00P] - phi[d00M])); -} - -real MultiphasePressureFilterCompressibleAirLBMKernel::gradX1_phi2() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP]))) - + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) + - +WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00])); -} - -real MultiphasePressureFilterCompressibleAirLBMKernel::gradX2_phi2() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM]))) - + WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) + - +WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0])); -} - -real MultiphasePressureFilterCompressibleAirLBMKernel::gradX3_phi2() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP]))) - + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) + - +WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M])); -} - -real MultiphasePressureFilterCompressibleAirLBMKernel::nabla2_phi() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - real sum = 0.0; - sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000]))) - + (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000])))); - sum += WEIGTH[d0PP] * ( - (((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000]))) - + (((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000]))) - + (((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000]))) - ); - sum += WEIGTH[d00P] * ( - ((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000])) - + ((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000])) - + ((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000])) - ); - - return 6.0 * sum; -} - -void MultiphasePressureFilterCompressibleAirLBMKernel::computePhasefield() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - SPtr<DistributionArray3D> distributionsH = dataSet->getHdistributions(); - - 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[dP00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - h[d0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - h[d00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - h[dPP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - h[dMP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - h[dP0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - h[dM0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - h[d0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - h[d0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - - h[dM00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - h[d0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - h[d00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - h[dMM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - h[dPM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - h[dM0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - h[dP0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - h[d0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - h[d0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - - h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3); - } - } - } - } -} - -void MultiphasePressureFilterCompressibleAirLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, - int x3) -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - phi[d000] = (*ph)(x1, x2, x3); - - - 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 { - phi[k] = 0.0; - } - } -} - -void MultiphasePressureFilterCompressibleAirLBMKernel::findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, - int x3) -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - phi2[d000] = (*ph)(x1, x2, x3); - - - for (int k = FSTARTDIR; k <= FENDDIR; k++) { - - if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) { - phi2[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]); - } - else { - phi2[k] = 0.0; - } - } -} - -void MultiphasePressureFilterCompressibleAirLBMKernel::swapDistributions() -{ - LBMKernel::swapDistributions(); - dataSet->getHdistributions()->swap(); -} - -void MultiphasePressureFilterCompressibleAirLBMKernel::initForcing() -{ - 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); - - muForcingX1.DefineVar("rho",&muRho); - muForcingX2.DefineVar("rho",&muRho); - muForcingX3.DefineVar("rho",&muRho); - -} diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterCompressibleAirLBMKernel.h b/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterCompressibleAirLBMKernel.h deleted file mode 100644 index 56d31b53c8ed42358e898869e8193bcf7779743a..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterCompressibleAirLBMKernel.h +++ /dev/null @@ -1,116 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphasePressureFilterCompressibleAirLBMKernel.h -//! \ingroup LBMKernel -//! \author M. Geier, K. Kutscher, Hesameddin Safari -//======================================================================================= - -#ifndef MultiphasePressureFilterCompressibleAirLBMKernel_H -#define MultiphasePressureFilterCompressibleAirLBMKernel_H - -#include "LBMKernel.h" -#include "BCSet.h" -#include "D3Q27System.h" -#include "basics/utilities/UbTiming.h" -#include "basics/container/CbArray4D.h" -#include "basics/container/CbArray3D.h" - -//! \brief Multiphase Cascaded Cumulant LBM kernel. -//! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model -//! \author M. Geier, K. Kutscher, Hesameddin Safari -class MultiphasePressureFilterCompressibleAirLBMKernel : public LBMKernel -{ -public: - MultiphasePressureFilterCompressibleAirLBMKernel(); - virtual ~MultiphasePressureFilterCompressibleAirLBMKernel(void) = default; - void calculate(int step) override; - SPtr<LBMKernel> clone() override; - - - ///refactor - //CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr pressure; - - - real getCalculationTime() override { return .0; } -protected: - virtual void initDataSet(); - void swapDistributions() override; - - void initForcing(); - - void forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho); - void backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho); - void forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2); - void backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2); - - real f1[D3Q27System::ENDF+1]; - - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF; - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF; - CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr zeroDistributionsF; - - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH1; - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH1; - CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr zeroDistributionsH1; - - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressureOld; - - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr divU; - - real h [D3Q27System::ENDF+1]; - real h2[D3Q27System::ENDF + 1]; - real g [D3Q27System::ENDF+1]; - real phi[D3Q27System::ENDF+1]; - real phi2[D3Q27System::ENDF + 1]; - real pr1[D3Q27System::ENDF+1]; - real phi_cutoff[D3Q27System::ENDF+1]; - - real gradX1_phi(); - real gradX2_phi(); - real gradX3_phi(); - real gradX1_phi2(); - real gradX2_phi2(); - real gradX3_phi2(); - void computePhasefield(); - void findNeighbors(CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, int x1, int x2, int x3); - void findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, int x3); - - real nabla2_phi(); - - mu::value_type muX1,muX2,muX3; - mu::value_type muDeltaT; - mu::value_type muNu; - mu::value_type muRho; - real forcingX1; - real forcingX2; - real forcingX3; -}; - -#endif diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterLBMKernel.cpp deleted file mode 100644 index 48c2039cc710ac92ce5d2f4d0aa704f1a46bdb8a..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterLBMKernel.cpp +++ /dev/null @@ -1,1794 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphasePressureFilterLBMKernel.cpp -//! \ingroup LBMKernel -//! \author M. Geier, K. Kutscher, Hesameddin Safari -//======================================================================================= - -#include "MultiphasePressureFilterLBMKernel.h" -#include "BCArray3D.h" -#include "Block3D.h" -#include "D3Q27EsoTwist3DSplittedVector.h" -#include "D3Q27System.h" -#include "DataSet3D.h" -#include "LBMKernel.h" -#include <cmath> -#include "UbMath.h" - -#define PROOF_CORRECTNESS - -////////////////////////////////////////////////////////////////////////// -MultiphasePressureFilterLBMKernel::MultiphasePressureFilterLBMKernel() { this->compressible = false; } -////////////////////////////////////////////////////////////////////////// -void MultiphasePressureFilterLBMKernel::initDataSet() -{ - SPtr<DistributionArray3D> f(new D3Q27EsoTwist3DSplittedVector( nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - SPtr<DistributionArray3D> h(new D3Q27EsoTwist3DSplittedVector( nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); // For phase-field - - //SPtr<PhaseFieldArray3D> divU1(new PhaseFieldArray3D( nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure(new CbArray3D<real, IndexerX3X2X1>( nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - pressureOld = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - dataSet->setFdistributions(f); - dataSet->setHdistributions(h); // For phase-field - //dataSet->setPhaseField(divU1); - dataSet->setPressureField(pressure); - - phaseField = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - - divU = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); -} -////////////////////////////////////////////////////////////////////////// -SPtr<LBMKernel> MultiphasePressureFilterLBMKernel::clone() -{ - SPtr<LBMKernel> kernel(new MultiphasePressureFilterLBMKernel()); - kernel->setNX(nx); - dynamicPointerCast<MultiphasePressureFilterLBMKernel>(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->setInterfaceWidth(this->interfaceWidth); - - kernel->setBCSet(bcSet->clone(kernel)); - kernel->setWithForcing(withForcing); - kernel->setForcingX1(muForcingX1); - kernel->setForcingX2(muForcingX2); - kernel->setForcingX3(muForcingX3); - kernel->setIndex(ix1, ix2, ix3); - kernel->setDeltaT(deltaT); - kernel->setGhostLayerWidth(2); - dynamicPointerCast<MultiphasePressureFilterLBMKernel>(kernel)->initForcing(); - dynamicPointerCast<MultiphasePressureFilterLBMKernel>(kernel)->setPhaseFieldBC(this->phaseFieldBC); - - return kernel; -} -////////////////////////////////////////////////////////////////////////// -void MultiphasePressureFilterLBMKernel::forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) { -// using namespace UbMath; - using namespace vf::basics::constant; - real m2 = mfa + mfc; - real m1 = mfc - mfa; - real m0 = m2 + mfb; - mfa = m0; - m0 *= Kinverse; - m0 += oneMinusRho; - mfb = (m1 * Kinverse - m0 * vv) * K; - mfc = ((m2 - c2o1 * m1 * vv) * Kinverse + v2 * m0) * K; -} - -//////////////////////////////////////////////////////////////////////////////// -void MultiphasePressureFilterLBMKernel::backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) { -// using namespace UbMath; - using namespace vf::basics::constant; - - real m0 = (((mfc - mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 - vv) * c1o2) * K; - real m1 = (((mfa - mfc) - c2o1 * mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (-v2)) * K; - mfc = (((mfc + mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 + vv) * c1o2) * K; - mfa = m0; - mfb = m1; -} - - -//////////////////////////////////////////////////////////////////////////////// -void MultiphasePressureFilterLBMKernel::forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) { -// using namespace UbMath; - using namespace vf::basics::constant; - - real m1 = (mfa + mfc) + mfb; - real m2 = mfc - mfa; - mfc = (mfc + mfa) + (v2 * m1 - c2o1 * vv * m2); - mfb = m2 - vv * m1; - mfa = m1; -} - - -void MultiphasePressureFilterLBMKernel::backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) { -// using namespace UbMath; - using namespace vf::basics::constant; - - real ma = (mfc + mfa * (v2 - vv)) * c1o2 + mfb * (vv - c1o2); - real mb = ((mfa - mfc) - mfa * v2) - c2o1 * mfb * vv; - mfc = (mfc + mfa * (v2 + vv)) * c1o2 + mfb * (vv + c1o2); - mfb = mb; - mfa = ma; -} - - -void MultiphasePressureFilterLBMKernel::calculate(int step) -{ - using namespace D3Q27System; -// using namespace UbMath; - using namespace vf::lbm::dir; - using namespace vf::basics::constant; - - forcingX1 = 0.0; - forcingX2 = 0.0; - forcingX3 = 0.0; - - real oneOverInterfaceScale = c4o1 / interfaceWidth; //1.0;//1.5; - ///////////////////////////////////// - - localDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); - nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); - zeroDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); - - localDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions(); - nonLocalDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions(); - zeroDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions(); - - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure = dataSet->getPressureField(); - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - const int bcArrayMaxX1 = (int)bcArray->getNX1(); - const int bcArrayMaxX2 = (int)bcArray->getNX2(); - const int bcArrayMaxX3 = (int)bcArray->getNX3(); - - int minX1 = ghostLayerWidth; - int minX2 = ghostLayerWidth; - int minX3 = ghostLayerWidth; - int maxX1 = bcArrayMaxX1 - ghostLayerWidth; - int maxX2 = bcArrayMaxX2 - ghostLayerWidth; - int maxX3 = bcArrayMaxX3 - ghostLayerWidth; - - for (int x3 = minX3-ghostLayerWidth; x3 < maxX3+ghostLayerWidth; x3++) { - for (int x2 = minX2-ghostLayerWidth; x2 < maxX2+ghostLayerWidth; x2++) { - for (int x1 = minX1-ghostLayerWidth; x1 < maxX1+ghostLayerWidth; x1++) { - if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { - int x1p = x1 + 1; - int x2p = x2 + 1; - int x3p = x3 + 1; - - real mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - real mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - - real mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3); - (*phaseField)(x1, x2, x3) = (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca) + (mfcaa + mfacc)) ) + - (((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) + - ((mfbaa + mfbac) + (mfbca + mfbcc))) + ((mfabb + mfcbb) + - (mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb; - - ////// read F-distributions for velocity formalism - - 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); - - real rhoH = 1.0; - real rhoL = 1.0 / densityRatio; - - real rhoToPhi = (rhoH - rhoL) / (phiH - phiL); - - real drho = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) - + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) - + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - - real rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) - phiH); - - (*pressureOld)(x1, x2, x3) = (*pressure)(x1, x2, x3) + rho * c1o3 * drho; - } - } - } - } - - real collFactorM; - - ////Periodic Filter - for (int x3 = minX3-1; x3 <= maxX3; x3++) { - for (int x2 = minX2-1; x2 <= maxX2; x2++) { - for (int x1 = minX1-1; x1 <= maxX1; x1++) { - if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { - - real sum = 0.; - - ///Version for boundaries - for (int xx = -1; xx <= 1; xx++) { - //int xxx = (xx+x1 <= maxX1) ? ((xx + x1 > 0) ? xx + x1 : maxX1) : 0; - int xxx = xx + x1; - - for (int yy = -1; yy <= 1; yy++) { - //int yyy = (yy+x2 <= maxX2) ?( (yy + x2 > 0) ? yy + x2 : maxX2) : 0; - int yyy = yy + x2; - - for (int zz = -1; zz <= 1; zz++) { - //int zzz = (zz+x3 <= maxX3) ? zzz = ((zz + x3 > 0) ? zz + x3 : maxX3 ): 0; - int zzz = zz + x3; - - if (!bcArray->isSolid(xxx, yyy, zzz) && !bcArray->isUndefined(xxx, yyy, zzz)) { - sum+= 64.0/(216.0*(c1o1+c3o1 *abs(xx))* (c1o1 + c3o1 * abs(yy))* (c1o1 + c3o1 * abs(zz)))*(*pressureOld)(xxx, yyy, zzz); - } - else{ sum+= 64.0 / (216.0 * (c1o1 + c3o1 * abs(xx)) * (c1o1 + c3o1 * abs(yy)) * (c1o1 + c3o1 * abs(zz))) * (*pressureOld)(x1, x2, x3); - } - - - } - } - } - (*pressure)(x1, x2, x3) = sum; - } - } - } - } - - ////!filter - - 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 - - findNeighbors(phaseField, x1, x2, x3); - - real mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3); - real mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p); - - real mfbbb = (*this->zeroDistributionsF)(x1, x2, x3); - - real rhoH = 1.0; - real rhoL = 1.0 / densityRatio; - - real rhoToPhi = (rhoH - rhoL) / (phiH - phiL); - - real dX1_phi = gradX1_phi(); - real dX2_phi = gradX2_phi(); - real dX3_phi = gradX3_phi(); - - real denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi) + 1e-9; - real normX1 = dX1_phi / denom; - real normX2 = dX2_phi / denom; - real normX3 = dX3_phi / denom; - - dX1_phi = normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; - dX2_phi = normX2 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; - dX3_phi = normX3 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; - - collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL); - - - real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi(); - - //----------- Calculating Macroscopic Values ------------- - real rho = rhoH + rhoToPhi * (phi[d000] - phiH); - - real m0, m1, m2; - real rhoRef=c1o1; - - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb))/rhoRef; - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab))/rhoRef; - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba))/rhoRef; - - real gradPx = 0.0; - real gradPy = 0.0; - real gradPz = 0.0; - for (int dir1 = -1; dir1 <= 1; dir1++) { - for (int dir2 = -1; dir2 <= 1; dir2++) { - int yyy = x2 + dir1; - int zzz = x3 + dir2; - if (!bcArray->isSolid(x1-1, yyy, zzz) && !bcArray->isUndefined(x1-1, yyy, zzz)) { - gradPx -= (*pressure)(x1 - 1, yyy, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - else { - gradPx -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - if (!bcArray->isSolid(x1 + 1, yyy, zzz) && !bcArray->isUndefined(x1 + 1, yyy, zzz)) { - gradPx += (*pressure)(x1 + 1, yyy, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - else { - gradPx += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - - int xxx = x1 + dir1; - if (!bcArray->isSolid(xxx, x2-1, zzz) && !bcArray->isUndefined(xxx, x2-1, zzz)) { - gradPy -= (*pressure)(xxx, x2-1, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - else { - gradPy -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - if (!bcArray->isSolid(xxx, x2+1, zzz) && !bcArray->isUndefined(xxx, x2+1, zzz)) { - gradPy += (*pressure)(xxx, x2+1, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - else { - gradPy += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - - yyy = x2 + dir2; - if (!bcArray->isSolid(xxx, yyy, x3-1) && !bcArray->isUndefined(xxx, yyy, x3-1)) { - gradPz -= (*pressure)(xxx, yyy, x3-1) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - else { - gradPz -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - if (!bcArray->isSolid(xxx, yyy, x3+1) && !bcArray->isUndefined(xxx, yyy, x3+1)) { - gradPz += (*pressure)(xxx, yyy, x3+1) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - else { - gradPz += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - - } - } - - //Viscosity increase by pressure gradient - real errPhi = (((1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale)- denom); - //LBMReal limVis = 0.0000001*10;//0.01; - // collFactorM =collFactorM/(c1+limVis*(errPhi*errPhi)*collFactorM); - // collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM; - errPhi = errPhi * errPhi* errPhi * errPhi * errPhi * errPhi; - //collFactorM = collFactorM + (1.8 - collFactorM) * errPhi / (errPhi + limVis); - - //3.0 * ((WEIGTH[TNE] * (((phi2[TNE] - phi2[BSW]) - (phi2[BSE] - phi2[TNW])) + ((phi2[TSE] - phi2[BNW]) - (phi2[BNE] - phi2[TSW]))) - //+WEIGTH[NE] * (((phi2[TE] - phi2[BW]) - (phi2[BE] - phi2[TW])) + ((phi2[TS] - phi2[BN]) + (phi2[TN] - phi2[BS])))) + - //+WEIGTH[N] * (phi2[T] - phi2[B])); - - muRho = rho; - - forcingX1 = muForcingX1.Eval()/rho - gradPx/rho; - forcingX2 = muForcingX2.Eval()/rho - gradPy/rho; - forcingX3 = muForcingX3.Eval()/rho - gradPz/rho; - - forcingX1 += mu * dX1_phi / rho; - forcingX2 += mu * dX2_phi / rho; - forcingX3 += mu * dX3_phi / rho; - - vvx += forcingX1 * deltaT * 0.5; // X - vvy += forcingX2 * deltaT * 0.5; // Y - vvz += forcingX3 * deltaT * 0.5; // Z - - ///surface tension force - //vvx += mu * dX1_phi * c1o2 / rho; - //vvy += mu * dX2_phi * c1o2 / rho ; - //vvz += mu * dX3_phi * c1o2 / rho; - - //Abbas - real pStar = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc))) - + (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca)))) - + ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb) * c1o3; - - real M200 = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc))) - + (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)))) - + ((mfabb + mfcbb)))); - real M020 = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc))) - + (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfbaa + mfbcc) + (mfbac + mfbca)))) - + ((mfbab + mfbcb)))); - real M002 = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc))) - + (+((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca)))) - + ((mfbba + mfbbc)))); - - real M110 = ((((((mfaaa + mfccc) + (-mfcac - mfaca)) + ((mfaac + mfcca) + (-mfcaa - mfacc))) - + (((mfaab + mfccb) + (-mfacb - mfcab)))) - )); - real M101 = ((((((mfaaa + mfccc) - (mfaac + mfcca)) + ((mfcac + mfaca) - (mfcaa + mfacc))) - + (((mfaba + mfcbc) + (-mfabc - mfcba)))) - )); - real M011 = ((((((mfaaa + mfccc) - (mfaac + mfcca)) + ((mfcaa + mfacc) - (mfcac + mfaca))) - + (((mfbaa + mfbcc) + (-mfbac - mfbca)))) - )); - real vvxI = vvx; - real vvyI = vvy; - real vvzI = vvz; - - //LBMReal collFactorStore = collFactorM; - //LBMReal stress; - for (int iter = 0; iter < 1; iter++) { - real OxxPyyPzz = 1.0; - real mxxPyyPzz = (M200 - vvxI * vvxI) + (M020 - vvyI * vvyI) + (M002 - vvzI * vvzI); - mxxPyyPzz -= c3o1 * pStar; - - real mxxMyy = (M200 - vvxI * vvxI) - (M020 - vvyI * vvyI); - real mxxMzz = (M200 - vvxI * vvxI) - (M002 - vvzI * vvzI); - real mxy = M110 - vvxI * vvyI; - real mxz = M101 - vvxI * vvzI; - real myz = M011 - vvyI * vvzI; - - ///////Bingham - //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 * mxy; - //LBMReal Dxz = -three * collFactorM * mxz; - //LBMReal Dyz = -three * collFactorM * myz; - - //LBMReal tau0 = phi[REST] * 1.0e-7;//(phi[REST]>0.01)?1.0e-6: 0; - //LBMReal shearRate =fabs(pStar)*0.0e-2+ sqrt(c2 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz) / (rho); - //collFactorM = collFactorM * (UbMath::one - (collFactorM * tau0) / (shearRate * c1o3 /* *rho*/ + 1.0e-15)); - //collFactorM = (collFactorM < -1000000) ? -1000000 : collFactorM; - ////if(collFactorM < 0.1) { - //// int test = 1; - ////} - //////!Bingham - - - mxxMyy *= c1o1 - collFactorM * c1o2; - mxxMzz *= c1o1 - collFactorM * c1o2; - mxy *= c1o1 - collFactorM * c1o2; - mxz *= c1o1 - collFactorM * c1o2; - myz *= c1o1 - collFactorM * c1o2; - mxxPyyPzz *= c1o1 - OxxPyyPzz * c1o2; - //mxxPyyPzz += c3o2 * pStar; - real mxx = (mxxMyy + mxxMzz + mxxPyyPzz) * c1o3; - real myy = (-c2o1 * mxxMyy + mxxMzz + mxxPyyPzz) * c1o3; - real mzz = (mxxMyy - c2o1 * mxxMzz + mxxPyyPzz) * c1o3; - vvxI = vvx - (mxx * dX1_phi + mxy * dX2_phi + mxz * dX3_phi) * rhoToPhi / (rho); - vvyI = vvy - (mxy * dX1_phi + myy * dX2_phi + myz * dX3_phi) * rhoToPhi / (rho); - vvzI = vvz - (mxz * dX1_phi + myz * dX2_phi + mzz * dX3_phi) * rhoToPhi / (rho); - - - - } - - - forcingX1 += c2o1 * (vvxI - vvx); - forcingX2 += c2o1 * (vvyI - vvy); - forcingX3 += c2o1 * (vvzI - vvz); - - mfabb += c1o2 * (-forcingX1) * c2o9; - mfbab += c1o2 * (-forcingX2) * c2o9; - mfbba += c1o2 * (-forcingX3) * c2o9; - mfaab += c1o2 * (-forcingX1 - forcingX2) * c1o18; - mfcab += c1o2 * (forcingX1 - forcingX2) * c1o18; - mfaba += c1o2 * (-forcingX1 - forcingX3) * c1o18; - mfcba += c1o2 * (forcingX1 - forcingX3) * c1o18; - mfbaa += c1o2 * (-forcingX2 - forcingX3) * c1o18; - mfbca += c1o2 * (forcingX2 - forcingX3) * c1o18; - mfaaa += c1o2 * (-forcingX1 - forcingX2 - forcingX3) * c1o72; - mfcaa += c1o2 * (forcingX1 - forcingX2 - forcingX3) * c1o72; - mfaca += c1o2 * (-forcingX1 + forcingX2 - forcingX3) * c1o72; - mfcca += c1o2 * (forcingX1 + forcingX2 - forcingX3) * c1o72; - mfcbb += c1o2 * (forcingX1)*c2o9; - mfbcb += c1o2 * (forcingX2)*c2o9; - mfbbc += c1o2 * (forcingX3)*c2o9; - mfccb += c1o2 * (forcingX1 + forcingX2) * c1o18; - mfacb += c1o2 * (-forcingX1 + forcingX2) * c1o18; - mfcbc += c1o2 * (forcingX1 + forcingX3) * c1o18; - mfabc += c1o2 * (-forcingX1 + forcingX3) * c1o18; - mfbcc += c1o2 * (forcingX2 + forcingX3) * c1o18; - mfbac += c1o2 * (-forcingX2 + forcingX3) * c1o18; - mfccc += c1o2 * (forcingX1 + forcingX2 + forcingX3) * c1o72; - mfacc += c1o2 * (-forcingX1 + forcingX2 + forcingX3) * c1o72; - mfcac += c1o2 * (forcingX1 - forcingX2 + forcingX3) * c1o72; - mfaac += c1o2 * (-forcingX1 - forcingX2 + forcingX3) * c1o72; - - - - vvx = vvxI; - vvy = vvyI; - vvz = vvzI; - - //!Abbas - - - real vx2; - real vy2; - real vz2; - vx2 = vvx * vvx; - vy2 = vvy * vvy; - vz2 = vvz * vvz; - /////////////////////////////////////////////////////////////////////////////////////////// - real oMdrho; - - - oMdrho = mfccc + mfaaa; - m0 = mfaca + mfcac; - m1 = mfacc + mfcaa; - m2 = mfaac + mfcca; - oMdrho += m0; - m1 += m2; - oMdrho += m1; - m0 = mfbac + mfbca; - m1 = mfbaa + mfbcc; - m0 += m1; - m1 = mfabc + mfcba; - m2 = mfaba + mfcbc; - m1 += m2; - m0 += m1; - m1 = mfacb + mfcab; - m2 = mfaab + mfccb; - m1 += m2; - m0 += m1; - oMdrho += m0; - m0 = mfabb + mfcbb; - m1 = mfbab + mfbcb; - m2 = mfbba + mfbbc; - m0 += m1 + m2; - m0 += mfbbb; //hat gefehlt - oMdrho = (rhoRef - (oMdrho + m0))/rhoRef;// 12.03.21 check derivation!!!! - - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimit = 0.01; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += 1. * oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - - // mfaaa = 0.0; - real OxxPyyPzz = 1.; //omega2 or bulk viscosity - // LBMReal OxyyPxzz = 1.;//-s9;//2+s9;// - // LBMReal OxyyMxzz = 1.;//2+s9;// - real O4 = 1.; - real O5 = 1.; - real O6 = 1.; - - /////fourth order parameters; here only for test. Move out of loop! - - real OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0))); - real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM); - real Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0)); - real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - //FIXME: warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::d00M' ) - real BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - - - //Cum 4. - //LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015 - //LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015 - //LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015 - - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab); - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); - - real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - - //Cum 5. - real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho; - real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho; - real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho; - - //Cum 6. - real 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 - real mxxPyyPzz = mfcaa + mfaca + mfaac; - - // LBMReal mfaaaS = (mfaaa * (-4 - 3 * OxxPyyPzz * (-1 + rho)) + 6 * mxxPyyPzz * OxxPyyPzz * (-1 + rho)) / (-4 + 3 * OxxPyyPzz * (-1 + rho)); - mxxPyyPzz -= mfaaa ;//12.03.21 shifted by mfaaa - //mxxPyyPzz-=(mfaaa+mfaaaS)*c1o2;//12.03.21 shifted by mfaaa - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - real dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz); - real dyuy = dxux + collFactorM * c3o2 * mxxMyy; - real dzuz = dxux + collFactorM * c3o2 * mxxMzz; - - real Dxy = -c3o1 * collFactorM * mfbba; - real Dxz = -c3o1 * collFactorM * mfbab; - real Dyz = -c3o1 * collFactorM * mfabb; - - //relax - mxxPyyPzz += OxxPyyPzz * (/*mfaaa*/ - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vz2 * dzuz); - - mfabb += collFactorM * (-mfabb); - mfbab += collFactorM * (-mfbab); - mfbba += collFactorM * (-mfbba); - - ////updated pressure - //mfaaa += (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling; - mfaaa = 0.0; // Pressure elimination as in standard velocity model - // mfaaa += (rho - c1) * (dxux + dyuy + dzuz); - - mxxPyyPzz += mfaaa; // 12.03.21 shifted by mfaaa - - // mxxPyyPzz += (mfaaa + mfaaaS) * c1o2; - //mfaaa = mfaaaS; - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - wadjust = Oxyz + (1. - Oxyz) * 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 * (c1o1 / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc); - CUMcac = -O4 * (c1o1 / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac); - CUMcca = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca); - CUMbbc = -O4 * (c1o1 / collFactorM - c1o2) * Dxy * c1o3 * BB + (c1o1 - O4) * (CUMbbc); - CUMbcb = -O4 * (c1o1 / collFactorM - c1o2) * Dxz * c1o3 * BB + (c1o1 - O4) * (CUMbcb); - CUMcbb = -O4 * (c1o1 / collFactorM - c1o2) * Dyz * c1o3 * BB + (c1o1 - O4) * (CUMcbb); - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - //back cumulants to central moments - //4. - //mfcbb = CUMcbb + ((mfcaa + c1o3 * 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 - c1o1) * oMdrho; - mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho; - mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * 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; - ////////////////////////////////////////////////////////////////////////////////////// - //mfbaa += c1o3 * (c1 / collFactorM - c1o2) * rhoToPhi * (2 * dxux * dX1_phi + Dxy * dX2_phi + Dxz * dX3_phi) / (rho); - //mfaba += c1o3 * (c1 / collFactorM - c1o2) * rhoToPhi * (Dxy * dX1_phi + 2 * dyuy * dX2_phi + Dyz * dX3_phi) / (rho); - //mfaab += c1o3 * (c1 / collFactorM - c1o2) * rhoToPhi * (Dxz * dX1_phi + Dyz * dX2_phi + 2 * dyuy * dX3_phi) / (rho); - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + 1. * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - 2. * mfaab * vvz + mfaaa * (1. - vz2) - 1. * oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + 1. * oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - 2. * mfabb * vvz + mfaba * (1. - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - 2. * mfacb * vvz + mfaca * (1. - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - 2. * mfbab * vvz + mfbaa * (1. - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - 2. * mfbbb * vvz + mfbba * (1. - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - 2. * mfbcb * vvz + mfbca * (1. - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - 2. * mfcab * vvz + mfcaa * (1. - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - 2. * mfcbb * vvz + mfcba * (1. - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - 2. * mfccb * vvz + mfcca * (1. - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - 2. * mfaba * vvy + mfaaa * (1. - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - 2. * mfabb * vvy + mfaab * (1. - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - 2. * mfabc * vvy + mfaac * (1. - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - 2. * mfbba * vvy + mfbaa * (1. - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - 2. * mfbbb * vvy + mfbab * (1. - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - 2. * mfbbc * vvy + mfbac * (1. - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - 2. * mfcba * vvy + mfcaa * (1. - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - 2. * mfcbb * vvy + mfcab * (1. - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - 2. * mfcbc * vvy + mfcac * (1. - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - 2. * mfbaa * vvx + mfaaa * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - 2. * mfbba * vvx + mfaba * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - 2. * mfbca * vvx + mfaca * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - 2. * mfbab * vvx + mfaab * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - 2. * mfbbb * vvx + mfabb * (1. - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - 2. * mfbcb * vvx + mfacb * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - 2. * mfbac * vvx + mfaac * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - 2. * mfbbc * vvx + mfabc * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - 2. * mfbcc * vvx + mfacc * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - - ////forcing - - mfabb += c1o2 * (-forcingX1) * c2o9; - mfbab += c1o2 * (-forcingX2) * c2o9; - mfbba += c1o2 * (-forcingX3) * c2o9; - mfaab += c1o2 * (-forcingX1 - forcingX2) * c1o18; - mfcab += c1o2 * (forcingX1 - forcingX2) * c1o18; - mfaba += c1o2 * (-forcingX1 - forcingX3) * c1o18; - mfcba += c1o2 * (forcingX1 - forcingX3) * c1o18; - mfbaa += c1o2 * (-forcingX2 - forcingX3) * c1o18; - mfbca += c1o2 * (forcingX2 - forcingX3) * c1o18; - mfaaa += c1o2 * (-forcingX1 - forcingX2 - forcingX3) * c1o72; - mfcaa += c1o2 * (forcingX1 - forcingX2 - forcingX3) * c1o72; - mfaca += c1o2 * (-forcingX1 + forcingX2 - forcingX3) * c1o72; - mfcca += c1o2 * (forcingX1 + forcingX2 - forcingX3) * c1o72; - mfcbb += c1o2 * (forcingX1)*c2o9; - mfbcb += c1o2 * (forcingX2)*c2o9; - mfbbc += c1o2 * (forcingX3)*c2o9; - mfccb += c1o2 * (forcingX1 + forcingX2) * c1o18; - mfacb += c1o2 * (-forcingX1 + forcingX2) * c1o18; - mfcbc += c1o2 * (forcingX1 + forcingX3) * c1o18; - mfabc += c1o2 * (-forcingX1 + forcingX3) * c1o18; - mfbcc += c1o2 * (forcingX2 + forcingX3) * c1o18; - mfbac += c1o2 * (-forcingX2 + forcingX3) * c1o18; - mfccc += c1o2 * (forcingX1 + forcingX2 + forcingX3) * c1o72; - mfacc += c1o2 * (-forcingX1 + forcingX2 + forcingX3) * c1o72; - mfcac += c1o2 * (forcingX1 - forcingX2 + forcingX3) * c1o72; - mfaac += c1o2 * (-forcingX1 - forcingX2 + forcingX3) * c1o72; - - - - - ////////////////////////////////////////////////////////////////////////// - //proof correctness - ////////////////////////////////////////////////////////////////////////// - //#ifdef PROOF_CORRECTNESS - real rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) - + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) - + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - // //LBMReal dif = fabs(drho - rho_post); - // LBMReal dif = drho + (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling - rho_post; - //#ifdef SINGLEPRECISION - // if (dif > 10.0E-7 || dif < -10.0E-7) - //#else - // if (dif > 10.0E-15 || dif < -10.0E-15) - //#endif - // { - // UB_THROW(UbException(UB_EXARGS, "drho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(rho_post) - // + " dif=" + UbSystem::toString(dif) - // + " drho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3))); - // //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): drho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3)); - // //exit(EXIT_FAILURE); - // } - //#endif - - if (UbMath::isNaN(rho_post) || UbMath::isInfinity(rho_post)) - UB_THROW(UbException( - UB_EXARGS, "rho_post is not a number (nan or -1.#IND) or infinity number -1.#INF, node=" + UbSystem::toString(x1) + "," + - UbSystem::toString(x2) + "," + UbSystem::toString(x3))); - - ////////////////////////////////////////////////////////////////////////// - //write distribution - ////////////////////////////////////////////////////////////////////////// - (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac ;//* rho * c1o3; - - (*this->zeroDistributionsF)(x1, x2, x3) = mfbbb;// *rho* c1o3; - // !Old Kernel -///////////////////// P H A S E - F I E L D S O L V E R -//////////////////////////////////////////// -/////CUMULANT PHASE-FIELD - real omegaD =1.0/( 3.0 * mob + 0.5); - { - mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3); - - - //////////////////////////////////////////////////////////////////////////////////// - //! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // second component - real concentration = - ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; - //////////////////////////////////////////////////////////////////////////////////// - real oneMinusRho = c1o1 - concentration; - - real cx = - ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)); - real cy = - ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)); - real cz = - ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)); - - //////////////////////////////////////////////////////////////////////////////////// - // calculate the square of velocities for this lattice node - real cx2 = cx * cx; - real cy2 = cy * cy; - real cz2 = cz * cz; - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (6)-(14) in \ref - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho); - forwardChimera(mfaab, mfabb, mfacb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho); - forwardChimera(mfbab, mfbbb, mfbcb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho); - forwardChimera(mfcab, mfcbb, mfccb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho); - forwardChimera(mfaba, mfbba, mfcba, cx, cx2); - forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho); - forwardChimera(mfaab, mfbab, mfcab, cx, cx2); - forwardChimera(mfabb, mfbbb, mfcbb, cx, cx2); - forwardChimera(mfacb, mfbcb, mfccb, cx, cx2); - forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho); - forwardChimera(mfabc, mfbbc, mfcbc, cx, cx2); - forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c3o1, c1o9, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - //! - experimental Cumulant ... to be published ... hopefully - //! - - // linearized orthogonalization of 3rd order central moments - real Mabc = mfabc - mfaba * c1o3; - real Mbca = mfbca - mfbaa * c1o3; - real Macb = mfacb - mfaab * c1o3; - real Mcba = mfcba - mfaba * c1o3; - real Mcab = mfcab - mfaab * c1o3; - real Mbac = mfbac - mfbaa * c1o3; - // linearized orthogonalization of 5th order central moments - real Mcbc = mfcbc - mfaba * c1o9; - real Mbcc = mfbcc - mfbaa * c1o9; - real Mccb = mfccb - mfaab * c1o9; - - // collision of 1st order moments - cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + - normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; - cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + - normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; - cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + - normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; - - cx2 = cx * cx; - cy2 = cy * cy; - cz2 = cz * cz; - - // equilibration of 2nd order moments - mfbba = c0o1; - mfbab = c0o1; - mfabb = c0o1; - - mfcaa = c1o3 * concentration; - mfaca = c1o3 * concentration; - mfaac = c1o3 * concentration; - - // equilibration of 3rd order moments - Mabc = c0o1; - Mbca = c0o1; - Macb = c0o1; - Mcba = c0o1; - Mcab = c0o1; - Mbac = c0o1; - mfbbb = c0o1; - - // from linearized orthogonalization 3rd order central moments to central moments - mfabc = Mabc + mfaba * c1o3; - mfbca = Mbca + mfbaa * c1o3; - mfacb = Macb + mfaab * c1o3; - mfcba = Mcba + mfaba * c1o3; - mfcab = Mcab + mfaab * c1o3; - mfbac = Mbac + mfbaa * c1o3; - - // equilibration of 4th order moments - mfacc = c1o9 * concentration; - mfcac = c1o9 * concentration; - mfcca = c1o9 * concentration; - - mfcbb = c0o1; - mfbcb = c0o1; - mfbbc = c0o1; - - // equilibration of 5th order moments - Mcbc = c0o1; - Mbcc = c0o1; - Mccb = c0o1; - - // from linearized orthogonalization 5th order central moments to central moments - mfcbc = Mcbc + mfaba * c1o9; - mfbcc = Mbcc + mfbaa * c1o9; - mfccb = Mccb + mfaab * c1o9; - - // equilibration of 6th order moment - mfccc = c1o27 * concentration; - - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (88)-(96) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho); - backwardChimera(mfaba, mfbba, mfcba, cx, cx2); - backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho); - backwardChimera(mfaab, mfbab, mfcab, cx, cx2); - backwardChimera(mfabb, mfbbb, mfcbb, cx, cx2); - backwardChimera(mfacb, mfbcb, mfccb, cx, cx2); - backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho); - backwardChimera(mfabc, mfbbc, mfcbc, cx, cx2); - backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c9o1, c1o9, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho); - backwardChimera(mfaab, mfabb, mfacb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho); - backwardChimera(mfbab, mfbbb, mfbcb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho); - backwardChimera(mfcab, mfcbb, mfccb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho); - - - - (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3) = mfabb; - (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3) = mfbab; - (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3) = mfbba; - (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3) = mfaab; - (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab; - (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3) = mfaba; - (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba; - (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa; - (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca; - (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa; - (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa; - (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca; - (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca; - - (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3 ) = mfcbb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3 ) = mfbcb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3 ) = mfccb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3 ) = mfacb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac; - - (*this->zeroDistributionsH1)(x1,x2,x3) = mfbbb; - } - } - } - } - } -} -////////////////////////////////////////////////////////////////////////// - -real MultiphasePressureFilterLBMKernel::gradX1_phi() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP]))) - + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) + - +WEIGTH[d0P0] * (phi[dP00] - phi[dM00])); -} - -real MultiphasePressureFilterLBMKernel::gradX2_phi() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM]))) - + WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) + - +WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0])); -} - -real MultiphasePressureFilterLBMKernel::gradX3_phi() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP]))) - + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) + - +WEIGTH[d0P0] * (phi[d00P] - phi[d00M])); -} - -real MultiphasePressureFilterLBMKernel::nabla2_phi() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - real sum = 0.0; - sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000]))) - + (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000])))); - sum += WEIGTH[d0PP] * ( - (((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000]))) - + (((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000]))) - + (((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000]))) - ); - sum += WEIGTH[d00P] * ( - ((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000])) - + ((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000])) - + ((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000])) - ); - - return 6.0 * sum; -} - -void MultiphasePressureFilterLBMKernel::computePhasefield() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - SPtr<DistributionArray3D> distributionsH = dataSet->getHdistributions(); - - 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[dP00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - h[d0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - h[d00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - h[dPP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - h[dMP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - h[dP0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - h[dM0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - h[d0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - h[d0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - - h[dM00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - h[d0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - h[d00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - h[dMM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - h[dPM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - h[dM0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - h[dP0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - h[d0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - h[d0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - - h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3); - } - } - } - } -} - -void MultiphasePressureFilterLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, - int x3) -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - phi[d000] = (*ph)(x1, x2, x3); - - - 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 { - phi[k] = phaseFieldBC; - } - } -} - -void MultiphasePressureFilterLBMKernel::swapDistributions() -{ - LBMKernel::swapDistributions(); - dataSet->getHdistributions()->swap(); -} - -void MultiphasePressureFilterLBMKernel::initForcing() -{ - 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); - - muForcingX1.DefineVar("rho",&muRho); - muForcingX2.DefineVar("rho",&muRho); - muForcingX3.DefineVar("rho",&muRho); - -} diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterLBMKernel.h b/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterLBMKernel.h deleted file mode 100644 index fc2783b4f844a0acb00386c64ff034bfa900928b..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterLBMKernel.h +++ /dev/null @@ -1,111 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphasePressureFilterLBMKernel.h -//! \ingroup LBMKernel -//! \author M. Geier, K. Kutscher, Hesameddin Safari -//======================================================================================= - -#ifndef MultiphasePressureFilterLBMKernel_H -#define MultiphasePressureFilterLBMKernel_H - -#include "LBMKernel.h" -#include "BCSet.h" -#include "D3Q27System.h" -#include "basics/utilities/UbTiming.h" -#include "basics/container/CbArray4D.h" -#include "basics/container/CbArray3D.h" - -//! \brief Multiphase Cascaded Cumulant LBM kernel. -//! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model -//! \author M. Geier, K. Kutscher, Hesameddin Safari -class MultiphasePressureFilterLBMKernel : public LBMKernel -{ -public: - MultiphasePressureFilterLBMKernel(); - virtual ~MultiphasePressureFilterLBMKernel(void) = default; - void calculate(int step) override; - SPtr<LBMKernel> clone() override; - real getCalculationTime() override { return .0; } - - void setPhaseFieldBC(real bc) - { - phaseFieldBC = bc; - } - real getPhaseFieldBC() - { - return phaseFieldBC; - } - -protected: - virtual void initDataSet(); - void swapDistributions() override; - - void initForcing(); - - void forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho); - void backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho); - void forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2); - void backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2); - - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF; - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF; - CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr zeroDistributionsF; - - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH1; - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH1; - CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr zeroDistributionsH1; - - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressureOld; - - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr divU; - - real h [D3Q27System::ENDF+1]; - real phi[D3Q27System::ENDF+1]; - - real gradX1_phi(); - real gradX2_phi(); - real gradX3_phi(); - void computePhasefield(); - void findNeighbors(CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, int x1, int x2, int x3); - - real nabla2_phi(); - - mu::value_type muX1,muX2,muX3; - mu::value_type muDeltaT; - mu::value_type muNu; - mu::value_type muRho; - real forcingX1; - real forcingX2; - real forcingX3; - - real phaseFieldBC { 0.0 }; // if 0.0 then light fluid on the wall, else if 1.0 havy fluid -}; - -#endif diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.cpp deleted file mode 100644 index 73b3691c655ab6c537db67e93c695ba9e7318377..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.cpp +++ /dev/null @@ -1,6085 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseScaleDistributionLBMKernel.cpp -//! \ingroup LBMKernel -//! \author M. Geier, K. Kutscher, Hesameddin Safari -//======================================================================================= - -#include "MultiphaseScaleDistributionLBMKernel.h" -#include "BCArray3D.h" -#include "Block3D.h" -#include "D3Q27EsoTwist3DSplittedVector.h" -#include "D3Q27System.h" -#include "DataSet3D.h" -#include "LBMKernel.h" -#include <cmath> -#include <iostream> -#include <string> -#include "NonNewtonianFluids/LBM/Rheology.h" - -using namespace vf::lbm::dir; -using namespace vf::basics::constant; - -#define PROOF_CORRECTNESS - -////////////////////////////////////////////////////////////////////////// -MultiphaseScaleDistributionLBMKernel::MultiphaseScaleDistributionLBMKernel() { this->compressible = false; } -////////////////////////////////////////////////////////////////////////// -void MultiphaseScaleDistributionLBMKernel::initDataSet() -{ - SPtr<DistributionArray3D> f(new D3Q27EsoTwist3DSplittedVector( nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9)); - SPtr<DistributionArray3D> h(new D3Q27EsoTwist3DSplittedVector( nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9)); // For phase-field - SPtr<DistributionArray3D> h2(new D3Q27EsoTwist3DSplittedVector(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9)); - SPtr<PhaseFieldArray3D> divU1(new PhaseFieldArray3D( nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure(new CbArray3D<real, IndexerX3X2X1>( nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - pressureOld = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - p1Old = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - - rhoNode = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - vxNode = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - vyNode = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - vzNode = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - dataSet->setFdistributions(f); - dataSet->setHdistributions(h); // For phase-field - dataSet->setH2distributions(h2); - dataSet->setPhaseField(divU1); - dataSet->setPressureField(pressure); - - phaseField = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.0)); - phaseFieldOld = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 999.0)); - - divU = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); -} -////////////////////////////////////////////////////////////////////////// -SPtr<LBMKernel> MultiphaseScaleDistributionLBMKernel::clone() -{ - SPtr<LBMKernel> kernel(new MultiphaseScaleDistributionLBMKernel()); - kernel->setNX(nx); - dynamicPointerCast<MultiphaseScaleDistributionLBMKernel>(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->setInterfaceWidth(this->interfaceWidth); - kernel->setSigma(this->sigma); - - kernel->setBCSet(bcSet->clone(kernel)); - kernel->setWithForcing(withForcing); - kernel->setForcingX1(muForcingX1); - kernel->setForcingX2(muForcingX2); - kernel->setForcingX3(muForcingX3); - kernel->setIndex(ix1, ix2, ix3); - kernel->setDeltaT(deltaT); - kernel->setGhostLayerWidth(2); - dynamicPointerCast<MultiphaseScaleDistributionLBMKernel>(kernel)->initForcing(); - - return kernel; -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseScaleDistributionLBMKernel::forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) { - //using namespace UbMath; - real m2 = mfa + mfc; - real m1 = mfc - mfa; - real m0 = m2 + mfb; - mfa = m0; - m0 *= Kinverse; - m0 += oneMinusRho; - mfb = (m1 * Kinverse - m0 * vv) * K; - mfc = ((m2 - c2o1 * m1 * vv) * Kinverse + v2 * m0) * K; -} - -//////////////////////////////////////////////////////////////////////////////// -void MultiphaseScaleDistributionLBMKernel::backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) { - //using namespace UbMath; - real m0 = (((mfc - mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 - vv) * c1o2) * K; - real m1 = (((mfa - mfc) - c2o1 * mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (-v2)) * K; - mfc = (((mfc + mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 + vv) * c1o2) * K; - mfa = m0; - mfb = m1; -} - - -//////////////////////////////////////////////////////////////////////////////// -void MultiphaseScaleDistributionLBMKernel::forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) { - //using namespace UbMath; - real m1 = (mfa + mfc) + mfb; - real m2 = mfc - mfa; - mfc = (mfc + mfa) + (v2 * m1 - c2o1 * vv * m2); - mfb = m2 - vv * m1; - mfa = m1; -} - - -void MultiphaseScaleDistributionLBMKernel::backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) { - //using namespace UbMath; - real ma = (mfc + mfa * (v2 - vv)) * c1o2 + mfb * (vv - c1o2); - real mb = ((mfa - mfc) - mfa * v2) - c2o1 * mfb * vv; - mfc = (mfc + mfa * (v2 + vv)) * c1o2 + mfb * (vv + c1o2); - mfb = mb; - mfa = ma; -} - - -void MultiphaseScaleDistributionLBMKernel::calculate(int step) -{ - using namespace D3Q27System; - //using namespace UbMath; - - forcingX1 = 0.0; - forcingX2 = 0.0; - forcingX3 = 0.0; - real phiLim = (phiH + phiL)*c1o2; - - real oneOverInterfaceScale = c4o1 / interfaceWidth; //1.0;//1.5; - ///////////////////////////////////// - - localDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); - nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); - zeroDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); - - localDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions(); - nonLocalDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions(); - zeroDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions(); - - localDistributionsH2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getLocalDistributions(); - nonLocalDistributionsH2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getNonLocalDistributions(); - zeroDistributionsH2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getZeroDistributions(); - - - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure = dataSet->getPressureField(); - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - const int bcArrayMaxX1 = (int)bcArray->getNX1(); - const int bcArrayMaxX2 = (int)bcArray->getNX2(); - const int bcArrayMaxX3 = (int)bcArray->getNX3(); - - int minX1 = ghostLayerWidth; - int minX2 = ghostLayerWidth; - int minX3 = ghostLayerWidth; - int maxX1 = bcArrayMaxX1 - ghostLayerWidth; - int maxX2 = bcArrayMaxX2 - ghostLayerWidth; - int maxX3 = bcArrayMaxX3 - ghostLayerWidth; - - - //// 08.10.23 post collision BC from new liquid nodes - // this->swapDistributions(); - // { - // real fff[27]; - // SPtr<DistributionArray3D> distributionC = this->getDataSet()->getFdistributions(); - // //for (int x3 = minX3 - 1; x3 < maxX3 + 1; x3++) { - // // for (int x2 = minX2 - 1; x2 < maxX2 + 1; x2++) { - // // for (int x1 = minX1 - 1; x1 < maxX1 + 1; x1++) { - // // if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) - // for (int x3 = minX3 - ghostLayerWidth + 1; x3 < maxX3 + ghostLayerWidth - 1; x3++) { - // for (int x2 = minX2 - ghostLayerWidth + 1; x2 < maxX2 + ghostLayerWidth - 1; x2++) { - // for (int x1 = minX1 - ghostLayerWidth + 1; x1 < maxX1 + ghostLayerWidth - 1; x1++) { - // if (!bcArray->isSolid(x1, x2, x3) /* && !bcArray->isUndefined(x1, x2, x3)*/) - - // { - - // findNeighbors(phaseFieldOld, x1, x2, x3); - // findNeighbors2(phaseField, x1, x2, x3); - // if ((phi[d000] <= phiLim) && (phi2[d000] > phiLim)) { - // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // if ((phi2[fdir] > phiLim) && - // ( !bcArray->isSolid(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir]) - // && - // !bcArray->isUndefined(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir]))) { - // distributionC->getDistributionInv(fff, x1 + D3Q27System::DX1[fdir], - // x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir]); - // real vx, vy, vz, rho; - // D3Q27System::calcIncompMacroscopicValues(fff, rho, vx, vy, vz); - // real feq = D3Q27System::getIncompFeqForDirection(fdir, rho, vx, vy, vz); - // // real feqZero=D3Q27System::getIncompFeqForDirection(fdir, 0.0,vx,vy,vz); - // // real feqZeroI = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0.0, - // // vx, vy, vz); distribution->setDistributionForDirection( - // // c1o2 * (feqZero+feqZeroI-feq+ - // // distribution->getPostCollisionDistributionForDirection( - // // x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + - // // D3Q27System::DX3[fdir],fdir)), - // // x1, x2, x3, - // // fdir); - // distributionC->setDistributionForDirection(feq, x1, x2, x3, fdir); - // } - // } - // } - // } - // } - // } - // } - // } - // this->swapDistributions(); - // //! 08.10.23 - - //real omegaDRho = 1.0;// 1.25;// 1.3; - for (int x3 = minX3 - ghostLayerWidth; x3 < maxX3 + ghostLayerWidth; x3++) { - for (int x2 = minX2 - ghostLayerWidth; x2 < maxX2 + ghostLayerWidth; x2++) { - for (int x1 = minX1 - ghostLayerWidth; x1 < maxX1 + ghostLayerWidth; x1++) { - if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { - int x1p = x1 + 1; - int x2p = x2 + 1; - int x3p = x3 + 1; - - - - real mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - real mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - real mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3); - - //omegaDRho = 2.0;// 1.5; - //real phiOld = (*phaseField)(x1, x2, x3); - - (*phaseField)(x1, x2, x3) = (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca) + (mfcaa + mfacc))) + - (((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) { - (*phaseField)(x1, x2, x3) = c1o1; - } - - if ((*phaseField)(x1, x2, x3) < 0) { - (*phaseField)(x1, x2, x3) = 0; - - - } - } - } - } - } - -// // 19.09.23 Velocity from Death Reckoning -// for (int x3 = minX3 - ghostLayerWidth; x3 < maxX3 + ghostLayerWidth; x3++) { -// for (int x2 = minX2 - ghostLayerWidth; x2 < maxX2 + ghostLayerWidth; x2++) { -// for (int x1 = minX1 - ghostLayerWidth; x1 < maxX1 + ghostLayerWidth; x1++) { -// if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { -// int x1p = x1 + 1; -// int x2p = x2 + 1; -// int x3p = x3 + 1; -// -// real mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); -// real mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); -// real mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); -// real mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); -// real mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); -// real mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); -// real mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); -// real mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); -// real mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); -// real mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); -// real mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); -// real mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); -// real mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); -// real mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); -// real mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); -// real mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); -// real mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); -// real mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); -// real mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); -// real mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); -// real mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); -// real mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); -// real mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); -// real mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); -// real mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); -// real mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); -// real mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3); -// -// findNeighbors(phaseField, x1, x2, x3); -// -// real dX1_phi = gradX1_phi(); -// real dX2_phi = gradX2_phi(); -// real dX3_phi = gradX3_phi(); -// -// real denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi) + 1.0e-20; //+ 1e-9+1e-3; -// real normX1 = dX1_phi / denom; -// real normX2 = dX2_phi / denom; -// real normX3 = dX3_phi / denom; -// real cx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + -// (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + (mfcbb - mfabb)); -// real cy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + -// (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + (mfbcb - mfbab)); -// real cz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + -// (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + (mfbbc - mfbba)); -// -// (*vxNode)(x1, x2, x3) =(c6o1 * cx -(normX1 * oneOverInterfaceScale * (phi[d000] - phiH) * (phi[d000] - phiL)) / (phiH - phiL)) /(c6o1 * phi[d000]); -// (*vyNode)(x1, x2, x3) =(c6o1 * cy -(normX2 * oneOverInterfaceScale * (phi[d000] - phiH) * (phi[d000] - phiL)) / (phiH - phiL)) /(c6o1 * phi[d000]); -// (*vzNode)(x1, x2, x3) =(c6o1 * cz -(normX3 * oneOverInterfaceScale * (phi[d000] - phiH) * (phi[d000] - phiL)) / (phiH - phiL)) /(c6o1 * phi[d000]); -// } -// } -// } -// } -////!19.09.23 - this->swapDistributions(); - for (int x3 = minX3 - ghostLayerWidth+1; x3 < maxX3 + ghostLayerWidth-1; x3++) { - for (int x2 = minX2 - ghostLayerWidth+1; x2 < maxX2 + ghostLayerWidth-1; x2++) { - for (int x1 = minX1 - ghostLayerWidth+1; x1 < maxX1 + ghostLayerWidth-1; x1++) { - if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { - //int x1p = x1 + 1; - //int x2p = x2 + 1; - //int x3p = x3 + 1; - - //real mfabb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3);//* rho * c1o3; - // real mfbab = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3);//* rho * c1o3; - // real mfbba = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3);//* rho * c1o3; - // real mfaab = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3);//* rho * c1o3; - // real mfcab = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3);//* rho * c1o3; - // real mfaba = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3);//* rho * c1o3; - // real mfcba = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3);//* rho * c1o3; - // real mfbaa = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3);//* rho * c1o3; - // real mfbca = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3);//* rho * c1o3; - // real mfaaa = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3);//* rho * c1o3; - // real mfcaa = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3);//* rho * c1o3; - // real mfaca = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3);//* rho * c1o3; - // real mfcca = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3);//* rho * c1o3; - // real mfcbb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3);//* rho * c1o3; - // real mfbcb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3);//* rho * c1o3; - // real mfbbc = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p);//* rho * c1o3; - // real mfccb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3);//* rho * c1o3; - // real mfacb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3);//* rho * c1o3; - // real mfcbc = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p);//* rho * c1o3; - // real mfabc = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p);//* rho * c1o3; - // real mfbcc = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p);//* rho * c1o3; - // real mfbac = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p);//* rho * c1o3; - // real mfccc = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p);//* rho * c1o3; - // real mfacc = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p);//* rho * c1o3; - // real mfcac = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p);//* rho * c1o3; - // real mfaac = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p);//* rho * c1o3; - // real mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3); - - SPtr<DistributionArray3D> distributionH = this->getDataSet()->getHdistributions(); - real hh[27]; - distributionH->getPostCollisionDistribution(hh, x1, x2, x3); - real phiD, vxP, vyP, vzP; - - D3Q27System::calcIncompMacroscopicValues(hh, phiD, vxP, vyP, vzP); - (*phaseFieldOld)(x1, x2, x3) = phiD; - - //real mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - //real mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - //real mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - //real mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - //real mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - //real mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - //real mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - //real mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - //real mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - //real mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - //real mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - //real mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - //real mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - //real mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - //real mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - //real mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - //real mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - //real mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - //real mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - //real mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - //real mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - //real mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - //real mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - //real mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - //real mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - //real mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - - //real mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3); - //(*phaseField)(x1, x2, x3) = (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca) + (mfcaa + mfacc))) + - // (((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) { - // (*phaseField)(x1, x2, x3) = c1o1; - //} - - //if ((*phaseField)(x1, x2, x3) < 0) { - // (*phaseField)(x1, x2, x3) = 0; - //} - ////// read F-distributions for velocity formalism - //mfabb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);//* rho * c1o3; - //mfbab = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);//* rho * c1o3; - //mfbba = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);//* rho * c1o3; - //mfaab = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);//* rho * c1o3; - //mfcab = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);//* rho * c1o3; - //mfaba = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);//* rho * c1o3; - //mfcba = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);//* rho * c1o3; - //mfbaa = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);//* rho * c1o3; - //mfbca = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);//* rho * c1o3; - //mfaaa = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);//* rho * c1o3; - //mfcaa = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);//* rho * c1o3; - //mfaca = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);//* rho * c1o3; - //mfcca = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);//* rho * c1o3; - //mfcbb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);//* rho * c1o3; - //mfbcb = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);//* rho * c1o3; - //mfbbc = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);//* rho * c1o3; - //mfccb = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);//* rho * c1o3; - //mfacb = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);//* rho * c1o3; - //mfcbc = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);//* rho * c1o3; - //mfabc = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);//* rho * c1o3; - //mfbcc = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);//* rho * c1o3; - //mfbac = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);//* rho * c1o3; - //mfccc = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);//* rho * c1o3; - //mfacc = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);//* rho * c1o3; - //mfcac = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);//* rho * c1o3; - //mfaac = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);//* rho * c1o3; - //mfbbb = (*this->zeroDistributionsF)(x1, x2, x3); - - //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); - - - //real drho = (((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc))) - // + (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca)))) - // + ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; - - //(*rhoNode)(x1, x2, x3) = drho; - //(*vxNode)(x1, x2, x3) = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - // (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - // (mfcbb - mfabb)); - //(*vyNode)(x1, x2, x3) = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - // (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - // (mfbcb - mfbab)); - //(*vzNode)(x1, x2, x3) = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - // (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - // (mfbbc - mfbba)); - - SPtr<DistributionArray3D> distribution = this->getDataSet()->getFdistributions(); - real ff[27]; - distribution->getPostCollisionDistribution(ff, x1, x2, x3); - real rhoG,vx,vy,vz; - //real rhoGG = (((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc))) - // + (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca)))) - // + ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; - - - //vx= ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - // (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - // (mfcbb - mfabb)); - //vy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - // (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - // (mfbcb - mfbab)); - //vz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - // (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - // (mfbbc - mfbba)); - D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz); - //if (withForcing) { - - // real forcingX1 = muForcingX1.Eval(); - // real forcingX2 = muForcingX2.Eval(); - // real forcingX3 = muForcingX3.Eval(); - - // vx += (forcingX1)*deltaT * c1o2; - // vy += (forcingX2)*deltaT * c1o2; - // vz += (forcingX3)*deltaT * c1o2; - //} - - //if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { } - //else { rhoG = 0.0; vx = 0.0; vy = 0.0; vz = 0.0; } - //// very bad save the world procedure!!!! - //vx = (vx > 1 || vx < -1) ? 0 : vx; - //vy = (vy > 1 || vy < -1) ? 0 : vy; - //vz = (vz > 1 || vz < -1) ? 0 : vz; - //rhoG = (rhoG > 10 || rhoG < -10) ? 0 : rhoG; - (*rhoNode)(x1, x2, x3) = rhoG;// *((*phaseField)(x1, x2, x3) > c1o2 ? densityRatio : c1o1); - (*vxNode)(x1, x2, x3) = vx; - (*vyNode)(x1, x2, x3) = vy; - (*vzNode)(x1, x2, x3) = vz; - //if (fabsf(vx) > 0 && fabsf(vx) < 0.01) { - // int test = 0; - //} - - - - //if ((*vzNode)(x1, x2, x3) != 0) { - // real vvvv = (*vzNode)(x1, x2, x3); - // real pppp = vvvv / (*phaseField)(x1, x2, x3); - // int ii = 1; - //} - - } - } - } - } - - SPtr<DistributionArray3D> distribution = this->getDataSet()->getFdistributions(); - real ff[27]; - for (int x3 = minX3 - 1; x3 < maxX3 + 1; x3++) { - for (int x2 = minX2 - 1; x2 < maxX2 + 1; x2++) { - for (int x1 = minX1 - 1; x1 < maxX1 + 1; x1++) { - if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { - //int x1p = x1 + 1; - //int x2p = x2 + 1; - //int x3p = x3 + 1; - findNeighbors(phaseFieldOld, x1, x2, x3); - findNeighbors2(phaseField, x1, x2, x3); - ////////////////////////////////Momentum conservation experiment 06.03.2023 - //surfacetension - - - if (this->isGas(phiLim, phi, phi2)) { - real vx = (*vxNode)(x1, x2, x3); - real vy = (*vyNode)(x1, x2, x3); - real vz = (*vzNode)(x1, x2, x3); - //real rho = (*rhoNode)(x1, x2, x3); - findNeighbors(phaseField, x1, x2, x3); - //real dX1_phi = gradX1_phi(); - //real dX2_phi = gradX2_phi(); - //real dX3_phi = gradX3_phi(); - //real curv = computeCurvature_phi(); - real laplacePressure = c12o1 * sigma * computeCurvature_phi(); - findNeighbors(phaseFieldOld, x1, x2, x3); - - - //real sigma = c3o1*c2o1*1e-3; - - //real flowDirection = vx * dX1_phi + vy * dX2_phi + vy * dX3_phi; - - -//16.03.23 c: BB gas side with updated boundary velocity - - distribution->getPostCollisionDistribution(ff, x1, x2, x3); - real rhoG; - if (phi[d000] > phiLim) { // initialization necessary - real sumRho = 0; - real sumWeight = 1.e-100; - for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - if ((phi[fdir] <= phiLim) && - !bcArray->isSolid(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - x3 + D3Q27System::DX3[fdir])) { - sumRho += WEIGTH[fdir] * (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); - sumWeight += WEIGTH[fdir]; - } - - } - - for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - ff[D3Q27System::INVDIR[fdir]] = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - } - rhoG = sumRho / sumWeight;// uncheck excpetion: what if there is no adequate neighbor? - for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - if ((phi[fdir] > phiLim)) { - // real vxBC = ((*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real vyBC = ((*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real vzBC = ((*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //vx = vxBC; - //vy = vyBC; - //vz = vzBC; - //real fPEQNeighbor = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir],c0o1 , (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real fPEQNeighborInv = D3Q27System::getIncompFeqForDirection(fdir,c0o1 , (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real vBC = (fPEQNeighborInv - fPEQNeighbor) / WEIGTH[fdir] * c1o6; - //real fPEQHere = D3Q27System::getIncompFeqForDirection(fdir,c0o1 , vx,vy,vz); - //real vBC = (fPEQHere - fPEQNeighbor) / WEIGTH[fdir] * c1o6; - //real vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC); - //real vDir = (D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + D3Q27System::DX3[fdir] * vz); - //vBC = (vBC + vDir) / (c2o1 + vBC - vDir); - // real dvDir = vBC - vDir; - // 27.04.23 - //real vxI = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - //real vyI = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - //real vzI = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - //real vIDir = (D3Q27System::DX1[fdir] * vxI + D3Q27System::DX2[fdir] * vyI + D3Q27System::DX3[fdir] * vzI); - // real dvDir = (vBC - vIDir) * c1o2; - //real dvDir = (vBC - vDir) ; - - //// 3.7.23 - // vIDir = (vIDir + vDir) * c1o2; - // real qq = (c1o2 - (*phaseField)(x1, x2, x3)) / ((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) - (*phaseField)(x1, x2, x3)); - //vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC); - - // // vBC = (qq > c1o2) ? vIDir + (vBC - vIDir) / (c1o1 + qq + (c1o1 / collFactorG - c1o2) / (c1o1 / collFactorL - c1o2) / densityRatio * (c1o1 - qq)) * c3o2 - // // : vBC + (c1o1 / collFactorG - c1o2) / (c1o1 / collFactorL - c1o2) / densityRatio * -c1o2 * (vBC - vIDir) / (c1o1 + qq + (c1o1 / collFactorG - c1o2) / (c1o1 / collFactorL - c1o2) / densityRatio * (c1o1 - qq)); - - //dvDir = (vBC - vIDir) /(c1o2+qq); - //real fGEQInv = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vxI, vyI, vzI); - - // ///!03.07.2023 - - - real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - - //if ((phi[D3Q27System::INVDIR[fdir]] > phiLim)) - { - ///here we need reconstruction from scrach - real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew; - - //real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - //real fGEQOld = D3Q27System::getIncompFeqForDirection(fdir, (*rhoNode)(x1, x2, x3), vx, vy, vz); - //real fGEQNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz); - //real fGEQ = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz); - //real fBC = ( fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC); - //3.7.23 - //real fBC = ((fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - qq)) - c6o1 * WEIGTH[fdir] * (vBC))*c1o2 / (qq + c1o2) + ((fGEQInv - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o2)))*qq/(qq+c1o2); - //qq = 0; - //real fBC = ((distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir) - collFactorG * fGEQ) / (c1o1 - collFactorG) * (1-qq)+qq*distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir) - c6o1 * WEIGTH[fdir]*vBC) / (qq + c1o1) + - // (distribution->getPostCollisionDistributionForDirection(x1 , x2 , x3, D3Q27System::INVDIR[fdir])) * qq / (qq + c1o1); - //real fBC = (fGEQ - c3o1*WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC); - //13.07.2023 - real fBC = feqNew + (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1); - //real fBC = (fGEQ - WEIGTH[fdir] * dvDir * (c1o1 / collFactorG )) - c6o1 * WEIGTH[fdir] * (vDir); - //real vNG = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC); - //real fBC = (fGEQ - WEIGTH[fdir] * dvDir * (c1o1 / collFactorG)) - c6o1 * WEIGTH[fdir] * (vDir)/(c1o1-vDir+vNG); - // 15.5.23 - //real fBC = (fGEQ - WEIGTH[fdir] * dvDir * (c1o1 / collFactorG)) - c6o1 * WEIGTH[fdir] * (vDir); - //real fBC = (c2o1 * (fGEQ - WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1))) - c6o1 * WEIGTH[fdir] * (vBC)-fG; - //real fBC = (distribution->getPostCollisionDistributionForDirection(x1, x2, x3, D3Q27System::INVDIR[fdir]) - c6o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) ; - //real fBC = (fGEQ - c6o1 * WEIGTH[fdir] * dvDir * (collFactorG )/(c3o1-collFactorG)) - c6o1 * WEIGTH[fdir] * (vBC); - //real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;// fL -feqOLD + feqNew; - //real fBC = fGG - c6o1 * WEIGTH[fdir] * (vBC); - distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - ff[D3Q27System::INVDIR[fdir]] = fBC; - ///// other possibility is tor replace the node itself instead of the neighbor (only c1o1 of them is allowed!) - //real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - //real feqOLD = D3Q27System::getIncompFeqForDirection(fdir, (*rhoNode)(x1 , x2 , x3 ), (*vxNode)(x1 , x2 , x3 ), (*vyNode)(x1 , x2 , x3 ), (*vzNode)(x1 , x2 , x3 )); - //real feqNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG, (*vxNode)(x1 , x2 , x3 ), (*vyNode)(x1 , x2 , x3 ), (*vzNode)(x1, x2, x3 )); - //real fBC = fG - feqOLD + feqNew; - //distribution->setPostCollisionDistributionForDirection(fBC, x1, x2, x3, fdir); - - - } - } - } - //distribution->setDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1, x2, x3, d000); - //{ - // real fL = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, d000); - // real feqOLD = D3Q27System::getIncompFeqForDirection(d000, (*rhoNode)(x1, x2, x3), vx,vy,vz); - // real feqNew = D3Q27System::getIncompFeqForDirection(d000, rhoG,vx,vy,vz); - // distribution->setPostCollisionDistributionForDirection(fL-feqOLD+feqNew, x1, x2, x3, d000); - //} - //D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz); - ff[d000] = vx * vx + vy * vy + vz * vz + - (((ff[dMM0] + ff[dPP0]) + (ff[dMP0] + ff[dPM0])) + ((ff[d0MM] + ff[d0PP]) + (ff[d0MP] + ff[d0PM])) + ((ff[dM0M] + ff[dP0P]) + (ff[dM0P] + ff[dP0M])) + - c2o1 * ((((ff[dMMM] + ff[dPPP]) + (ff[dMMP] + ff[dPPM]))) + (((ff[dMPM] + ff[dPMP]) + (ff[dMPP] + ff[dPMM]))))); - distribution->setPostCollisionDistributionForDirection(ff[d000], x1, x2, x3, d000); - - } - - else {//no refill of gas required - rhoG = (*rhoNode)(x1, x2, x3); - if (phi2[d000] <= phiLim) { // no refill liquid - // real ffRecover[27]; - // distribution->getDistributionInv(ffRecover, x1, x2, x3);//only needed for BB (03.10.2023) - - for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - if ((phi[fdir] > phiLim)) { - // real vxBC = ((*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real vyBC = ((*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real vzBC = ((*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //vx = vxBC; - //vy = vyBC; - //vz = vzBC; - //real vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC); - //real fPEQNeighbor = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir],c0o1 , (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real fPEQNeighborInv = D3Q27System::getIncompFeqForDirection(fdir,c0o1 , (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real vBC = (fPEQNeighborInv - fPEQNeighbor) / WEIGTH[fdir] * c1o6; - // real fPEQHere = D3Q27System::getIncompFeqForDirection(fdir,c0o1 , vx,vy,vz); -// real vBC = (fPEQHere - fPEQNeighbor) / WEIGTH[fdir] * c1o6; - //real vDir = (D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + D3Q27System::DX3[fdir] * vz); - //real dvDir = vBC - vDir; - // real dvDir = vBC - vDir; - // 27.04.23 - //real vxI = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - //real vyI = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - //real vzI = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - //real vIDir = (D3Q27System::DX1[fdir] * vxI + D3Q27System::DX2[fdir] * vyI + D3Q27System::DX3[fdir] * vzI); - // real dvDir = (vBC - vIDir) * c1o2; - // real dvDir = (vBC - vDir) ; - - //vBC = (vBC + vDir) / (c2o1 + vBC - vDir); - real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - //real fBC = fG - c6o1 * WEIGTH[fdir] * (vBC); - //real fGInv = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, D3Q27System::INVDIR[fdir]); - //real fGInvEQ = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vx, vy, vz); - //real fGEQ = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz); - //real fBC = (-fGInv + fGInvEQ + fGEQ - c6o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1) )- c6o1 * WEIGTH[fdir] * (vBC); - //// 3.7.23 - // vIDir = (vIDir + vDir) * c1o2; - // real qq = (c1o2 - (*phaseField)(x1, x2, x3)) / ((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) - (*phaseField)(x1, x2, x3)); - // vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC); - - // - ////vBC = (qq > c1o2) ? vIDir + (vBC - vIDir) / (c1o1 + qq + (c1o1 / collFactorG - c1o2) / (c1o1 / collFactorL - c1o2) / densityRatio * (c1o1 - qq)) * c3o2 - //// : vBC + (c1o1 / collFactorG - c1o2) / (c1o1 / collFactorL - c1o2) / densityRatio * -c1o2 * (vBC - vIDir) / (c1o1 + qq + (c1o1 / collFactorG - c1o2) / (c1o1 / collFactorL - c1o2) / densityRatio * (c1o1 - qq)); - - //dvDir = (vBC - vIDir)*c2o3; - // dvDir = (vBC - vIDir) / (c1o2 + qq); - // real fGEQInv = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vxI, vyI, vzI); - - ///!03.07.2023 - // 3.7.23 - //real fBC = ((fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - qq)) - c6o1 * WEIGTH[fdir] * (vBC))*c1o2 / (qq + c1o2) + ((fGEQInv - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o2))) * qq / (qq + c1o2); - //qq = 0; - //real fBC = ((distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir) - collFactorG * fGEQ) / (c1o1 - collFactorG) * (1 - qq) + qq * distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir) - c6o1 * WEIGTH[fdir] * vBC) / (qq + c1o1) + - // (distribution->getPostCollisionDistributionForDirection(x1 , x2 , x3, D3Q27System::INVDIR[fdir])) * qq / (qq + c1o1); - - //real fBC = ( fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC); - // 13.07.2023 - real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), - (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), - (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), - (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - - real fBC = feqNew + (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) ; - - // 03.10.2023 - //real qq = ((*phaseField)(x1, x2, x3) - c1o2) / - // ((*phaseField)(x1, x2, x3) - (*phaseField)(x1 + D3Q27System::DX1[fdir], - // x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir])); - //real fGEQ = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz); - //real fBC = ((fG - collFactorG * fGEQ) / (c1o1 - collFactorG) * (c1o1 - qq) - - // c6o1 * WEIGTH[fdir] * - // ((*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir]) * - // D3Q27System::DX1[fdir] + - // (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir]) * - // D3Q27System::DX2[fdir] + - // (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir]) * - // D3Q27System::DX3[fdir]) + - // qq * (c2o1*fG -c6o1*WEIGTH[fdir]*(D3Q27System::DX1[fdir]*vx+D3Q27System::DX2[fdir]*vy+D3Q27System::DX3[fdir]*vz))) / - // (qq + c1o1); - //! 03.10.2023 - - - //real fBC = (fGEQ - WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC); - - //real qq = c1o1 - ((c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) / - // (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]))); - //real vNG = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC); - //real fBC = fGEQ + (-WEIGTH[fdir] * dvDir * ((c1o1 + qq) / collFactorG - c2o1 * qq) - c6o1 * WEIGTH[fdir] * (vDir + qq * vNG)) / (c1o1 + qq); - //real fBC = fGEQ + (-WEIGTH[fdir] * dvDir * ((c1o1 + qq) / collFactorG - c2o1 * qq) - c6o1 * WEIGTH[fdir] * (vDir + qq * (vDir + qq * (vNG - vDir))) / (c1o1 - vDir + vNG)) / (c1o1 + qq); - - //real fBC = (c2o1*(fGEQ - WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1))) - c6o1 * WEIGTH[fdir] * (vBC)-fG; - //real fBC = (c2o1*(fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1))) - c6o1 * WEIGTH[fdir] * (vBC)-fG; - //real fBC = (fGEQ - c6o1 * WEIGTH[fdir] * dvDir * (collFactorG) / (c3o1 - collFactorG)) - c6o1 * WEIGTH[fdir] * (vBC); - //26.04.23 flux BC: - //real fBC = (c2o1*(fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1))) - c6o1 * WEIGTH[fdir] * (vBC)-fG; - //if (flowDirection > 0) fBC = (fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC); - //if (fabsf(-fGInv + fGInvEQ + fGEQ - c6o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1) - fGEQ) >1000* (fabsf(fG - fGEQ))) fBC = fG - c6o1 * WEIGTH[fdir] * (vBC); - //if (fGEQ > 1.0e-8&& step>30&& vyBC!=0) { - // std::cout << D3Q27System::DX1[fdir] <<","<< D3Q27System::DX2[fdir] << "," << D3Q27System::DX3[fdir] <<" " << -fGInv + fGInvEQ + fGEQ - c6o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1) - fGEQ << " fg:" << fG - fGEQ << " ratio=" << (-fGInv + fGInvEQ + fGEQ - c6o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1) - fGEQ) / (fG - fGEQ) << " feq" << fGEQ << " vy =" << vy << "vyBC=" << vyBC << "\n"; - //} - - //real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - //real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew; - - //if ((*phaseField)(x1, x2, x3) <= c1o2) - //17.10.2023 Beware!!! will be overwritten! - distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - //if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > phiLim) - if (phi2[fdir] > phiLim) - { - //real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real vzBC = c1o2 * (vz + (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); - //real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - - //distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio*0 - fL - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - //distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL-2*fL+2*feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - //real flW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC; - //real flWW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC; - //real fLi = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir); - //real number = 666; - //distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC, x1, x2, x3, fdir); - //real eqBC= D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, vx, vy, vz); - //real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); - real eqBCN = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real eqGN = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - - //real flNew = (fBC + fG-eqBC-eqG) / densityRatio +eqBC+eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC; - - - - - // real flNew = (fBC + fG-eqBC-eqG) / densityRatio +eqBC+eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC; - real laplacePressureBC; - if ((x1 + D3Q27System::DX1[fdir] > 0) && (x1 + D3Q27System::DX1[fdir] < maxX1 + 1) && (x2 + D3Q27System::DX2[fdir] > 0) && (x2 + D3Q27System::DX2[fdir] < maxX2 + 1) && (x3 + D3Q27System::DX3[fdir] > 0) && (x3 + D3Q27System::DX3[fdir] < maxX3 + 1) && - phi2[d000] != phi2[fdir]) { - findNeighbors(phaseField, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); - laplacePressureBC = c6o1 * c2o1 * computeCurvature_phi() * sigma; - findNeighbors(phaseFieldOld, x1, x2, x3); - } else - laplacePressureBC = laplacePressure; - //if (UbMath::isNaN(laplacePressureBC) || UbMath::isInfinity(laplacePressureBC)) { - // laplacePressureBC = laplacePressure; - // } - // curv; // reset to the above - if (phi2[d000] != phi2[fdir]) - { - - laplacePressureBC = laplacePressure * (c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) / - (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) + - laplacePressureBC * (-c1o1 + c2o1 * (*phaseField)(x1, x2, x3)) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - } - else - laplacePressureBC = laplacePressure; - // laplacePressureBC *= sigma; - // eqBCN = eqBC; - // distribution->setPostCollisionDistributionForDirection(LaplacePressure* WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio*0) - fL - 0*(feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, - // x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - ////13.10.2023 switch BC according to flow direction - // if (gradX1_phi() * vx + gradX2_phi() * vy + gradX3_phi() * vz < 0) { - //real feqReplace = D3Q27System::getIncompFeqForDirection( - // fdir, - // -(*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir]), - // (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir]), - // (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir]), - // (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir])); - //distribution->setPostCollisionDistributionForDirection( - // laplacePressureBC * WEIGTH[fdir] + (fBC + fG) / densityRatio + - // ( feqReplace), - // x1, x2, x3, fdir); - //17.10.2023 - real fLBC=(-eqBCN - eqGN + c2o1*fG + fL)/(c1o1 + densityRatio) + ((eqBCN + eqGN - fL + laplacePressureBC*WEIGTH[fdir]))*(densityRatio/(c1o1 + densityRatio)); - fBC = fL - fLBC + fG; - distribution->setPostCollisionDistributionForDirection(fLBC,x1, x2, x3, fdir); - distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - - //distribution->setDistributionForDirection( - // laplacePressureBC * WEIGTH[fdir] + (fBC + fG) / densityRatio + - // ((eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio) - fL), - // x1, x2, x3, fdir); - - //real vLink = - // -(D3Q27System::DX1[fdir] * (*vxNode)(x1 + D3Q27System::DX1[fdir], - // x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir]) + - // D3Q27System::DX2[fdir] * (*vyNode)(x1 + D3Q27System::DX1[fdir], - // x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir]) + - // D3Q27System::DX3[fdir] * (*vzNode)(x1 + D3Q27System::DX1[fdir], - // x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir])); - //if (vLink > 0) { - //distribution->setDistributionForDirection( - // laplacePressureBC * WEIGTH[fdir] + (fBC + fG) / densityRatio + - // c1o2 * ((eqBCN + eqGN) * (c1o1 - 2 * c1o1 / densityRatio) - fL) + - // // alternative to antiBB is BB - // c1o2 * (fL - WEIGTH[fdir] * - // (c6o1 * vLink + - // c2o1 * (*rhoNode)(x1 + D3Q27System::DX1[fdir], - // x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir]))) + - // //(-fL*vLink/(c1o1-vLink))+ - // //! BB - - // 0 * (fL - feqOLD) + - // 0 * (c2o1 - collFactorL) * (fL - feqOLD) / (c1o1 - collFactorL), - // x1, x2, x3, fdir); - //} else { - //distribution->setDistributionForDirection( - // laplacePressureBC * WEIGTH[fdir] + (fBC + fG) / densityRatio + - // ((eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio) - fL), - // x1, x2, x3, fdir); - //} - /* std::cout - << "eqBCN=" << eqBCN << " eqGN=" << eqGN - << (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - x3 + D3Q27System::DX3[fdir]) - << " " - << - (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - x3 + D3Q27System::DX3[fdir]) - << " "<<(*vzNode)(x1 + D3Q27System::DX1[fdir], - x2 + D3Q27System::DX2[fdir], - x3 + D3Q27System::DX3[fdir])<< "\n";*/ - - - - //real laplacePressureBC; - // if ((x1 + D3Q27System::DX1[fdir] > 0) && (x1 + D3Q27System::DX1[fdir] < maxX1 + 1) && (x2 + D3Q27System::DX2[fdir] > 0) && (x2 + D3Q27System::DX2[fdir] < maxX2 + 1) && (x3 + D3Q27System::DX3[fdir] > 0) && (x3 + D3Q27System::DX3[fdir] < maxX3 + 1)) { - // findNeighbors(phaseField, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); - // laplacePressureBC = c6o1 * c2o1 * computeCurvature_phi() * sigma; - // findNeighbors(phaseFieldOld, x1, x2, x3); - // } else - // laplacePressureBC = laplacePressure; // curv; // reset to the above - // laplacePressureBC = laplacePressure * (c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) / - // (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) + - // laplacePressureBC * (-c1o1 + c2o1 * (*phaseField)(x1, x2, x3)) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // // laplacePressureBC *= sigma; - // - // } - - // - // //real curvBC; - // //if ((x1 + D3Q27System::DX1[fdir] > 0) && (x1 + D3Q27System::DX1[fdir] < maxX1 + 1) && (x2 + D3Q27System::DX2[fdir] > 0) && (x2 + D3Q27System::DX2[fdir] < maxX2 + 1) && (x3 + D3Q27System::DX3[fdir] > 0) && (x3 + D3Q27System::DX3[fdir] < maxX3 + 1)) { - // // findNeighbors(phaseField, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); - // // curvBC = computeCurvature_phi(); - // // findNeighbors(phaseFieldOld, x1, x2, x3); - // //} - // //else curvBC = curv;//reset to the above - // //real LaplacePressure = curv *(c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) + curvBC * (-c1o1 + c2o1 * (*phaseField)(x1, x2, x3)) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // ////16.04.23 - // //real eqLL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // ////fL = fL*0.99 +0.01*(eqLL - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorL - c1o1)); - // //LaplacePressure *= sigma; - // //eqBCN = eqBC; - // //distribution->setPostCollisionDistributionForDirection(LaplacePressure * WEIGTH[fdir] +(fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1-c1o1 / densityRatio*0 ) - fL -0* (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - // distribution->setPostCollisionDistributionForDirection(laplacePressureBC* WEIGTH[fdir] + (fBC + fG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio ) - fL, x1, x2, x3, fdir); - //if (vxBC != 0) { - // int set = 0; - //} - - } - - } - - - } - } - else {//refill liquid - - for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - if ((phi[fdir] > phiLim)) { - // real vxBC = ((*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real vyBC = ((*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real vzBC = ((*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC); - //real fPEQNeighbor = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir],c0o1 , (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real fPEQNeighborInv = D3Q27System::getIncompFeqForDirection(fdir,c0o1 , (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real vBC = (fPEQNeighborInv - fPEQNeighbor) / WEIGTH[fdir] * c1o6; - //real fPEQHere = D3Q27System::getIncompFeqForDirection(fdir,c0o1 , vx,vy,vz); - //real vBC = (fPEQHere - fPEQNeighbor) / WEIGTH[fdir] * c1o6; - //real vDir = (D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + D3Q27System::DX3[fdir] * vz); - //real dvDir = vBC - vDir; - //27.04.23 - // real vxI = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // real vyI = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // real vzI = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - //real vIDir = (D3Q27System::DX1[fdir] * vxI + D3Q27System::DX2[fdir] * vyI + D3Q27System::DX3[fdir] * vzI); - // real dvDir = (vBC - vIDir)*c1o2; - //real dvDir = (vBC - vDir) ; - - //// 3.7.23 - // vIDir = (vIDir + vDir) * c1o2; - // real qq = (c1o2 - (*phaseField)(x1, x2, x3)) / ((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) - (*phaseField)(x1, x2, x3)); - // vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC); - - // //vBC = (qq > c1o2) ? vIDir + (vBC - vIDir) / (c1o1 + qq + (c1o1 / collFactorG - c1o2) / (c1o1 / collFactorL - c1o2) / densityRatio * (c1o1 - qq)) * c3o2 - // // : vBC + (c1o1 / collFactorG - c1o2) / (c1o1 / collFactorL - c1o2) / densityRatio * -c1o2 * (vBC - vIDir) / (c1o1 + qq + (c1o1 / collFactorG - c1o2) / (c1o1 / collFactorL - c1o2) / densityRatio * (c1o1 - qq)); - - // - //dvDir = (vBC - vIDir) * c2o3; - //dvDir = (vBC - vIDir) / (c1o2 + qq); - //real fGEQInv = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vxI, vyI, vzI); - // ///!03.07.2023 - - //vBC = (vBC + vDir) / (c2o1 + vBC - vDir); - real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - //real fBC = fG - c6o1 * WEIGTH[fdir] * (vBC); - //alternative way to bounce back by recovering fG from the opiste direction - //real fGInv= distribution->getPostCollisionDistributionForDirection(x1, x2, x3, D3Q27System::INVDIR[fdir]); - //real fGInvEQ = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vx, vy, vz); - //real fGEQ = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz); - //real fBC = (-fGInv + fGInvEQ + fGEQ - c6o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC); - // 3.7.23 - //real fBC = ((fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - qq)) - c6o1 * WEIGTH[fdir] * (vBC))*c1o2 / (qq + c1o2) + ((fGEQInv - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o2))) * qq / (qq + c1o2); - //qq = 0; - //real fBC = ((distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir) - collFactorG * fGEQ) / (c1o1 - collFactorG) * (1 - qq) + qq * distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir) - c6o1 * WEIGTH[fdir] * vBC) / (qq + c1o1) + - // (distribution->getPostCollisionDistributionForDirection(x1 , x2 , x3, D3Q27System::INVDIR[fdir])) * qq / (qq + c1o1); - - //real fBC = (fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC); - // 13.07.2023 - real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), - (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), - (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), - (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - - real fBC = feqNew + (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) ; - //03.10.2023 - //real qq = ((*phaseField)(x1, x2, x3)-c1o2)/((*phaseField)(x1, x2, x3)-(*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real fGEQ = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz); - //real fBC = - // ((fG - collFactorG * fGEQ) / (c1o1 - collFactorG) * (c1o1 - qq) - - // c6o1 * WEIGTH[fdir] * - // ((*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * D3Q27System::DX1[fdir] + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * D3Q27System::DX2[fdir] + - // (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir]) * - // D3Q27System::DX3[fdir]) + - // qq * (c2o1 * fG - - // c6o1 * WEIGTH[fdir] * - // (D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + - // D3Q27System::DX3[fdir] * vz))) / - // (qq + c1o1); - //!03.10.2023 - //real fBC = (fGEQ - WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC); - - //real qq = c1o1-((c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) / - // (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]))); - //real vNG = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC); - //real fBC = fGEQ + (-WEIGTH[fdir] * dvDir * ((c1o1 + qq) / collFactorG - c2o1 * qq) - c6o1 * WEIGTH[fdir] * (vDir + qq * vNG))/(c1o1+qq); - //real fBC = fGEQ + (-WEIGTH[fdir] * dvDir * ((c1o1 + qq) / collFactorG - c2o1 * qq) - c6o1 * WEIGTH[fdir] * (vDir + qq *( vDir+qq*( vNG-vDir)))/(c1o1-vDir+vNG)) / (c1o1 + qq); - //real fBC = (c2o1 * (fGEQ - WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1))) - c6o1 * WEIGTH[fdir] * (vBC)-fG; - //real fBC = (distribution->getPostCollisionDistributionForDirection(x1, x2, x3, D3Q27System::INVDIR[fdir]) - c6o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) ; - //real fBC = (fGEQ - c6o1 * WEIGTH[fdir] * dvDir * ( collFactorG )/(c3o1-collFactorG)) - c6o1 * WEIGTH[fdir] * (vBC); - // 26.04.23 flux BC: - //real fBC = (c2o1 * (fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1))) - c6o1 * WEIGTH[fdir] * (vBC)-fG; - //if (flowDirection > 0) fBC = (fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC); - //if (fabsf(-fGInv + fGInvEQ + fGEQ - c6o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1) - fGEQ) > 1000*(fabsf(fG - fGEQ))) fBC = fG - c6o1 * WEIGTH[fdir] * (vBC); - //real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - //real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew; - - ff[D3Q27System::INVDIR[fdir]] = fBC; - if (phi2[fdir] > phiLim) { - //real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); - //real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - - //distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio*0 - fL- (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vBC), x1, x2, x3, fdir); - //distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - //distribution->setPostCollisionDistributionForDirection(0, x1, x2, x3, fdir); - //real flW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC; - //real flWW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC; - //real fLi = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir); - real eqBCN = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real eqGN = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real eqBC = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, vx, vy, vz); - //real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); - ////real flNew = (fBC + fG - eqBC - eqG) / densityRatio + eqBC + eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC; - //real curvBC; - //if ((x1 + D3Q27System::DX1[fdir] > 0) && (x1 + D3Q27System::DX1[fdir] < maxX1 + 1) && (x2 + D3Q27System::DX2[fdir] > 0) && (x2 + D3Q27System::DX2[fdir] < maxX2 + 1) && (x3 + D3Q27System::DX3[fdir] > 0) && (x3 + D3Q27System::DX3[fdir] < maxX3 + 1)) { - // findNeighbors(phaseField, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); - // curvBC = computeCurvature_phi(); - // findNeighbors(phaseFieldOld, x1, x2, x3); - //} - //else curvBC = curv;//reset to the above - ////16.04.23 - //real eqLL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - ////fL = fL * 0.99 + 0.01 * (eqLL - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorL - c1o1)); - //real LaplacePressure = curv *(c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) + curvBC * (-c1o1 + c2o1 * (*phaseField)(x1, x2, x3)) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //LaplacePressure *= sigma; - - - real laplacePressureBC; - if ((x1 + D3Q27System::DX1[fdir] > 0) && (x1 + D3Q27System::DX1[fdir] < maxX1 + 1) && (x2 + D3Q27System::DX2[fdir] > 0) && (x2 + D3Q27System::DX2[fdir] < maxX2 + 1) && (x3 + D3Q27System::DX3[fdir] > 0) && (x3 + D3Q27System::DX3[fdir] < maxX3 + 1) ) { - findNeighbors(phaseField, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); - laplacePressureBC = c6o1 * c2o1 * computeCurvature_phi() * sigma; - findNeighbors(phaseFieldOld, x1, x2, x3); - } else - laplacePressureBC = laplacePressure; // curv; // reset to the above - - //if (UbMath::isNaN(laplacePressureBC) || UbMath::isInfinity(laplacePressureBC)) { - // laplacePressureBC = laplacePressure; - // } - if (phi2[d000] != phi2[fdir]) - { - - laplacePressureBC = laplacePressure * (c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) / - (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) + - laplacePressureBC * (-c1o1 + c2o1 * (*phaseField)(x1, x2, x3)) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - } - else laplacePressureBC = laplacePressure; - - // real pp1 = (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); - //real pp2 = (*phaseField)(x1, x2, x3); - - //eqBCN = eqBC; - //distribution->setPostCollisionDistributionForDirection(LaplacePressure* WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio*0) - fL - 0*(feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - // fBC = (fG) / (densityRatio - c1o1) + - // ((densityRatio) / (densityRatio - c1o1)) * ((eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio) - c2o1 * fL + (fGEQ - WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) + laplacePressureBC * WEIGTH[fdir]); - //// 13.07.2023 - //real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), - // (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), - // (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), - // (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - - //real fBC = feqNew + (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) ; - - ////13.10.2023 switch BC according to flow direction - //if (gradX1_phi() * vx + gradX2_phi() * vy + gradX3_phi() * vz<0) { - //real feqReplace = D3Q27System::getIncompFeqForDirection( - // fdir, - // -(*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir]), - // (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir]), - // (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir]), - // (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir])); - //distribution->setPostCollisionDistributionForDirection( - // laplacePressureBC * WEIGTH[fdir] + (fBC + fG) / densityRatio + (feqReplace), - // x1, x2, x3, fdir); - - //distribution->setPostCollisionDistributionForDirection( - // laplacePressureBC * WEIGTH[fdir] + (fBC + fG) / densityRatio + (feqReplace), - // x1, x2, x3, fdir); - real fLBC=(-eqBCN - eqGN + c2o1*fG + fL)/(c1o1 + densityRatio) + ((eqBCN + eqGN - fL + laplacePressureBC*WEIGTH[fdir]))*(densityRatio/(c1o1 + densityRatio)); - fBC = fL - fLBC + fG; - distribution->setPostCollisionDistributionForDirection(fLBC, x1, x2, x3, - fdir); - ff[D3Q27System::INVDIR[fdir]] = fBC; - //distribution->setDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - - - //distribution->setPostCollisionDistributionForDirection( - // laplacePressureBC * WEIGTH[fdir] + (fBC + fG) / densityRatio + - // ((eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio) - fL), - // x1, x2, x3, fdir); - - - // real vLink = - // -(D3Q27System::DX1[fdir] * (*vxNode)(x1 + D3Q27System::DX1[fdir], - // x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir]) + - // D3Q27System::DX2[fdir] * (*vyNode)(x1 + D3Q27System::DX1[fdir], - // x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir]) + - // D3Q27System::DX3[fdir] * (*vzNode)(x1 + D3Q27System::DX1[fdir], - // x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir])); - // if (vLink>0) { - // - // distribution->setPostCollisionDistributionForDirection( - // laplacePressureBC * WEIGTH[fdir] + (fBC + fG) / densityRatio + - // c1o2 * ((eqBCN + eqGN) * (c1o1 - 2 * c1o1 / densityRatio) - fL) + - // // alternative to antiBB is BB - // c1o2 * (fL - WEIGTH[fdir] * - // (c6o1 * vLink + - // c2o1 * (*rhoNode)(x1 + D3Q27System::DX1[fdir], - // x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir]))) + - // //(-fL*vLink/(c1o1-vLink))+ - // //! BB - - // 0 * (fL - feqOLD) + - // 0 * (c2o1 - collFactorL) * (fL - feqOLD) / (c1o1 - collFactorL), - // x1, x2, x3, fdir); - //} else { - // distribution->setPostCollisionDistributionForDirection( - // laplacePressureBC * WEIGTH[fdir] + (fBC + fG) / densityRatio + - // ((eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio) - fL), - // x1, x2, x3, fdir); - - //} - // real number = 666; - - - - } - - } - else { - ff[D3Q27System::INVDIR[fdir]] = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);; - } - - - } - - real sum2 = 1e-100; - real sumRho = 0; - // real sumVx = 0; - // real sumVy = 0; - // real sumVz = 0; - for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - if ((phi[fdir] > phiLim) && - !bcArray->isSolid(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - x3 + D3Q27System::DX3[fdir])) { - - sumRho += WEIGTH[fdir] * (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);// * tempRho; - // sumVx += WEIGTH[fdir] * (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); - // sumVy += WEIGTH[fdir] * (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); - // sumVz += WEIGTH[fdir] * (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); - sum2 += WEIGTH[fdir]; - } - } - real rhoL; - D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz); - rhoL = sumRho / sum2; - //vx = sumVx / sum2; - //vy = sumVy / sum2; - //vz = sumVz / sum2; - //rhoL = (*rhoNode)(x1, x2, x3)/densityRatio; - - for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - ff[D3Q27System::INVDIR[fdir]] = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - } - - for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - //if (!((phi[fdir] > c1o2) && (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2))) { - if (!((phi[fdir] > phiLim))) { - real vxBC = ((*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real vyBC = ((*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real vzBC = ((*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC); - //real fPEQNeighbor = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir],c0o1 , (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real fPEQNeighborInv = D3Q27System::getIncompFeqForDirection(fdir,c0o1 , (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real vBC = (fPEQNeighborInv - fPEQNeighbor) / WEIGTH[fdir] * c1o6; - //real fPEQHere = D3Q27System::getIncompFeqForDirection(fdir,c0o1 , vx,vy,vz); - //real vBC = (fPEQHere - fPEQNeighbor) / WEIGTH[fdir] * c1o6; - real vDir = (D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + D3Q27System::DX3[fdir] * vz); - //real dvDir = vBC - vDir; - // 27.04.23 - //real vxI = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - //real vyI = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - //real vzI = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - //real vIDir = (D3Q27System::DX1[fdir] * vxI + D3Q27System::DX2[fdir] * vyI + D3Q27System::DX3[fdir] * vzI); - //real dvDir = (vBC - vIDir) * c1o2; - //real dvDir = (vBC - vDir) ; - - - vBC = (vBC + vDir) / (c2o1 + vBC - vDir); - - //// 3.7.23 - // real qq = (c1o2 - (*phaseField)(x1, x2, x3)) / ((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) - (*phaseField)(x1, x2, x3)); - // vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC); - - // //vBC = (qq > c1o2) ? vIDir + (vBC - vIDir) / (c1o1 + qq + (c1o1 / collFactorG - c1o2) / (c1o1 / collFactorL - c1o2) / densityRatio * (c1o1 - qq)) * c3o2 - // // : vBC + (c1o1 / collFactorG - c1o2) / (c1o1 / collFactorL - c1o2) / densityRatio * -c1o2 * (vBC - vIDir) / (c1o1 + qq + (c1o1 / collFactorG - c1o2) / (c1o1 / collFactorL - c1o2) / densityRatio * (c1o1 - qq)); - - //dvDir = (vBC - vIDir) * c2o3; - ///!03.07.2023 - - - //real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vx, vy, vz); - //real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoL, vx, vy, vz); - //ff[D3Q27System::INVDIR[fdir]]=(feqNew - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorL - c1o1)); - //ff[D3Q27System::INVDIR[fdir]] = (feqNew - WEIGTH[fdir] * dvDir * (c1o1 / collFactorL - c1o1)); - //real fGEQ = D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz); - //ff[D3Q27System::INVDIR[fdir]] = (fGEQ - WEIGTH[fdir] * dvDir * (c1o1 / collFactorL - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC); - //real vNG = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC); - //ff[D3Q27System::INVDIR[fdir]] = (fGEQ - WEIGTH[fdir] * dvDir * (c1o1 / collFactorL)) - c6o1 * WEIGTH[fdir] * (vDir) / (c1o1 - vDir + vNG); - // real fG, fBCPseudo; - // if (phi2[fdir] <= phiLim) - // { - - // fG = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - // fBCPseudo = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - // } - //else { - // // 13.07.2023 - // // real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - // //real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), - // // (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), - // // (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // // real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), - // // (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - - // // fBCPseudo = feqNew + (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1); - - - // //unfortunately we have to reconstruct our own populations because they are overwritten by our neighbor. This is realy ugly but doing it the right way would require a completly other code structure. - // //fBCPseudo = -c1o3*WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1) + D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), - // // (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), - // // (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), - // // (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // // fG = -c1o3*WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1) + - // // D3Q27System::getIncompFeqForDirection(fdir, (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), - // // (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // // 16.07.23 attempt to make it at least momentum conserving - // fG = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - // fBCPseudo = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 , x2 , x3 ), - // (*vxNode)(x1 , x2 , x3 ), (*vyNode)(x1 , x2 , x3 ), - // (*vzNode)(x1 , x2 , x3 )) + fG - D3Q27System::getIncompFeqForDirection(fdir, (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), - // (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //} - - //real eqBCN = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), - // (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real eqGN = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), - // (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - - //ff[D3Q27System::INVDIR[fdir]] = (laplacePressure * WEIGTH[fdir] + (fBCPseudo + fG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio))*c1o2 +(fG-fBCPseudo)*c1o2; - //16.07.2023: alternative: In attempt to balance the momentum loss in the generation of new gas nodes the inverse operation is performed here with the liquid phase: - real fG = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoL, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //11.10.2023 correction for BB BC assuming no delay BB - if (bcArray->isSolid(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - x3 + D3Q27System::DX3[fdir])){ - feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 , x2 , x3 ),vx,vy,vz); - feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoL,vx,vy,vz); - - }//!11.10.2023 - - - real fBC = feqNew + - (fG - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1); - - ff[D3Q27System::INVDIR[fdir]] = fBC;//Beware! will be overwritten - - //17.10.2023: recovery of liquid distribution from matching velocities at the interface. - // if ( - //((fdir == dP00) || (fdir == dM00) && (x1==maxX1))|| - // ((fdir == dPP0) || (fdir == dMM0) && ((x1 == maxX1) || (x2 == maxX2)))|| - // ((fdir == d00P) || (fdir == d00M) && (x3 == maxX3)) || - // ((fdir == dP0P) || (fdir == dM0M) && ((x1 == maxX1) || (x3 == maxX3))) || - // ((fdir == d0PP) || (fdir == d0MM) && ((x2 == maxX2) || (x3 == maxX3))) || - // ((fdir == dPPP) || (fdir == dMMM) && ((x1 == maxX1) ||(x2 == maxX2) || (x3 == maxX3))) || - // ((fdir == d0P0) || (fdir == d0M0) && (x2 == maxX2)) || - // ((fdir == dPM0) || (fdir == dMP0) && ((x1 == maxX1) || (x2 == minX2-1))) || - //((fdir == dP0M) || (fdir == dM0P) && ((x1 == maxX1) || (x3 == minX3-1))) || - //((fdir == d0PM) || (fdir == d0MP) && ((x2 == maxX2) || (x3 == minX3-1))) || - //((fdir == dPMM) || (fdir == dMPP) && ((x1 == maxX1) ||(x2 == minX2-1) || (x3 == minX3-1))) || - //((fdir == dPPM) || (fdir == dMMP) && ((x1 == maxX1) ||(x2 == maxX2) || (x3 == minX3-1))) || - //((fdir == dPMP) || (fdir == dMPM) && ((x1 == maxX1) ||(x2 == minX2-1) || (x3 == maxX3)))) - { - - real laplacePressureBC; - if ((x1 > 0) && (x1 < maxX1 + 1) && (x2 > 0) && (x2 < maxX2 + 1) && (x3 > 0) && - (x3 < maxX3 + 1)) { - findNeighbors(phaseField, x1, x2, x3); - laplacePressureBC = c6o1 * c2o1 * computeCurvature_phi() * sigma; - findNeighbors(phaseFieldOld, x1, x2, x3); - } else - laplacePressureBC = laplacePressure; // curv; // reset to the above - - // if (UbMath::isNaN(laplacePressureBC) || UbMath::isInfinity(laplacePressureBC)) { - // laplacePressureBC = laplacePressure; - // } - /* if (phi2[d000] != phi2[fdir]) { - - laplacePressureBC = laplacePressure * - (c1o1 - c2o1 * - (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + - D3Q27System::DX3[fdir])) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * - (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + - D3Q27System::DX3[fdir])) + laplacePressureBC * (-c1o1 + c2o1 * (*phaseField)(x1, - x2, x3)) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + - D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + - D3Q27System::DX3[fdir])); } else*/ - laplacePressureBC = laplacePressure; // Check location for LPressure! - - real fGPseudeBC = - fG + c3o1 * WEIGTH[fdir] * - (((*vxNode)(x1, x2, x3) + (*vxNode)(x1 + D3Q27System::DX1[fdir], - x2 + D3Q27System::DX2[fdir], - x3 + D3Q27System::DX3[fdir])) * - D3Q27System::DX1[fdir] + - ((*vyNode)(x1, x2, x3) + (*vyNode)(x1 + D3Q27System::DX1[fdir], - x2 + D3Q27System::DX2[fdir], - x3 + D3Q27System::DX3[fdir])) * - D3Q27System::DX2[fdir] + - ((*vzNode)(x1, x2, x3) + (*vzNode)(x1 + D3Q27System::DX1[fdir], - x2 + D3Q27System::DX2[fdir], - x3 + D3Q27System::DX3[fdir])) * - D3Q27System::DX3[fdir]); - // distribution->getPostCollisionDistributionForDirection(x1, - // x2, x3, fdir); - if (bcArray->isSolid(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - x3 + D3Q27System::DX3[fdir])){ - fGPseudeBC = - fG + c6o1 * WEIGTH[fdir] * - (((*vxNode)(x1, x2, x3) ) * - D3Q27System::DX1[fdir] + - ((*vyNode)(x1, x2, x3) ) * - D3Q27System::DX2[fdir] + - ((*vzNode)(x1, x2, x3) ) * - D3Q27System::DX3[fdir]); - - - } - - real eqBCN = D3Q27System::getIncompFeqForDirection( - D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1, x2, x3), (*vyNode)(x1, x2, x3), - (*vzNode)(x1, x2, x3)); - real eqGN = D3Q27System::getIncompFeqForDirection( - fdir, 0, (*vxNode)(x1, x2, x3), (*vyNode)(x1, x2, x3), (*vzNode)(x1, x2, x3)); - real fBCL = c1o2 * ((c1o1 - c1o1 / densityRatio) * (eqBCN + eqGN) + - ((fGPseudeBC + fG)) / densityRatio + - (-fGPseudeBC + fG + laplacePressureBC * WEIGTH[fdir])); - ff[D3Q27System::INVDIR[fdir]] = fBCL; - - // neighbor node - - //if ((x1 + D3Q27System::DX1[fdir] > 0) && (x1 + D3Q27System::DX1[fdir] < maxX1 + 1) && - // (x2 + D3Q27System::DX2[fdir] > 0) && (x2 + D3Q27System::DX2[fdir] < maxX2 + 1) && - // (x3 + D3Q27System::DX3[fdir] > 0) && (x3 + D3Q27System::DX3[fdir] < maxX3 + 1)) { - // findNeighbors(phaseField, x1 + D3Q27System::DX1[fdir], - // x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); - // laplacePressureBC = c6o1 * c2o1 * computeCurvature_phi() * sigma; - // findNeighbors(phaseFieldOld, x1, x2, x3); - //} else - // laplacePressureBC = laplacePressure; // curv; // reset to the above - - // if (UbMath::isNaN(laplacePressureBC) || UbMath::isInfinity(laplacePressureBC)) - // { - // laplacePressureBC = laplacePressure; - // } - //if (phi2[d000] != phi2[fdir]) { - - // laplacePressureBC = - // laplacePressure * - // (c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], - // x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir])) / - // (c2o1 * (*phaseField)(x1, x2, x3) - - // c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], - // x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir])) + - // laplacePressureBC * (-c1o1 + c2o1 * (*phaseField)(x1, x2, x3)) / - // (c2o1 * (*phaseField)(x1, x2, x3) - - // c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], - // x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir])); - //} else - // laplacePressureBC = laplacePressure; - - // eqBCN = D3Q27System::getIncompFeqForDirection( - // D3Q27System::INVDIR[fdir], 0, - // (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir]), - // (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir]), - // (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir])); - // eqGN = D3Q27System::getIncompFeqForDirection( - // fdir, 0, - // (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir]), - // (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir]), - // (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - // x3 + D3Q27System::DX3[fdir])); - //real fBCLNeigbor = c1o2 * ((c1o1 - c1o1 / densityRatio) * (eqBCN + eqGN) + - // ((fGPseudeBC + fG)) / densityRatio + - // (fGPseudeBC - fG + laplacePressureBC * WEIGTH[fdir])); - //distribution->setDistributionForDirection(fBCLNeigbor, x1, x2, x3, fdir); - } - //!17.10.2023 - //15.5.23 - //ff[D3Q27System::INVDIR[fdir]] = (fGEQ - WEIGTH[fdir] * dvDir * (c1o1 / collFactorL)) - c6o1 * WEIGTH[fdir] * (vDir); - //real fBC = (distribution->getPostCollisionDistributionForDirection(x1, x2, x3, D3Q27System::INVDIR[fdir]) - c6o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorL - c1o1)) ; - //ff[D3Q27System::INVDIR[fdir]] = (feqNew - c6o1 * WEIGTH[fdir] * dvDir * (collFactorL)/(c3o1-collFactorL)); - //ff[D3Q27System::INVDIR[fdir]] = (ff[D3Q27System::INVDIR[fdir]] - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew; - distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - } - } - real eqRest = D3Q27System::getIncompFeqForDirection(d000, 0, (*vxNode)(x1, x2 , x3 ), - (*vyNode)(x1, x2 , x3 ), (*vzNode)(x1 , x2 , x3 )); - real fRest = distribution->getPostCollisionDistributionForDirection(x1 , x2 , x3 , d000); - distribution->setPostCollisionDistributionForDirection((laplacePressure * WEIGTH[d000] + c2o1*(fRest) / densityRatio + (eqRest) * (c1o1 - c1o1 / densityRatio)) , x1, x2, x3, d000); - - //03.04.2023 alternative initialization of liquid nodes based on FD - //for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // //if (!((phi[fdir] > c1o2) && (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2))) { - // if (!((phi[fdir] > c1o2))) { - // real vxBC = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // real vyBC = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // real vzBC = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // real vBC = (-D3Q27System::DX1[fdir] * vxBC - D3Q27System::DX2[fdir] * vyBC - D3Q27System::DX3[fdir] * vzBC); - // real vDir = (-D3Q27System::DX1[fdir] * vx - D3Q27System::DX2[fdir] * vy - D3Q27System::DX3[fdir] * vz); - // real dvDir = vBC - vDir; - - // //real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vx, vy, vz); - // real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoL, vx, vy, vz); - // ff[D3Q27System::INVDIR[fdir]] = feqNew - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorL - c1o1); - // distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - // } - //} - - //for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // if ((phi[D3Q27System::INVDIR[fdir]] <= c1o2) && (phi[fdir] > c1o2)) { - // //real vxBC = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // //real vyBC = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // //real vzBC = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // //real vBC = -(D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX2[fdir] * vzBC); - // real vDir = -(D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + D3Q27System::DX2[fdir] * vz); - // //vBC = (vBC + vDir) / (c2o1 -( vBC - vDir)); - // //real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) - c6o1 * WEIGTH[fdir] * vDir; - // //real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) + c6o1 * WEIGTH[fdir] * (vx * D3Q27System::DX1[fdir] + vy * D3Q27System::DX2[fdir] + vz * D3Q27System::DX3[fdir]); - // real fL= D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz); - // distribution->setPostCollisionDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); - // ff[fdir] = fL; - // } - // if (!(phi[fdir] > c1o2)) { - // //std::cout << "Eq at dir=" << fdir << "\n"; - // real vxBC = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // real vyBC = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // real vzBC = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // real feqL = D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz); - // distribution->setPostCollisionDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); - // ff[fdir] = feqL; - // } - //} - //real sumRho2= 0; - //for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // sumRho2 += ff[fdir];// -D3Q27System::getIncompFeqForDirection(fdir, 0, sumVx, sumVy, sumVz); - //} - //ff[d000] = rhoL - sumRho2; - //rhoL = 27.0 / 18.0 * sumRho2; - //std::cout << "rhoL=" << rhoL <<" sumRho="<< 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "\n"; - //D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz); - //std::cout << "RecalCrhoL=" << rhoL << " sumRho=" << 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "ffRest="<<ff[d000]<<"\n"; -// distribution->setPostCollisionDistributionForDirection(ff[d000], x1, x2, x3, d000); - //{ - // real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, d000); - // real feqOLD = D3Q27System::getIncompFeqForDirection(d000, (*rhoNode)(x1, x2, x3), vx, vy, vz); - // real feqNew = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz); - // distribution->setPostCollisionDistributionForDirection(fG - feqOLD + feqNew, x1, x2, x3, d000); - //} - //ff[d000] = vx * vx + vy * vy + vz * vz + - // (((ff[dMM0] + ff[dPP0]) + (ff[dMP0] + ff[dPM0])) + ((ff[d0MM] + ff[d0PP]) + (ff[d0MP] + ff[d0PM])) + ((ff[dM0M] + ff[dP0P]) + (ff[dM0P] + ff[dP0M])) + - // c2o1 * ((((ff[dMMM] + ff[dPPP]) + (ff[dMMP] + ff[dPPM]))) + (((ff[dMPM] + ff[dPMP]) + (ff[dMPP] + ff[dPMM]))))); - //distribution->setPostCollisionDistributionForDirection(ff[d000], x1, x2, x3, d000); - - //for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // ff[D3Q27System::INVDIR[fdir]]=distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - //} - //D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz); - //std::cout << "AfterRead rhoL=" << rhoL << " rhoGToL=" << rhoG/densityRatio << " vx=" << vx << " vy=" << vy << "ffRest=" << ff[d000] <<" x="<<x1<<" y="<<x2<<" z="<<x3<< "\n"; - - //real feqL = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz); - //distribution->setPostCollisionDistributionForDirection(feqL, x1, x2, x3, d000); - - - - } - - - - } - - - //if ((*phaseField)(x1, x2, x3) <= c1o2) { - // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // - // real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, 0, 0.0001, 0); - // ff[D3Q27System::INVDIR[fdir]] = feqNew; - // distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - // } - //} - //16.03.23 B: Bounce Back gas side - //distribution->getDistributionInv(ff, x1, x2, x3); - //real rhoG; - //if (phi[d000] > c1o2) { //initialization necessary - // real sumRho = 0; - // real sumWeight = 0; - // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // if ((phi[fdir] <= c1o2)) { - // sumRho += WEIGTH[fdir] * (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); - // sumWeight += WEIGTH[fdir]; - // } - - // } - // rhoG = sumRho / sumWeight;// uncheck excpetion: what if there is no adequate neigbor? - // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // if ((phi[fdir] > c1o2)) { - // real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real vzBC = c1o2 * (vz + (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - // real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - // real fBC = fG - c6o1 * WEIGTH[fdir] * (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX2[fdir] * vzBC); - - // distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - - // } - // } - // distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1, x2, x3, d000); - - - - //} - //else {//no refill of gas required - // rhoG = (*rhoNode)(x1, x2, x3); - // if ((*phaseField)(x1, x2, x3) <= c1o2) {//no refill liquid - // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // if ((phi[fdir] > c1o2)) { - // real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real vzBC = c1o2 * (vz + (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - // real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - // real fBC = fG - c6o1 * WEIGTH[fdir] * (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX2[fdir] * vzBC); - - // //if ((*phaseField)(x1, x2, x3) <= c1o2) - // distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - // if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) { - // //real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // //real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // //real vzBC = c1o2 * (vz + (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // //real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); - // real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - // real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - // //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - - // distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio - fL - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - // } - - // } - - - // } - // } - // else {//refill liquid - - // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // if ((phi[fdir] > c1o2)) { - // real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real vzBC = c1o2 * (vz + (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - // real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - // real fBC = fG-c6o1*WEIGTH[fdir]*(D3Q27System::DX1[fdir]*vxBC+ D3Q27System::DX2[fdir] * vyBC+ D3Q27System::DX2[fdir] * vzBC); - - // ff[D3Q27System::INVDIR[fdir]] = fBC; - // if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) { - // //real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); - // real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - // real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - // //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - - // distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio - fL - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - // } - - // } - // else { - // ff[D3Q27System::INVDIR[fdir]] = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);; - // } - - - // } - - // real sum2 = 1e-100; - // real sumRho = 0; - // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // if ((phi[fdir] > c1o2)) { - - // sumRho += WEIGTH[fdir] * (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);// * tempRho; - // sum2 += WEIGTH[fdir]; - // } - // } - // real rhoL; - // D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz); - // rhoL = sumRho / sum2; - - - // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // if ((phi[D3Q27System::INVDIR[fdir]] <= c1o2) && (phi[fdir] > c1o2)) { - // real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) + c6o1 * WEIGTH[fdir] * (vx * D3Q27System::DX1[fdir] + vy * D3Q27System::DX2[fdir] + vz * D3Q27System::DX3[fdir]);; - // distribution->setPostCollisionDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); - // } - // if ((phi[D3Q27System::INVDIR[fdir]] <= c1o2) && (phi[fdir] <= c1o2)) { - // real feqL = D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz); - // distribution->setPostCollisionDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); - // } - // } - - // real feqL = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz); - // distribution->setPostCollisionDistributionForDirection(feqL, x1, x2, x3, d000); - - - - // } - - - - //} - - - - - //16.03.23 A: scaled pressure - //distribution->getDistributionInv(ff, x1, x2, x3); - //real rhoG; - //if (phi[d000] > c1o2) { //initialization necessary - // real sumRho = 0; - // real sumWeight = 0; - // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // if ((phi[fdir] <= c1o2)) { - // sumRho += WEIGTH[fdir] * (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); - // sumWeight += WEIGTH[fdir]; - // } - - // } - // rhoG = sumRho / sumWeight;// uncheck excpetion: what if there is no adequate neigbor? - // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // if ((phi[fdir] > c1o2)) { - // real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - // real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew; - - // distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - - // } - // } - // distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1, x2, x3, d000); - - - - //} - //else {//no refill of gas required - // rhoG = (*rhoNode)(x1, x2, x3); - // if ((*phaseField)(x1, x2, x3) <= c1o2) {//no refill liquid - // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // if ((phi[fdir] > c1o2)) { - // real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - // real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - // real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew; - - // //if ((*phaseField)(x1, x2, x3) <= c1o2) - // distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - // if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) { - // real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real vzBC = c1o2 * (vz + (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // //real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); - // real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - // real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - // //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - - // distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio - fL - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - // } - - // } - - - // } - // } - // else {//refill liquid - - // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // if ((phi[fdir] > c1o2)) { - // real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - // real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - // real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew; - - // ff[D3Q27System::INVDIR[fdir]] = fBC; - // if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) { - // real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real vzBC = c1o2 * (vz + (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // //real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); - // real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - // real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - // //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - - // distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio - fL - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - // } - - // } - // else { - // ff[D3Q27System::INVDIR[fdir]] = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);; - // } - - - // } - - // real sum2 = 1e-100; - // real sumRho = 0; - // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // if ((phi[fdir] > c1o2)) { - // - // sumRho += WEIGTH[fdir] * (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);// * tempRho; - // sum2 += WEIGTH[fdir]; - // } - // } - // real rhoL; - // D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz); - // rhoL=sumRho/sum2; - - - // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // if ((phi[D3Q27System::INVDIR[fdir]] <= c1o2) && (phi[fdir] > c1o2)) { - // real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) + c6o1 * WEIGTH[fdir] * (vx * D3Q27System::DX1[fdir] + vy * D3Q27System::DX2[fdir] + vz * D3Q27System::DX3[fdir]);; - // distribution->setPostCollisionDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); - // } - // if ((phi[D3Q27System::INVDIR[fdir]] <= c1o2) && (phi[fdir] <= c1o2)) { - // real feqL = D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz); - // distribution->setPostCollisionDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); - // } - // } - - // real feqL = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz); - // distribution->setPostCollisionDistributionForDirection(feqL, x1 , x2, x3 , d000); - - - - // } - - - - //} - - - - - - - - - - - -}//end Loop - - - - - - //for (int x3 = minX3-1; x3 < maxX3+1; x3++) { - // for (int x2 = minX2-1; x2 < maxX2+1; x2++) { - // for (int x1 = minX1-1; x1 < maxX1+1; x1++) { - // if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { - // int x1p = x1 + 1; - // int x2p = x2 + 1; - // int x3p = x3 + 1; - // findNeighbors(phaseFieldOld, x1, x2, x3); - // ////////////////////////////////Momentum conservation experiment 06.03.2023 - // //surfacetension - // real kapkap = 0*1.0e-5; - // //real scalRefill = 0.0; - // real slowerFactor = 1.0e6; - // if (((*phaseField)(x1, x2, x3) <= c1o2) && ( - // (phi[dP00] > c1o2) || - // (phi[dM00] > c1o2) || - // (phi[d00P] > c1o2) || - // (phi[d00M] > c1o2) || - // (phi[d0M0] > c1o2) || - // (phi[d0P0] > c1o2) || - // (phi[dPP0] > c1o2) || - // (phi[dPM0] > c1o2) || - // (phi[dP0P] > c1o2) || - // (phi[dP0M] > c1o2) || - // (phi[dMP0] > c1o2) || - // (phi[dMM0] > c1o2) || - // (phi[dM0P] > c1o2) || - // (phi[dM0M] > c1o2) || - // (phi[d0PM] > c1o2) || - // (phi[d0MM] > c1o2) || - // (phi[d0PP] > c1o2) || - // (phi[d0MP] > c1o2) || - // (phi[dPPP] > c1o2) || - // (phi[dPMP] > c1o2) || - // (phi[dMPP] > c1o2) || - // (phi[dMMP] > c1o2) || - // (phi[dPPM] > c1o2) || - // (phi[dPMM] > c1o2) || - // (phi[dMPM] > c1o2) || - // (phi[dMMM] > c1o2) - // )) { - // real vx = (*vxNode)(x1, x2, x3); - // real vy = (*vyNode)(x1, x2, x3); - // real vz = (*vzNode)(x1, x2, x3); - - - // distribution->getDistributionInv(ff, x1, x2, x3); - // real rhoG; - // if (phi[d000] > c1o2) { //initialization necessary - // real sumRho = 0; - // real sumWeight = 0; - // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // if ((phi[fdir] <= c1o2)) { - // sumRho += WEIGTH[fdir] * (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); - // sumWeight += WEIGTH[fdir]; - // } - - // } - // rhoG = sumRho / sumWeight;// uncheck excpetion: what if there is no adequate neigbor? - // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // if ((phi[fdir] > c1o2)) { - // real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - // real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew; - - // distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - - // } - // } - // distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1, x2, x3, d000); - - - - // } - // else {//no refill required - - // rhoG = (*rhoNode)(x1, x2, x3); - // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // if ((phi[fdir] > c1o2)) { - // real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - // real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - // real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew; - - // distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - // if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) { - // real vxBC =c1o2*(vx+ (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real vyBC =c1o2*(vy+ (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real vzBC =c1o2*(vz+ (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // //real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); - // real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])*(D3Q27System::DX1[fdir])* (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - // real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - // //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - - // distribution->setPostCollisionDistributionForDirection((fBC+fG) / densityRatio-fL+kapkap* WEIGTH[fdir]* computeCurvature_phi() -(feqG-feqL)*(c1o1/densityRatio-c1o1)*(vxBC* D3Q27System::DX1[fdir]+vyBC* D3Q27System::DX2[fdir]+vzBC* D3Q27System::DX3[fdir]), x1 , x2 , x3 , fdir); - // } - - // } - // else { - // if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) { - - // real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - // real feqOLD = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy,vz); - // real slower = c1o1/(c1o1+slowerFactor * (vx * vx + vy * vy + vz * vz)); - // real feqNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG / densityRatio, slower * vx, slower * vy, slower * vz); - // real fBC = (fG - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew; - - // distribution->setPostCollisionDistributionForDirection(fBC, x1, x2 , x3 , fdir); - - // ////inverse refill from here - // //int xn1 = x1 + D3Q27System::DX1[fdir]; - // //int xn2 = x2 + D3Q27System::DX2[fdir]; - // //int xn3 = x3 + D3Q27System::DX3[fdir]; - // //real sumRho = 0; - // //real sumWeight = 0; - // //for (int nfdir = D3Q27System::STARTF; nfdir < D3Q27System::ENDF; nfdir++) { - // // if ((phi[nfdir] > c1o2)) { - // // sumRho += WEIGTH[nfdir] * (*rhoNode)(xn1 + D3Q27System::DX1[nfdir], xn2 + D3Q27System::DX2[nfdir], xn3 + D3Q27System::DX3[nfdir]); - // // sumWeight += WEIGTH[nfdir]; - // // } - // //} - // ////real rhoL = sumRho / sumWeight;// uncheck excpetion: what if there is no adequate neigbor? - // //real rhoL = c1o2*(sumRho / sumWeight * scalRefill + (c1o1 - scalRefill) * rhoG / densityRatio);// - - // //// what comes next is the inversion of BC for the gas phase which is only used to derive the liquid BC - // //real fBC = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - // ////real feqOld = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoL, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // ////Dirty - // //real feqOld = D3Q27System::getIncompFeqForDirection(fdir, rhoL, -(*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), -(*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), -(*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - - // //real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // //real fL = (fBC - feqNew) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqOld; - - - // //real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - // //real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // //real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // //real vzBC = c1o2 * (vz + (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // ////real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // ////real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); - // //real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - // //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - // ////real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - // //distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio - fL + kapkap * WEIGTH[fdir] * computeCurvature_phi() - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - // ////distribution->setPostCollisionDistributionForDirection(( fG) / densityRatio - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - // - // - // } - // } - // - // } - - // } - - - - - - - // - - // - // - // } - // if (((*phaseField)(x1, x2, x3) > c1o2) && ((*phaseFieldOld)(x1, x2, x3) <= c1o2)) { - // real vx = (*vxNode)(x1, x2, x3); - // real vy = (*vyNode)(x1, x2, x3); - // real vz = (*vzNode)(x1, x2, x3); - // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) { - // real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - // real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real vzBC = c1o2 * (vz + (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // //real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); - // real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - // real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - - // if (((*phaseFieldOld)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) <= c1o2) { - // real rhoG = (*rhoNode)(x1, x2, x3); - // real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - // real feqOLD = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz); - // real slower = c1o1 / (c1o1 + slowerFactor * (vx * vx + vy * vy + vz * vz)); - // real feqNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG / densityRatio, slower*vx, slower*vy, slower*vz); - // real fBC = (fG - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew; - - // distribution->setPostCollisionDistributionForDirection(fBC, x1, x2, x3, fdir); - - // /////reverse liquid - // //int xn1 = x1 + D3Q27System::DX1[fdir]; - // //int xn2 = x2 + D3Q27System::DX2[fdir]; - // //int xn3 = x3 + D3Q27System::DX3[fdir]; - // //real sumRho = 0; - // //real sumWeight = 0; - // //for (int nfdir = D3Q27System::STARTF; nfdir < D3Q27System::ENDF; nfdir++) { - // // if ((phi[nfdir] > c1o2)) { - // // sumRho += WEIGTH[nfdir] * (*rhoNode)(xn1 + D3Q27System::DX1[nfdir], xn2 + D3Q27System::DX2[nfdir], xn3 + D3Q27System::DX3[nfdir]); - // // sumWeight += WEIGTH[nfdir]; - // // } - // //} - // ////real rhoL = sumRho / sumWeight;// uncheck excpetion: what if there is no adequate neigbor? - // //real rhoL = (sumRho / sumWeight*scalRefill+(c1o1-scalRefill)*(*rhoNode)(x1, x2, x3) / densityRatio);// - // //// what comes next is the inversion of BC for the gas phase which is only used to derive the liquid BC - // //real fBC = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - // ////real feqOld = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoL, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // ////Dirty - // //real feqOld = D3Q27System::getIncompFeqForDirection(fdir, rhoL, -(*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), -(*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), -(*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - - // //real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1, x2, x3), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // //real fL = (fBC - feqNew) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqOld; - - - // //real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - // //real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // //real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // //real vzBC = c1o2 * (vz + (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // ////real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // ////real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); - // //real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - // //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - // ////real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - - // //distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio - fL + kapkap * WEIGTH[fdir] * computeCurvature_phi() - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - - // /////!reverse liquid - // // - // ////distribution->setPostCollisionDistributionForDirection((fG) / densityRatio - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - // } - // else { - // real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - // real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1, x2, x3), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - // real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew; - // distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio - fL + kapkap * WEIGTH[fdir] * computeCurvature_phi() - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - // } - // } - // - // } - - - - // } - - - - - - ////////////////////////////////////// - -// //if ((phi[d000] > c1o2) && ( -// // (phi[dP00] <= c1o2) || -// // (phi[dM00] <= c1o2) || -// // (phi[d00P] <= c1o2) || -// // (phi[d00M] <= c1o2) || -// // (phi[d0M0] <= c1o2) || -// // (phi[d0P0] <= c1o2) || -// // (phi[dPP0] <= c1o2) || -// // (phi[dPM0] <= c1o2) || -// // (phi[dP0P] <= c1o2) || -// // (phi[dP0M] <= c1o2) || -// // (phi[dMP0] <= c1o2) || -// // (phi[dMM0] <= c1o2) || -// // (phi[dM0P] <= c1o2) || -// // (phi[dM0M] <= c1o2) || -// // (phi[d0PM] <= c1o2) || -// // (phi[d0MM] <= c1o2) || -// // (phi[d0PP] <= c1o2) || -// // (phi[d0MP] <= c1o2) || -// // (phi[dPPP] <= c1o2) || -// // (phi[dPMP] <= c1o2) || -// // (phi[dMPP] <= c1o2) || -// // (phi[dMMP] <= c1o2) || -// // (phi[dPPM] <= c1o2) || -// // (phi[dPMM] <= c1o2) || -// // (phi[dMPM] <= c1o2) || -// // (phi[dMMM] <= c1o2) -// // )) { -// -// // real vx = (*vxNode)(x1, x2, x3); -// // real vy = (*vyNode)(x1, x2, x3); -// // real vz = (*vzNode)(x1, x2, x3); -// -// -// // distribution->getDistributionInv(ff, x1, x2, x3); -// // real rhoG; -// // //D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz); -// // real sumRhoG = 0.0; -// // int countRhoG = 0; -// // for (int fdir = D3Q27System::STARTF; fdir <= D3Q27System::ENDF; fdir++) { -// // if ((phi[fdir] <= c1o2)) { -// // //BC version -// // // rhoG = (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); -// // //real ftemp = D3Q27System::getCompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vx, vy, vz) + D3Q27System::getCompFeqForDirection(fdir, rhoG, vx, vy, vz); -// // // -// // //real fBB; -// // //fBB = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); -// // //distribution->setPostCollisionDistributionForDirection((ftemp - ff[fdir]), x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); -// // //distribution->setPostCollisionDistributionForDirection(fBB - c6o1 * D3Q27System::WEIGTH[fdir] * (-vx * D3Q27System::DX1[fdir] - vy * D3Q27System::DX2[fdir] - vz * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); -// // //scaled Version -// -// // real fG; -// // fG = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); -// -// // //Liquid -// // real ssrho = 1; -// // real rhoLL = (*rhoNode)(x1, x2, x3); -// -// // //real rhoFilter = (*rhoNode)(x1, x2, x3)*c8o27 -// // // + c2o27*(((*rhoNode)(x1 + 1, x2, x3) + (*rhoNode)(x1 - 1, x2, x3)) + ((*rhoNode)(x1, x2 + 1, x3) + (*rhoNode)(x1, x2 - 1, x3)) + ((*rhoNode)(x1, x2, x3 + 1) + (*rhoNode)(x1, x2, x3 - 1))) -// // // + c1o54*((((*rhoNode)(x1 + 1, x2 + 1, x3) + (*rhoNode)(x1 - 1, x2 - 1, x3)) + ((*rhoNode)(x1 - 1, x2 + 1, x3) + (*rhoNode)(x1 + 1, x2 - 1, x3))) -// // // + (((*rhoNode)(x1 + 1, x2, x3 + 1) + (*rhoNode)(x1 - 1, x2, x3 - 1)) + ((*rhoNode)(x1 - 1, x2, x3 + 1) + (*rhoNode)(x1 + 1, x2, x3 - 1))) -// // // + (((*rhoNode)(x1, x2 + 1, x3 + 1) + (*rhoNode)(x1, x2 - 1, x3 - 1)) + ((*rhoNode)(x1, x2 - 1, x3 + 1) + (*rhoNode)(x1, x2 + 1, x3 - 1))) -// // // ) -// // // + c1o216*( -// // // (((*rhoNode)(x1 + 1, x2 + 1, x3 + 1) + (*rhoNode)(x1 - 1, x2 - 1, x3 - 1)) + ((*rhoNode)(x1 + 1, x2 - 1, x3 + 1) + (*rhoNode)(x1 - 1, x2 + 1, x3 - 1))) -// // // + (((*rhoNode)(x1 + 1, x2 + 1, x3 - 1) + (*rhoNode)(x1 - 1, x2 - 1, x3 + 1)) + ((*rhoNode)(x1 + 1, x2 - 1, x3 - 1) + (*rhoNode)(x1 - 1, x2 + 1, x3 + 1))) -// // // ); -// // real rhoGG = (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); -// // real feqOLD = (D3Q27System::getIncompFeqForDirection(fdir, rhoLL/densityRatio, vx, vy, vz)); -// // real feqNew = (D3Q27System::getIncompFeqForDirection(fdir, rhoLL*(c1o1-ssrho)+ssrho*rhoGG, vx, vy, vz)); -// // //real feqNew = (D3Q27System::getIncompFeqForDirection(fdir, rhoFilter, vx, vy, vz)); -// // distribution->setPostCollisionDistributionForDirection( (ff[fdir] - feqOLD)*(c1o1/collFactorG-c1o1)/(c1o1/collFactorL-c1o1) + feqNew, x1, x2, x3, fdir); -// -// // feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); -// // feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) / densityRatio, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); -// // distribution->setPostCollisionDistributionForDirection((fG - feqOLD)* (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); -// // sumRhoG += (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); -// // countRhoG++; -// -// -// // } -// // } -// // (*rhoNode)(x1, x2, x3) = sumRhoG / countRhoG; -// -// if ((phi[d000] > c1o2) && ( -// (phi[dP00] <= c1o2) || -// (phi[dM00] <= c1o2) || -// (phi[d00P] <= c1o2) || -// (phi[d00M] <= c1o2) || -// (phi[d0M0] <= c1o2) || -// (phi[d0P0] <= c1o2) || -// (phi[dPP0] <= c1o2) || -// (phi[dPM0] <= c1o2) || -// (phi[dP0P] <= c1o2) || -// (phi[dP0M] <= c1o2) || -// (phi[dMP0] <= c1o2) || -// (phi[dMM0] <= c1o2) || -// (phi[dM0P] <= c1o2) || -// (phi[dM0M] <= c1o2) || -// (phi[d0PM] <= c1o2) || -// (phi[d0MM] <= c1o2) || -// (phi[d0PP] <= c1o2) || -// (phi[d0MP] <= c1o2) || -// (phi[dPPP] <= c1o2) || -// (phi[dPMP] <= c1o2) || -// (phi[dMPP] <= c1o2) || -// (phi[dMMP] <= c1o2) || -// (phi[dPPM] <= c1o2) || -// (phi[dPMM] <= c1o2) || -// (phi[dMPM] <= c1o2) || -// (phi[dMMM] <= c1o2) -// )) { -// real vx = (*vxNode)(x1, x2, x3); -// real vy = (*vyNode)(x1, x2, x3); -// real vz = (*vzNode)(x1, x2, x3); -// -// -// //distribution->getDistributionInv(ff, x1, x2, x3); -// -// if ((*phaseField)(x1, x2, x3) > c1o2) { -// -// for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {// populations without d000 -// if ((phi[fdir] <= c1o2)) { -// real fG = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); -// real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); -// real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) / densityRatio, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); -// distribution->setPostCollisionDistributionForDirection((fG - feqOLD)* (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); -// -// } -// } -// -// -// } -// else { -// //refill necessary -// real sumRho = 0; -// real sumWeight = 0; -// for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { -// if ((phi[fdir] > c1o2)) { -// sumRho += WEIGTH[fdir]*(*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); -// sumWeight += WEIGTH[fdir]; -// } -// } -// sumRho /= sumWeight; -// -// for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { -// if ((phi[fdir] > c1o2)) { -// real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); -// real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); -// real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], sumRho, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); -// ff[D3Q27System::INVDIR[fdir]] = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew; -// } -// else { ff[D3Q27System::INVDIR[fdir]] = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); -// } -// } -// -// real rhoG; -// D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz); -// sumRho = 0; -// for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { -// sumRho = ff[fdir] - D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); -// } -// rhoG = 27.0 / 19.0 * sumRho; -// distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1 , x2 , x3 , d000); -// for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { -// //if ((phi[fdir] > c1o2)) { -// distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); -// //} -// } -// -// -// } -// -// -// } -// else if ((phi[d000] <= c1o2) && ( -// (phi[dP00] > c1o2) || -// (phi[dM00] > c1o2) || -// (phi[d00P] > c1o2) || -// (phi[d00M] > c1o2) || -// (phi[d0M0] > c1o2) || -// (phi[d0P0] > c1o2) || -// (phi[dPP0] > c1o2) || -// (phi[dPM0] > c1o2) || -// (phi[dP0P] > c1o2) || -// (phi[dP0M] > c1o2) || -// (phi[dMP0] > c1o2) || -// (phi[dMM0] > c1o2) || -// (phi[dM0P] > c1o2) || -// (phi[dM0M] > c1o2) || -// (phi[d0PM] > c1o2) || -// (phi[d0MM] > c1o2) || -// (phi[d0PP] > c1o2) || -// (phi[d0MP] > c1o2) || -// (phi[dPPP] > c1o2) || -// (phi[dPMP] > c1o2) || -// (phi[dMPP] > c1o2) || -// (phi[dMMP] > c1o2) || -// (phi[dPPM] > c1o2) || -// (phi[dPMM] > c1o2) || -// (phi[dMPM] > c1o2) || -// (phi[dMMM] > c1o2) -// )) { -// real vx = (*vxNode)(x1, x2, x3); -// real vy = (*vyNode)(x1, x2, x3); -// real vz = (*vzNode)(x1, x2, x3); -// -// -// //distribution->getDistributionInv(ff, x1, x2, x3); -// if ((*phaseField)(x1, x2, x3) <= c1o2) { -// ////explicit way: -// ////real ppph = (*phaseField)(x1, x2, x3); -// // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { -// // if ((phi[fdir] > c1o2)) { -// // //vx = (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); -// // //vy = (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); -// // //vz = (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); -// // //real rhorho = (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); -// // //int xx1 = x1 + D3Q27System::DX1[fdir]; -// // //int xx2 = x2 + D3Q27System::DX2[fdir]; -// // //int xx3 = x3 + D3Q27System::DX3[fdir]; -// -// // real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); -// // real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); -// // real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 , x2 , x3 ), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); -// // distribution->setPostCollisionDistributionForDirection((fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); -// // } -// // } -///////iterative way: -// real rhoG = (*rhoNode)(x1, x2, x3); -// //real sumWeight=0; -// //for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { -// // if ((phi[fdir] > c1o2)) { -// // rhoG += WEIGTH[fdir] * (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); -// // sumWeight += WEIGTH[fdir]; -// // } -// //} -// //rhoG = rhoG/sumWeight*densityRatio; -// -// for (int itter = 0; itter < 5; itter++) { -// for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { -// if ((phi[fdir] > c1o2)) { -// real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); -// real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); -// real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); -// ff[D3Q27System::INVDIR[fdir]] = ((fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew); -// } -// else { ff[D3Q27System::INVDIR[fdir]] = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); } -// } -// ff[d000]= distribution->getPostCollisionDistributionForDirection(x1, x2, x3, d000); -// D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz); -// //real sumRho = 0; -// //for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { -// // sumRho = ff[fdir] - D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); -// //} -// //rhoG = 27.0 / 19.0 * sumRho; -// } -// for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { -// -// distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); -// -// } -// //distribution->setPostCollisionDistributionForDirection(ff[d000], x1, x2, x3, d000); -// -// -// -// -// } -// else { -// for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { -// if ((phi[fdir] <= c1o2)) { -// real fG = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); -// real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); -// real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) / densityRatio, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); -// ff[D3Q27System::INVDIR[fdir]] = (fG - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew; -// distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); -// } -// else { ff[D3Q27System::INVDIR[fdir]] = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);} -// } -// real rhoG; -// D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz); -// real sumRho = 0; -// for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { -// sumRho = ff[fdir] - D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); -// } -// rhoG = 27.0 / 19.0 * sumRho; -// distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1, x2, x3, d000); -// -// -// -// } -// -// } -// -// - } - } - } - } - - - - this->swapDistributions(); - -// for (int x3 = minX3; x3 < maxX3; x3++) { -// for (int x2 = minX2; x2 < maxX2; x2++) { -// for (int x1 = minX1; x1 < maxX1; x1++) { - -// int x1p = x1 + 1; -// int x2p = x2 + 1; -// int x3p = x3 + 1; -// findNeighbors(phaseFieldOld, x1, x2, x3); - -// //if (((*phaseField)(x1, x2, x3) > c1o2) && (((*phaseFieldOld)(x1, x2, x3) <= c1o2))) -// {//Refill liquid -// real vx; -// real vy; -// real vz; - - -// distribution->getDistribution(ff, x1, x2, x3); -// real rhoL; -// D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz); -// //if (vz != 0) { - -// // std::cout << "precol: rhoL=" << rhoL << " vx=" << vx << " vy=" << vy << " vz=" << vz << "ffRest=" << ff[d000] << " x=" << x1 << " y=" << x2 << " z=" << x3 << "\n"; -// //} -// } - -// } -// } -// } - - - - ////////momentum balance 06.03.2023 - //for (int x3 = minX3 - ghostLayerWidth; x3 < maxX3 + ghostLayerWidth; x3++) { - // for (int x2 = minX2 - ghostLayerWidth; x2 < maxX2 + ghostLayerWidth; x2++) { - // for (int x1 = minX1 - ghostLayerWidth; x1 < maxX1 + ghostLayerWidth; x1++) { - // if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { - // int x1p = x1 + 1; - // int x2p = x2 + 1; - // int x3p = x3 + 1; - // if (((*phaseField)(x1, x2, x3) > c1o2) && (((*phaseFieldOld)(x1, x2, x3) <= c1o2))) - // {//Refill liquid - // real vx; - // real vy; - // real vz; - - - // distribution->getDistribution(ff, x1, x2, x3); - // real rhoL; - // D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz); - // std::cout << "precol: rhoL=" << rhoL << " vx=" << vx << " vy=" << vy << "ffRest=" << ff[d000] << " x=" << x1 << " y=" << x2 << " z=" << x3 << "\n"; - // } - // } - // } - // } - //} - - - // real sumRho = 0; - // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // sumRho = ff[fdir] - D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); - // } - // rhoL = 27.0 / 19.0 * sumRho; - // distribution->setPreCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz), x1, x2, x3, d000); - - - // } - // } - // } - // } - //} - - - //////rescaling new liquid nodes 10.03.2023 -// 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; -// if (((*phaseField)(x1, x2, x3) > c1o2) && (((*phaseFieldOld)(x1, x2, x3) <= c1o2))) -// {//Refill liquid -// real vx; -// real vy; -// real vz; -// -// findNeighbors(phaseFieldOld, x1, x2, x3); -// -// //real rhoG; -// //D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz); -// -// //vx = (*vxNode)(x1, x2, x3); -// //vy = (*vyNode)(x1, x2, x3); -// //vz = (*vzNode)(x1, x2, x3); -// -// -// //for (int fdir = D3Q27System::STARTF; fdir <= D3Q27System::ENDF; fdir++) {// loop includes d000 position, different from all the others -// // real feqOLD = D3Q27System::getIncompFeqForDirection(fdir, rhoG,vx,vy,vz); -// // real feqNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG/densityRatio,vx,vy,vz); -// // real fBC = (ff[fdir] - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew; -// -// // distribution->setPreCollisionDistributionForDirection(fBC, x1 , x2 , x3 ,fdir); -// -// -// -// //} -////15.03.2023 -// real sumVx=0, sumVy=0, sumVz=0; -// real tempRho, tempVx, tempVy, tempVz; -// real sumRho = 0; -// real sum = 1e-100; -// real sum2 = 1e-100; -// for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { -// if (!(((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) > c1o2) && (((*phaseFieldOld)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) <= c1o2)))&& !bcArray->isSolid(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) && !bcArray->isUndefined(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) { -// //distribution->getDistribution(ff, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); -// //D3Q27System::calcIncompMacroscopicValues(ff, tempRho, tempVx, tempVy, tempVz); -// sum += WEIGTH[fdir]; -// sumVx += WEIGTH[fdir] * (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);//*tempVx; -// sumVy += WEIGTH[fdir] * (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);//*tempVy; -// sumVz += WEIGTH[fdir] * (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);//*tempVz; -// if ((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) > c1o2) { -// sumRho += WEIGTH[fdir] * (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);// * tempRho; -// sum2 += WEIGTH[fdir]; -// } -// if (tempVz != 0) { -// std::cout << "vz=" << tempVz << " " << "x=" << x1 << " " << "y=" << x2 << " " << "z=" << x3 << " fdir=" << fdir << " " << "xn=" << x1 + D3Q27System::DX1[fdir] << " " << "yn=" << x2 + D3Q27System::DX2[fdir] << " " << "zn=" << x3 + D3Q27System::DX3[fdir]<<"vzold="<< (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) << "\n"; -// } -// } -// } -// sumRho/=sum2 ; -// sumVx /= sum; -// sumVy /= sum; -// sumVz /= sum; -// distribution->setPreCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, sumRho, sumVx, sumVy, sumVz), x1, x2, x3, d000); -// -// std::cout << "x=" << x1 << " " << "y=" << x2 << " " << "z=" << x3 <<" sumVx="<<sumVx<< " sumVy=" << sumVy << " sumVz=" << sumVz << " sumRho=" << sumRho << "\n"; -// -////14.03.2023 -// distribution->getDistribution(ff, x1, x2, x3); -// real rhoG= (*rhoNode)(x1, x2, x3); -// -// vx = (*vxNode)(x1, x2, x3); -// vy = (*vyNode)(x1, x2, x3); -// vz = (*vzNode)(x1, x2, x3); -// std::cout << " Vx=" << vx << " Vy=" << vy << " Vz=" << vz << " rhoL=" << (*rhoNode)(x1, x2, x3) / densityRatio << "\n"; -// -// for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { -// if (phi[D3Q27System::INVDIR[fdir]] <= c1o2 && phi[fdir] > c1o2) { -// //ff[fdir] = ff[D3Q27System::INVDIR[fdir]] + c6o1 * WEIGTH[fdir] * (vx * D3Q27System::DX1[fdir] + vy * D3Q27System::DX2[fdir] + vz * D3Q27System::DX3[fdir]); -// ff[fdir] = ff[D3Q27System::INVDIR[fdir]] + c6o1 * WEIGTH[fdir] * (sumVx * D3Q27System::DX1[fdir] + sumVy * D3Q27System::DX2[fdir] + sumVz * D3Q27System::DX3[fdir]); -// //ff[fdir] = D3Q27System::getIncompFeqForDirection(fdir, sumRho, sumVx, sumVy, sumVz); -// distribution->setPreCollisionDistributionForDirection(ff[fdir], x1, x2, x3, fdir); -// } -// if (phi[fdir] <= c1o2 && phi[D3Q27System::INVDIR[fdir]] <= c1o2) { -// //ff[fdir] = D3Q27System::getIncompFeqForDirection(fdir, rhoG / densityRatio, vx, vy, vz); -// ff[fdir]= D3Q27System::getIncompFeqForDirection(fdir, sumRho, sumVx, sumVy, sumVz); -// distribution->setPreCollisionDistributionForDirection(ff[fdir], x1, x2, x3, fdir); -// } -// } -// real rhoL; -// //D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz); -// -// -// //real sumRho; -// real sumRho2= 0; -// for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { -// sumRho2 += ff[fdir];// -D3Q27System::getIncompFeqForDirection(fdir, 0, sumVx, sumVy, sumVz); -// } -// rhoL = 27.0 / 19.0 * sumRho; -// //distribution->setPreCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz), x1, x2, x3, d000); -// //distribution->setPreCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoL, sumVx, sumVy, sumVz), x1, x2, x3, d000); -// ff[d000] = sumRho - sumRho2; -// distribution->setPreCollisionDistributionForDirection(ff[d000], x1, x2, x3, d000); -// D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz); -// std::cout << " calcVx=" << vx << " calcVy=" << vy << " calcVz=" << vz << " rhoG=" << rhoG << "\n"; -// -// -// -// } -// } -// } -// } -// } - - - //for (int x3 = minX3-ghostLayerWidth; x3 < maxX3+ghostLayerWidth; x3++) { - // for (int x2 = minX2-ghostLayerWidth; x2 < maxX2+ghostLayerWidth; x2++) { - // for (int x1 = minX1-ghostLayerWidth; x1 < maxX1+ghostLayerWidth; x1++) { - // if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { - // int x1p = x1 + 1; - // int x2p = x2 + 1; - // int x3p = x3 + 1; - - - - // real mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - // real mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - // real mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - // real mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - // real mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - // real mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - // real mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - // real mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - // real mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - // real mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - // real mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - // real mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - // real mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - // real mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - // real mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - // real mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - // real mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - // real mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - // real mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - // real mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - // real mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - // real mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - // real mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - // real mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - // real mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - // real mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - // real mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3); - - // omegaDRho = 2.0;// 1.5; - // real phiOld = (*phaseField)(x1, x2, x3); - - // (*phaseField)(x1, x2, x3) = (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca) + (mfcaa + mfacc)) ) + - // (((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) + - // ((mfbaa + mfbac) + (mfbca + mfbcc))) + ((mfabb + mfcbb) + - // (mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb; - // //if (phiOld > 0.49 && phiOld < 0.501) { - // // real ppppppppp = (*phaseField)(x1, x2, x3); - // // int ist = 1; - // //} - // //if (phiOld > 0.5 && (*phaseField)(x1, x2, x3) <= 0.5) { - // // real ppppppppp = (*phaseField)(x1, x2, x3); - // // int ist = 1; - // //} - - - // if ((*phaseField)(x1, x2, x3) > 1 ) { - // (*phaseField)(x1, x2, x3) = c1o1; - // } - - // if ((*phaseField)(x1, x2, x3) < 0) { - // (*phaseField)(x1, x2, x3) = 0; - // } - // ////// read F-distributions for velocity formalism - // if (((phiOld <= 0.5) && ((*phaseField)(x1, x2, x3) <= 0.5)) || ((phiOld > 0.5) && ((*phaseField)(x1, x2, x3) > 0.5))) {} - // else { - // real scaleDistribution = densityRatio;// gas turn liquid - // real scaleStress = (c1o1/collFactorG)/(c1o1/collFactorL); - // if ((phiOld > 0.5) && ((*phaseField)(x1, x2, x3) <= 0.5)) { - // scaleDistribution = 1.0 / densityRatio; - // scaleStress = (c1o1 / collFactorL) / (c1o1 / collFactorG); - // //liquid turned gas - // } - - // 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); - - // distribution->getDistribution(ff, x1, x2, x3); - // real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - // (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - // (mfcbb - mfabb)); - // real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - // (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - // (mfbcb - mfbab)) ; - // real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - // (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - // (mfbbc - mfbba)) ; - // real drho = (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca) + (mfcaa + mfacc))) + - // (((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) + - // ((mfbaa + mfbac) + (mfbca + mfbcc))) + ((mfabb + mfcbb) + - // (mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb; - // //real mp= c3o1*(((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca) + (mfcaa + mfacc))) + - // // c2o1*(((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) + - // // ((mfbaa + mfbac) + (mfbca + mfbcc))) + ((mfabb + mfcbb) + - // // (mfbab + mfbcb) + (mfbba + mfbbc)); - // //mp -= vvx * vvx - vvy * vvy - vvz * vvz; - // real drhoScaled = drho / scaleDistribution; - // if (((*phaseField)(x1, x2, x3) <= 0.5)) { drhoScaled = (*rhoNode)(x1, x2, x3); } - - // //mp = 2 * drho - mp; - // for (int fdir = D3Q27System::STARTF; fdir <= D3Q27System::ENDF; fdir++) { - // real feqOLD = (D3Q27System::getIncompFeqForDirection(fdir, drho, vvx, vvy, vvz)); - // real feqNew = (D3Q27System::getIncompFeqForDirection(fdir, drhoScaled, vvx, vvy, vvz)); - // distribution->setPreCollisionDistributionForDirection((ff[fdir]-feqOLD)* scaleStress +feqNew,x1,x2,x3,fdir); - // } - - - - - - // } - // } - // } - // } - //} - - real collFactorM; - - - - - - - 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; - - - -// real mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3); -// real mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3); -// real mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3); -// real mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3); -// real mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3); -// real mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3); -// real mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3); -// real mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3); -// real mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3); -// real mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3); -// real mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3); -// real mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3); -// real mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3); -// -// real mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3); -// real mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3); -// real mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p); -// real mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3); -// real mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3); -// real mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p); -// real mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p); -// real mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p); -// real mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p); -// real mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p); -// real mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p); -// real mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p); -// real mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p); -// -// real mfbbb = (*this->zeroDistributionsF)(x1, x2, x3); -// -// real m0, m1, m2; -// -// real rho = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) -// + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) -// + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; -// -// real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + -// (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + -// (mfcbb - mfabb)); -// real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + -// (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + -// (mfbcb - mfbab)); -// real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + -// (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + -// (mfbbc - mfbba)); -// -// //forcing -// /////////////////////////////////////////////////////////////////////////////////////////// -// if (withForcing) -// { -// muX1 = 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 -// } -// /////////////////////////////////////////////////////////////////////////////////////////// -// real oMdrho; -// -// oMdrho = mfccc + mfaaa; -// m0 = mfaca + mfcac; -// m1 = mfacc + mfcaa; -// m2 = mfaac + mfcca; -// oMdrho += m0; -// m1 += m2; -// oMdrho += m1; -// m0 = mfbac + mfbca; -// m1 = mfbaa + mfbcc; -// m0 += m1; -// m1 = mfabc + mfcba; -// m2 = mfaba + mfcbc; -// m1 += m2; -// m0 += m1; -// m1 = mfacb + mfcab; -// m2 = mfaab + mfccb; -// m1 += m2; -// m0 += m1; -// oMdrho += m0; -// m0 = mfabb + mfcbb; -// m1 = mfbab + mfbcb; -// m2 = mfbba + mfbbc; -// m0 += m1 + m2; -// m0 += mfbbb; //hat gefehlt -// oMdrho = 1. - (oMdrho + m0); -// -// real vx2; -// real vy2; -// real vz2; -// vx2 = vvx * vvx; -// vy2 = vvy * vvy; -// vz2 = vvz * vvz; -// //////////////////////////////////////////////////////////////////////////////////// -// real wadjust; -// real qudricLimit = 0.01; -// //////////////////////////////////////////////////////////////////////////////////// -// //Hin -// //////////////////////////////////////////////////////////////////////////////////// -// // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // Z - Dir -// m2 = mfaaa + mfaac; -// m1 = mfaac - mfaaa; -// m0 = m2 + mfaab; -// mfaaa = m0; -// m0 += c1o36 * oMdrho; -// mfaab = m1 - m0 * vvz; -// mfaac = m2 - 2. * m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaba + mfabc; -// m1 = mfabc - mfaba; -// m0 = m2 + mfabb; -// mfaba = m0; -// m0 += c1o9 * oMdrho; -// mfabb = m1 - m0 * vvz; -// mfabc = m2 - 2. * m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaca + mfacc; -// m1 = mfacc - mfaca; -// m0 = m2 + mfacb; -// mfaca = m0; -// m0 += c1o36 * oMdrho; -// mfacb = m1 - m0 * vvz; -// mfacc = m2 - 2. * m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbaa + mfbac; -// m1 = mfbac - mfbaa; -// m0 = m2 + mfbab; -// mfbaa = m0; -// m0 += c1o9 * oMdrho; -// mfbab = m1 - m0 * vvz; -// mfbac = m2 - 2. * m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbba + mfbbc; -// m1 = mfbbc - mfbba; -// m0 = m2 + mfbbb; -// mfbba = m0; -// m0 += c4o9 * oMdrho; -// mfbbb = m1 - m0 * vvz; -// mfbbc = m2 - 2. * m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbca + mfbcc; -// m1 = mfbcc - mfbca; -// m0 = m2 + mfbcb; -// mfbca = m0; -// m0 += c1o9 * oMdrho; -// mfbcb = m1 - m0 * vvz; -// mfbcc = m2 - 2. * m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcaa + mfcac; -// m1 = mfcac - mfcaa; -// m0 = m2 + mfcab; -// mfcaa = m0; -// m0 += c1o36 * oMdrho; -// mfcab = m1 - m0 * vvz; -// mfcac = m2 - 2. * m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcba + mfcbc; -// m1 = mfcbc - mfcba; -// m0 = m2 + mfcbb; -// mfcba = m0; -// m0 += c1o9 * oMdrho; -// mfcbb = m1 - m0 * vvz; -// mfcbc = m2 - 2. * m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcca + mfccc; -// m1 = mfccc - mfcca; -// m0 = m2 + mfccb; -// mfcca = m0; -// m0 += c1o36 * oMdrho; -// mfccb = m1 - m0 * vvz; -// mfccc = m2 - 2. * m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // Y - Dir -// m2 = mfaaa + mfaca; -// m1 = mfaca - mfaaa; -// m0 = m2 + mfaba; -// mfaaa = m0; -// m0 += c1o6 * oMdrho; -// mfaba = m1 - m0 * vvy; -// mfaca = m2 - 2. * m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaab + mfacb; -// m1 = mfacb - mfaab; -// m0 = m2 + mfabb; -// mfaab = m0; -// mfabb = m1 - m0 * vvy; -// mfacb = m2 - 2. * m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaac + mfacc; -// m1 = mfacc - mfaac; -// m0 = m2 + mfabc; -// mfaac = m0; -// m0 += c1o18 * oMdrho; -// mfabc = m1 - m0 * vvy; -// mfacc = m2 - 2. * m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbaa + mfbca; -// m1 = mfbca - mfbaa; -// m0 = m2 + mfbba; -// mfbaa = m0; -// m0 += c2o3 * oMdrho; -// mfbba = m1 - m0 * vvy; -// mfbca = m2 - 2. * m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbab + mfbcb; -// m1 = mfbcb - mfbab; -// m0 = m2 + mfbbb; -// mfbab = m0; -// mfbbb = m1 - m0 * vvy; -// mfbcb = m2 - 2. * m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbac + mfbcc; -// m1 = mfbcc - mfbac; -// m0 = m2 + mfbbc; -// mfbac = m0; -// m0 += c2o9 * oMdrho; -// mfbbc = m1 - m0 * vvy; -// mfbcc = m2 - 2. * m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcaa + mfcca; -// m1 = mfcca - mfcaa; -// m0 = m2 + mfcba; -// mfcaa = m0; -// m0 += c1o6 * oMdrho; -// mfcba = m1 - m0 * vvy; -// mfcca = m2 - 2. * m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcab + mfccb; -// m1 = mfccb - mfcab; -// m0 = m2 + mfcbb; -// mfcab = m0; -// mfcbb = m1 - m0 * vvy; -// mfccb = m2 - 2. * m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcac + mfccc; -// m1 = mfccc - mfcac; -// m0 = m2 + mfcbc; -// mfcac = m0; -// m0 += c1o18 * oMdrho; -// mfcbc = m1 - m0 * vvy; -// mfccc = m2 - 2. * m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // X - Dir -// m2 = mfaaa + mfcaa; -// m1 = mfcaa - mfaaa; -// m0 = m2 + mfbaa; -// mfaaa = m0; -// m0 += 1. * oMdrho; -// mfbaa = m1 - m0 * vvx; -// mfcaa = m2 - 2. * m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaba + mfcba; -// m1 = mfcba - mfaba; -// m0 = m2 + mfbba; -// mfaba = m0; -// mfbba = m1 - m0 * vvx; -// mfcba = m2 - 2. * m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaca + mfcca; -// m1 = mfcca - mfaca; -// m0 = m2 + mfbca; -// mfaca = m0; -// m0 += c1o3 * oMdrho; -// mfbca = m1 - m0 * vvx; -// mfcca = m2 - 2. * m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaab + mfcab; -// m1 = mfcab - mfaab; -// m0 = m2 + mfbab; -// mfaab = m0; -// mfbab = m1 - m0 * vvx; -// mfcab = m2 - 2. * m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfabb + mfcbb; -// m1 = mfcbb - mfabb; -// m0 = m2 + mfbbb; -// mfabb = m0; -// mfbbb = m1 - m0 * vvx; -// mfcbb = m2 - 2. * m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfacb + mfccb; -// m1 = mfccb - mfacb; -// m0 = m2 + mfbcb; -// mfacb = m0; -// mfbcb = m1 - m0 * vvx; -// mfccb = m2 - 2. * m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaac + mfcac; -// m1 = mfcac - mfaac; -// m0 = m2 + mfbac; -// mfaac = m0; -// m0 += c1o3 * oMdrho; -// mfbac = m1 - m0 * vvx; -// mfcac = m2 - 2. * m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfabc + mfcbc; -// m1 = mfcbc - mfabc; -// m0 = m2 + mfbbc; -// mfabc = m0; -// mfbbc = m1 - m0 * vvx; -// mfcbc = m2 - 2. * m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfacc + mfccc; -// m1 = mfccc - mfacc; -// m0 = m2 + mfbcc; -// mfacc = m0; -// m0 += c1o9 * oMdrho; -// mfbcc = m1 - m0 * vvx; -// mfccc = m2 - 2. * m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// // Cumulants -// //////////////////////////////////////////////////////////////////////////////////// -// real OxxPyyPzz = 1.; //omega2 or bulk viscosity -// real OxyyPxzz = 1.;//-s9;//2+s9;// -// //real OxyyMxzz = 1.;//2+s9;// -// real O4 = 1.; -// real O5 = 1.; -// real O6 = 1.; -// real OxyyMxzz = 1.; -// //real OxyyPxzz = 1.; -// -// //Cum 4. -// //real CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015 -// //real CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015 -// //real CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015 -// -// real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab); -// real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); -// real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); -// -// real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - 1.) * oMdrho); -// real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - 1.) * oMdrho); -// real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - 1.) * oMdrho); -// -// //Cum 5. -// real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho; -// real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho; -// real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho; -// -// //Cum 6. -// real 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 -// real mxxPyyPzz = mfcaa + mfaca + mfaac; -// real mxxMyy = mfcaa - mfaca; -// real mxxMzz = mfcaa - mfaac; -// -// real dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); -// real dyuy = dxux + collFactorM * c3o2 * mxxMyy; -// real dzuz = dxux + collFactorM * c3o2 * mxxMzz; -// -// //relax -// mxxPyyPzz += OxxPyyPzz * (mfaaa - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); -// mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactor) * (vx2 * dxux - vy2 * dyuy); -// mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactor) * (vx2 * dxux - vz2 * 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 -// real mxxyPyzz = mfcba + mfabc; -// real mxxyMyzz = mfcba - mfabc; -// -// real mxxzPyyz = mfcab + mfacb; -// real mxxzMyyz = mfcab - mfacb; -// -// real mxyyPxzz = mfbca + mfbac; -// real mxyyMxzz = mfbca - mfbac; -// -// //relax -// wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mfbbb) / (fabs(mfbbb) + qudricLimit); -// mfbbb += wadjust * (-mfbbb); -// wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit); -// mxxyPyzz += wadjust * (-mxxyPyzz); -// wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxyMyzz) / (fabs(mxxyMyzz) + qudricLimit); -// mxxyMyzz += wadjust * (-mxxyMyzz); -// wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxzPyyz) / (fabs(mxxzPyyz) + qudricLimit); -// mxxzPyyz += wadjust * (-mxxzPyyz); -// wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxzMyyz) / (fabs(mxxzMyyz) + qudricLimit); -// mxxzMyyz += wadjust * (-mxxzMyyz); -// wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxyyPxzz) / (fabs(mxyyPxzz) + qudricLimit); -// mxyyPxzz += wadjust * (-mxyyPxzz); -// wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxyyMxzz) / (fabs(mxyyMxzz) + qudricLimit); -// mxyyMxzz += wadjust * (-mxyyMxzz); -// -// // linear combinations back -// mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; -// mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; -// mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; -// mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; -// mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; -// mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; -// -// //4. -// CUMacc += O4 * (-CUMacc); -// CUMcac += O4 * (-CUMcac); -// CUMcca += O4 * (-CUMcca); -// -// CUMbbc += O4 * (-CUMbbc); -// CUMbcb += O4 * (-CUMbcb); -// CUMcbb += O4 * (-CUMcbb); -// -// //5. -// CUMbcc += O5 * (-CUMbcc); -// CUMcbc += O5 * (-CUMcbc); -// CUMccb += O5 * (-CUMccb); -// -// //6. -// CUMccc += O6 * (-CUMccc); -// -// //back cumulants to central moments -// //4. -// //mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015 -// //mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015 -// //mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015 -// -// mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab); -// mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); -// mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); -// -// mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho; -// mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho; -// mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho; -// -// //5. -// mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho; -// mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho; -// mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho; -// -// //6. -// mfccc = CUMccc - ((-4. * mfbbb * mfbbb -// - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) -// - 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) -// - 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) -// + (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) -// + 2. * (mfcaa * mfaca * mfaac) -// + 16. * mfbba * mfbab * mfabb) -// - c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho -// - c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho) -// + (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) -// + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) - c1o27 * oMdrho; -// -// //////////////////////////////////////////////////////////////////////////////////// -// //forcing -// mfbaa = -mfbaa; -// mfaba = -mfaba; -// mfaab = -mfaab; -// ////////////////////////////////////////////////////////////////////////////////////// -// -// //////////////////////////////////////////////////////////////////////////////////// -// //back -// //////////////////////////////////////////////////////////////////////////////////// -// //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // Z - Dir -// m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + 1. * oMdrho) * (vz2 - vvz) * c1o2; -// m1 = -mfaac - 2. * mfaab * vvz + mfaaa * (1. - vz2) - 1. * oMdrho * vz2; -// m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + 1. * oMdrho) * (vz2 + vvz) * c1o2; -// mfaaa = m0; -// mfaab = m1; -// mfaac = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; -// m1 = -mfabc - 2. * mfabb * vvz + mfaba * (1. - vz2); -// m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; -// mfaba = m0; -// mfabb = m1; -// mfabc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; -// m1 = -mfacc - 2. * mfacb * vvz + mfaca * (1. - vz2) - c1o3 * oMdrho * vz2; -// m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; -// mfaca = m0; -// mfacb = m1; -// mfacc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; -// m1 = -mfbac - 2. * mfbab * vvz + mfbaa * (1. - vz2); -// m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; -// mfbaa = m0; -// mfbab = m1; -// mfbac = m2; -// /////////b////////////////////////////////////////////////////////////////////////// -// m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; -// m1 = -mfbbc - 2. * mfbbb * vvz + mfbba * (1. - vz2); -// m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; -// mfbba = m0; -// mfbbb = m1; -// mfbbc = m2; -// /////////b////////////////////////////////////////////////////////////////////////// -// m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; -// m1 = -mfbcc - 2. * mfbcb * vvz + mfbca * (1. - vz2); -// m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; -// mfbca = m0; -// mfbcb = m1; -// mfbcc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; -// m1 = -mfcac - 2. * mfcab * vvz + mfcaa * (1. - vz2) - c1o3 * oMdrho * vz2; -// m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; -// mfcaa = m0; -// mfcab = m1; -// mfcac = m2; -// /////////c////////////////////////////////////////////////////////////////////////// -// m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; -// m1 = -mfcbc - 2. * mfcbb * vvz + mfcba * (1. - vz2); -// m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; -// mfcba = m0; -// mfcbb = m1; -// mfcbc = m2; -// /////////c////////////////////////////////////////////////////////////////////////// -// m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; -// m1 = -mfccc - 2. * mfccb * vvz + mfcca * (1. - vz2) - c1o9 * oMdrho * vz2; -// m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; -// mfcca = m0; -// mfccb = m1; -// mfccc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // Y - Dir -// m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; -// m1 = -mfaca - 2. * mfaba * vvy + mfaaa * (1. - vy2) - c1o6 * oMdrho * vy2; -// m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; -// mfaaa = m0; -// mfaba = m1; -// mfaca = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; -// m1 = -mfacb - 2. * mfabb * vvy + mfaab * (1. - vy2) - c2o3 * oMdrho * vy2; -// m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; -// mfaab = m0; -// mfabb = m1; -// mfacb = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; -// m1 = -mfacc - 2. * mfabc * vvy + mfaac * (1. - vy2) - c1o6 * oMdrho * vy2; -// m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; -// mfaac = m0; -// mfabc = m1; -// mfacc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; -// m1 = -mfbca - 2. * mfbba * vvy + mfbaa * (1. - vy2); -// m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; -// mfbaa = m0; -// mfbba = m1; -// mfbca = m2; -// /////////b////////////////////////////////////////////////////////////////////////// -// m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; -// m1 = -mfbcb - 2. * mfbbb * vvy + mfbab * (1. - vy2); -// m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; -// mfbab = m0; -// mfbbb = m1; -// mfbcb = m2; -// /////////b////////////////////////////////////////////////////////////////////////// -// m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; -// m1 = -mfbcc - 2. * mfbbc * vvy + mfbac * (1. - vy2); -// m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; -// mfbac = m0; -// mfbbc = m1; -// mfbcc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; -// m1 = -mfcca - 2. * mfcba * vvy + mfcaa * (1. - vy2) - c1o18 * oMdrho * vy2; -// m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; -// mfcaa = m0; -// mfcba = m1; -// mfcca = m2; -// /////////c////////////////////////////////////////////////////////////////////////// -// m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; -// m1 = -mfccb - 2. * mfcbb * vvy + mfcab * (1. - vy2) - c2o9 * oMdrho * vy2; -// m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; -// mfcab = m0; -// mfcbb = m1; -// mfccb = m2; -// /////////c////////////////////////////////////////////////////////////////////////// -// m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; -// m1 = -mfccc - 2. * mfcbc * vvy + mfcac * (1. - vy2) - c1o18 * oMdrho * vy2; -// m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; -// mfcac = m0; -// mfcbc = m1; -// mfccc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // X - Dir -// m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfcaa - 2. * mfbaa * vvx + mfaaa * (1. - vx2) - c1o36 * oMdrho * vx2; -// m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; -// mfaaa = m0; -// mfbaa = m1; -// mfcaa = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfcba - 2. * mfbba * vvx + mfaba * (1. - vx2) - c1o9 * oMdrho * vx2; -// m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; -// mfaba = m0; -// mfbba = m1; -// mfcba = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfcca - 2. * mfbca * vvx + mfaca * (1. - vx2) - c1o36 * oMdrho * vx2; -// m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; -// mfaca = m0; -// mfbca = m1; -// mfcca = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfcab - 2. * mfbab * vvx + mfaab * (1. - vx2) - c1o9 * oMdrho * vx2; -// m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; -// mfaab = m0; -// mfbab = m1; -// mfcab = m2; -// ///////////b//////////////////////////////////////////////////////////////////////// -// m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfcbb - 2. * mfbbb * vvx + mfabb * (1. - vx2) - c4o9 * oMdrho * vx2; -// m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; -// mfabb = m0; -// mfbbb = m1; -// mfcbb = m2; -// ///////////b//////////////////////////////////////////////////////////////////////// -// m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfccb - 2. * mfbcb * vvx + mfacb * (1. - vx2) - c1o9 * oMdrho * vx2; -// m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; -// mfacb = m0; -// mfbcb = m1; -// mfccb = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfcac - 2. * mfbac * vvx + mfaac * (1. - vx2) - c1o36 * oMdrho * vx2; -// m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; -// mfaac = m0; -// mfbac = m1; -// mfcac = m2; -// ///////////c//////////////////////////////////////////////////////////////////////// -// m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfcbc - 2. * mfbbc * vvx + mfabc * (1. - vx2) - c1o9 * oMdrho * vx2; -// m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; -// mfabc = m0; -// mfbbc = m1; -// mfcbc = m2; -// ///////////c//////////////////////////////////////////////////////////////////////// -// m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfccc - 2. * mfbcc * vvx + mfacc * (1. - vx2) - c1o36 * oMdrho * vx2; -// m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; -// mfacc = m0; -// mfbcc = m1; -// mfccc = m2; -// -// ////////////////////////////////////////////////////////////////////////// -// //proof correctness -// ////////////////////////////////////////////////////////////////////////// -//#ifdef PROOF_CORRECTNESS -// real rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) -// + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) -// + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; -// //real dif = fabs(rho - rho_post); -// real dif = rho - rho_post; -//#ifdef SINGLEPRECISION -// if (dif > 10.0E-7 || dif < -10.0E-7) -//#else -// if (dif > 10.0E-15 || dif < -10.0E-15) -//#endif -// { -// UB_THROW(UbException(UB_EXARGS, "rho=" + UbSystem::toString(rho) + ", rho_post=" + UbSystem::toString(rho_post) -// + " dif=" + UbSystem::toString(dif) -// + " rho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3) -// + " in " + block.lock()->toString() + " step = " + UbSystem::toString(step))); -// } -//#endif -// ////////////////////////////////////////////////////////////////////////// -// //write distribution -// ////////////////////////////////////////////////////////////////////////// -// (*this->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; -// -// findNeighbors(phaseField, x1, x2, x3); -// real dX1_phi = gradX1_phi(); -// real dX2_phi = gradX2_phi(); -// real dX3_phi = gradX3_phi(); -// -// real denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi)+ 1.0e-20;//+ 1e-9+1e-3; -// -// real normX1 = dX1_phi / denom; -// real normX2 = dX2_phi / denom; -// real normX3 = dX3_phi / denom; - ////////////////////////////////////////////////////////////////////////// - -// ////////////////old kernel -// ////////////////////////////////////////////////////////////////////////// -// // 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 - - findNeighbors(phaseField, x1, x2, x3); - - real mfcbb ;//= (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb ;//= (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc ;//= (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3); - real mfccb ;//= (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb ;//= (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc ;//= (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc ;//= (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc ;//= (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac ;//= (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc ;//= (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc ;//= (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac ;//= (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac ;//= (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3); - real mfabb ;//= (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab ;//= (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba ;//= (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab ;//= (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab ;//= (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba ;//= (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba ;//= (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa ;//= (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca ;//= (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa ;//= (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa ;//= (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca ;//= (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca ;//= (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p); - real mfbbb ;//= (*this->zeroDistributionsF)(x1, x2, x3); - - - //real mfhcbb ;//= (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3); - //real mfhbcb ;//= (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3); - //real mfhbbc ;//= (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3); - //real mfhccb ;//= (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3); - //real mfhacb ;//= (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3); - //real mfhcbc ;//= (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3); - //real mfhabc ;//= (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3); - //real mfhbcc ;//= (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3); - //real mfhbac ;//= (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3); - //real mfhccc ;//= (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3); - //real mfhacc ;//= (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3); - //real mfhcac ;//= (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3); - //real mfhaac ;//= (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3); - //real mfhabb ;//= (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3); - //real mfhbab ;//= (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3); - //real mfhbba ;//= (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p); - //real mfhaab ;//= (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3); - //real mfhcab ;//= (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3); - //real mfhaba ;//= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p); - //real mfhcba ;//= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p); - //real mfhbaa ;//= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p); - //real mfhbca ;//= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p); - //real mfhaaa ;//= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p); - //real mfhcaa ;//= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p); - //real mfhaca ;//= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p); - //real mfhcca ;//= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p); - //real mfhbbb ;//= (*this->zeroDistributionsH2)(x1, x2, x3); - - - //if (phi[d000] < c1o2) - //{ - 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); - - - // mfhcbb= (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3); - // mfhbcb= (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3); - // mfhbbc= (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3); - // mfhccb= (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3); - // mfhacb= (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3); - // mfhcbc= (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3); - // mfhabc= (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3); - // mfhbcc= (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3); - // mfhbac= (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3); - // mfhccc= (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3); - // mfhacc= (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3); - // mfhcac= (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3); - // mfhaac= (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3); - // mfhabb= (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3); - // mfhbab= (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3); - // mfhbba= (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p); - // mfhaab= (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3); - // mfhcab= (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3); - // mfhaba= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p); - // mfhcba= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p); - // mfhbaa= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p); - // mfhbca= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p); - // mfhaaa= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p); - // mfhcaa= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p); - // mfhaca= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p); - // mfhcca= (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p); - // mfhbbb= (*this->zeroDistributionsH2)(x1, x2, x3); - - //} - //else - //{ - // mfhcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3); - // mfhbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3); - // mfhbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3); - // mfhccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3); - // mfhacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3); - // mfhcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3); - // mfhabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3); - // mfhbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3); - // mfhbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3); - // mfhccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3); - // mfhacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3); - // mfhcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3); - // mfhaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3); - // mfhabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3); - // mfhbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3); - // mfhbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p); - // mfhaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3); - // mfhcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3); - // mfhaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p); - // mfhcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p); - // mfhbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p); - // mfhbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p); - // mfhaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p); - // mfhcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p); - // mfhaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p); - // mfhcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p); - // mfhbbb = (*this->zeroDistributionsF)(x1, x2, x3); - - - // mfcbb = (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3); - // mfbcb = (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3); - // mfbbc = (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3); - // mfccb = (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3); - // mfacb = (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3); - // mfcbc = (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3); - // mfabc = (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3); - // mfbcc = (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3); - // mfbac = (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3); - // mfccc = (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3); - // mfacc = (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3); - // mfcac = (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3); - // mfaac = (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3); - // mfabb = (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3); - // mfbab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3); - // mfbba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p); - // mfaab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3); - // mfcab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3); - // mfaba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p); - // mfcba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p); - // mfbaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p); - // mfbca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p); - // mfaaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p); - // mfcaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p); - // mfaca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p); - // mfcca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p); - // mfbbb = (*this->zeroDistributionsH2)(x1, x2, x3); - - //} - - //real rhoH = 1.0; - //real rhoL = 1.0 / densityRatio; - - real rhoH = 1.0; - real rhoL = 1.0/ densityRatio; - - //real rhoToPhi = (rhoH - rhoL) / (phiH - phiL); - - real dX1_phi = gradX1_phi(); - real dX2_phi = gradX2_phi(); - real dX3_phi = gradX3_phi(); - - real denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi)+ 1.0e-20;//+ 1e-9+1e-3; - // 01.09.2022: unclear what value we have to add to the normal: lager values better cut of in gas phase? - real normX1 = dX1_phi / denom; - real normX2 = dX2_phi / denom; - real normX3 = dX3_phi / denom; - - - //real pushInterface = 2.0; - //collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL); - //collFactorM = collFactorL + (collFactorL - collFactorG) * (tanh(pushInterface * (c2o1 * phi[d000] - c1o1)) / tanh(pushInterface) * c1o2 + c1o2 - phiH) / (phiH - phiL); - collFactorM = phi[d000] > phiLim ? collFactorL : collFactorG; - //collFactorM=(((*phaseField)(x1, x2, x3) > c1o2) && ((*phaseFieldOld)(x1, x2, x3) <= c1o2)) ? 1.8 : collFactorM; - real collFactorMInv = phi[d000] > phiLim ? collFactorG : collFactorL; - - //real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi(); - - //----------- Calculating Macroscopic Values ------------- - //real rho = phi[d000] > phiLim ? rhoH : rhoL;//rhoH + rhoToPhi * (phi[d000] - phiH); //Incompressible - real rho =rhoL+ (rhoH-rhoL) * (phi[d000] - phiL)/(phiH-phiL); - - //real rho = rhoH + rhoToPhi * (tanh(pushInterface*(c2o1*phi[d000]-c1o1))/tanh(pushInterface)*c1o2 +c1o2 - phiH); //Incompressible - ///scaled phase field - //real rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) * (*phaseField)(x1, x2, x3) / ((*phaseField)(x1, x2, x3) * (*phaseField)(x1, x2, x3) + (c1o1 - (*phaseField)(x1, x2, x3)) * (c1o1 - (*phaseField)(x1, x2, x3))) - phiH); - ///!scaled phase field - - //real rho = rhoH + rhoToPhi * (phi[d000] - phiH)+(c1o1-phi[d000])* (*pressure)(x1, x2, x3)*c3o1; //compressible - //real rho = rhoL + (rhoH - rhoL) * phi[d000] + (c1o1 - phi[d000]) * (*pressure)(x1, x2, x3) * c3o1; //compressible - - real m0, m1, m2; - real rhoRef=c1o1; - - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb))/rhoRef; - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab))/rhoRef; - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba))/rhoRef; - ////Filter&Gradient merged - //real pressureHere = (*pressureOld)(x1, x2, x3); - //real pressureHere = (*pressure)(x1, x2, x3); - - //real arrayP[3][3][3] = { {{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere}}, - // {{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere}}, - // { {pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere}} }; - //real LaplaceP = 0.0; - //LaplaceP += WEIGTH[dPPP] * (((((*pressureOld)(x1+1,x2+1,x3+1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 + 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3 + 1) - pressureHere))) - // + ((((*pressureOld)(x1 + 1, x2 - 1, x3 + 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 - 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3 + 1) - pressureHere)))); - //LaplaceP += WEIGTH[d0PP] * ( - // ((((*pressureOld)(x1 + 1, x2 + 1, x3) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 - 1, x3) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3) - pressureHere))) - // + ((((*pressureOld)(x1 + 1, x2, x3 + 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2, x3 -1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2, x3 + 1) - pressureHere))) - // + ((((*pressureOld)(x1, x2 + 1, x3 + 1) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1, x2 + 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3 + 1) - pressureHere))) - // ); - //LaplaceP += WEIGTH[d00P] * ( - // (((*pressureOld)(x1 + 1, x2, x3) - pressureHere) + ((*pressureOld)(x1, x2-1, x3) - pressureHere)) - // + (((*pressureOld)(x1, x2 + 1, x3) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3) - pressureHere)) - // + (((*pressureOld)(x1, x2, x3 + 1) - pressureHere) + ((*pressureOld)(x1, x2, x3 - 1) - pressureHere)) - // ); - - //LaplaceP= 6.0 * LaplaceP; - - //real sum = 0.0; - -// for (int dir1 = -1; dir1 <= 1; dir1++) { -// for (int dir2 = -1; dir2 <= 1; dir2++) { -// for (int dir3 = -1; dir3 <= 1; dir3++){ -// int xxx = x1 + dir1; -// int yyy = x2 + dir2; -// int zzz = x3 + dir3; -// if (!bcArray->isSolid(xxx, yyy, zzz) && !bcArray->isUndefined(xxx, yyy, zzz)) arrayP[dir1 + 1][dir2 + 1][dir3 + 1] = (*pressureOld)(xxx, yyy, zzz); -// //if (!bcArray->isSolid(xxx, yyy, zzz) && !bcArray->isUndefined(xxx, yyy, zzz)) arrayP[dir1 + 1][dir2 + 1][dir3 + 1] = (*pressure)(xxx, yyy, zzz); -// // sum += 64.0 / (216.0 * (c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2)) * (c1o1 + c3o1 * abs(dir3))) * arrayP[dir1 + 1][dir2 + 1][dir3 + 1]; -// } -// } -// } -//// (*pressure)(x1, x2, x3) = sum;// *0.1 + (1.0 - 0.1) * (*pressureOld)(x1, x2, x3); -// -// -// (*pressure)(x1, x2, x3) = (((((arrayP[0][0][0] + arrayP[2][2][2]) + (arrayP[0][2][0] + arrayP[2][0][2])) + ((arrayP[2][0][0] + arrayP[0][2][2]) + (arrayP[2][2][0] + arrayP[0][0][2]))) * c1o216 -// + (((arrayP[0][0][1] + arrayP[2][2][1]) + (arrayP[0][1][0] + arrayP[2][1][2])) + ((arrayP[1][0][0] + arrayP[1][2][2]) + (arrayP[0][1][2] + arrayP[2][1][0])) + ((arrayP[1][0][2] + arrayP[1][2][0]) + (arrayP[0][2][1] + arrayP[2][0][1]))) * c1o54) -// + ((arrayP[0][1][1] + arrayP[2][1][1]) + (arrayP[1][0][1] + arrayP[1][2][1]) + (arrayP[1][1][0] + arrayP[1][1][2])) * c2o27) -// + arrayP[1][1][1] * c8o27; - //real gradPx = 0.0; - //real gradPy = 0.0; - //real gradPz = 0.0; - //for (int dir1 = -1; dir1 <= 1; dir1++) { - // for (int dir2 = -1; dir2 <= 1; dir2++) { - // gradPx -= arrayP[0][dir1+1][dir2+1] * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - // gradPx += arrayP[2][dir1+1][dir2+1] * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - - - - // gradPy -= arrayP[dir1+1][0][dir2+1] * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - // gradPy += arrayP[dir1+1][2][dir2+1] * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - // - - // gradPz -= arrayP[dir1+1][dir2+1][0] * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - // gradPz += arrayP[dir1+1][dir2+1][2] * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - // } - //} - - //real gradPx = ((((arrayP[2][0][0] - arrayP[0][2][2]) + (arrayP[2][2][0] - arrayP[0][0][2])) + ((arrayP[2][2][2] - arrayP[0][0][0]) + (arrayP[2][0][2] - arrayP[0][2][0]))) * c1o72 - // + (((arrayP[2][1][0] - arrayP[0][1][2]) + (arrayP[2][2][1] - arrayP[0][0][1])) + ((arrayP[2][0][1] - arrayP[0][2][1]) + (arrayP[2][1][2] - arrayP[0][1][0]))) * c1o18) - // + (arrayP[2][1][1] - arrayP[0][1][1]) * c2o9; - //real gradPy = ((((arrayP[0][2][0] - arrayP[2][0][2]) + (arrayP[2][2][0] - arrayP[0][0][2])) + ((arrayP[2][2][2] - arrayP[0][0][0]) + (arrayP[0][2][2] - arrayP[2][0][0]))) * c1o72 - // + (((arrayP[1][2][0] - arrayP[1][0][2]) + (arrayP[2][2][1] - arrayP[0][0][1])) + ((arrayP[0][2][1] - arrayP[2][0][1]) + (arrayP[1][2][2] - arrayP[1][0][0]))) * c1o18) - // + (arrayP[1][2][1] - arrayP[1][0][1]) * c2o9; - //real gradPz = ((((arrayP[0][0][2] - arrayP[2][2][0]) + (arrayP[0][2][2] - arrayP[2][0][0])) + ((arrayP[2][2][2] - arrayP[0][0][0]) + (arrayP[2][0][2] - arrayP[0][2][0]))) * c1o72 - // + (((arrayP[0][1][2] - arrayP[2][1][0]) + (arrayP[1][2][2] - arrayP[1][0][0])) + ((arrayP[1][0][2] - arrayP[1][2][0]) + (arrayP[2][1][2] - arrayP[0][1][0]))) * c1o18) - // + (arrayP[1][1][2] - arrayP[1][1][0]) * c2o9; - - //gradPx *=c1o1 - (*pressure)(x1, x2, x3)+pressureHere; - //gradPy *=c1o1 - (*pressure)(x1, x2, x3) + pressureHere; - //gradPz *=c1o1 - (*pressure)(x1, x2, x3) + pressureHere; - - ////!Filter&Gradient merged - //real gradPx = 0.0; - //real gradPy = 0.0; - //real gradPz = 0.0; - //for (int dir1 = -1; dir1 <= 1; dir1++) { - // for (int dir2 = -1; dir2 <= 1; dir2++) { - // int yyy = x2 + dir1; - // int zzz = x3 + dir2; - // if (!bcArray->isSolid(x1-1, yyy, zzz) && !bcArray->isUndefined(x1-1, yyy, zzz)) { - // gradPx -= (*pressure)(x1 - 1, yyy, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - // } - // else { - // gradPx -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - // } - // if (!bcArray->isSolid(x1 + 1, yyy, zzz) && !bcArray->isUndefined(x1 + 1, yyy, zzz)) { - // gradPx += (*pressure)(x1 + 1, yyy, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - // } - // else { - // gradPx += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - // } - - // int xxx = x1 + dir1; - // if (!bcArray->isSolid(xxx, x2-1, zzz) && !bcArray->isUndefined(xxx, x2-1, zzz)) { - // gradPy -= (*pressure)(xxx, x2-1, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - // } - // else { - // gradPy -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - // } - // if (!bcArray->isSolid(xxx, x2+1, zzz) && !bcArray->isUndefined(xxx, x2+1, zzz)) { - // gradPy += (*pressure)(xxx, x2+1, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - // } - // else { - // gradPy += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - // } - - // yyy = x2 + dir2; - // if (!bcArray->isSolid(xxx, yyy, x3-1) && !bcArray->isUndefined(xxx, yyy, x3-1)) { - // gradPz -= (*pressure)(xxx, yyy, x3-1) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - // } - // else { - // gradPz -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - // } - // if (!bcArray->isSolid(xxx, yyy, x3+1) && !bcArray->isUndefined(xxx, yyy, x3+1)) { - // gradPz += (*pressure)(xxx, yyy, x3+1) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - // } - // else { - // gradPz += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - // } - - // } - //} - - //Viscosity increase by phase field residuum - //real errPhi = (((1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale)- denom); - //real limVis = 0.01;// 0.0000001 * 10;//0.01; - // collFactorM =collFactorM/(c1o1+limVis*(errPhi*errPhi)*collFactorM); - // collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM; - //errPhi = errPhi * errPhi* errPhi * errPhi * errPhi * errPhi; - //collFactorM = collFactorM + (1.8 - collFactorM) * errPhi / (errPhi + limVis); - - //3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP]))) - //+WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) + - //+WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M])); - - - - ////external pressure - //forcingX1 =/* muForcingX1.Eval()/rho */- gradPx/rho; - //forcingX2 =/* muForcingX2.Eval()/rho */- gradPy/rho; - //forcingX3 =/* muForcingX3.Eval()/rho */- gradPz/rho; - - /////////////////////////////////////////////// - - //real pBefore = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc))) - // + (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca)))) - // + ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb) * c1o3; - //pBefore = -c1o3 * (-1.0e-10)/((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) ); - ////if (vvx * vvx + vvy * vvy + vvz * vvz > 1.0e-100) { - // mfabb -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dP00] * (rhoH - rhoL) / (phiH - phiL))); - // mfbab -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0P0] * (rhoH - rhoL) / (phiH - phiL))); - // mfbba -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d00P] * (rhoH - rhoL) / (phiH - phiL))); - // mfaab -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPP0] * (rhoH - rhoL) / (phiH - phiL))); - // mfcab -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMP0] * (rhoH - rhoL) / (phiH - phiL))); - // mfaba -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dP0P] * (rhoH - rhoL) / (phiH - phiL))); - // mfcba -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dM0P] * (rhoH - rhoL) / (phiH - phiL))); - // mfbaa -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0PP] * (rhoH - rhoL) / (phiH - phiL))); - // mfbca -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0MP] * (rhoH - rhoL) / (phiH - phiL))); - // mfaaa -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPPP] * (rhoH - rhoL) / (phiH - phiL))); - // mfcaa -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMPP] * (rhoH - rhoL) / (phiH - phiL))); - // mfaca -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPMP] * (rhoH - rhoL) / (phiH - phiL))); - // mfcca -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMMP] * (rhoH - rhoL) / (phiH - phiL))); - // mfcbb -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dM00] * (rhoH - rhoL) / (phiH - phiL))); - // mfbcb -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0M0] * (rhoH - rhoL) / (phiH - phiL))); - // mfbbc -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d00M] * (rhoH - rhoL) / (phiH - phiL))); - // mfccb -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMM0] * (rhoH - rhoL) / (phiH - phiL))); - // mfacb -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPM0] * (rhoH - rhoL) / (phiH - phiL))); - // mfcbc -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dM0M] * (rhoH - rhoL) / (phiH - phiL))); - // mfabc -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dP0M] * (rhoH - rhoL) / (phiH - phiL))); - // mfbcc -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0MM] * (rhoH - rhoL) / (phiH - phiL))); - // mfbac -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0PM] * (rhoH - rhoL) / (phiH - phiL))); - // mfccc -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMMM] * (rhoH - rhoL) / (phiH - phiL))); - // mfacc -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPMM] * (rhoH - rhoL) / (phiH - phiL))); - // mfcac -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMPM] * (rhoH - rhoL) / (phiH - phiL))); - // mfaac -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPPM] * (rhoH - rhoL) / (phiH - phiL))); - // mfbbb -= pBefore * 8.0 / 9.0; - //} - - /////////////////////////////////////////////// - - //real pStarStart = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc))) - // + (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca)))) - // + ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb) * c1o3; - - //rho = rhoH + rhoToPhi * ((phi[d000] - phiH)+fabs(pStarStart)*0); //Incompressible - - muRho = rho; - - - ///////////////////// - - vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)) / rhoRef; - vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)) / rhoRef; - vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)) / rhoRef; - - - //real dRhoInvX = -(((((mfhccc - mfhaaa) + (mfhcac - mfhaca)) + ((mfhcaa - mfhacc) + (mfhcca - mfhaac))) + - // (((mfhcba - mfhabc) + (mfhcbc - mfhaba)) + ((mfhcab - mfhacb) + (mfhccb - mfhaab))) + - // (mfhcbb - mfhabb))); - //real dRhoInvY = -(((((mfhccc - mfhaaa) + (mfhaca - mfhcac)) + ((mfhacc - mfhcaa) + (mfhcca - mfhaac))) + - // (((mfhbca - mfhbac) + (mfhbcc - mfhbaa)) + ((mfhacb - mfhcab) + (mfhccb - mfhaab))) + - // (mfhbcb - mfhbab))); - //real dRhoInvZ = -(((((mfhccc - mfhaaa) + (mfhcac - mfhaca)) + ((mfhacc - mfhcaa) + (mfhaac - mfhcca))) + - // (((mfhbac - mfhbca) + (mfhbcc - mfhbaa)) + ((mfhabc - mfhcba) + (mfhcbc - mfhaba))) + - // (mfhbbc - mfhbba))); - - - forcingX1 = 0.0; - forcingX2 = 0.0; - forcingX3 = 0.0; - //!Abbas - //real dX1_rhoInv = gradX1_rhoInv(rhoL, rhoH - rhoL); - //real dX2_rhoInv = gradX2_rhoInv(rhoL, rhoH - rhoL); - //real dX3_rhoInv = gradX3_rhoInv(rhoL, rhoH - rhoL); - //forcingX1 =/* muForcingX1.Eval() / rho*/ +pStar * dX1_rhoInv * rho; - //forcingX2 =/* muForcingX2.Eval() / rho*/ +pStar * dX2_rhoInv * rho; - //forcingX3 =/* muForcingX3.Eval() / rho*/ +pStar * dX3_rhoInv * rho; - - //forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho + pStar * dX1_rhoInv * rho) *c1o2; - //forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho + pStar * dX2_rhoInv * rho) *c1o2; - //forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho + pStar * dX3_rhoInv * rho) *c1o2; - //real FdX1_phi = normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; - //real FdX2_phi = normX2 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; - //real FdX3_phi = normX3 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; - - - //forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho ) ; - //forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho ) ; - //forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho ) ; - - //forcingX1 = (pStar * dRhoInvX* rho *c3o1) ; - //forcingX2 = (pStar * dRhoInvY* rho *c3o1) ; - //forcingX3 = (pStar * dRhoInvZ* rho *c3o1) ; - //if (phi[d000] > 0.1 && phi[d000] < 0.9) std::cout << phi[d000] << " " << dX1_phi * rhoToPhi / rho << " " << dRhoInvX * rho *3<< std::endl; - //real forcingX1ALTERNAT = ( pStar * dX1_rhoInv * rho) ; - //real forcingX2ALTERNAT = ( pStar * dX2_rhoInv * rho) ; - //real forcingX3ALTERNAT = ( pStar * dX3_rhoInv * rho) ; - - //forcingX1 = (fabs(vvx + c1o2 * forcingX1) < fabs(vvx + c1o2 * forcingX1ALTERNAT)) ? forcingX1 : forcingX1ALTERNAT; - //forcingX2 = (fabs(vvy + c1o2 * forcingX2) < fabs(vvy + c1o2 * forcingX2ALTERNAT)) ? forcingX2 : forcingX2ALTERNAT; - //forcingX3 = (fabs(vvz + c1o2 * forcingX3) < fabs(vvz + c1o2 * forcingX3ALTERNAT)) ? forcingX3 : forcingX3ALTERNAT; - - // forcingX1 = -pStar * rhoToPhi / rho * normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; - // forcingX2 = -pStar * rhoToPhi / rho * normX2 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; - // forcingX3 = -pStar * rhoToPhi / rho * normX3 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; - - //forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho *(c1o1- phi[d000]) + pStar * dX1_rhoInv * rho*(phi[d000])); - //forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho *(c1o1- phi[d000]) + pStar * dX2_rhoInv * rho*(phi[d000])); - //forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho *(c1o1- phi[d000]) + pStar * dX3_rhoInv * rho*(phi[d000])); - //if (phi[d000] > 0.3 && phi[d000] < 0.7) - //{ - // int test = 1; - // std::cout << phi[d000] <<" "<< dX1_phi <<" "<< normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale<<" "<< normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale/ dX1_phi<< std::endl; - //} - - - - //real scaleGrad = c2o1 * phi[d000] * (1.0 - phi[d000]) / ((phi[d000] * phi[d000] + (1.0 - phi[d000]) * (1.0 - phi[d000])) * (phi[d000] * phi[d000] + (1.0 - phi[d000]) * (1.0 - phi[d000]))); - //dX1_phi *= scaleGrad; - //dX2_phi *= scaleGrad; - //dX3_phi *= scaleGrad; - - ///Experimental interface sharpening force 20.06.2022 - - //real scaleSharpener = 1.0; - //forcingX1 += scaleSharpener * (FdX1_phi - dX1_phi) * fabsf(FdX1_phi - dX1_phi) / rho; - //forcingX2 += scaleSharpener * (FdX2_phi - dX2_phi) * fabsf(FdX2_phi - dX2_phi) / rho; - //forcingX3 += scaleSharpener * (FdX3_phi - dX3_phi) * fabsf(FdX3_phi - dX3_phi) / rho; - ///surface tension force - //forcingX1 += mu * dX1_phi/rho; - //forcingX2 += mu * dX2_phi/rho; - //forcingX3 += mu * dX3_phi/rho; - - //real forcingBIAS = 0.5; - // forcingX1 += muForcingX1.Eval() / rho;//*phi[d000]; - // forcingX2 += -5.0e-7;// *phi[d000]; // muForcingX2.Eval() / rho - 5.0e-7 * phi[d000] * 0;// * phi[d000]; - // forcingX3 += muForcingX3.Eval() / rho;// * phi[d000]; - - // //19.08.2022 - //vvx += vvxh / rho * c1o2; - //vvy += vvyh / rho * c1o2; - //vvz += vvzh / rho * c1o2; - // // - - - // vvx += (forcingX1) * deltaT * c1o2; - // vvy += (forcingX2) * deltaT * c1o2; - // vvz += (forcingX3) * deltaT * c1o2; - - if (withForcing) { - - forcingX1 += muForcingX1.Eval(); - forcingX2 += muForcingX2.Eval(); - forcingX3 += muForcingX3.Eval(); - - vvx += (forcingX1)*deltaT * c1o2; - vvy += (forcingX2)*deltaT * c1o2; - vvz += (forcingX3)*deltaT * c1o2; - } - - //vvx += (forcingX1 + muForcingX1.Eval() / rho) * deltaT * c1o2; // X - //vvy += (forcingX2 + muForcingX2.Eval() / rho) * deltaT * c1o2; // Y - //vvz += (forcingX3 + muForcingX3.Eval() / rho) * deltaT * c1o2; // Z - - - - // vvx += (forcingX1 + muForcingX1.Eval() / rho) * deltaT * forcingBIAS; // X - // vvy += (forcingX2 + muForcingX2.Eval() / rho) * deltaT * forcingBIAS; // Y - // vvz += (forcingX3 + muForcingX3.Eval() / rho) * deltaT * forcingBIAS; // Z - - - - real vx2; - real vy2; - real vz2; - vx2 = vvx * vvx; - vy2 = vvy * vvy; - vz2 = vvz * vvz; - //pStar =ppStar- (vx2 + vy2 + vz2)*pStar; - // pStar = (pStar + ppStar)*c1o2; - /////////////////////////////////////////////////////////////////////////////////////////// - real oMdrho; - /////////////// - - oMdrho = mfccc + mfaaa; - m0 = mfaca + mfcac; - m1 = mfacc + mfcaa; - m2 = mfaac + mfcca; - oMdrho += m0; - m1 += m2; - oMdrho += m1; - m0 = mfbac + mfbca; - m1 = mfbaa + mfbcc; - m0 += m1; - m1 = mfabc + mfcba; - m2 = mfaba + mfcbc; - m1 += m2; - m0 += m1; - m1 = mfacb + mfcab; - m2 = mfaab + mfccb; - m1 += m2; - m0 += m1; - oMdrho += m0; - m0 = mfabb + mfcbb; - m1 = mfbab + mfbcb; - m2 = mfbba + mfbbc; - m0 += m1 + m2; - m0 += mfbbb; //hat gefehlt - oMdrho = (rhoRef - (oMdrho + m0))/rhoRef;// 12.03.21 check derivation!!!! - - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - //real qudricLimit = 0.01 / (c1o1 + 1.0e5 * phi[d000] * (c1o1 - phi[d000])); //real qudricLimit = 0.01; - //real qudricLimit = (((*phaseField)(x1, x2, x3) > c1o2) && (normX1 * vvx + normX2 * vvy + normX3 * vvz < 0)) ? 0.01 / (c1o1 + 1.0e5 * phi[d000] * (c1o1 - phi[d000])) : 0.01; - //real qudricLimit = (((*phaseField)(x1, x2, x3) > c1o2)&& (normX1*vvx+normX2*vvy+normX3*vvz<0) ) ? 0.01 / (c1o1 + 1.0e5 * phi[d000] * (c1o1 - phi[d000])) : 0.01 ; - real qudricLimit = 0.0001; - /// (c1o1 + 1.0e3 * (dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi)); - //real qudricLimit = 0.01 / (c1o1 + 1.0e5 * phi[d000] * (c1o1 - phi[d000])) ; - //real qudricLimit = (((*phaseField)(x1, x2, x3) > c1o2) ) ? 0.01 / (c1o1 + 1.0e5 * phi[d000] * (c1o1 - phi[d000])) : 0.01 ; - //qudricLimit = (((*phaseField)(x1, x2, x3)-c1o2 ) * (normX1 * vvx + normX2 * vvy + normX3 * vvz) < 0) ? 0.01 / (c1o1 + 1.0e8 * phi[d000] * (c1o1 - phi[d000])) : 0.01; - // if (phi[d000] > c1o2 && (*phaseFieldOld)(x1, x2, x3) <= c1o2) collFactorM = 1.8; - - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (6)-(14) in \ref - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, vvz, vz2, c36o1, c1o36, oMdrho); - forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, vvz, vz2, c9o1, c1o9, oMdrho); - forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, vvz, vz2, c36o1, c1o36, oMdrho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, vvz, vz2, c9o1, c1o9, oMdrho); - forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, vvz, vz2, c9o4, c4o9, oMdrho); - forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, vvz, vz2, c9o1, c1o9, oMdrho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, vvz, vz2, c36o1, c1o36, oMdrho); - forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, vvz, vz2, c9o1, c1o9, oMdrho); - forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, vvz, vz2, c36o1, c1o36, oMdrho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, vvy, vy2, c6o1, c1o6, oMdrho); - forwardChimera(mfaab, mfabb, mfacb, vvy, vy2); - forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, vvy, vy2, c18o1, c1o18, oMdrho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, vvy, vy2, c3o2, c2o3, oMdrho); - forwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2); - forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, vvy, vy2, c9o2, c2o9, oMdrho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, vvy, vy2, c6o1, c1o6, oMdrho); - forwardChimera(mfcab, mfcbb, mfccb, vvy, vy2); - forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, vvy, vy2, c18o1, c1o18, oMdrho); - - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, vvx, vx2, c1o1, c1o1, oMdrho); - forwardChimera(mfaba, mfbba, mfcba, vvx, vx2); - forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, vvx, vx2, c3o1, c1o3, oMdrho); - forwardChimera(mfaab, mfbab, mfcab, vvx, vx2); - forwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2); - forwardChimera(mfacb, mfbcb, mfccb, vvx, vx2); - forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, vvx, vx2, c3o1, c1o3, oMdrho); - forwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2); - forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, vvx, vx2, c3o1, c1o9, oMdrho); - - - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - - // mfaaa = 0.0; - real OxxPyyPzz = 1.0; //omega2 or bulk viscosity - // real OxyyPxzz = 1.;//-s9;//2+s9;// - // real OxyyMxzz = 1.;//2+s9;// - real O4 = 1.; - real O5 = 1.; - real O6 = 1.; - - //collFactorM+= (1.7 - collFactorM) * fabs(mfaaa) / (fabs(mfaaa) + 0.001f); - ////// - //M110 -= vvx * vvy - mfbba; - //M101 -= vvx * vvz - mfbab; - //M011 -= vvy * vvz - mfabb; - - - - //M200 -= vx2; - //M020 -= vy2; - //M002 -= vz2; - //real Mp = (M200 + M020 + M002); - - - - //M200 -= c1o3 * Mp; - //M020 -= c1o3 * Mp; - //M002 -= c1o3 * Mp; - - //M200 -= -mfcaa + (mfcaa + mfaca + mfaac) * c1o3; - //M020 -= -mfaca + (mfcaa + mfaca + mfaac) * c1o3; - //M002 -= -mfaac + (mfcaa + mfaca + mfaac) * c1o3; - - ///// - - /////fourth order parameters; here only for test. Move out of loop! - - real OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0))); - real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM); - real Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0)); - real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - //FIXME: warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::B' ) - real BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - - //if ((phi[d000] <= phiLim) && (phi[d000] >0.1)) { - // collFactorM = (0.1 - phi[d000] + collFactorM * phi[d000] - collFactorM * phiLim) / (0.1 - phiLim); - // OxyyPxzz = c1o1; - // OxyyMxzz = c1o1; - // Oxyz = c1o1; - // A = 0.; - // BB = 0.; - // } - - //real stress = 1.0;// stress / (stress + 1.0e-10); - //stress = 1.0; - //OxyyPxzz += stress*(1.0-OxyyPxzz); - //OxyyPxzz = c3o1 * (collFactorM - c2o1) / (collFactorM - c3o1); - //OxyyMxzz += stress*(1.0-OxyyMxzz); - //Oxyz += stress*(1.0-Oxyz); - //A *= 1.0-stress; - //BB *= 1.0-stress; - - //Cum 4. - //real CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015 - //real CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015 - //real CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015 - - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab); - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); - - real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - - //Cum 5. - real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho; - real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho; - real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho; - - //Cum 6. - real 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 - real mxxPyyPzz = mfcaa + mfaca + mfaac; - //pStar = (mxxPyyPzz+vx2+vy2+vz2) * c1o3;//does not work - //pStar = (mxxPyyPzz) * c1o3; - //pStar = pStar + 1.5 * (mxxPyyPzz * c1o3 - pStar); - //mfaaa = mxxPyyPzz; - // real mfaaaS = (mfaaa * (-4 - 3 * OxxPyyPzz * (-1 + rho)) + 6 * mxxPyyPzz * OxxPyyPzz * (-1 + rho)) / (-4 + 3 * OxxPyyPzz * (-1 + rho)); - mxxPyyPzz -= mfaaa ;//12.03.21 shifted by mfaaa - //mxxPyyPzz-=(mfaaa+mfaaaS)*c1o2;//12.03.21 shifted by mfaaa - //dirty (04.04.2023) - //if (phi[d000] > c1o2 &&(dX1_phi*vvx+dX2_phi*vvy+dX3_phi*vvz)<0) { - // //collFactorM = c1o1 / (c1o1 / collFactorM +1e10* fabsf(mxxPyyPzz)*(c1o1-fabsf(phi[d000]))); - // collFactorM = c1o1 / (c1o1 / collFactorM - 1e15*(dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz)* fabsf(mxxPyyPzz) ); - // collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM; - // OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0))); - // OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM); - // Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0)); - // A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - // BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - - //} - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - /// - // real mmfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - // real mmfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz); - // real mmfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz); - // real mmfabb = mfabb; - // real mmfbab = mfbab; - // real mmfbba = mfbba; - /// - - real dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz);// *0; - //real dxux = -c1o2 * (mxxMyy + mxxMzz) * collFactorM - mfaaa * c1o3* omegaDRho; - real dyuy = dxux + collFactorM * c3o2 * mxxMyy; - real dzuz = dxux + collFactorM * c3o2 * mxxMzz; - real Dxy = -c3o1 * collFactorM * mfbba; - real Dxz = -c3o1 * collFactorM * mfbab; - real Dyz = -c3o1 * collFactorM * mfabb; - //if ((phi[d000] > phiLim) - //if (((phi[d000] < 0.9) || (phi[d000]>0.1)) - if (((phi[d000] > phiLim) && ((phi[dP00] <= phiLim) || (phi[dM00] <= phiLim) || (phi[d00P] <= phiLim) || (phi[d00M] <= phiLim) || (phi[d0M0] <= phiLim) || (phi[d0P0] <= phiLim) || (phi[dPP0] <= phiLim) || (phi[dPM0] <= phiLim) || (phi[dP0P] <= phiLim) || - (phi[dP0M] <= phiLim) || (phi[dMP0] <= phiLim) || (phi[dMM0] <= phiLim) || (phi[dM0P] <= phiLim) || (phi[dM0M] <= phiLim) || (phi[d0PM] <= phiLim) || (phi[d0MM] <= phiLim) || (phi[d0PP] <= phiLim) || (phi[d0MP] <= phiLim) || - (phi[dPPP] <= phiLim) || (phi[dPMP] <= phiLim) || (phi[dMPP] <= phiLim) || (phi[dMMP] <= phiLim) || - (phi[dPPM] <= phiLim) || (phi[dPMM] <= phiLim) || (phi[dMPM] <= phiLim) || (phi[dMMM] <= phiLim))) - - || ((phi[d000] <= phiLim) && ((phi[dP00] > phiLim) || (phi[dM00] > phiLim) || (phi[d00P] > phiLim) || (phi[d00M] > phiLim) || (phi[d0M0] > phiLim) || (phi[d0P0] > phiLim) || (phi[dPP0] > phiLim) || - (phi[dPM0] > phiLim) || (phi[dP0P] > phiLim) || (phi[dP0M] > phiLim) || (phi[dMP0] > phiLim) || (phi[dMM0] > phiLim) || (phi[dM0P] > phiLim) || (phi[dM0M] > phiLim) || - (phi[d0PM] > phiLim) || (phi[d0MM] > phiLim) || (phi[d0PP] > phiLim) || (phi[d0MP] > phiLim) || (phi[dPPP] > phiLim) || (phi[dPMP] > phiLim) || (phi[dMPP] > phiLim) || - (phi[dMMP] > phiLim) || (phi[dPPM] > phiLim) || (phi[dPMM] > phiLim) || (phi[dMPM] > phiLim) || (phi[dMMM] > phiLim))) - ){ - - // { - /// QR eddyviscosity: - real eddyR = -(Dxy * Dxy + Dxz * Dxz + c1o3 * dxux * dxux) * (dxux) - (Dxy * Dxy + Dyz * Dyz + c1o3 * dyuy * dyuy) * dyuy - (Dxz * Dxz + Dyz * Dyz + c1o3 * dzuz * dzuz) * dzuz - c2o1 * Dxy * Dxz * Dyz; - real eddyQ = Dxy * Dxz + Dxy * Dyz + Dxz * Dyz + c1o2 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz); - //real nuEddy = 5.0e5 * (eddyR / (eddyQ + 1e-100)) * (dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi); - //real nuEddy = 5.0e3 * (eddyR / (eddyQ + 1e-100)); - real nuEddy = 5.0e3 * (eddyR / (eddyQ + 1e-100)); - nuEddy = (nuEddy < c1o1 / collFactorM) ? c1o1 / collFactorM : nuEddy; - collFactorM = c1o1 / nuEddy; - // collFactorM = c1o1 / (c1o1 / collFactorM +1.e2*nuEddy*(dX1_phi*dX1_phi+dX2_phi*dX2_phi+dX3_phi*dX3_phi)); - collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM; - OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0))); - OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM); - Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * - collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0)); A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - } - - //if ((phi[d000] > c1o2)&& (normX1 * vvx + normX2 * vvy + normX3 * vvz < 0)){//&& ((*phaseFieldOld)(x1, x2, x3) <= c1o2)) { - // if ((phi[d000] > 0.01) && (phi[d000]<0.99)){ - // //std::cout << "new node\n"; - // ///QR eddyviscosity: - // real eddyR = -(Dxy * Dxy + Dxz * Dxz + c1o3 * dxux * dxux) * (dxux)-(Dxy * Dxy + Dyz * Dyz + c1o3 * dyuy * dyuy) * dyuy - (Dxz * Dxz + Dyz * Dyz + c1o3 * dzuz * dzuz) * dzuz - c2o1 * Dxy * Dxz * Dyz; - // real eddyQ = Dxy * Dxz + Dxy * Dyz + Dxz * Dyz + c1o2 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz); - // real nuEddy = 10.0e4*(eddyR / (eddyQ + 1e-100)) * (dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi); - // nuEddy = 1000*(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi); - // //nuEddy=10.0e4*fabsf(dxux+dyuy+dzuz) * (dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi); - // //if (nuEddy > c1o1 / collFactorM) std::cout << nuEddy <<" "<< fabsf(dxux + dyuy + dzuz)<< "\n"; - // nuEddy = (nuEddy < c1o1 / collFactorM) ? c1o1 / collFactorM : nuEddy; - // collFactorM = c1o1 / nuEddy; - // //collFactorM = 1.8; - // //collFactorM = c1o1 / (c1o1 / collFactorM +1.e2*nuEddy*(dX1_phi*dX1_phi+dX2_phi*dX2_phi+dX3_phi*dX3_phi)); - // collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM; - // OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0))); - // OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM); - // Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0)); - // A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - // BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - - //} - /////// - - // non Newtonian fluid collision factor - //if (phi[d000] > phiLim /*- 0.3*/) { - //if (phi[d000] > phiLim) { - // real shearRate = sqrt(c2o1 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz); - // collFactorM = Rheology::getBinghamCollFactor(collFactorM, shearRate, c1o1); - // collFactorM = (collFactorM < c1o1) ? c1o1 : collFactorM; - //} - - //low viscouse non Newtonian fluid - if (phi[d000] > phiLim) { - real shearRate = sqrt(c2o1 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz); - collFactorM = Rheology::getBinghamCollFactor(collFactorM, shearRate, c1o1); - collFactorM = (collFactorM < c1o54) ? c1o54 : collFactorM; - if (collFactorM < c1o1) { - OxyyPxzz = c1o1; - OxyyMxzz = c1o1; - Oxyz = c1o1; - A = 0.0; - BB = 0.0; - } - //Mathematica output 31.07.23 - // if (collFactorM < c1o6) { - // - // Oxyz = 24 * collFactorM * pow(-2 + collFactorM, 2) * (668 - 1738 * collFactorM + 1630 * pow(collFactorM, 2) - 523 * pow(collFactorM, 3) - 133 * pow(collFactorM, 4) + 122 * pow(collFactorM, 5) - 12 * pow(collFactorM, 6) - 6 * pow(collFactorM, 7) + pow(collFactorM, 8)) * - // pow(-7424 + 57424 * collFactorM - 138736 * pow(collFactorM, 2) + 151892 * pow(collFactorM, 3) - 69704 * pow(collFactorM, 4) - 9888 * pow(collFactorM, 5) + - // pow(collFactorM, 11) * (19 + pow(pow(-2 + collFactorM, 2) * pow(collFactorM, -12) * - // (13456 - 43152 * collFactorM + 45684 * pow(collFactorM, 2) - 2240 * pow(collFactorM, 3) - 35008 * pow(collFactorM, 4) + 31108 * pow(collFactorM, 5) - 10835 * pow(collFactorM, 6) + 376 * pow(collFactorM, 7) + - // 882 * pow(collFactorM, 8) - 260 * pow(collFactorM, 9) + 25 * pow(collFactorM, 10)), - // 0.5)) - - // 3 * pow(collFactorM, 10) * - // (77 + 3 * pow(pow(-2 + collFactorM, 2) * pow(collFactorM, -12) * - // (13456 - 43152 * collFactorM + 45684 * pow(collFactorM, 2) - 2240 * pow(collFactorM, 3) - 35008 * pow(collFactorM, 4) + 31108 * pow(collFactorM, 5) - 10835 * pow(collFactorM, 6) + 376 * pow(collFactorM, 7) + 882 * pow(collFactorM, 8) - - // 260 * pow(collFactorM, 9) + 25 * pow(collFactorM, 10)), - // 0.5)) + - // pow(collFactorM, 8) * (251 + 4 * pow(pow(-2 + collFactorM, 2) * pow(collFactorM, -12) * - // (13456 - 43152 * collFactorM + 45684 * pow(collFactorM, 2) - 2240 * pow(collFactorM, 3) - 35008 * pow(collFactorM, 4) + 31108 * pow(collFactorM, 5) - 10835 * pow(collFactorM, 6) + 376 * pow(collFactorM, 7) + - // 882 * pow(collFactorM, 8) - 260 * pow(collFactorM, 9) + 25 * pow(collFactorM, 10)), - // 0.5)) - - // 3 * pow(collFactorM, 7) * - // (3361 + 14 * pow(pow(-2 + collFactorM, 2) * pow(collFactorM, -12) * - // (13456 - 43152 * collFactorM + 45684 * pow(collFactorM, 2) - 2240 * pow(collFactorM, 3) - 35008 * pow(collFactorM, 4) + 31108 * pow(collFactorM, 5) - 10835 * pow(collFactorM, 6) + 376 * pow(collFactorM, 7) + - // 882 * pow(collFactorM, 8) - 260 * pow(collFactorM, 9) + 25 * pow(collFactorM, 10)), - // 0.5)) + - // 2 * pow(collFactorM, 6) * - // (12873 + 16 * pow(pow(-2 + collFactorM, 2) * pow(collFactorM, -12) * - // (13456 - 43152 * collFactorM + 45684 * pow(collFactorM, 2) - 2240 * pow(collFactorM, 3) - 35008 * pow(collFactorM, 4) + 31108 * pow(collFactorM, 5) - 10835 * pow(collFactorM, 6) + 376 * pow(collFactorM, 7) + - // 882 * pow(collFactorM, 8) - 260 * pow(collFactorM, 9) + 25 * pow(collFactorM, 10)), - // 0.5)) + - // pow(collFactorM, 9) * (860 + 17 * pow(pow(-2 + collFactorM, 2) * pow(collFactorM, -12) * - // (13456 - 43152 * collFactorM + 45684 * pow(collFactorM, 2) - 2240 * pow(collFactorM, 3) - 35008 * pow(collFactorM, 4) + 31108 * pow(collFactorM, 5) - 10835 * pow(collFactorM, 6) + 376 * pow(collFactorM, 7) + - // 882 * pow(collFactorM, 8) - 260 * pow(collFactorM, 9) + 25 * pow(collFactorM, 10)), - // 0.5)), - // -1); - // OxyyMxzz = -12 * collFactorM * pow(-2 + collFactorM, 2) * (10 - 2 * collFactorM - 9 * pow(collFactorM, 2) + 4 * pow(collFactorM, 3)) * - // pow(-232 + 248 * collFactorM - 6 * pow(collFactorM, 2) - 8 * pow(collFactorM, 3) - 63 * pow(collFactorM, 4) + 36 * pow(collFactorM, 5) + - // pow(collFactorM, 6) * (-5 + pow(pow(-2 + collFactorM, 2) * pow(collFactorM, -12) * - // (13456 - 43152 * collFactorM + 45684 * pow(collFactorM, 2) - 2240 * pow(collFactorM, 3) - 35008 * pow(collFactorM, 4) + 31108 * pow(collFactorM, 5) - 10835 * pow(collFactorM, 6) + 376 * pow(collFactorM, 7) + - // 882 * pow(collFactorM, 8) - 260 * pow(collFactorM, 9) + 25 * pow(collFactorM, 10)), - // 0.5)), - // -1); - // OxyyPxzz = 12 * collFactorM * pow(-2 + collFactorM, 2) * (-14 + 10 * collFactorM + pow(collFactorM, 2)) * - // pow(-232 + 152 * collFactorM + 138 * pow(collFactorM, 2) - 56 * pow(collFactorM, 3) - 63 * pow(collFactorM, 4) + 36 * pow(collFactorM, 5) + - // pow(collFactorM, 6) * (-5 + pow(pow(-2 + collFactorM, 2) * pow(collFactorM, -12) * - // (13456 - 43152 * collFactorM + 45684 * pow(collFactorM, 2) - 2240 * pow(collFactorM, 3) - 35008 * pow(collFactorM, 4) + 31108 * pow(collFactorM, 5) - 10835 * pow(collFactorM, 6) + 376 * pow(collFactorM, 7) + - // 882 * pow(collFactorM, 8) - 260 * pow(collFactorM, 9) + 25 * pow(collFactorM, 10)), - // 0.5)), - // -1); - - // A = -(pow(-2 + collFactorM, -3) * pow(-1 + collFactorM, -1) * pow(collFactorM, -2) * pow(3 - 3 * collFactorM + pow(collFactorM, 2), -1) * - // (464 - 1440 * collFactorM + 1652 * pow(collFactorM, 2) - 772 * pow(collFactorM, 3) + 20 * pow(collFactorM, 4) + 98 * pow(collFactorM, 5) + - // pow(collFactorM, 8) * (1 + pow(pow(-2 + collFactorM, 2) * pow(collFactorM, -12) * - // (13456 - 43152 * collFactorM + 45684 * pow(collFactorM, 2) - 2240 * pow(collFactorM, 3) - 35008 * pow(collFactorM, 4) + 31108 * pow(collFactorM, 5) - 10835 * pow(collFactorM, 6) + 376 * pow(collFactorM, 7) + - // 882 * pow(collFactorM, 8) - 260 * pow(collFactorM, 9) + 25 * pow(collFactorM, 10)), - // 0.5)) - - // 2 * pow(collFactorM, 7) * - // (2 + pow(pow(-2 + collFactorM, 2) * pow(collFactorM, -12) * - // (13456 - 43152 * collFactorM + 45684 * pow(collFactorM, 2) - 2240 * pow(collFactorM, 3) - 35008 * pow(collFactorM, 4) + 31108 * pow(collFactorM, 5) - 10835 * pow(collFactorM, 6) + 376 * pow(collFactorM, 7) + 882 * pow(collFactorM, 8) - - // 260 * pow(collFactorM, 9) + 25 * pow(collFactorM, 10)), - // 0.5)) + - // pow(collFactorM, 6) * (-19 + 2 * pow(pow(-2 + collFactorM, 2) * pow(collFactorM, -12) * - // (13456 - 43152 * collFactorM + 45684 * pow(collFactorM, 2) - 2240 * pow(collFactorM, 3) - 35008 * pow(collFactorM, 4) + 31108 * pow(collFactorM, 5) - 10835 * pow(collFactorM, 6) + 376 * pow(collFactorM, 7) + - // 882 * pow(collFactorM, 8) - 260 * pow(collFactorM, 9) + 25 * pow(collFactorM, 10)), - // 0.5)))) / - // 12.; - // BB = (pow(-2 + collFactorM, -3) * pow(-1 + collFactorM, -1) * pow(collFactorM, -2) * pow(3 - 3 * collFactorM + pow(collFactorM, 2), -1) * - // (232 - 720 * collFactorM + 998 * pow(collFactorM, 2) - 718 * pow(collFactorM, 3) + 163 * pow(collFactorM, 4) + 141 * pow(collFactorM, 5) - 4 * pow(collFactorM, 8) + - // pow(collFactorM, 6) * (-123 + pow(pow(-2 + collFactorM, 2) * pow(collFactorM, -12) * - // (13456 - 43152 * collFactorM + 45684 * pow(collFactorM, 2) - 2240 * pow(collFactorM, 3) - 35008 * pow(collFactorM, 4) + 31108 * pow(collFactorM, 5) - 10835 * pow(collFactorM, 6) + 376 * pow(collFactorM, 7) + - // 882 * pow(collFactorM, 8) - 260 * pow(collFactorM, 9) + 25 * pow(collFactorM, 10)), - // 0.5)) - - // pow(collFactorM, 7) * (-37 + pow(pow(-2 + collFactorM, 2) * pow(collFactorM, -12) * - // (13456 - 43152 * collFactorM + 45684 * pow(collFactorM, 2) - 2240 * pow(collFactorM, 3) - 35008 * pow(collFactorM, 4) + 31108 * pow(collFactorM, 5) - 10835 * pow(collFactorM, 6) + 376 * pow(collFactorM, 7) + - // 882 * pow(collFactorM, 8) - 260 * pow(collFactorM, 9) + 25 * pow(collFactorM, 10)), - // 0.5)))) / - // 6.; - // A = 0.; - // BB = 0.; - //} - } - - - real mxxMyyh = -c2o1 * (dxux - dyuy) / collFactorMInv * c1o3; - real mxxMzzh = -c2o1 * (dxux - dzuz) / collFactorMInv * c1o3; -// mfhbba = -Dxy / collFactorMInv*c1o3; -// mfhbab = -Dxz / collFactorMInv * c1o3; -// mfhabb = -Dyz / collFactorMInv * c1o3; - -// // attempt to improve implicit stress computation by fixed iteration -// real dX2_rho = (rhoToPhi)*dX2_phi; -// real dX1_rho = (rhoToPhi)*dX1_phi; -// real dX3_rho = (rhoToPhi)*dX3_phi; -// -// real dfx= c1o3 * (c1o1 / collFactorM - c1o2) *(2 * dxux * dX1_rho + Dxy * dX2_rho + Dxz * dX3_rho) / (rho); -// real dfy = c1o3 * (c1o1 / collFactorM - c1o2) *(Dxy * dX1_rho + 2 * dyuy * dX2_rho + Dyz * dX3_rho) / (rho); -// real dfz = c1o3 * (c1o1 / collFactorM - c1o2) *(Dxz * dX1_rho + Dyz * dX2_rho + 2 * dyuy * dX3_rho) / (rho); -// -// for (int iteration = 0; iteration < 5; iteration++) { -// mxxMyy = (mfcaa - dfx * dfx * c1o2) - (mfaca - dfy * dfy * c1o2); -// mxxMzz = (mfcaa - dfx * dfx * c1o2) - (mfaac - dfz * dfz * c1o2); -// } -/////end fixed iteration -// - - - //relax - mxxPyyPzz += OxxPyyPzz * (/*mfaaa*/ - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vz2 * dzuz); - - mfabb += collFactorM * (-mfabb); - mfbab += collFactorM * (-mfbab); - mfbba += collFactorM * (-mfbba); - -// mfhaaa = (phi[d000] < c1o2) ? mfaaa * rhoL / rhoH : mfaaa * rhoL / rhoH; - mxxMyyh += collFactorMInv * (-mxxMyyh) - 3. * (1. - c1o2 * collFactorMInv) * (vx2 * dxux - vy2 * dyuy); - mxxMzzh += collFactorMInv * (-mxxMzzh) - 3. * (1. - c1o2 * collFactorMInv) * (vx2 * dxux - vz2 * dzuz); - - //mfhabb += collFactorMInv * (-mfhabb); - //mfhbab += collFactorMInv * (-mfhbab); - //mfhbba += collFactorMInv * (-mfhbba); - - //mfhcaa = c1o3 * (mxxMyyh + mxxMzzh + mfhaaa); - //mfhaca = c1o3 * (-2. * mxxMyyh + mxxMzzh + mfhaaa); - //mfhaac = c1o3 * (mxxMyyh - 2. * mxxMzzh + mfhaaa); - - - //if (fabsf(mfaaa + (dxux + dyuy + dzuz) > 1e-9)){ - // std::cout << mfaaa <<" "<< (dxux + dyuy + dzuz)<< std::endl; - //} - - - ////updated pressure - //mfaaa += (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling; - //mfaaa *= (c1o1-omegaDRho);// (mfaaa + (dxux + dyuy + dzuz)) * .5; // Pressure elimination as in standard velocity model - // mfaaa += (rho - c1o1) * (dxux + dyuy + dzuz); - - mxxPyyPzz += mfaaa; // 12.03.21 shifted by mfaaa - - // mxxPyyPzz += (mfaaa + mfaaaS) * c1o2; - //mfaaa = mfaaaS; - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - // mmfcaa += c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz- mfaaa); - // mmfaca += c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz- mfaaa); - // mmfaac += c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz- mfaaa); - // mmfabb += mfabb; - // mmfbab += mfbab; - // mmfbba += mfbba; - - //relax - wadjust = Oxyz + (1. - Oxyz) * 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 * (c1o1 / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc); - CUMcac = -O4 * (c1o1 / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac); - CUMcca = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca); - CUMbbc = -O4 * (c1o1 / collFactorM - c1o2) * Dxy * c1o3 * BB + (c1o1 - O4) * (CUMbbc); - CUMbcb = -O4 * (c1o1 / collFactorM - c1o2) * Dxz * c1o3 * BB + (c1o1 - O4) * (CUMbcb); - CUMcbb = -O4 * (c1o1 / collFactorM - c1o2) * Dyz * c1o3 * BB + (c1o1 - O4) * (CUMcbb); - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - //back cumulants to central moments - //4. - //mfcbb = CUMcbb + ((mfcaa + c1o3 * 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 - c1o1) * oMdrho; - mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho; - mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * 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; - - - ////////save central moments for the phase field - //real MMxx = mfcaa - c1o3 * mfaaa; - //real MMyy = mfaca - c1o3 * mfaaa; - //real MMzz = mfaac - c1o3 * mfaaa; - //real MMxy = mfbba; - //real MMxz = mfbab; - //real MMyz = mfabb; - - - //////////////////////////////////////////////////////////////////////////////////// - //forcing - mfbaa = -mfbaa;// *(c1o1 - forcingBIAS) / forcingBIAS; - mfaba = -mfaba;// *(c1o1 - forcingBIAS) / forcingBIAS; - mfaab = -mfaab;// *(c1o1 - forcingBIAS) / forcingBIAS; - - - //mfhbaa = mfbaa; - //mfhaba = mfaba; - //mfhaab = mfaab; - - //mfhcba = 0.; - //mfhabc = 0.; - //mfhcab = 0.; - //mfhacb = 0.; - //mfhbca = 0.; - //mfhbac = 0.; - //mfhbbb = 0.; - - //real oMdrhoInv = (rhoRef - (mfhaaa )) / rhoRef; - //mfhcbb =/* CUMcbb + */((mfhcaa + c1o3) * mfhabb + 2. * mfhbba * mfhbab); - //mfhbcb =/* CUMbcb + */((mfhaca + c1o3) * mfhbab + 2. * mfhbba * mfhabb); - //mfhbbc =/* CUMbbc + */((mfhaac + c1o3) * mfhbba + 2. * mfhbab * mfhabb); - - //mfhcca = /*CUMcca + */(mfhcaa * mfhaca + 2. * mfhbba * mfhbba) + c1o3 * (mfhcaa + mfhaca) * oMdrhoInv + c1o9 * (oMdrhoInv - c1o1) * oMdrhoInv; - //mfhcac = /*CUMcac + */(mfhcaa * mfhaac + 2. * mfhbab * mfhbab) + c1o3 * (mfhcaa + mfhaac) * oMdrhoInv + c1o9 * (oMdrhoInv - c1o1) * oMdrhoInv; - //mfhacc = /*CUMacc + */(mfhaac * mfhaca + 2. * mfhabb * mfhabb) + c1o3 * (mfhaac + mfhaca) * oMdrhoInv + c1o9 * (oMdrhoInv - c1o1) * oMdrhoInv; - - ////5. - //mfhbcc = /*CUMbcc +*/ (mfhaac * mfhbca + mfhaca * mfhbac + 4. * mfhabb * mfhbbb + 2. * (mfhbab * mfhacb + mfhbba * mfhabc)) + c1o3 * (mfhbca + mfhbac) * oMdrhoInv; - //mfhcbc = /*CUMcbc +*/ (mfhaac * mfhcba + mfhcaa * mfhabc + 4. * mfhbab * mfhbbb + 2. * (mfhabb * mfhcab + mfhbba * mfhbac)) + c1o3 * (mfhcba + mfhabc) * oMdrhoInv; - //mfhccb = /*CUMccb +*/ (mfhcaa * mfhacb + mfhaca * mfhcab + 4. * mfhbba * mfhbbb + 2. * (mfhbab * mfhbca + mfhabb * mfhcba)) + c1o3 * (mfhacb + mfhcab) * oMdrhoInv; - - ////6. - //mfhccc = /*CUMccc */- ((-4. * mfhbbb * mfhbbb - // - (mfhcaa * mfhacc + mfhaca * mfhcac + mfhaac * mfhcca) - // - 4. * (mfhabb * mfhcbb + mfhbac * mfhbca + mfhbba * mfhbbc) - // - 2. * (mfhbca * mfhbac + mfhcba * mfhabc + mfhcab * mfhacb)) - // + (4. * (mfhbab * mfhbab * mfhaca + mfhabb * mfhabb * mfhcaa + mfhbba * mfhbba * mfhaac) - // + 2. * (mfhcaa * mfhaca * mfhaac) - // + 16. * mfhbba * mfhbab * mfhabb) - // - c1o3 * (mfhacc + mfhcac + mfhcca) * oMdrhoInv - c1o9 * oMdrhoInv * oMdrhoInv - // - c1o9 * (mfhcaa + mfhaca + mfhaac) * oMdrhoInv * (1. - 2. * oMdrhoInv) - c1o27 * oMdrhoInv * oMdrhoInv * (-2. * oMdrhoInv) - // + (2. * (mfhbab * mfhbab + mfhabb * mfhabb + mfhbba * mfhbba) - // + (mfhaac * mfhaca + mfhaac * mfhcaa + mfhaca * mfhcaa)) * c2o3 * oMdrhoInv) - c1o27 * oMdrhoInv; - - - - - - backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, vvx, vx2, c1o1, c1o1, oMdrho); - backwardChimera(mfaba, mfbba, mfcba, vvx, vx2); - backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, vvx, vx2, c3o1, c1o3, oMdrho); - backwardChimera(mfaab, mfbab, mfcab, vvx, vx2); - backwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2); - backwardChimera(mfacb, mfbcb, mfccb, vvx, vx2); - backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, vvx, vx2, c3o1, c1o3, oMdrho); - backwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2); - backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, vvx, vx2, c9o1, c1o9, oMdrho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, vvy, vy2, c6o1, c1o6, oMdrho); - backwardChimera(mfaab, mfabb, mfacb, vvy, vy2); - backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, vvy, vy2, c18o1, c1o18, oMdrho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, vvy, vy2, c3o2, c2o3, oMdrho); - backwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2); - backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, vvy, vy2, c9o2, c2o9, oMdrho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, vvy, vy2, c6o1, c1o6, oMdrho); - backwardChimera(mfcab, mfcbb, mfccb, vvy, vy2); - backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, vvy, vy2, c18o1, c1o18, oMdrho); - - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, vvz, vz2, c36o1, c1o36, oMdrho); - backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, vvz, vz2, c9o1, c1o9, oMdrho); - backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, vvz, vz2, c36o1, c1o36, oMdrho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, vvz, vz2, c9o1, c1o9, oMdrho); - backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, vvz, vz2, c9o4, c4o9, oMdrho); - backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, vvz, vz2, c9o1, c1o9, oMdrho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, vvz, vz2, c36o1, c1o36, oMdrho); - backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, vvz, vz2, c9o1, c1o9, oMdrho); - backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, vvz, vz2, c36o1, c1o36, oMdrho); - - - - - - //backwardInverseChimeraWithKincompressible(mfhaaa, mfhbaa, mfhcaa, vvx, vx2, c1o1, c1o1, oMdrhoInv); - //backwardChimera(mfhaba, mfhbba, mfhcba, vvx, vx2); - //backwardInverseChimeraWithKincompressible(mfhaca, mfhbca, mfhcca, vvx, vx2, c3o1, c1o3, oMdrhoInv); - //backwardChimera(mfhaab, mfhbab, mfhcab, vvx, vx2); - //backwardChimera(mfhabb, mfhbbb, mfhcbb, vvx, vx2); - //backwardChimera(mfhacb, mfhbcb, mfhccb, vvx, vx2); - //backwardInverseChimeraWithKincompressible(mfhaac, mfhbac, mfhcac, vvx, vx2, c3o1, c1o3, oMdrhoInv); - //backwardChimera(mfhabc, mfhbbc, mfhcbc, vvx, vx2); - //backwardInverseChimeraWithKincompressible(mfhacc, mfhbcc, mfhccc, vvx, vx2, c9o1, c1o9, oMdrhoInv); - - ////////////////////////////////////////////////////////////////////////////////////// - //// Y - Dir - //backwardInverseChimeraWithKincompressible(mfhaaa, mfhaba, mfhaca, vvy, vy2, c6o1, c1o6, oMdrhoInv); - //backwardChimera(mfhaab, mfhabb, mfhacb, vvy, vy2); - //backwardInverseChimeraWithKincompressible(mfhaac, mfhabc, mfhacc, vvy, vy2, c18o1, c1o18, oMdrhoInv); - //backwardInverseChimeraWithKincompressible(mfhbaa, mfhbba, mfhbca, vvy, vy2, c3o2, c2o3, oMdrhoInv); - //backwardChimera(mfhbab, mfhbbb, mfhbcb, vvy, vy2); - //backwardInverseChimeraWithKincompressible(mfhbac, mfhbbc, mfhbcc, vvy, vy2, c9o2, c2o9, oMdrhoInv); - //backwardInverseChimeraWithKincompressible(mfhcaa, mfhcba, mfhcca, vvy, vy2, c6o1, c1o6, oMdrhoInv); - //backwardChimera(mfhcab, mfhcbb, mfhccb, vvy, vy2); - //backwardInverseChimeraWithKincompressible(mfhcac, mfhcbc, mfhccc, vvy, vy2, c18o1, c1o18, oMdrhoInv); - - ////////////////////////////////////////////////////////////////////////////////////// - //// Z - Dir - //backwardInverseChimeraWithKincompressible(mfhaaa, mfhaab, mfhaac, vvz, vz2, c36o1, c1o36, oMdrhoInv); - //backwardInverseChimeraWithKincompressible(mfhaba, mfhabb, mfhabc, vvz, vz2, c9o1, c1o9, oMdrhoInv); - //backwardInverseChimeraWithKincompressible(mfhaca, mfhacb, mfhacc, vvz, vz2, c36o1, c1o36, oMdrhoInv); - //backwardInverseChimeraWithKincompressible(mfhbaa, mfhbab, mfhbac, vvz, vz2, c9o1, c1o9, oMdrhoInv); - //backwardInverseChimeraWithKincompressible(mfhbba, mfhbbb, mfhbbc, vvz, vz2, c9o4, c4o9, oMdrhoInv); - //backwardInverseChimeraWithKincompressible(mfhbca, mfhbcb, mfhbcc, vvz, vz2, c9o1, c1o9, oMdrhoInv); - //backwardInverseChimeraWithKincompressible(mfhcaa, mfhcab, mfhcac, vvz, vz2, c36o1, c1o36, oMdrhoInv); - //backwardInverseChimeraWithKincompressible(mfhcba, mfhcbb, mfhcbc, vvz, vz2, c9o1, c1o9, oMdrhoInv); - //backwardInverseChimeraWithKincompressible(mfhcca, mfhccb, mfhccc, vvz, vz2, c36o1, c1o36, oMdrhoInv); - - ///////////////////// - - ////////////////////////////////////////////////////////////////////////// - //proof correctness - ////////////////////////////////////////////////////////////////////////// - //#ifdef PROOF_CORRECTNESS - real rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) - + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) - + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - // //real dif = fabs(drho - rho_post); - // real dif = drho + (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling - rho_post; - //#ifdef SINGLEPRECISION - // if (dif > 10.0E-7 || dif < -10.0E-7) - //#else - // if (dif > 10.0E-15 || dif < -10.0E-15) - //#endif - // { - // UB_THROW(UbException(UB_EXARGS, "drho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(rho_post) - // + " dif=" + UbSystem::toString(dif) - // + " drho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3))); - // //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): drho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3)); - // //exit(EXIT_FAILURE); - // } - //#endif - - if (UbMath::isNaN(rho_post) || UbMath::isInfinity(rho_post)) - UB_THROW(UbException(UB_EXARGS, "rho_post is not a number (nan or -1.#IND) or infinity number -1.#INF, node=" + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3) + ",phi=" + UbSystem::toString(phi[d000]))); - - ////////////////////////////////////////////////////////////////////////// - //write distribution - ////////////////////////////////////////////////////////////////////////// - // if (phi[d000] < c1o2) { - (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac;//* rho * c1o3; - - (*this->zeroDistributionsF)(x1, x2, x3) = mfbbb;// *rho* c1o3; - - //11.11.2023 - (*vxNode)(x1, x2, x3) = vvx; - (*vyNode)(x1, x2, x3) = vvy; - (*vzNode)(x1, x2, x3) = vvz; - - - - //(*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3) = mfhabb;//* rho * c1o3; - //(*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3) = mfhbab;//* rho * c1o3; - //(*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3) = mfhbba;//* rho * c1o3; - //(*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3) = mfhaab;//* rho * c1o3; - //(*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3) = mfhcab;//* rho * c1o3; - //(*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3) = mfhaba;//* rho * c1o3; - //(*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3) = mfhcba;//* rho * c1o3; - //(*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3) = mfhbaa;//* rho * c1o3; - //(*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3) = mfhbca;//* rho * c1o3; - //(*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3) = mfhaaa;//* rho * c1o3; - //(*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3) = mfhcaa;//* rho * c1o3; - //(*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3) = mfhaca;//* rho * c1o3; - //(*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfhcca;//* rho * c1o3; - //(*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3) = mfhcbb;//* rho * c1o3; - //(*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3) = mfhbcb;//* rho * c1o3; - //(*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p) = mfhbbc;//* rho * c1o3; - //(*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3) = mfhccb;//* rho * c1o3; - //(*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3) = mfhacb;//* rho * c1o3; - //(*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p) = mfhcbc;//* rho * c1o3; - //(*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p) = mfhabc;//* rho * c1o3; - //(*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p) = mfhbcc;//* rho * c1o3; - //(*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p) = mfhbac;//* rho * c1o3; - //(*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfhccc;//* rho * c1o3; - //(*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfhacc;//* rho * c1o3; - //(*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfhcac;//* rho * c1o3; - //(*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p) = mfhaac;//* rho * c1o3; - - //(*this->zeroDistributionsH2)(x1, x2, x3) = mfhbbb;// *rho* c1o3; - // } - - - // else { - // (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfhabb;//* rho * c1o3; - // (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfhbab;//* rho * c1o3; - // (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfhbba;//* rho * c1o3; - // (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfhaab;//* rho * c1o3; - // (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfhcab;//* rho * c1o3; - // (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfhaba;//* rho * c1o3; - // (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfhcba;//* rho * c1o3; - // (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfhbaa;//* rho * c1o3; - // (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfhbca;//* rho * c1o3; - // (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfhaaa;//* rho * c1o3; - // (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfhcaa;//* rho * c1o3; - // (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfhaca;//* rho * c1o3; - // (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfhcca;//* rho * c1o3; - // (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfhcbb;//* rho * c1o3; - // (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfhbcb;//* rho * c1o3; - // (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfhbbc;//* rho * c1o3; - // (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfhccb;//* rho * c1o3; - // (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfhacb;//* rho * c1o3; - // (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfhcbc;//* rho * c1o3; - // (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfhabc;//* rho * c1o3; - // (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfhbcc;//* rho * c1o3; - // (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfhbac;//* rho * c1o3; - // (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfhccc;//* rho * c1o3; - // (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfhacc;//* rho * c1o3; - // (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfhcac;//* rho * c1o3; - // (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfhaac;//* rho * c1o3; - - // (*this->zeroDistributionsF)(x1, x2, x3) = mfhbbb;// *rho* c1o3; - - - // (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3) = mfabb;//* rho * c1o3; - // (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3) = mfbab;//* rho * c1o3; - // (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3) = mfbba;//* rho * c1o3; - // (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3) = mfaab;//* rho * c1o3; - // (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab;//* rho * c1o3; - // (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3) = mfaba;//* rho * c1o3; - // (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba;//* rho * c1o3; - // (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa;//* rho * c1o3; - // (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca;//* rho * c1o3; - // (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa;//* rho * c1o3; - // (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa;//* rho * c1o3; - // (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca;//* rho * c1o3; - // (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;//* rho * c1o3; - // (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb;//* rho * c1o3; - // (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb;//* rho * c1o3; - // (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc;//* rho * c1o3; - // (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb;//* rho * c1o3; - // (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb;//* rho * c1o3; - // (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc;//* rho * c1o3; - // (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc;//* rho * c1o3; - // (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc;//* rho * c1o3; - // (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac;//* rho * c1o3; - // (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;//* rho * c1o3; - // (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc;//* rho * c1o3; - // (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac;//* rho * c1o3; - // (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac;//* rho * c1o3; - - // (*this->zeroDistributionsH2)(x1, x2, x3) = mfbbb;// *rho* c1o3; - //} - // !Old Kernel -}}}} -///////////////////// P H A S E - F I E L D S O L V E R -//////////////////////////////////////////// -/////CUMULANT 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; - real vvx = (*vxNode)(x1, x2, x3); - real vvy = (*vyNode)(x1, x2, x3); - real vvz = (*vzNode)(x1, x2, x3); - findNeighbors(phaseField, x1, x2, x3); - real dX1_phi = gradX1_phi(); - real dX2_phi = gradX2_phi(); - real dX3_phi = gradX3_phi(); - - if (isGasBoundaryNow(phiLim, phi)) { - real sumVx = 0; - real sumVy = 0; - real sumVz = 0; - real sumWeight = 1.e-100; - for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - if ((phi[fdir] > phiLim) && - !bcArray->isSolid(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - x3 + D3Q27System::DX3[fdir]) - && (x1 + D3Q27System::DX1[fdir]>=minX1) && (x1 + D3Q27System::DX1[fdir]<maxX1) - && (x2 + D3Q27System::DX2[fdir]>=minX2) && (x2 + D3Q27System::DX2[fdir]<maxX2) - && (x3 + D3Q27System::DX3[fdir]>=minX3) && (x3 + D3Q27System::DX3[fdir]<maxX3) - ) { - sumVx += WEIGTH[fdir] * (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - x3 + D3Q27System::DX3[fdir]); - sumVy += WEIGTH[fdir] * (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - x3 + D3Q27System::DX3[fdir]); - sumVz += WEIGTH[fdir] * (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], - x3 + D3Q27System::DX3[fdir]); - sumWeight += WEIGTH[fdir]; - } - } - vvx = sumVx / sumWeight; - vvy = sumVy / sumWeight; - vvz = sumVz / sumWeight; - - - } - - - real denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi) + 1.0e-20; //+ 1e-9+1e-3; - // 01.09.2022: unclear what value we have to add to the normal: lager values better cut of in gas phase? - real normX1 = dX1_phi / denom; - real normX2 = dX2_phi / denom; - real normX3 = dX3_phi / denom; - - - real omegaD =1.0/( 3.0 * mob + 0.5); - { - real mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - real mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - real mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // second component - // real concentration = - // ((((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; - // 06.10.2023 filtered phi - real concentration = phi[d000]; - //for (int dir = 0; dir <= 26; dir++) {concentration += WEIGTH[dir] * phi[dir];} - - //////////////////////////////////////////////////////////////////////////////////// - //bool inverseConcentration = false; - //if (true) //(concentration <= phiLim) - //{ - // inverseConcentration = true; - // mfcbb = D3Q27System::getIncompFeqForDirection(dPMM, c1o1, vvx, vvy, vvz) - mfcbb; - // mfbcb = D3Q27System::getIncompFeqForDirection(dMPM, c1o1, vvx, vvy, vvz) - mfbcb; - // mfbbc = D3Q27System::getIncompFeqForDirection(dMMP, c1o1, vvx, vvy, vvz) - mfbbc; - // mfccb = D3Q27System::getIncompFeqForDirection(dPPM, c1o1, vvx, vvy, vvz) - mfccb; - // mfacb = D3Q27System::getIncompFeqForDirection(d0PM, c1o1, vvx, vvy, vvz) - mfacb; - // mfcbc = D3Q27System::getIncompFeqForDirection(dPMP, c1o1, vvx, vvy, vvz) - mfcbc; - // mfabc = D3Q27System::getIncompFeqForDirection(d0MP, c1o1, vvx, vvy, vvz) - mfabc; - // mfbcc = D3Q27System::getIncompFeqForDirection(dMPP, c1o1, vvx, vvy, vvz) - mfbcc; - // mfbac = D3Q27System::getIncompFeqForDirection(dM0P, c1o1, vvx, vvy, vvz) - mfbac; - // mfccc = D3Q27System::getIncompFeqForDirection(dPPP, c1o1, vvx, vvy, vvz) - mfccc; - // mfacc = D3Q27System::getIncompFeqForDirection(d0PP, c1o1, vvx, vvy, vvz) - mfacc; - // mfcac = D3Q27System::getIncompFeqForDirection(dP0P, c1o1, vvx, vvy, vvz) - mfcac; - // mfaac = D3Q27System::getIncompFeqForDirection(d00P, c1o1, vvx, vvy, vvz) - mfaac; - // mfabb = D3Q27System::getIncompFeqForDirection(d0MM, c1o1, vvx, vvy, vvz) - mfabb; - // mfbab = D3Q27System::getIncompFeqForDirection(dM0M, c1o1, vvx, vvy, vvz) - mfbab; - // mfbba = D3Q27System::getIncompFeqForDirection(dMM0, c1o1, vvx, vvy, vvz) - mfbba; - // mfaab = D3Q27System::getIncompFeqForDirection(d00M, c1o1, vvx, vvy, vvz) - mfaab; - // mfcab = D3Q27System::getIncompFeqForDirection(dP0M, c1o1, vvx, vvy, vvz) - mfcab; - // mfaba = D3Q27System::getIncompFeqForDirection(d0M0, c1o1, vvx, vvy, vvz) - mfaba; - // mfcba = D3Q27System::getIncompFeqForDirection(dPM0, c1o1, vvx, vvy, vvz) - mfcba; - // mfbaa = D3Q27System::getIncompFeqForDirection(dM00, c1o1, vvx, vvy, vvz) - mfbaa; - // mfbca = D3Q27System::getIncompFeqForDirection(dMP0, c1o1, vvx, vvy, vvz) - mfbca; - // mfaaa = D3Q27System::getIncompFeqForDirection(d000, c1o1, vvx, vvy, vvz) - mfaaa; - // mfcaa = D3Q27System::getIncompFeqForDirection(dP00, c1o1, vvx, vvy, vvz) - mfcaa; - // mfaca = D3Q27System::getIncompFeqForDirection(d0P0, c1o1, vvx, vvy, vvz) - mfaca; - // mfcca = D3Q27System::getIncompFeqForDirection(dPP0, c1o1, vvx, vvy, vvz) - mfcca; - // mfbbb = D3Q27System::getIncompFeqForDirection(dMMM, c1o1, vvx, vvy, vvz) - mfbbb; - // normX1 *= -c1o1; - // normX2 *= -c1o1; - // normX3 *= -c1o1; - // concentration = c1o1 - concentration; - //} - - real oneMinusRho = c1o1 - concentration; - - real cx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + (mfcbb - mfabb)); - real cy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + (mfbcb - mfbab)); - real cz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + (mfbbc - mfbba)); - - //////////////////////////////////////////////////////////////////////////////////// - // calculate the square of velocities for this lattice node - real cx2 = cx * cx; - real cy2 = cy * cy; - real cz2 = cz * cz; - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (6)-(14) in \ref - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho); - forwardChimera(mfaab, mfabb, mfacb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho); - forwardChimera(mfbab, mfbbb, mfbcb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho); - forwardChimera(mfcab, mfcbb, mfccb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho); - forwardChimera(mfaba, mfbba, mfcba, cx, cx2); - forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho); - forwardChimera(mfaab, mfbab, mfcab, cx, cx2); - forwardChimera(mfabb, mfbbb, mfcbb, cx, cx2); - forwardChimera(mfacb, mfbcb, mfccb, cx, cx2); - forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho); - forwardChimera(mfabc, mfbbc, mfcbc, cx, cx2); - forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c3o1, c1o9, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - //! - experimental Cumulant ... to be published ... hopefully - //! - - // linearized orthogonalization of 3rd order central moments - real Mabc = mfabc - mfaba * c1o3; - real Mbca = mfbca - mfbaa * c1o3; - real Macb = mfacb - mfaab * c1o3; - real Mcba = mfcba - mfaba * c1o3; - real Mcab = mfcab - mfaab * c1o3; - real Mbac = mfbac - mfbaa * c1o3; - // linearized orthogonalization of 5th order central moments - real Mcbc = mfcbc - mfaba * c1o9; - real Mbcc = mfbcc - mfbaa * c1o9; - real Mccb = mfccb - mfaab * c1o9; - - // 25.03.2023 mixed normals - real MomX1 = vvx * concentration - cx; - real MomX2 = vvy * concentration - cy; - real MomX3 = vvz * concentration - cz; - real mixNormal = 0.5; - // 0.75; - - real MomXDenom = sqrt(MomX1 * MomX1 + MomX2 * MomX2 + MomX3 * MomX3) + 1.0e-100; - real scaleNorm = (normX1 * MomX1 + normX2 * MomX2 + normX3 * MomX3) / MomXDenom; - //scaleNorm = scaleNorm * scaleNorm; //(c1o2 + c1o2 * scaleNorm) * scaleNorm; // scaleNorm * (c1o1+(c2o1*concentration - c1o1) * (c2o1*concentration - c1o1) * (scaleNorm-c1o1)); // *scaleNorm* scaleNorm; - //scaleNorm = scaleNorm * scaleNorm; - //scaleNorm = scaleNorm * scaleNorm; - //scaleNorm = scaleNorm * scaleNorm; - if (true)// (phi[d000] > phiLim) //(true) // ((phi[d000] > phiLim)||(normX1*vvx+normX2*vvy+normX3*vvz<0)) - { - - normX1 = (normX1 * (c1o1 - mixNormal) + mixNormal * MomX1 / MomXDenom) * scaleNorm; - normX2 = (normX2 * (c1o1 - mixNormal) + mixNormal * MomX2 / MomXDenom) * scaleNorm; - normX3 = (normX3 * (c1o1 - mixNormal) + mixNormal * MomX3 / MomXDenom) * scaleNorm; - - // 31.05.2022 addaptive mobility - // omegaD = c1o1 + (sqrt((cx - vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration))) / (sqrt((cx - vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * - // concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration)) + fabs((1.0 - concentration) * (concentration)) * c1o6 * oneOverInterfaceScale+1.0e-200); omegaD = c2o1 * (concentration * (concentration - c1o1)) / (-c6o1 * (sqrt((cx - - // vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration))) + (concentration * (concentration - c1o1))+1.0e-200); - // collision of 1st order moments - // 15.08.23 shifting of concentration - // real modConcentration = (concentration - phiL) / (phiH - phiL); - cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + normX1 * (c1o1 - 0.5 * omegaD) * (phiH - concentration) * (concentration - phiL) * c1o3 * oneOverInterfaceScale / (phiH - phiL); - cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + normX2 * (c1o1 - 0.5 * omegaD) * (phiH - concentration) * (concentration - phiL) * c1o3 * oneOverInterfaceScale / (phiH - phiL); - cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + normX3 * (c1o1 - 0.5 * omegaD) * (phiH - concentration) * (concentration - phiL) * c1o3 * oneOverInterfaceScale / (phiH - phiL); - } - else - { - real normX1FD = normX1; - real normX2FD = normX2; - real normX3FD = normX3; - normX1 = (normX1 * (c1o1 - mixNormal) + mixNormal * MomX1 / MomXDenom) * scaleNorm; - normX2 = (normX2 * (c1o1 - mixNormal) + mixNormal * MomX2 / MomXDenom) * scaleNorm; - normX3 = (normX3 * (c1o1 - mixNormal) + mixNormal * MomX3 / MomXDenom) * scaleNorm; - real scaleAdvectionContribution = (c1o1 - (concentration - phiL) / (phiH - phiL) * c2o1) ; - scaleAdvectionContribution = scaleAdvectionContribution * scaleAdvectionContribution * scaleAdvectionContribution * scaleAdvectionContribution * scaleAdvectionContribution; - scaleAdvectionContribution = scaleAdvectionContribution * scaleAdvectionContribution * - scaleAdvectionContribution * scaleAdvectionContribution * - scaleAdvectionContribution; - // scaleAdvectionContribution = 0; - // scaleAdvectionContribution = (concentration > 0.001) ? 0 : 1; - cx = scaleAdvectionContribution * (cx * (c1o1 - omegaD) + omegaD * vvx * concentration + normX1 * (c1o1 - 0.5 * omegaD) * (phiH - concentration) * (concentration - phiL) * c1o3 * oneOverInterfaceScale / (phiH - phiL)) - +(c1o1-scaleAdvectionContribution)*(cx - normX1FD* (oneOverInterfaceScale * (concentration - phiH) * (concentration - phiL)) / ((phiH - phiL)) * c1o3); - cy = scaleAdvectionContribution * (cy * (c1o1 - omegaD) + omegaD * vvy * concentration + normX2 * (c1o1 - 0.5 * omegaD) * (phiH - concentration) * (concentration - phiL) * c1o3 * oneOverInterfaceScale / (phiH - phiL)) - +(c1o1 - scaleAdvectionContribution) * - (cy - normX2FD * (oneOverInterfaceScale * (concentration - phiH) * (concentration - phiL)) / ((phiH - phiL)) * c1o3); - cz = scaleAdvectionContribution * (cz * (c1o1 - omegaD) + omegaD * vvz * concentration + normX3 * (c1o1 - 0.5 * omegaD) * (phiH - concentration) * (concentration - phiL) * c1o3 * oneOverInterfaceScale / (phiH - phiL)) - +(c1o1 - scaleAdvectionContribution) * - (cz - normX3FD * (oneOverInterfaceScale * (concentration - phiH) * (concentration - phiL)) / ((phiH - phiL)) * c1o3); - // cy = cy - normX2FD * (oneOverInterfaceScale * (concentration - phiH) * (concentration - phiL)) / ((phiH - phiL)) * c1o3; - // cz = cz - normX3FD * (oneOverInterfaceScale * (concentration - phiH) * (concentration - phiL)) / ((phiH - phiL)) * c1o3; - } - //cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration)*c1o3 * oneOverInterfaceScale; - //cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration)*c1o3 * oneOverInterfaceScale; - //cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration)*c1o3 * oneOverInterfaceScale; - - //cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration) * (c1o1-(1.0 - concentration) * (concentration)) * c1o3 * oneOverInterfaceScale; - // cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration) * (c1o1 - (1.0 - concentration) * (concentration)) * c1o3 * oneOverInterfaceScale; - // cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration) * (c1o1 - (1.0 - concentration) * (concentration)) * c1o3 * oneOverInterfaceScale; - - cx2 = cx * cx; - cy2 = cy * cy; - cz2 = cz * cz; - - //// equilibration of 2nd order moments - mfbba = c0o1; - mfbab = c0o1; - mfabb = c0o1; - - mfcaa = c1o3 * concentration; - mfaca = c1o3 * concentration; - mfaac = c1o3 * concentration; - - //take second moment from fluid - //mfbba = concentration*MMxy; - //mfbab = concentration*MMxz; - //mfabb = concentration*MMyz; - - //mfcaa = (c1o3+MMxx) * concentration; - //mfaca = (c1o3+MMyy) * concentration; - //mfaac = (c1o3+MMzz) * concentration; - - - - // equilibration of 3rd order moments - //Mabc = c0o1; - //Mbca = c0o1; - //Macb = c0o1; - //Mcba = c0o1; - //Mcab = c0o1; - //Mbac = c0o1; - //mfbbb = c0o1; - - ///Overrelaxaton third moments - real omePhiThird = 1.0; - Mabc -= omePhiThird * Mabc; - Mbca -= omePhiThird * Mbca; - Macb -= omePhiThird * Macb; - Mcba -= omePhiThird * Mcba; - Mcab -= omePhiThird * Mcab; - Mbac -= omePhiThird * Mbac; - mfbbb -= omePhiThird *mfbbb; - - // from linearized orthogonalization 3rd order central moments to central moments - mfabc = Mabc + mfaba * c1o3; - mfbca = Mbca + mfbaa * c1o3; - mfacb = Macb + mfaab * c1o3; - mfcba = Mcba + mfaba * c1o3; - mfcab = Mcab + mfaab * c1o3; - mfbac = Mbac + mfbaa * c1o3; - - // equilibration of 4th order moments - mfacc = c1o9 * concentration; - mfcac = c1o9 * concentration; - mfcca = c1o9 * concentration; - - mfcbb = c0o1; - mfbcb = c0o1; - mfbbc = c0o1; - - // equilibration of 5th order moments - Mcbc = c0o1; - Mbcc = c0o1; - Mccb = c0o1; - - // from linearized orthogonalization 5th order central moments to central moments - mfcbc = Mcbc + mfaba * c1o9; - mfbcc = Mbcc + mfbaa * c1o9; - mfccb = Mccb + mfaab * c1o9; - - // equilibration of 6th order moment - mfccc = c1o27 * concentration; - - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (88)-(96) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho); - backwardChimera(mfaba, mfbba, mfcba, cx, cx2); - backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho); - backwardChimera(mfaab, mfbab, mfcab, cx, cx2); - backwardChimera(mfabb, mfbbb, mfcbb, cx, cx2); - backwardChimera(mfacb, mfbcb, mfccb, cx, cx2); - backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho); - backwardChimera(mfabc, mfbbc, mfcbc, cx, cx2); - backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c9o1, c1o9, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho); - backwardChimera(mfaab, mfabb, mfacb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho); - backwardChimera(mfbab, mfbbb, mfbcb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho); - backwardChimera(mfcab, mfcbb, mfccb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho); - - - //if (inverseConcentration) { - // mfcbb = D3Q27System::getIncompFeqForDirection(dPMM, c1o1, vvx, vvy, vvz) - mfcbb; - // mfbcb = D3Q27System::getIncompFeqForDirection(dMPM, c1o1, vvx, vvy, vvz) - mfbcb; - // mfbbc = D3Q27System::getIncompFeqForDirection(dMMP, c1o1, vvx, vvy, vvz) - mfbbc; - // mfccb = D3Q27System::getIncompFeqForDirection(dPPM, c1o1, vvx, vvy, vvz) - mfccb; - // mfacb = D3Q27System::getIncompFeqForDirection(d0PM, c1o1, vvx, vvy, vvz) - mfacb; - // mfcbc = D3Q27System::getIncompFeqForDirection(dPMP, c1o1, vvx, vvy, vvz) - mfcbc; - // mfabc = D3Q27System::getIncompFeqForDirection(d0MP, c1o1, vvx, vvy, vvz) - mfabc; - // mfbcc = D3Q27System::getIncompFeqForDirection(dMPP, c1o1, vvx, vvy, vvz) - mfbcc; - // mfbac = D3Q27System::getIncompFeqForDirection(dM0P, c1o1, vvx, vvy, vvz) - mfbac; - // mfccc = D3Q27System::getIncompFeqForDirection(dPPP, c1o1, vvx, vvy, vvz) - mfccc; - // mfacc = D3Q27System::getIncompFeqForDirection(d0PP, c1o1, vvx, vvy, vvz) - mfacc; - // mfcac = D3Q27System::getIncompFeqForDirection(dP0P, c1o1, vvx, vvy, vvz) - mfcac; - // mfaac = D3Q27System::getIncompFeqForDirection(d00P, c1o1, vvx, vvy, vvz) - mfaac; - // mfabb = D3Q27System::getIncompFeqForDirection(d0MM, c1o1, vvx, vvy, vvz) - mfabb; - // mfbab = D3Q27System::getIncompFeqForDirection(dM0M, c1o1, vvx, vvy, vvz) - mfbab; - // mfbba = D3Q27System::getIncompFeqForDirection(dMM0, c1o1, vvx, vvy, vvz) - mfbba; - // mfaab = D3Q27System::getIncompFeqForDirection(d00M, c1o1, vvx, vvy, vvz) - mfaab; - // mfcab = D3Q27System::getIncompFeqForDirection(dP0M, c1o1, vvx, vvy, vvz) - mfcab; - // mfaba = D3Q27System::getIncompFeqForDirection(d0M0, c1o1, vvx, vvy, vvz) - mfaba; - // mfcba = D3Q27System::getIncompFeqForDirection(dPM0, c1o1, vvx, vvy, vvz) - mfcba; - // mfbaa = D3Q27System::getIncompFeqForDirection(dM00, c1o1, vvx, vvy, vvz) - mfbaa; - // mfbca = D3Q27System::getIncompFeqForDirection(dMP0, c1o1, vvx, vvy, vvz) - mfbca; - // mfaaa = D3Q27System::getIncompFeqForDirection(d000, c1o1, vvx, vvy, vvz) - mfaaa; - // mfcaa = D3Q27System::getIncompFeqForDirection(dP00, c1o1, vvx, vvy, vvz) - mfcaa; - // mfaca = D3Q27System::getIncompFeqForDirection(d0P0, c1o1, vvx, vvy, vvz) - mfaca; - // mfcca = D3Q27System::getIncompFeqForDirection(dPP0, c1o1, vvx, vvy, vvz) - mfcca; - // mfbbb = D3Q27System::getIncompFeqForDirection(dMMM, c1o1, vvx, vvy, vvz) - mfbbb; - - // } - - - (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3) = mfabb; - (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3) = mfbab; - (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3) = mfbba; - (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3) = mfaab; - (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab; - (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3) = mfaba; - (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba; - (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa; - (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca; - (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa; - (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa; - (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca; - (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca; - - (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3 ) = mfcbb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3 ) = mfbcb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3 ) = mfccb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3 ) = mfacb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac; - - (*this->zeroDistributionsH1)(x1,x2,x3) = mfbbb; - - - - - } - } - } - } - } - //Set multiphase BCs - //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; - // findNeighbors(phaseField, x1, x2, x3); - // if ((phi[d000] > c1o2) && ( - // (phi[dP00] <= c1o2) || - // (phi[dM00] <= c1o2) || - // (phi[d00P] <= c1o2) || - // (phi[d00M] <= c1o2) || - // (phi[d0M0] <= c1o2) || - // (phi[d0P0] <= c1o2) || - // (phi[dPP0] <= c1o2) || - // (phi[dPM0] <= c1o2) || - // (phi[dP0P] <= c1o2) || - // (phi[dP0M] <= c1o2) || - // (phi[dMP0] <= c1o2) || - // (phi[dMM0] <= c1o2) || - // (phi[dM0P] <= c1o2) || - // (phi[dM0M] <= c1o2) || - // (phi[d0PM] <= c1o2) || - // (phi[d0MM] <= c1o2) || - // (phi[d0PP] <= c1o2) || - // (phi[d0MP] <= c1o2) || - // (phi[dPPP] <= c1o2) || - // (phi[dPMP] <= c1o2) || - // (phi[dMPP] <= c1o2) || - // (phi[dMMP] <= c1o2) || - // (phi[dPPM] <= c1o2) || - // (phi[dPMM] <= c1o2) || - // (phi[dMPM] <= c1o2) || - // (phi[dMMM] <= c1o2) - // )) { - // //real mfabb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);//* rho * c1o3; - // //real mfbab = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);//* rho * c1o3; - // //real mfbba = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3);//* rho * c1o3; - // //real mfaab = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3);//* rho * c1o3; - // //real mfcab = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3);//* rho * c1o3; - // //real mfaba = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3);//* rho * c1o3; - // //real mfcba = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3);//* rho * c1o3; - // //real mfbaa = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3);//* rho * c1o3; - // //real mfbca = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3);//* rho * c1o3; - // //real mfaaa = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3);//* rho * c1o3; - // //real mfcaa = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3);//* rho * c1o3; - // //real mfaca = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3);//* rho * c1o3; - // //real mfcca = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3);//* rho * c1o3; - // //real mfcbb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3);//* rho * c1o3; - // //real mfbcb = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3);//* rho * c1o3; - // //real mfbbc = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p);//* rho * c1o3; - // //real mfccb = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3);//* rho * c1o3; - // //real mfacb = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3);//* rho * c1o3; - // //real mfcbc = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p);//* rho * c1o3; - // //real mfabc = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p);//* rho * c1o3; - // //real mfbcc = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p);//* rho * c1o3; - // //real mfbac = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p);//* rho * c1o3; - // //real mfccc = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p);//* rho * c1o3; - // //real mfacc = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p);//* rho * c1o3; - // //real mfcac = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p);//* rho * c1o3; - // //real mfaac = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p);//* rho * c1o3; - // //real mfbbb = (*this->zeroDistributionsF)(x1, x2, x3); - // - // real vx = (*vxNode)(x1, x2, x3); - // real vy = (*vyNode)(x1, x2, x3); - // real vz = (*vzNode)(x1, x2, x3); - // SPtr<DistributionArray3D> distribution = this->getDataSet()->getFdistributions(); - // real ff[27]; - // distribution->getDistributionInv(ff, x1, x2 , x3 ); - - // for (int fdir = D3Q27System::STARTF; fdir <= D3Q27System::ENDF; fdir++) { - // if ((phi[fdir] <= c1o2)) { - // real rhoG = (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); - // real ftemp= D3Q27System::getCompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vx, vy, vz) + D3Q27System::getCompFeqForDirection(fdir, rhoG, vx, vy, vz); - // real fBB; - // fBB=distribution->getPostCollisionDistributionForDirection( x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir],fdir); - // distribution->setPreCollisionDistributionForDirection(ftemp - ff[fdir], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir); - // distribution->setPostCollisionDistributionForDirection(fBB-c6o1*D3Q27System::WEIGTH[fdir] * (-vx * D3Q27System::DX1[fdir] - vy * D3Q27System::DX2[fdir] - vz * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - // } - // } - - // //if ((phi[dP00] <= c1o2)) { - // // real rhoG = (*rhoNode)(x1 + 1, x2, x3); - // // real ftemp = D3Q27System::getCompFeqForDirection(W, rhoG, vx,vy,vz )+ D3Q27System::getCompFeqForDirection(E, rhoG, vx, vy, vz); - // // real fBB = (*this->localDistributionsF)(D3Q27System::ET_E, x1 + 1, x2, x3); - // // (*this->localDistributionsF)(D3Q27System::ET_E, x1+1, x2, x3)=ftemp-mfcbb; - // // (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3)=fBB-c6o1*c2o27*(-vx); - // //} - // //if ((phi[dM00] <= c1o2)) { - // // real rhoG = (*rhoNode)(x1 - 1, x2, x3); - // // real ftemp = D3Q27System::getCompFeqForDirection(E, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(W, rhoG, vx, vy, vz); - // // real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p-1, x2, x3); - // // (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p - 1, x2, x3) = ftemp - mfabb; - // // (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = fBB - c6o1 * c2o27 * ( vx); - // //} - // //if ((phi[d0P0] <= c1o2)) { - // // real rhoG = (*rhoNode)(x1, x2+1, x3); - // // real ftemp = D3Q27System::getCompFeqForDirection(S, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(N, rhoG, vx, vy, vz); - // // real fBB = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2+1, x3); - // // (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2+1, x3) = ftemp - mfbcb; - // // (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = fBB - c6o1 * c2o27 * (-vy); - // //} - // //if ((phi[d0M0] <= c1o2)) { - // // real rhoG = (*rhoNode)(x1, x2 - 1, x3); - // // real ftemp = D3Q27System::getCompFeqForDirection(N, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(S, rhoG, vx, vy, vz); - // // real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p-1, x3); - // // (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p - 1, x3) = ftemp - mfbab; - // // (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = fBB - c6o1 * c2o27 * ( vy); - // //} - // //if ((phi[d00P] <= c1o2)) { - // // real rhoG = (*rhoNode)(x1, x2 , x3+1); - // // real ftemp = D3Q27System::getCompFeqForDirection(B, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(T, rhoG, vx, vy, vz); - // // real fBB = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3+1); - // // (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3+1) = ftemp - mfbbc; - // // (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = fBB - c6o1 * c2o27 * (-vz); - // //} - // //if ((phi[d00M] <= c1o2)) { - // // real rhoG = (*rhoNode)(x1, x2, x3 - 1); - // // real ftemp = D3Q27System::getCompFeqForDirection(T, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(B, rhoG, vx, vy, vz); - // // real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p-1); - // // (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p-1) = ftemp - mfbba; - // // (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = fBB - c6o1 * c2o27 * ( vz); - // //} - // // - // //if ((phi[dPP0] <= c1o2)) { - // // real rhoG = (*rhoNode)(x1 + 1, x2+1, x3); - // // real ftemp = D3Q27System::getCompFeqForDirection(SW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(NE, rhoG, vx, vy, vz); - // // real fBB = (*this->localDistributionsF)(D3Q27System::ET_NE, x1+1, x2+1, x3); - // // (*this->localDistributionsF)(D3Q27System::ET_NE, x1 + 1, x2 + 1, x3) = ftemp - mfccb; - // // (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = fBB - c6o1 * c1o54 * (-vx-vy); - // //} - // //if ((phi[dMM0] <= c1o2)) { - // // real rhoG = (*rhoNode)(x1 - 1, x2 - 1, x3); - // // real ftemp = D3Q27System::getCompFeqForDirection(NE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(SW, rhoG, vx, vy, vz); - // // real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p-1, x2p-1, x3); - // // (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p - 1, x2p - 1, x3) = ftemp - mfaab; - // // (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = fBB - c6o1 * c1o54 * ( vx + vy); - // //} - // //if ((phi[dMP0] <= c1o2)) { - // // real rhoG = (*rhoNode)(x1 - 1, x2 + 1, x3); - // // real ftemp = D3Q27System::getCompFeqForDirection(SE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(NW, rhoG, vx, vy, vz); - // // real fBB = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p-1, x2+1, x3); - // // (*this->localDistributionsF)(D3Q27System::ET_NW, x1p - 1, x2 + 1, x3) = ftemp - mfacb; - // // (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = fBB - c6o1 * c1o54 * ( vx - vy); - // //} - // //if ((phi[dPM0] <= c1o2)) { - // // real rhoG = (*rhoNode)(x1 + 1, x2 - 1, x3); - // // real ftemp = D3Q27System::getCompFeqForDirection(NW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(SE, rhoG, vx, vy, vz); - // // real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1+1, x2p-1, x3); - // // (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1 + 1, x2p - 1, x3) = ftemp - mfcab; - // // (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = fBB - c6o1 * c1o54 * (-vx + vy); - // //} - // //if ((phi[dP0P] <= c1o2)) { - // // real rhoG = (*rhoNode)(x1 + 1, x2 , x3+1); - // // real ftemp = D3Q27System::getCompFeqForDirection(BW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TE, rhoG, vx, vy, vz); - // // real fBB = (*this->localDistributionsF)(D3Q27System::ET_TE, x1+1, x2, x3+1); - // // (*this->localDistributionsF)(D3Q27System::ET_TE, x1 + 1, x2, x3 + 1) = ftemp - mfcbc; - // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = fBB - c6o1 * c1o54 * (-vx - vz); - // //} - // //if ((phi[dM0P] <= c1o2)) { - // // real rhoG = (*rhoNode)(x1 - 1, x2, x3 + 1); - // // real ftemp = D3Q27System::getCompFeqForDirection(BE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TW, rhoG, vx, vy, vz); - // // real fBB = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p-1, x2, x3+1); - // // (*this->localDistributionsF)(D3Q27System::ET_TW, x1p - 1, x2, x3 + 1) = ftemp - mfabc; - // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = fBB - c6o1 * c1o54 * ( vx - vz); - // //} - // //if ((phi[dP0M] <= c1o2)) { - // // real rhoG = (*rhoNode)(x1 + 1, x2, x3 - 1); - // // real ftemp = D3Q27System::getCompFeqForDirection(TW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BE, rhoG, vx, vy, vz); - // // real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1+1, x2, x3p-1); - // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1 + 1, x2, x3p - 1) = ftemp - mfcba; - // // (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = fBB - c6o1 * c1o54 * (-vx + vz); - // //} - // //if ((phi[dM0M] <= c1o2)) { - // // real rhoG = (*rhoNode)(x1 - 1, x2, x3 - 1); - // // real ftemp = D3Q27System::getCompFeqForDirection(TE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BW, rhoG, vx, vy, vz); - // // real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p-1, x2, x3p-1); - // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p - 1, x2, x3p - 1) = ftemp - mfaba; - // // (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = fBB - c6o1 * c1o54 * ( vx + vz); - // //} - // //if ((phi[d0PP] <= c1o2)) { - // // real rhoG = (*rhoNode)(x1, x2+1, x3 + 1); - // // real ftemp = D3Q27System::getCompFeqForDirection(BS, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TN, rhoG, vx, vy, vz); - // // real fBB = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2+1, x3+1); - // // (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2 + 1, x3 + 1) = ftemp - mfbcc; - // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = fBB - c6o1 * c1o54 * (-vy - vz); - // //} - // //if ((phi[d0MP] <= c1o2)) { - // // real rhoG = (*rhoNode)(x1, x2 - 1, x3 + 1); - // // real ftemp = D3Q27System::getCompFeqForDirection(BN, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TS, rhoG, vx, vy, vz); - // // real fBB = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p-1, x3+1); - // // (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p - 1, x3 + 1) = ftemp - mfbac; - // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = fBB - c6o1 * c1o54 * ( vy - vz); - // //} - // //if ((phi[d0PM] <= c1o2)) { - // // real rhoG = (*rhoNode)(x1, x2 + 1, x3 - 1); - // // real ftemp = D3Q27System::getCompFeqForDirection(TS, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BN, rhoG, vx, vy, vz); - // // real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2+1, x3p-1); - // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2 + 1, x3p - 1) = ftemp - mfbca; - // // (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = fBB - c6o1 * c1o54 * (-vy + vz); - // //} - // //if ((phi[d0MM] <= c1o2)) { - // // real rhoG = (*rhoNode)(x1, x2 - 1, x3 - 1); - // // real ftemp = D3Q27System::getCompFeqForDirection(TN, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BS, rhoG, vx, vy, vz); - // // real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p-1, x3p-1); - // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p - 1, x3p - 1) = ftemp - mfbaa; - // // (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = fBB - c6o1 * c1o54 * (-vy - vz); - // //} - - // //if ((phi[dPPP] <= c1o2)) { - // // real rhoG = (*rhoNode)(x1+1, x2 + 1, x3 + 1); - // // real ftemp = D3Q27System::getCompFeqForDirection(BSW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TNE, rhoG, vx, vy, vz); - // // real fBB = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1+1, x2+1, x3+1); - // // (*this->localDistributionsF)(D3Q27System::ET_TNE, x1 + 1, x2 + 1, x3 + 1) = ftemp - mfccc; - // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = fBB - c6o1 * c1o216 * (-vx -vy - vz); - // //} - // //if ((phi[dMPP] <= c1o2)) { - // // real rhoG = (*rhoNode)(x1 - 1, x2 + 1, x3 + 1); - // // real ftemp = D3Q27System::getCompFeqForDirection(BSE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TNW, rhoG, vx, vy, vz); - // // real fBB = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p-1, x2+1, x3+1); - // // (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p - 1, x2 + 1, x3 + 1) = ftemp - mfacc; - // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = fBB - c6o1 * c1o216 * ( vx - vy - vz); - // //} - // //if ((phi[dMMP] <= c1o2)) { - // // real rhoG = (*rhoNode)(x1 - 1, x2 - 1, x3 + 1); - // // real ftemp = D3Q27System::getCompFeqForDirection(BNE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TSW, rhoG, vx, vy, vz); - // // real fBB = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p-1, x2p-1, x3+1); - // // (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p - 1, x2p - 1, x3 + 1) = ftemp - mfaac; - // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = fBB - c6o1 * c1o216 * (vx + vy - vz); - // //} - // //if ((phi[dPMP] <= c1o2)) { - // // real rhoG = (*rhoNode)(x1 + 1, x2 - 1, x3 + 1); - // // real ftemp = D3Q27System::getCompFeqForDirection(BNW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TSE, rhoG, vx, vy, vz); - // // real fBB = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1+1, x2p-1, x3+1); - // // (*this->localDistributionsF)(D3Q27System::ET_TSE, x1 + 1, x2p - 1, x3 + 1) = ftemp - mfcac; - // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = fBB - c6o1 * c1o216 * (-vx + vy - vz); - // //} - // //if ((phi[dPMM] <= c1o2)) { - // // real rhoG = (*rhoNode)(x1 + 1, x2 - 1, x3 - 1); - // // real ftemp = D3Q27System::getCompFeqForDirection(TNW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BSE, rhoG, vx, vy, vz); - // // real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1+1, x2p-1, x3p-1); - // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1+1, x2p-1, x3p-1) = ftemp - mfcaa; - // // (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = fBB - c6o1 * c1o216 * (-vx + vy + vz); - // //} - // //if ((phi[dMMM] <= c1o2)) { - // // real rhoG = (*rhoNode)(x1 - 1, x2 - 1, x3 - 1); - // // real ftemp = D3Q27System::getCompFeqForDirection(TNE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BSW, rhoG, vx, vy, vz); - // // real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p-1, x2p-1, x3p-1); - // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p - 1, x2p - 1, x3p - 1) = ftemp - mfaaa; - // // (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = fBB - c6o1 * c1o216 * ( vx + vy + vz); - // //} - // //if ((phi[dMPM] <= c1o2)) { - // // real rhoG = (*rhoNode)(x1 - 1, x2 + 1, x3 - 1); - // // real ftemp = D3Q27System::getCompFeqForDirection(TSE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BNW, rhoG, vx, vy, vz); - // // real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p-1, x2+1, x3p-1); - // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p - 1, x2 + 1, x3p - 1) = ftemp - mfaca; - // // (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = fBB - c6o1 * c1o216 * (vx - vy + vz); - // //} - // //if ((phi[dPPM] <= c1o2)) { - // // real rhoG = (*rhoNode)(x1 + 1, x2 + 1, x3 - 1); - // // real ftemp = D3Q27System::getCompFeqForDirection(TSW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BNE, rhoG, vx, vy, vz); - // // real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1+1, x2+1, x3p-1); - // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1 + 1, x2 + 1, x3p - 1) = ftemp - mfcca; - // // (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = fBB - c6o1 * c1o216 * (-vx - vy + vz); - // //} - - - - - // } - // } - // } - // } - //} - -//{ -// real fff[27]; -// SPtr<DistributionArray3D> distributionC = this->getDataSet()->getFdistributions(); -// // for (int x3 = minX3 - 1; x3 < maxX3 + 1; x3++) { -// // for (int x2 = minX2 - 1; x2 < maxX2 + 1; x2++) { -// // for (int x1 = minX1 - 1; x1 < maxX1 + 1; x1++) { -// // if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) -// for (int x3 = minX3 - ghostLayerWidth + 1; x3 < maxX3 + ghostLayerWidth - 1; x3++) { -// for (int x2 = minX2 - ghostLayerWidth + 1; x2 < maxX2 + ghostLayerWidth - 1; x2++) { -// for (int x1 = minX1 - ghostLayerWidth + 1; x1 < maxX1 + ghostLayerWidth - 1; x1++) { -// if (!bcArray->isSolid(x1, x2, x3) /* && !bcArray->isUndefined(x1, x2, x3)*/) -// -// { -// -// findNeighbors(phaseFieldOld, x1, x2, x3); -// findNeighbors2(phaseField, x1, x2, x3); -// if ((phi[d000] <= phiLim) && (phi2[d000] > phiLim)) { -// for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { -// if ((phi2[fdir] > phiLim) && -// (!bcArray->isSolid(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], -// x3 + D3Q27System::DX3[fdir]) && -// !bcArray->isUndefined(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], -// x3 + D3Q27System::DX3[fdir]))) { -// distributionC->getDistributionInv(fff, x1 + D3Q27System::DX1[fdir], -// x2 + D3Q27System::DX2[fdir], -// x3 + D3Q27System::DX3[fdir]); -// real vx, vy, vz, rho; -// D3Q27System::calcIncompMacroscopicValues(fff, rho, vx, vy, vz); -// real feq = D3Q27System::getIncompFeqForDirection(fdir, rho, vx, vy, vz); -// // real feqZero=D3Q27System::getIncompFeqForDirection(fdir, 0.0,vx,vy,vz); -// // real feqZeroI = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0.0, -// // vx, vy, vz); distribution->setDistributionForDirection( -// // c1o2 * (feqZero+feqZeroI-feq+ -// // distribution->getPostCollisionDistributionForDirection( -// // x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + -// // D3Q27System::DX3[fdir],fdir)), -// // x1, x2, x3, -// // fdir); -// distributionC->setDistributionForDirection(feq, x1, x2, x3, fdir); -// } -// } -// } -// } -// } -// } -// } -// } - - } - - - - - - - -////////////////////////////////////////////////////////////////////////// - -real MultiphaseScaleDistributionLBMKernel::gradX1_phi() -{ - using namespace D3Q27System; - return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP]))) - + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) + - +WEIGTH[d0P0] * (phi[dP00] - phi[dM00])); -} - -real MultiphaseScaleDistributionLBMKernel::gradX2_phi() -{ - using namespace D3Q27System; - return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM]))) - + WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) + - +WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0])); -} - -real MultiphaseScaleDistributionLBMKernel::gradX3_phi() -{ - using namespace D3Q27System; - return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP]))) - + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) + - +WEIGTH[d0P0] * (phi[d00P] - phi[d00M])); -} - -real MultiphaseScaleDistributionLBMKernel::gradX1_rhoInv(real rhoL,real rhoDIV) -{ - using namespace D3Q27System; - return 3.0 * ((WEIGTH[dPPP] * (((1.0/(rhoL+rhoDIV*phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) + (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) + (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])))) - + WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) + (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) + ((1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0])) + (1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0]))))) + - +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[dP00]) - 1.0 / (rhoL + rhoDIV * phi[dM00]))); -} - -real MultiphaseScaleDistributionLBMKernel::gradX2_rhoInv(real rhoL,real rhoDIV) -{ - using namespace D3Q27System; - return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])) - (1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])))) - + WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM])) + (1.0 / (rhoL + rhoDIV * phi[d0PM]) - 1.0 / (rhoL + rhoDIV * phi[d0MP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0])) - (1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0]))))) + - +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d0P0]) - 1.0 / (rhoL + rhoDIV * phi[d0M0]))); -} - -real MultiphaseScaleDistributionLBMKernel::gradX3_rhoInv(real rhoL, real rhoDIV) -{ - using namespace D3Q27System; - return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) - (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])))) - + WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) - (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) + ((1.0 / (rhoL + rhoDIV * phi[d0MP]) - 1.0 / (rhoL + rhoDIV * phi[d0PM])) + (1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM]))))) + - +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d00P]) - 1.0 / (rhoL + rhoDIV * phi[d00M]))); -} - -real MultiphaseScaleDistributionLBMKernel::gradX1_phi2() -{ - using namespace D3Q27System; - return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP]))) - + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) + - +WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00])); -} - -real MultiphaseScaleDistributionLBMKernel::gradX2_phi2() -{ - using namespace D3Q27System; - return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM]))) - + WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) + - +WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0])); -} - -real MultiphaseScaleDistributionLBMKernel::gradX3_phi2() -{ - using namespace D3Q27System; - return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP]))) - + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) + - +WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M])); -} - -real MultiphaseScaleDistributionLBMKernel::nabla2_phi() -{ - using namespace D3Q27System; - real sum = 0.0; - sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000]))) - + (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000])))); - sum += WEIGTH[d0PP] * ( - (((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000]))) - + (((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000]))) - + (((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000]))) - ); - sum += WEIGTH[d00P] * ( - ((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000])) - + ((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000])) - + ((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000])) - ); - - return 6.0 * sum; -} - -real MultiphaseScaleDistributionLBMKernel::computeCurvature_phi() -{ - using namespace D3Q27System; - using namespace UbMath; - - real phiX = gradX1_phi(); - real phiY = gradX2_phi(); - real phiZ = gradX3_phi(); - real phiXX = - c4o9 * (phi[dP00] - c2o1 * phi[d000] + phi[dM00]) + (c1o9 * (((phi[dPP0] - c2o1 * phi[d0P0] + phi[dMP0]) + (phi[dPM0] - c2o1 * phi[d0M0] + phi[dMM0])) + ((phi[dP0P] - c2o1 * phi[d00P] + phi[dM0P]) + (phi[dP0M] - c2o1 * phi[d00M] + phi[dM0M]))) + - c1o36 * (((phi[dPPP] - c2o1 * phi[d0PP] + phi[dMPP]) + (phi[dPMP] - c2o1 * phi[d0MP] + phi[dMMP])) + ((phi[dPPM] - c2o1 * phi[d0PM] + phi[dMPM]) + (phi[dPMM] - c2o1 * phi[d0MM] + phi[dMMM])))); - real phiYY = - c4o9 * (phi[d0P0] - c2o1 * phi[d000] + phi[d0M0]) + (c1o9 * (((phi[dPP0] - c2o1 * phi[dP00] + phi[dPM0]) + (phi[dMP0] - c2o1 * phi[dM00] + phi[dMM0])) + ((phi[d0PP] - c2o1 * phi[d00P] + phi[d0MP]) + (phi[d0PM] - c2o1 * phi[d00M] + phi[d0MM]))) + - c1o36 * (((phi[dPPP] - c2o1 * phi[dP0P] + phi[dPMP]) + (phi[dMPM] - c2o1 * phi[dM0M] + phi[dMMM])) + ((phi[dMPP] - c2o1 * phi[dM0P] + phi[dMMP]) + (phi[dPPM] - c2o1 * phi[dP0M] + phi[dPMM])))); - real phiZZ = - c4o9 * (phi[d00P] - c2o1 * phi[d000] + phi[d00M]) + (c1o9 * (((phi[dM0P] - c2o1 * phi[dM00] + phi[dM0M]) + (phi[dP0P] - c2o1 * phi[dP00] + phi[dP0M])) + ((phi[d0MP] - c2o1 * phi[d0M0] + phi[d0MM]) + (phi[d0PP] - c2o1 * phi[d0P0] + phi[d0PM]))) + - c1o36 * (((phi[dMPP] - c2o1 * phi[dMP0] + phi[dMPM]) + (phi[dPMP] - c2o1 * phi[dPM0] + phi[dPMM])) + ((phi[dMMP] - c2o1 * phi[dMM0] + phi[dMMM]) + (phi[dPPP] - c2o1 * phi[dPP0] + phi[dPPM])))); - real phiXY = c1o4 * (c2o3 * (phi[dMM0] - phi[dPM0] + phi[dPP0] - phi[dMP0]) + c1o6 * ((phi[dMMP] - phi[dPMP] + phi[dPPP] - phi[dMPP]) + (phi[dMMM] - phi[dPMM] + phi[dPPM] - phi[dMPM]))); - real phiXZ = c1o4 * (c2o3 * (phi[dM0M] - phi[dP0M] + phi[dP0P] - phi[dM0P]) + c1o6 * ((phi[dMPM] - phi[dPPM] + phi[dPPP] - phi[dMPP]) + (phi[dMMM] - phi[dPMM] + phi[dPMP] - phi[dMMP]))); - real phiYZ = c1o4 * (c2o3 * (phi[d0MM] - phi[d0MP] + phi[d0PP] - phi[d0PM]) + c1o6 * ((phi[dMMM] - phi[dMMP] + phi[dMPP] - phi[dMPM]) + (phi[dPMM] - phi[dPMP] + phi[dPPP] - phi[dPPM]))); - - // non isotropic FD (to be improved): - // real phiX = (phi[dP00] - phi[dM00]) * c1o2; //gradX1_phi(); - // real phiY = (phi[d0P0] - phi[d0M0]) * c1o2; //gradX2_phi(); - // real phiZ = (phi[d00P] - phi[d00M]) * c1o2; //gradX3_phi(); - - // real phiXX = phi[dP00] - c2o1 * phi[d000] + phi[dM00]; - // real phiYY = phi[d0P0] - c2o1 * phi[d000] + phi[d0M0]; - // real phiZZ =( phi[d00P] - c2o1 * phi[d000] + phi[d00M]); - // real phiXY = c1o4 * (phi[dMM0] - phi[dPM0] + phi[dPP0] - phi[dMP0]); - // real phiXZ = c1o4 * (phi[dM0M] - phi[dP0M] + phi[dP0P] - phi[dM0P]); - // real phiYZ = c1o4 * (phi[d0MM] - phi[d0MP] + phi[d0PP] - phi[d0PM]); - // real back= (c2o1 * (phiX * phiY * phiXY + phiX * phiZ * phiXZ + phiY * phiZ * phiYZ) - phiXX * (phiY * phiY + phiZ * phiZ) - phiYY * (phiX * phiX + phiZ * phiZ) - phiZZ * (phiX * phiX + phiY * phiY)) / (c2o1 * pow(phiX * phiX + phiY * phiY + phiZ * phiZ, c3o2)); - - return (c2o1 * (phiX * phiY * phiXY + phiX * phiZ * phiXZ + phiY * phiZ * phiYZ) - phiXX * (phiY * phiY + phiZ * phiZ) - phiYY * (phiX * phiX + phiZ * phiZ) - phiZZ * (phiX * phiX + phiY * phiY)) / (c2o1 * pow(phiX * phiX + phiY * phiY + phiZ * phiZ, c3o2)+1e-200); -} -void MultiphaseScaleDistributionLBMKernel::computePhasefield() -{ - using namespace D3Q27System; - SPtr<DistributionArray3D> distributionsH = dataSet->getHdistributions(); - - 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[dP00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - h[d0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - h[d00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - h[dPP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - h[dMP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - h[dP0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - h[dM0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - h[d0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - h[d0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - - h[dM00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - h[d0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - h[d00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - h[dMM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - h[dPM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - h[dM0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - h[dP0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - h[d0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - h[d0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - - h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3); - } - } - } - } -} - -void MultiphaseScaleDistributionLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, - int x3) -{ - using namespace D3Q27System; - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - phi[d000] = (*ph)(x1, x2, x3); - - - 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 (bcArray->getBC(x1, x2, x3)->hasVelocityBoundaryFlag(D3Q27System::INVDIR[k])) - // phi[k] = (*ph)(x1, x2, x3); // neutral wetting - //else - // phi[k] = 0.0; // unwetting - //phi[k] = (*ph)(x1, x2, x3) * 0.7; - SPtr<BoundaryConditions> bcPtr = bcArray->getBC(x1, x2, x3); - if (bcPtr) - { - if (bcPtr->hasNoSlipBoundaryFlag(D3Q27System::INVDIR[k])) { - if (bcPtr->getNoSlipSecondaryOption(D3Q27System::INVDIR[k]) == 0) - phi[k] = (*ph)(x1, x2, x3); // neutral wetting - else - phi[k] = 0.0; // unwetting - } - } - - } - } -} - -void MultiphaseScaleDistributionLBMKernel::findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, - int x3) -{ - using namespace D3Q27System; - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - phi2[d000] = (*ph)(x1, x2, x3); - - - for (int k = FSTARTDIR; k <= FENDDIR; k++) { - if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) { - phi2[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]); - } else { - // if (bcArray->getBC(x1, x2, x3)->hasVelocityBoundaryFlag(D3Q27System::INVDIR[k])) - // phi[k] = (*ph)(x1, x2, x3); // neutral wetting - // else - // phi[k] = 0.0; // unwetting - // phi[k] = (*ph)(x1, x2, x3) * 0.7; - SPtr<BoundaryConditions> bcPtr = bcArray->getBC(x1, x2, x3); - if (bcPtr) { - if (bcPtr->hasNoSlipBoundaryFlag(D3Q27System::INVDIR[k])) { - if (bcPtr->getNoSlipSecondaryOption(D3Q27System::INVDIR[k]) == 0) - phi[k] = (*ph)(x1, x2, x3); // neutral wetting - else - phi[k] = 0.0; // unwetting - } - } - } - } - - // if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) { - // phi2[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]); - // } - // else { - // //if (bcArray->getBC(x1, x2, x3)->hasVelocityBoundaryFlag(D3Q27System::INVDIR[k])) - // // phi2[k] = (*ph)(x1, x2, x3); // neutral wetting - // //else - // phi2[k] = 0.0; // unwetting - // // phi2[k] = (*ph)(x1, x2, x3) * 0.7; - // } - //} -} - -void MultiphaseScaleDistributionLBMKernel::swapDistributions() -{ - LBMKernel::swapDistributions(); - dataSet->getHdistributions()->swap(); - dataSet->getH2distributions()->swap(); -} - -void MultiphaseScaleDistributionLBMKernel::initForcing() -{ - 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); - - muForcingX1.DefineVar("rho",&muRho); - muForcingX2.DefineVar("rho",&muRho); - muForcingX3.DefineVar("rho",&muRho); - -} diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.h b/src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.h deleted file mode 100644 index 7501a522c36566befc7d1a46906203ba17bae123..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.h +++ /dev/null @@ -1,187 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseScaleDistributionLBMKernel.h -//! \ingroup LBMKernel -//! \author M. Geier, K. Kutscher, Hesameddin Safari -//======================================================================================= - -#ifndef MultiphaseScaleDistributionLBMKernel_H -#define MultiphaseScaleDistributionLBMKernel_H - -#include "LBMKernel.h" -#include "BCSet.h" -#include "D3Q27System.h" -#include "basics/utilities/UbTiming.h" -#include "basics/container/CbArray4D.h" -#include "basics/container/CbArray3D.h" - -//! \brief Multiphase Cascaded Cumulant LBM kernel. -//! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model -//! \author M. Geier, K. Kutscher, Hesameddin Safari -class MultiphaseScaleDistributionLBMKernel : public LBMKernel -{ -public: - MultiphaseScaleDistributionLBMKernel(); - virtual ~MultiphaseScaleDistributionLBMKernel(void) = default; - void calculate(int step) override; - SPtr<LBMKernel> clone() override; - - - ///refactor - //CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure; - - - double getCalculationTime() override { return .0; } -protected: - virtual void initDataSet(); - void swapDistributions() override; - - void initForcing(); - - void forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho); - void backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho); - void forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2); - void backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2); - - real f1[D3Q27System::ENDF+1]; - - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF; - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF; - CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr zeroDistributionsF; - - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH1; - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH1; - CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr zeroDistributionsH1; - - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH2; - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH2; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributionsH2; - - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressureOld; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr p1Old; - - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseFieldOld; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr divU; - - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr rhoNode; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr vxNode; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr vyNode; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr vzNode; - - real h [D3Q27System::ENDF+1]; - real h2[D3Q27System::ENDF + 1]; - real g [D3Q27System::ENDF+1]; - real phi[D3Q27System::ENDF+1]; - real phi2[D3Q27System::ENDF + 1]; - real pr1[D3Q27System::ENDF+1]; - real phi_cutoff[D3Q27System::ENDF+1]; - - real gradX1_phi(); - real gradX2_phi(); - real gradX3_phi(); - real gradX1_rhoInv(real rhoL, real rhoDIV); - real gradX2_rhoInv(real rhoL, real rhoDIV); - real gradX3_rhoInv(real rhoL, real rhoDIV); - real gradX1_phi2(); - real gradX2_phi2(); - real gradX3_phi2(); - void computePhasefield(); - void findNeighbors(CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, int x1, int x2, int x3); - void findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, int x3); - bool isGas(real phiLim, real* phi, real* phi2); - bool isGasBoundaryNow(real phiLim, real *phi); - - real nabla2_phi(); - - real computeCurvature_phi(); - - mu::value_type muX1,muX2,muX3; - mu::value_type muDeltaT; - mu::value_type muNu; - mu::value_type muRho; - real forcingX1; - real forcingX2; - real forcingX3; -}; - -/// @brief The function computes a fancy expression -/// @param phiLim -/// @param phi -/// @param phi2 -/// @return -inline bool MultiphaseScaleDistributionLBMKernel::isGas(real phiLim, real* phi, real* phi2) -{ - using namespace vf::lbm::dir; - return (phi2[d000] <= phiLim) || ((phi[d000] <= phiLim) && - ( - (phi[dP00] > phiLim) || - (phi[dM00] > phiLim) || - (phi[d00P] > phiLim) || - (phi[d00M] > phiLim) || - (phi[d0M0] > phiLim) || - (phi[d0P0] > phiLim) || - (phi[dPP0] > phiLim) || - (phi[dPM0] > phiLim) || - (phi[dP0P] > phiLim) || - (phi[dP0M] > phiLim) || - (phi[dMP0] > phiLim) || - (phi[dMM0] > phiLim) || - (phi[dM0P] > phiLim) || - (phi[dM0M] > phiLim) || - (phi[d0PM] > phiLim) || - (phi[d0MM] > phiLim) || - (phi[d0PP] > phiLim) || - (phi[d0MP] > phiLim) || - (phi[dPPP] > phiLim) || - (phi[dPMP] > phiLim) || - (phi[dMPP] > phiLim) || - (phi[dMMP] > phiLim) || - (phi[dPPM] > phiLim) || - (phi[dPMM] > phiLim) || - (phi[dMPM] > phiLim) || - (phi[dMMM] > phiLim) - )); -} - -inline bool MultiphaseScaleDistributionLBMKernel::isGasBoundaryNow(real phiLim, real *phi) -{ - using namespace vf::lbm::dir; - return - ((phi[d000] <= phiLim) && - ((phi[dP00] > phiLim) || (phi[dM00] > phiLim) || (phi[d00P] > phiLim) || (phi[d00M] > phiLim) || - (phi[d0M0] > phiLim) || (phi[d0P0] > phiLim) || (phi[dPP0] > phiLim) || (phi[dPM0] > phiLim) || - (phi[dP0P] > phiLim) || (phi[dP0M] > phiLim) || (phi[dMP0] > phiLim) || (phi[dMM0] > phiLim) || - (phi[dM0P] > phiLim) || (phi[dM0M] > phiLim) || (phi[d0PM] > phiLim) || (phi[d0MM] > phiLim) || - (phi[d0PP] > phiLim) || (phi[d0MP] > phiLim) || (phi[dPPP] > phiLim) || (phi[dPMP] > phiLim) || - (phi[dMPP] > phiLim) || (phi[dMMP] > phiLim) || (phi[dPPM] > phiLim) || (phi[dPMM] > phiLim) || - (phi[dMPM] > phiLim) || (phi[dMMM] > phiLim))); -} - -#endif diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseScratchCumulantLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseScratchCumulantLBMKernel.cpp deleted file mode 100644 index 1f1bb536a19251ac1cabb2696035e6645cede09c..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/LBM/MultiphaseScratchCumulantLBMKernel.cpp +++ /dev/null @@ -1,3083 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseScratchCumulantLBMKernel.cpp -//! \ingroup LBMKernel -//! \author Hesameddin Safari -//======================================================================================= - -#include "MultiphaseScratchCumulantLBMKernel.h" -#include "BCArray3D.h" -#include "Block3D.h" -#include "D3Q27EsoTwist3DSplittedVector.h" -#include "D3Q27System.h" -#include "DataSet3D.h" -#include "LBMKernel.h" -#include <cmath> -#include <iostream> - -#define PROOF_CORRECTNESS - -////////////////////////////////////////////////////////////////////////// -MultiphaseScratchCumulantLBMKernel::MultiphaseScratchCumulantLBMKernel() { this->compressible = false; } -////////////////////////////////////////////////////////////////////////// -void MultiphaseScratchCumulantLBMKernel::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> MultiphaseScratchCumulantLBMKernel::clone() -{ - SPtr<LBMKernel> kernel(new MultiphaseScratchCumulantLBMKernel()); - kernel->setNX(nx); - dynamicPointerCast<MultiphaseScratchCumulantLBMKernel>(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->setBCSet(bcSet->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 MultiphaseScratchCumulantLBMKernel::forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) { -// using namespace UbMath; - using namespace vf::basics::constant; - - real m2 = mfa + mfc; - real m1 = mfc - mfa; - real m0 = m2 + mfb; - mfa = m0; - m0 *= Kinverse; - m0 += oneMinusRho; - mfb = (m1 * Kinverse - m0 * vv) * K; - mfc = ((m2 - c2o1 * m1 * vv) * Kinverse + v2 * m0) * K; -} - -//////////////////////////////////////////////////////////////////////////////// - void MultiphaseScratchCumulantLBMKernel::backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) { -// using namespace UbMath; - using namespace vf::basics::constant; - - real m0 = (((mfc - mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 - vv) * c1o2) * K; - real m1 = (((mfa - mfc) - c2o1 * mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (-v2)) * K; - mfc = (((mfc + mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 + vv) * c1o2) * K; - mfa = m0; - mfb = m1; -} - - -//////////////////////////////////////////////////////////////////////////////// - void MultiphaseScratchCumulantLBMKernel::forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) { -// using namespace UbMath; - using namespace vf::basics::constant; - - real m1 = (mfa + mfc) + mfb; - real m2 = mfc - mfa; - mfc = (mfc + mfa) + (v2 * m1 - c2o1 * vv * m2); - mfb = m2 - vv * m1; - mfa = m1; -} - - - void MultiphaseScratchCumulantLBMKernel::backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) { -// using namespace UbMath; - using namespace vf::basics::constant; - - real ma = (mfc + mfa * (v2 - vv)) * c1o2 + mfb * (vv - c1o2); - real mb = ((mfa - mfc) - mfa * v2) - c2o1 * mfb * vv; - mfc = (mfc + mfa * (v2 + vv)) * c1o2 + mfb * (vv + c1o2); - mfb = mb; - mfa = ma; -} - - -void MultiphaseScratchCumulantLBMKernel::calculate(int step) -{ - using namespace D3Q27System; - // using namespace UbMath; - using namespace vf::lbm::dir; - using namespace vf::basics::constant; - - forcingX1 = 0.0; - forcingX2 = 0.0; - forcingX3 = 0.0; - - real oneOverInterfaceScale = 1.0;// 1.0 / 3.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(); - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - const int bcArrayMaxX1 = (int)bcArray->getNX1(); - const int bcArrayMaxX2 = (int)bcArray->getNX2(); - const int bcArrayMaxX3 = (int)bcArray->getNX3(); - - int minX1 = ghostLayerWidth; - int minX2 = ghostLayerWidth; - int minX3 = ghostLayerWidth; - int maxX1 = bcArrayMaxX1 - ghostLayerWidth; - int maxX2 = bcArrayMaxX2 - ghostLayerWidth; - int maxX3 = bcArrayMaxX3 - ghostLayerWidth; - - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField( - new CbArray3D<real, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0)); - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr divU( - new CbArray3D<real, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, 0.0)); - - - /////For velocity filter - - //CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr velocityX( - // new CbArray3D<LBMReal, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, 0.0)); - //CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr velocityY( - // new CbArray3D<LBMReal, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, 0.0)); - //CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr velocityZ( - // new CbArray3D<LBMReal, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, 0.0)); - - - 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; - - real mfcbb = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3); - real mfabb = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p); - - real mfbbb = (*this->zeroDistributionsH)(x1, x2, x3); - (*phaseField)(x1, x2, x3) = (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca) + (mfcaa + mfacc)) ) + - (((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) + - ((mfbaa + mfbac) + (mfbca + mfbcc))) + ((mfabb + mfcbb) + - (mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb; - //(*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; - - ///Velocity filter - - - real rhoH = 1.0; - real rhoL = 1.0 / densityRatio; - - real rhoToPhi = (rhoH - rhoL) / (phiH - phiL); - - - real rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) - phiH); - - mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) / rho * c3o1; - mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) / rho * c3o1; - mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) / rho * c3o1; - mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) / rho * c3o1; - mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) / rho * c3o1; - mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) / rho * c3o1; - mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) / rho * c3o1; - mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) / rho * c3o1; - mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) / rho * c3o1; - mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) / rho * c3o1; - mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) / rho * c3o1; - mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) / rho * c3o1; - mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) / rho * c3o1; - - mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) / rho * c3o1; - mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) / rho * c3o1; - mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) / rho * c3o1; - mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) / rho * c3o1; - mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) / rho * c3o1; - mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) / rho * c3o1; - mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) / rho * c3o1; - mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) / rho * c3o1; - mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) / rho * c3o1; - mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) / rho * c3o1; - mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) / rho * c3o1; - mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) / rho * c3o1; - mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) / rho * c3o1; - - mfbbb = (*this->zeroDistributionsF)(x1, x2, x3) / rho * c3o1; - - //(*velocityX)(x1, x2, x3) = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - // (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - // (mfcbb - mfabb)) ; - //(*velocityY)(x1, x2, x3) = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - // (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - // (mfbcb - mfbab)) ; - //(*velocityZ)(x1, x2, x3) = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - // (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - // (mfbbc - mfbba)) ; - - - - - } - else { (*phaseField)(x1, x2, x3) = 0; } - } - } - } - - real collFactorM; - //LBMReal forcingTerm[D3Q27System::ENDF + 1]; - - for (int x3 = minX3; x3 < maxX3; x3++) { - for (int x2 = minX2; x2 < maxX2; x2++) { - for (int x1 = minX1; x1 < maxX1; x1++) { - - //for (int x3 = minX3+1; x3 < maxX3-1; x3++) { - // for (int x2 = minX2+1; x2 < maxX2-1; x2++) { - // for (int x1 = minX1+1; x1 < maxX1-1; 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 - - findNeighbors(phaseField, x1, x2, x3); - //// reading distributions here appears to be unnecessary! - real mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3); - real mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p); - - real mfbbb = (*this->zeroDistributionsF)(x1, x2, x3); - - real rhoH = 1.0; - real rhoL = 1.0 / densityRatio; - - real rhoToPhi = (rhoH - rhoL) / (phiH - phiL); - - real dX1_phi = gradX1_phi(); - real dX2_phi = gradX2_phi(); - real dX3_phi = gradX3_phi(); - - //LBMReal dX1_phi = 3.0*(( - // WEIGTH[TNE]*((((*phaseField)(x1 + 1, x2+1, x3+1)- (*phaseField)(x1 - 1, x2 - 1, x3 - 1))+ ((*phaseField)(x1 + 1, x2 - 1, x3 + 1) - (*phaseField)(x1 - 1, x2 + 1, x3 - 1))) - // + (((*phaseField)(x1 + 1, x2 - 1, x3 - 1) - (*phaseField)(x1 - 1, x2 + 1, x3 + 1)) + ((*phaseField)(x1 + 1, x2 + 1, x3 - 1) - (*phaseField)(x1 - 1, x2 - 1, x3 + 1)))) - // +WEIGTH[NE]* ((((*phaseField)(x1 + 1, x2 + 1, x3) - (*phaseField)(x1 - 1, x2 - 1, x3)) + ((*phaseField)(x1 + 1, x2 - 1, x3) - (*phaseField)(x1 - 1, x2 + 1, x3 ))) - // + (((*phaseField)(x1 + 1, x2, x3 - 1) - (*phaseField)(x1 - 1, x2, x3 + 1)) + ((*phaseField)(x1 + 1, x2, x3 + 1) - (*phaseField)(x1 - 1, x2, x3 - 1))))) - // +WEIGTH[N]*((*phaseField)(x1 + 1, x2, x3 ) - (*phaseField)(x1 - 1, x2, x3)) - // ); - ////if (dX1_phi != NdX1_phi) {std::cout<<dX1_phi<<" "<< NdX1_phi<<std::endl;} - - //LBMReal dX2_phi = 3.0 * (( - // WEIGTH[TNE] * ((((*phaseField)(x1 + 1, x2 + 1, x3 + 1) - (*phaseField)(x1 - 1, x2 - 1, x3 - 1)) + ((*phaseField)(x1 -1, x2 + 1, x3 + 1) - (*phaseField)(x1 + 1, x2 - 1, x3 - 1))) - // + (((*phaseField)(x1 - 1, x2 + 1, x3 - 1) - (*phaseField)(x1 + 1, x2 - 1, x3 + 1)) + ((*phaseField)(x1 + 1, x2 + 1, x3 - 1) - (*phaseField)(x1 - 1, x2 - 1, x3 + 1)))) - // + WEIGTH[NE] * ((((*phaseField)(x1 + 1, x2 + 1, x3) - (*phaseField)(x1 - 1, x2 - 1, x3)) + ((*phaseField)(x1 - 1, x2 + 1, x3) - (*phaseField)(x1 + 1, x2 - 1, x3))) - // + (((*phaseField)(x1, x2+1, x3 - 1) - (*phaseField)(x1 , x2-1, x3 + 1)) + ((*phaseField)(x1 , x2+1, x3 + 1) - (*phaseField)(x1 , x2-1, x3 - 1))))) - // + WEIGTH[N] * ((*phaseField)(x1 , x2+1, x3) - (*phaseField)(x1 , x2-1, x3)) - // ); - - //LBMReal dX3_phi = 3.0 * (( - // WEIGTH[TNE] * ((((*phaseField)(x1 + 1, x2 + 1, x3 + 1) - (*phaseField)(x1 - 1, x2 - 1, x3 - 1)) + ((*phaseField)(x1 - 1, x2 + 1, x3 + 1) - (*phaseField)(x1 + 1, x2 - 1, x3 - 1))) - // + (((*phaseField)(x1 - 1, x2 - 1, x3 + 1) - (*phaseField)(x1 + 1, x2 + 1, x3 - 1)) + ((*phaseField)(x1 + 1, x2 - 1, x3 + 1) - (*phaseField)(x1 - 1, x2 + 1, x3 - 1)))) - // + WEIGTH[NE] * ((((*phaseField)(x1 + 1, x2, x3+1) - (*phaseField)(x1 - 1, x2, x3-1)) + ((*phaseField)(x1 - 1, x2, x3+1) - (*phaseField)(x1 + 1, x2, x3-1))) - // + (((*phaseField)(x1, x2 - 1, x3 + 1) - (*phaseField)(x1, x2 + 1, x3 - 1)) + ((*phaseField)(x1, x2 + 1, x3 + 1) - (*phaseField)(x1, x2 - 1, x3 - 1))))) - // + WEIGTH[N] * ((*phaseField)(x1, x2, x3+1) - (*phaseField)(x1, x2, x3-1)) - // ); - - /////////////////////////////////////// - - //LBMReal dX1_phi2 = 1.5 * (( - // WEIGTH[TNE] * ((((*phaseField)(x1 + 2, x2 + 2, x3 + 2) - (*phaseField)(x1 - 2, x2 - 2, x3 - 2)) + ((*phaseField)(x1 + 2, x2 - 2, x3 + 2) - (*phaseField)(x1 - 2, x2 + 2, x3 - 2))) - // + (((*phaseField)(x1 + 2, x2 - 2, x3 - 2) - (*phaseField)(x1 - 2, x2 + 2, x3 + 2)) + ((*phaseField)(x1 + 2, x2 + 2, x3 - 2) - (*phaseField)(x1 - 2, x2 - 2, x3 + 2)))) - // + WEIGTH[NE] * ((((*phaseField)(x1 + 2, x2 + 2, x3) - (*phaseField)(x1 - 2, x2 - 2, x3)) + ((*phaseField)(x1 + 2, x2 - 2, x3) - (*phaseField)(x1 - 2, x2 + 2, x3))) - // + (((*phaseField)(x1 + 2, x2, x3 - 2) - (*phaseField)(x1 - 2, x2, x3 + 2)) + ((*phaseField)(x1 + 2, x2, x3 + 2) - (*phaseField)(x1 - 2, x2, x3 - 2))))) - // + WEIGTH[N] * ((*phaseField)(x1 + 2, x2, x3) - (*phaseField)(x1 - 2, x2, x3)) - // ); - ////if (dX1_phi != NdX1_phi) {std::cout<<dX1_phi<<" "<< NdX1_phi<<std::endl;} - - //LBMReal dX2_phi2 = 1.5 * (( - // WEIGTH[TNE] * ((((*phaseField)(x1 + 2, x2 + 2, x3 + 2) - (*phaseField)(x1 - 2, x2 - 2, x3 - 2)) + ((*phaseField)(x1 - 2, x2 + 2, x3 + 2) - (*phaseField)(x1 + 2, x2 - 2, x3 - 2))) - // + (((*phaseField)(x1 - 2, x2 + 2, x3 - 2) - (*phaseField)(x1 + 2, x2 - 2, x3 + 2)) + ((*phaseField)(x1 + 2, x2 + 2, x3 - 2) - (*phaseField)(x1 - 2, x2 - 2, x3 + 2)))) - // + WEIGTH[NE] * ((((*phaseField)(x1 + 2, x2 + 2, x3) - (*phaseField)(x1 - 2, x2 - 2, x3)) + ((*phaseField)(x1 - 2, x2 + 2, x3) - (*phaseField)(x1 + 2, x2 - 2, x3))) - // + (((*phaseField)(x1, x2 + 2, x3 - 2) - (*phaseField)(x1, x2 - 2, x3 + 2)) + ((*phaseField)(x1, x2 + 2, x3 + 2) - (*phaseField)(x1, x2 - 2, x3 - 2))))) - // + WEIGTH[N] * ((*phaseField)(x1, x2 + 2, x3) - (*phaseField)(x1, x2 - 2, x3)) - // ); - - //LBMReal dX3_phi2 = 1.5 * (( - // WEIGTH[TNE] * ((((*phaseField)(x1 + 2, x2 + 2, x3 + 2) - (*phaseField)(x1 - 2, x2 - 2, x3 - 2)) + ((*phaseField)(x1 - 2, x2 + 2, x3 + 2) - (*phaseField)(x1 + 2, x2 - 2, x3 - 2))) - // + (((*phaseField)(x1 - 2, x2 - 2, x3 + 2) - (*phaseField)(x1 + 2, x2 + 2, x3 - 2)) + ((*phaseField)(x1 + 2, x2 - 2, x3 + 2) - (*phaseField)(x1 - 2, x2 + 2, x3 - 2)))) - // + WEIGTH[NE] * ((((*phaseField)(x1 + 2, x2, x3 + 2) - (*phaseField)(x1 - 2, x2, x3 - 2)) + ((*phaseField)(x1 - 2, x2, x3 + 2) - (*phaseField)(x1 + 2, x2, x3 - 2))) - // + (((*phaseField)(x1, x2 - 2, x3 + 2) - (*phaseField)(x1, x2 + 2, x3 - 2)) + ((*phaseField)(x1, x2 + 2, x3 + 2) - (*phaseField)(x1, x2 - 2, x3 - 2))))) - // + WEIGTH[N] * ((*phaseField)(x1, x2, x3 + 2) - (*phaseField)(x1, x2, x3 - 2)) - // ); - - //dX1_phi = (2*dX1_phi -1*dX1_phi2);// 2 * dX1_phi - dX1_phi2; - //dX2_phi = (2*dX2_phi -1*dX2_phi2);// 2 * dX2_phi - dX2_phi2; - //dX3_phi = (2*dX3_phi -1*dX3_phi2);// 2 * dX3_phi - dX3_phi2; - - - real denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi) + 1e-9; - real normX1 = dX1_phi/denom; - real normX2 = dX2_phi/denom; - real normX3 = dX3_phi/denom; - - - ///test for magnitude of gradient from phase indicator directly - //if (fabs((1.0 - phi[REST]) * (phi[REST]) */* c4*/ - (denom- 1e-9)) / denom > 1e-3 &&phi[REST]>0.4 &&phi[REST]<0.6) { - // std::cout << (1.0 - phi[REST]) * (phi[REST]) // *c4 - // << " " << denom <<" "<< ((1.0 - phi[REST]) * (phi[REST]) * c4 ) / denom << std::endl; - //} - //dX1_phi = (1.0 - phi[REST]) * (phi[REST]) /* c4 */* normX1; - //dX2_phi = (1.0 - phi[REST]) * (phi[REST]) /* c4 */* normX2; - //dX3_phi = (1.0 - phi[REST]) * (phi[REST]) /* c4 */* normX3; - - //denom = 1.0; - - ///!test - - collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL); - //collFactorM = phi[REST] - phiL < (phiH - phiL) * 0.05 ? collFactorG : collFactorL; - - real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi(); - - //----------- Calculating Macroscopic Values ------------- - real rho = rhoH + rhoToPhi * (phi[d000] - phiH); - - 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(); - - real rho_m = 1.0 / densityRatio; - forcingX1 = forcingX1 * (rho - rho_m); - forcingX2 = forcingX2 * (rho - rho_m); - forcingX3 = forcingX3 * (rho - rho_m); - } - ////Incompressible Kernal - - mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3)/rho*c3o1; - mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) / rho * c3o1; - mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) / rho * c3o1; - mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) / rho * c3o1; - mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) / rho * c3o1; - mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) / rho * c3o1; - mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) / rho * c3o1; - mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) / rho * c3o1; - mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) / rho * c3o1; - mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) / rho * c3o1; - mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) / rho * c3o1; - mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) / rho * c3o1; - mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) / rho * c3o1; - - mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) / rho * c3o1; - mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) / rho * c3o1; - mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) / rho * c3o1; - mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) / rho * c3o1; - mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) / rho * c3o1; - mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) / rho * c3o1; - mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) / rho * c3o1; - mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) / rho * c3o1; - mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) / rho * c3o1; - mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) / rho * c3o1; - mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) / rho * c3o1; - mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) / rho * c3o1; - mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) / rho * c3o1; - - mfbbb = (*this->zeroDistributionsF)(x1, x2, x3) / rho * c3o1; - - - - - - real m0, m1, m2; - real rhoRef=c1o1; - - //LBMReal - // FIXME: warning: unused variable 'drho' -// LBMReal drho = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) -// + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) -// + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb))/rhoRef; - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab))/rhoRef; - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba))/rhoRef; - - ///surface tension force - vvx += mu * dX1_phi*c1o2; - vvy += mu * dX2_phi * c1o2; - vvz += mu * dX3_phi * c1o2; - - - - ////Velocity filter 14.04.2021 - // LBMReal lap_vx, lap_vy,lap_vz; - // { - // LBMReal sum = 0.0; - // sum += WEIGTH[TNE] * (((((*velocityX)(x1+1, x2+1, x3+1) - (*velocityX)(x1, x2, x3)) + ((*velocityX)(x1 - 1, x2 - 1, x3 - 1) - (*velocityX)(x1, x2, x3))) + (((*velocityX)(x1 + 1, x2 + 1, x3 - 1) - (*velocityX)(x1, x2, x3)) + ((*velocityX)(x1 + 1, x2 - 1, x3 + 1) - (*velocityX)(x1, x2, x3)))) - // + ((((*velocityX)(x1 + 1, x2 - 1, x3 + 1) - (*velocityX)(x1, x2, x3)) + ((*velocityX)(x1 - 1, x2 + 1, x3 - 1) - (*velocityX)(x1, x2, x3))) + (((*velocityX)(x1 - 1, x2 + 1, x3 + 1) - (*velocityX)(x1, x2, x3)) + ((*velocityX)(x1 + 1, x2 - 1, x3 - 1) - (*velocityX)(x1, x2, x3))))); - // sum += WEIGTH[TN] * ( - // ((((*velocityX)(x1 + 1, x2 + 1, x3 ) - (*velocityX)(x1, x2, x3)) + ((*velocityX)(x1 - 1, x2 - 1, x3) - (*velocityX)(x1, x2, x3))) + (((*velocityX)(x1 + 1, x2 - 1, x3) - (*velocityX)(x1, x2, x3)) + ((*velocityX)(x1 - 1, x2 + 1, x3) - (*velocityX)(x1, x2, x3)))) - // + ((((*velocityX)(x1 + 1, x2 , x3+1) - (*velocityX)(x1, x2, x3)) + ((*velocityX)(x1 - 1, x2 , x3-1) - (*velocityX)(x1, x2, x3))) + (((*velocityX)(x1 +1 , x2 , x3-1) - (*velocityX)(x1, x2, x3)) + ((*velocityX)(x1 - 1, x2, x3 + 1) - (*velocityX)(x1, x2, x3)))) - // + ((((*velocityX)(x1 , x2+1, x3 + 1) - (*velocityX)(x1, x2, x3)) + ((*velocityX)(x1, x2 - 1, x3 - 1) - (*velocityX)(x1, x2, x3))) + (((*velocityX)(x1, x2 + 1, x3 - 1) - (*velocityX)(x1, x2, x3)) + ((*velocityX)(x1, x2 - 1, x3 + 1) - (*velocityX)(x1, x2, x3)))) - // ); - // sum += WEIGTH[T] * ( - // (((*velocityX)(x1-1, x2 , x3 ) - (*velocityX)(x1, x2, x3)) + ((*velocityX)(x1 + 1, x2, x3) - (*velocityX)(x1, x2, x3))) - // + (((*velocityX)(x1 , x2-1, x3) - (*velocityX)(x1, x2, x3)) + ((*velocityX)(x1, x2 + 1, x3) - (*velocityX)(x1, x2, x3))) - // + (((*velocityX)(x1, x2, x3-1) - (*velocityX)(x1, x2, x3)) + ((*velocityX)(x1, x2, x3+1) - (*velocityX)(x1, x2, x3))) - // ); - // //for (int k = FSTARTDIR; k <= FENDDIR; k++) { - // // sum += WEIGTH[k] * (phi[k] - phi[REST]); - // //} - // lap_vx=6.0 * sum; - - //sum = 0.0; - //sum += WEIGTH[TNE] * (((((*velocityY)(x1 + 1, x2 + 1, x3 + 1) - (*velocityY)(x1, x2, x3)) + ((*velocityY)(x1 - 1, x2 - 1, x3 - 1) - (*velocityY)(x1, x2, x3))) + (((*velocityY)(x1 + 1, x2 + 1, x3 - 1) - (*velocityY)(x1, x2, x3)) + ((*velocityY)(x1 + 1, x2 - 1, x3 + 1) - (*velocityY)(x1, x2, x3)))) - // + ((((*velocityY)(x1 + 1, x2 - 1, x3 + 1) - (*velocityY)(x1, x2, x3)) + ((*velocityY)(x1 - 1, x2 + 1, x3 - 1) - (*velocityY)(x1, x2, x3))) + (((*velocityY)(x1 - 1, x2 + 1, x3 + 1) - (*velocityY)(x1, x2, x3)) + ((*velocityY)(x1 + 1, x2 - 1, x3 - 1) - (*velocityY)(x1, x2, x3))))); - //sum += WEIGTH[TN] * ( - // ((((*velocityY)(x1 + 1, x2 + 1, x3) - (*velocityY)(x1, x2, x3)) + ((*velocityY)(x1 - 1, x2 - 1, x3) - (*velocityY)(x1, x2, x3))) + (((*velocityY)(x1 + 1, x2 - 1, x3) - (*velocityY)(x1, x2, x3)) + ((*velocityY)(x1 - 1, x2 + 1, x3) - (*velocityY)(x1, x2, x3)))) - // + ((((*velocityY)(x1 + 1, x2, x3 + 1) - (*velocityY)(x1, x2, x3)) + ((*velocityY)(x1 - 1, x2, x3 - 1) - (*velocityY)(x1, x2, x3))) + (((*velocityY)(x1 + 1, x2, x3 - 1) - (*velocityY)(x1, x2, x3)) + ((*velocityY)(x1 - 1, x2, x3 + 1) - (*velocityY)(x1, x2, x3)))) - // + ((((*velocityY)(x1, x2 + 1, x3 + 1) - (*velocityY)(x1, x2, x3)) + ((*velocityY)(x1, x2 - 1, x3 - 1) - (*velocityY)(x1, x2, x3))) + (((*velocityY)(x1, x2 + 1, x3 - 1) - (*velocityY)(x1, x2, x3)) + ((*velocityY)(x1, x2 - 1, x3 + 1) - (*velocityY)(x1, x2, x3)))) - // ); - //sum += WEIGTH[T] * ( - // (((*velocityY)(x1 - 1, x2, x3) - (*velocityY)(x1, x2, x3)) + ((*velocityY)(x1 + 1, x2, x3) - (*velocityY)(x1, x2, x3))) - // + (((*velocityY)(x1, x2 - 1, x3) - (*velocityY)(x1, x2, x3)) + ((*velocityY)(x1, x2 + 1, x3) - (*velocityY)(x1, x2, x3))) - // + (((*velocityY)(x1, x2, x3 - 1) - (*velocityY)(x1, x2, x3)) + ((*velocityY)(x1, x2, x3 + 1) - (*velocityY)(x1, x2, x3))) - // ); - - //lap_vy = 6.0 * sum; - - //sum = 0.0; - //sum += WEIGTH[TNE] * (((((*velocityZ)(x1 + 1, x2 + 1, x3 + 1) - (*velocityZ)(x1, x2, x3)) + ((*velocityZ)(x1 - 1, x2 - 1, x3 - 1) - (*velocityZ)(x1, x2, x3))) + (((*velocityZ)(x1 + 1, x2 + 1, x3 - 1) - (*velocityZ)(x1, x2, x3)) + ((*velocityZ)(x1 + 1, x2 - 1, x3 + 1) - (*velocityZ)(x1, x2, x3)))) - // + ((((*velocityZ)(x1 + 1, x2 - 1, x3 + 1) - (*velocityZ)(x1, x2, x3)) + ((*velocityZ)(x1 - 1, x2 + 1, x3 - 1) - (*velocityZ)(x1, x2, x3))) + (((*velocityZ)(x1 - 1, x2 + 1, x3 + 1) - (*velocityZ)(x1, x2, x3)) + ((*velocityZ)(x1 + 1, x2 - 1, x3 - 1) - (*velocityZ)(x1, x2, x3))))); - //sum += WEIGTH[TN] * ( - // ((((*velocityZ)(x1 + 1, x2 + 1, x3) - (*velocityZ)(x1, x2, x3)) + ((*velocityZ)(x1 - 1, x2 - 1, x3) - (*velocityZ)(x1, x2, x3))) + (((*velocityZ)(x1 + 1, x2 - 1, x3) - (*velocityZ)(x1, x2, x3)) + ((*velocityZ)(x1 - 1, x2 + 1, x3) - (*velocityZ)(x1, x2, x3)))) - // + ((((*velocityZ)(x1 + 1, x2, x3 + 1) - (*velocityZ)(x1, x2, x3)) + ((*velocityZ)(x1 - 1, x2, x3 - 1) - (*velocityZ)(x1, x2, x3))) + (((*velocityZ)(x1 + 1, x2, x3 - 1) - (*velocityZ)(x1, x2, x3)) + ((*velocityZ)(x1 - 1, x2, x3 + 1) - (*velocityZ)(x1, x2, x3)))) - // + ((((*velocityZ)(x1, x2 + 1, x3 + 1) - (*velocityZ)(x1, x2, x3)) + ((*velocityZ)(x1, x2 - 1, x3 - 1) - (*velocityZ)(x1, x2, x3))) + (((*velocityZ)(x1, x2 + 1, x3 - 1) - (*velocityZ)(x1, x2, x3)) + ((*velocityZ)(x1, x2 - 1, x3 + 1) - (*velocityZ)(x1, x2, x3)))) - // ); - //sum += WEIGTH[T] * ( - // (((*velocityZ)(x1 - 1, x2, x3) - (*velocityZ)(x1, x2, x3)) + ((*velocityZ)(x1 + 1, x2, x3) - (*velocityZ)(x1, x2, x3))) - // + (((*velocityZ)(x1, x2 - 1, x3) - (*velocityZ)(x1, x2, x3)) + ((*velocityZ)(x1, x2 + 1, x3) - (*velocityZ)(x1, x2, x3))) - // + (((*velocityZ)(x1, x2, x3 - 1) - (*velocityZ)(x1, x2, x3)) + ((*velocityZ)(x1, x2, x3 + 1) - (*velocityZ)(x1, x2, x3))) - // ); - - //lap_vz = 6.0 * sum; - - // } - - // if (lap_vx != 0.0) { - // lap_vx = lap_vx; - // } - - ///----Classic source term 8.4.2021 - - real vvxF, vvyF, vvzF; - vvxF = vvx;//-2*c1o24 * lap_vx;// - vvyF = vvy;//-2*c1o24 * lap_vy;// - vvzF = vvz;//-2*c1o24 * lap_vz;// - -// vvxF = 1.2* vvx- 0.2*0.5 * ((*velocityX)(x1 - 1, x2, x3) + (*velocityX)(x1 + 1, x2, x3)); -// vvyF = 1.2 *vvy- 0.2*0.5* ((*velocityY)(x1 , x2-1, x3) + (*velocityY)(x1 , x2+1, x3)); -// vvzF = 1.2 *vvz-0.2*0.5* ((*velocityZ)(x1 , x2, x3-1) + (*velocityZ)(x1 , x2, x3+1)); - //if (vvxF != vvx) { - // vvxF = vvxF; - //} - real weightGrad = 1.0-denom*denom/(denom*denom+0.0001*0.001); - real dX1_phiF = dX1_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[d000]) * (phi[d000]) * normX1; - real dX2_phiF = dX2_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[d000]) * (phi[d000]) * normX2; - real dX3_phiF = dX3_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[d000]) * (phi[d000]) * normX3; - - //dX1_phiF *= 1.2; - //dX2_phiF *= 1.2; - //dX3_phiF *= 1.2; - - //LBMReal gradFD = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi); - //LBMReal gradPhi = (1.0 - phi[REST]) * (phi[REST]); - //gradPhi = (gradPhi > gradFD) ? gradPhi : gradFD; - //dX1_phiF = gradPhi * normX1; - // dX2_phiF = gradPhi * normX2; - // dX3_phiF = gradPhi * normX3; - - real ux2; - real uy2; - real uz2; - ux2 = vvxF * vvxF; - uy2 = vvyF * vvyF; - uz2 = vvzF * vvzF; - real forcingTerm[D3Q27System::ENDF + 1]; - for (int dir = FSTARTDIR; dir <= FENDDIR; dir++) { - real velProd = DX1[dir] * vvxF + DX2[dir] * vvyF + DX3[dir] * vvzF; - real velSq1 = velProd * velProd; - real gamma = WEIGTH[dir] * (1.0 + 3 * velProd + (4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2))); - - real fac1 = (gamma - WEIGTH[dir]) * c1o3 * rhoToPhi; - - forcingTerm[dir] = - (-vvxF) * (fac1 * dX1_phiF ) + - (-vvyF) * (fac1 * dX2_phiF ) + - (-vvzF) * (fac1 * dX3_phiF ) + - (DX1[dir]) * (fac1 * dX1_phiF ) + - (DX2[dir]) * (fac1 * dX2_phiF ) + - (DX3[dir]) * (fac1 * dX3_phiF ); - - //LBMReal biDif= (-((*phaseField)(x1 + 2 * DX1[dir], x2 + 2 * DX2[dir], x3 + 2 * DX3[dir])) + 4 * ((*phaseField)(x1 + DX1[dir], x2 + DX2[dir], x3 + DX3[dir])) - // - 3*((*phaseField)(x1 , x2 , x3 )) )*0.5; - //LBMReal ceDif = (((*phaseField)(x1 + DX1[dir], x2 + DX2[dir], x3 + DX3[dir])) - ((*phaseField)(x1 - DX1[dir], x2 - DX2[dir], x3 - DX3[dir]))) * 0.5; - - ////ceDif = ((((*phaseField)(x1 + 2*DX1[dir], x2 + 2*DX2[dir], x3 + 2*DX3[dir])) - ((*phaseField)(x1 , x2 , x3 ))) * biDif < 0) ? - //// (!bcArray->isSolid(x1+2*DX1[dir], x2+2*DX2[dir], x3+2*DX3[dir]) && !bcArray->isUndefined(x1 + 2 * DX1[dir], x2 + 2 * DX2[dir], x3 + 2 * DX3[dir]) && !bcArray->isSolid(x1 + DX1[dir], x2 + DX2[dir], x3 + DX3[dir]) && !bcArray->isUndefined(x1 + DX1[dir], x2 + DX2[dir], x3 + DX3[dir]) && !bcArray->isSolid(x1 - DX1[dir], x2 - DX2[dir], x3 - DX3[dir]) && !bcArray->isUndefined(x1 - DX1[dir], x2 - DX2[dir], x3 - DX3[dir])) ? - //// (biDif+ceDif)*0.5 : ceDif: ceDif; - - //ceDif = ((((*phaseField)(x1 + 2 * DX1[dir], x2 + 2 * DX2[dir], x3 + 2 * DX3[dir])) - ((*phaseField)(x1, x2, x3))) * biDif < 0) ? biDif : ceDif; - - //forcingTerm[dir] = - // (-vvxF) * (fac1 * dX1_phiF) + - // (-vvyF) * (fac1 * dX2_phiF) + - // (-vvzF) * (fac1 * dX3_phiF) + - // fac1 * ceDif;//(((*phaseField)(x1 + DX1[dir], x2 + DX2[dir], x3 + DX3[dir])) - ((*phaseField)(x1 - DX1[dir], x2 - DX2[dir], x3 - DX3[dir]))) * 0.5; - // //( -((*phaseField)(x1 +2* DX1[dir], x2 + 2 * DX2[dir], x3 + 2 * DX3[dir])) + 5*((*phaseField)(x1 + DX1[dir], x2 + DX2[dir], x3 + DX3[dir])) - // //- 3*((*phaseField)(x1 , x2 , x3 )) - ((*phaseField)(x1 - DX1[dir], x2 - DX2[dir], x3 - DX3[dir])) )*0.25; - - - } - - real gamma = WEIGTH[d000] * (1.0 - 1.5 * (ux2 + uy2 + uz2)); - real fac1 = (gamma - WEIGTH[d000]) * c1o3 * rhoToPhi; - forcingTerm[d000] = (-vvxF) * (fac1 * dX1_phiF ) + - (-vvyF) * (fac1 * dX2_phiF ) + - (-vvzF) * (fac1 * dX3_phiF ); - - //////// - // LBMReal divAfterSource= - //( mfcbb + 3.0 * (0.5 * forcingTerm[dP00]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF) *(vvyF) +(vvzF) *(vvzF)-1)+ - //( mfbcb + 3.0 * (0.5 * forcingTerm[N]) / rho ) *((vvxF) *(vvxF) +(vvyF-1)*(vvyF-1)+(vvzF) *(vvzF)-1)+ - //( mfbbc + 3.0 * (0.5 * forcingTerm[T]) / rho ) *((vvxF) *(vvxF) +(vvyF) *(vvyF) +(vvzF-1)*(vvzF-1)-1)+ - //( mfccb + 3.0 * (0.5 * forcingTerm[NE]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF) *(vvzF)-1)+ - //( mfacb + 3.0 * (0.5 * forcingTerm[NW]) / rho ) *((vvxF+1)*(vvxF+1)+(vvyF-1)*(vvyF-1)+(vvzF) *(vvzF)-1)+ - //( mfcbc + 3.0 * (0.5 * forcingTerm[TE]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF) *(vvyF) +(vvzF-1)*(vvzF-1)-1)+ - //( mfabc + 3.0 * (0.5 * forcingTerm[TW]) / rho ) *((vvxF+1)*(vvxF+1)+(vvyF) *(vvyF) +(vvzF-1)*(vvzF-1)-1)+ - //( mfbcc + 3.0 * (0.5 * forcingTerm[TN]) / rho ) *((vvxF) *(vvxF) +(vvyF-1)*(vvyF-1)+(vvzF-1)*(vvzF-1)-1)+ - //( mfbac + 3.0 * (0.5 * forcingTerm[TS]) / rho ) *((vvxF) *(vvxF) +(vvyF+1)*(vvyF+1)+(vvzF-1)*(vvzF-1)-1)+ - //( mfccc + 3.0 * (0.5 * forcingTerm[TNE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF-1)*(vvzF-1)-1)+ - //( mfacc + 3.0 * (0.5 * forcingTerm[TNW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF-1)*(vvyF-1)+(vvzF-1)*(vvzF-1)-1)+ - //( mfcac + 3.0 * (0.5 * forcingTerm[TSE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF+1)*(vvyF+1)+(vvzF-1)*(vvzF-1)-1)+ - //( mfaac + 3.0 * (0.5 * forcingTerm[TSW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF+1)*(vvyF+1)+(vvzF-1)*(vvzF-1)-1)+ - //( mfabb + 3.0 * (0.5 * forcingTerm[W]) / rho ) *((vvxF+1)*(vvxF+1)+(vvyF) *(vvyF) +(vvzF) *(vvzF)-1)+ - //( mfbab + 3.0 * (0.5 * forcingTerm[S]) / rho ) *((vvxF) *(vvxF) +(vvyF+1)*(vvyF+1)+(vvzF) *(vvzF)-1)+ - //( mfbba + 3.0 * (0.5 * forcingTerm[B]) / rho ) *((vvxF) *(vvxF) +(vvyF) *(vvyF) +(vvzF+1)*(vvzF+1)-1)+ - //( mfaab + 3.0 * (0.5 * forcingTerm[SW]) / rho ) *((vvxF+1)*(vvxF+1)+(vvyF+1)*(vvyF+1)+(vvzF) *(vvzF)-1)+ - //( mfcab + 3.0 * (0.5 * forcingTerm[SE]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF+1)*(vvyF+1)+(vvzF) *(vvzF)-1)+ - //( mfaba + 3.0 * (0.5 * forcingTerm[BW]) / rho ) *((vvxF+1)*(vvxF+1)+(vvyF) *(vvyF) +(vvzF+1)*(vvzF+1)-1)+ - //( mfcba + 3.0 * (0.5 * forcingTerm[BE]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF) *(vvyF) +(vvzF+1)*(vvzF+1)-1)+ - //( mfbaa + 3.0 * (0.5 * forcingTerm[BS]) / rho ) *((vvxF) *(vvxF) +(vvyF+1)*(vvyF+1)+(vvzF+1)*(vvzF+1)-1)+ - //( mfbca + 3.0 * (0.5 * forcingTerm[BN]) / rho ) *((vvxF) *(vvxF) +(vvyF-1)*(vvyF-1)+(vvzF+1)*(vvzF+1)-1)+ - //( mfaaa + 3.0 * (0.5 * forcingTerm[BSW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF+1)*(vvyF+1)+(vvzF+1)*(vvzF+1)-1)+ - //( mfcaa + 3.0 * (0.5 * forcingTerm[BSE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF+1)*(vvyF+1)+(vvzF+1)*(vvzF+1)-1)+ - //( mfaca + 3.0 * (0.5 * forcingTerm[BNW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF-1)*(vvyF-1)+(vvzF+1)*(vvzF+1)-1)+ - //( mfcca + 3.0 * (0.5 * forcingTerm[BNE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF+1)*(vvzF+1)-1)+ - //( mfbbb + 3.0 * (0.5 * forcingTerm[REST]) / rho)*((vvxF)*(vvxF)+(vvyF)*(vvyF)+(vvzF)*(vvzF)-1); - - // LBMReal divBeforeSource = - // (mfcbb) * ((vvxF - 1) * (vvxF - 1) + (vvyF) * (vvyF)+(vvzF) * (vvzF)-1) + - // (mfbcb) * ((vvxF) * (vvxF)+(vvyF - 1) * (vvyF - 1) + (vvzF) * (vvzF)-1) + - // (mfbbc) * ((vvxF) * (vvxF)+(vvyF) * (vvyF)+(vvzF - 1) * (vvzF - 1)-1) + - // (mfccb) * ((vvxF - 1) * (vvxF - 1) + (vvyF - 1) * (vvyF - 1) + (vvzF) * (vvzF)-1) + - // (mfacb) * ((vvxF + 1) * (vvxF + 1) + (vvyF - 1) * (vvyF - 1) + (vvzF) * (vvzF)-1) + - // (mfcbc) * ((vvxF - 1) * (vvxF - 1) + (vvyF) * (vvyF)+(vvzF - 1) * (vvzF - 1)-1) + - // (mfabc) * ((vvxF + 1) * (vvxF + 1) + (vvyF) * (vvyF)+(vvzF - 1) * (vvzF - 1)-1) + - // (mfbcc) * ((vvxF) * (vvxF)+(vvyF - 1) * (vvyF - 1) + (vvzF - 1) * (vvzF - 1)-1) + - // (mfbac) * ((vvxF) * (vvxF)+(vvyF + 1) * (vvyF + 1) + (vvzF - 1) * (vvzF - 1)-1) + - // (mfccc) * ((vvxF - 1) * (vvxF - 1) + (vvyF - 1) * (vvyF - 1) + (vvzF - 1) * (vvzF - 1)-1) + - // (mfacc) * ((vvxF + 1) * (vvxF + 1) + (vvyF - 1) * (vvyF - 1) + (vvzF - 1) * (vvzF - 1)-1) + - // (mfcac) * ((vvxF - 1) * (vvxF - 1) + (vvyF + 1) * (vvyF + 1) + (vvzF - 1) * (vvzF - 1)-1) + - // (mfaac) * ((vvxF + 1) * (vvxF + 1) + (vvyF + 1) * (vvyF + 1) + (vvzF - 1) * (vvzF - 1)-1) + - // (mfabb) * ((vvxF + 1) * (vvxF + 1) + (vvyF) * (vvyF)+(vvzF) * (vvzF)-1) + - // (mfbab) * ((vvxF) * (vvxF)+(vvyF + 1) * (vvyF + 1) + (vvzF) * (vvzF)-1) + - // (mfbba) * ((vvxF) * (vvxF)+(vvyF) * (vvyF)+(vvzF + 1) * (vvzF + 1)-1) + - // (mfaab) * ((vvxF + 1) * (vvxF + 1) + (vvyF + 1) * (vvyF + 1) + (vvzF) * (vvzF)-1) + - // (mfcab) * ((vvxF - 1) * (vvxF - 1) + (vvyF + 1) * (vvyF + 1) + (vvzF) * (vvzF)-1) + - // (mfaba) * ((vvxF + 1) * (vvxF + 1) + (vvyF) * (vvyF)+(vvzF + 1) * (vvzF + 1)-1) + - // (mfcba) * ((vvxF - 1) * (vvxF - 1) + (vvyF) * (vvyF)+(vvzF + 1) * (vvzF + 1)-1) + - // (mfbaa) * ((vvxF) * (vvxF)+(vvyF + 1) * (vvyF + 1) + (vvzF + 1) * (vvzF + 1)-1) + - // (mfbca) * ((vvxF) * (vvxF)+(vvyF - 1) * (vvyF - 1) + (vvzF + 1) * (vvzF + 1)-1) + - // (mfaaa) * ((vvxF + 1) * (vvxF + 1) + (vvyF + 1) * (vvyF + 1) + (vvzF + 1) * (vvzF + 1)-1) + - // (mfcaa) * ((vvxF - 1) * (vvxF - 1) + (vvyF + 1) * (vvyF + 1) + (vvzF + 1) * (vvzF + 1)-1) + - // (mfaca) * ((vvxF + 1) * (vvxF + 1) + (vvyF - 1) * (vvyF - 1) + (vvzF + 1) * (vvzF + 1)-1) + - // (mfcca) * ((vvxF - 1) * (vvxF - 1) + (vvyF - 1) * (vvyF - 1) + (vvzF + 1) * (vvzF + 1)-1) + - // (mfbbb) * ((vvxF) * (vvxF)+(vvyF) * (vvyF)+(vvzF) * (vvzF)-1); - //if (divAfterSource - divBeforeSource != 0 && phi[REST]>0.0001 && phi[REST]<0.999) { - // std::cout << phi[REST]<<" "<< divAfterSource << " " << divBeforeSource <<" "<< divAfterSource/ divBeforeSource << std::endl; - //} - - //if (fabs(divAfterSource - divBeforeSource)/(fabs(divAfterSource) + fabs(divBeforeSource)+1e-10) > 1e-5) { - // LBMReal scaleDiv =0.95+(1-0.95)* (divBeforeSource) / (divBeforeSource - divAfterSource); - - // forcingTerm[dP00] *=scaleDiv; - // forcingTerm[N] *=scaleDiv; - // forcingTerm[T] *=scaleDiv; - // forcingTerm[NE] *=scaleDiv; - // forcingTerm[NW] *=scaleDiv; - // forcingTerm[TE] *=scaleDiv; - // forcingTerm[TW] *=scaleDiv; - // forcingTerm[TN] *=scaleDiv; - // forcingTerm[TS] *=scaleDiv; - // forcingTerm[TNE] *=scaleDiv; - // forcingTerm[TNW] *=scaleDiv; - // forcingTerm[TSE] *=scaleDiv; - // forcingTerm[TSW] *=scaleDiv; - // forcingTerm[W] *=scaleDiv; - // forcingTerm[S] *=scaleDiv; - // forcingTerm[B] *=scaleDiv; - // forcingTerm[SW] *=scaleDiv; - // forcingTerm[SE] *=scaleDiv; - // forcingTerm[BW] *=scaleDiv; - // forcingTerm[BE] *=scaleDiv; - // forcingTerm[BS] *=scaleDiv; - // forcingTerm[BN] *=scaleDiv; - // forcingTerm[BSW] *=scaleDiv; - // forcingTerm[BSE] *=scaleDiv; - // forcingTerm[BNW] *=scaleDiv; - // forcingTerm[BNE] *=scaleDiv; - // forcingTerm[REST] *=scaleDiv; - //} - //////// - - - mfcbb +=3.0 * ( 0.5 * forcingTerm[dP00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; - mfbcb +=3.0 * ( 0.5 * forcingTerm[d0P0]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; - mfbbc +=3.0 * ( 0.5 * forcingTerm[d00P]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; - mfccb +=3.0 * ( 0.5 * forcingTerm[dPP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; - mfacb +=3.0 * ( 0.5 * forcingTerm[dMP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NW ]; - mfcbc +=3.0 * ( 0.5 * forcingTerm[dP0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TE ]; - mfabc +=3.0 * ( 0.5 * forcingTerm[dM0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TW ]; - mfbcc +=3.0 * ( 0.5 * forcingTerm[d0PP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TN ]; - mfbac +=3.0 * ( 0.5 * forcingTerm[d0MP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TS ]; - mfccc +=3.0 * ( 0.5 * forcingTerm[dPPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNE]; - mfacc +=3.0 * ( 0.5 * forcingTerm[dMPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNW]; - mfcac +=3.0 * ( 0.5 * forcingTerm[dPMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSE]; - mfaac +=3.0 * ( 0.5 * forcingTerm[dMMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSW]; - mfabb +=3.0 * ( 0.5 * forcingTerm[dM00]) / rho; //-(3.0*p1 - rho)*WEIGTH[W ]; - mfbab +=3.0 * ( 0.5 * forcingTerm[d0M0]) / rho; //-(3.0*p1 - rho)*WEIGTH[S ]; - mfbba +=3.0 * ( 0.5 * forcingTerm[d00M]) / rho; //-(3.0*p1 - rho)*WEIGTH[B ]; - mfaab +=3.0 * ( 0.5 * forcingTerm[dMM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SW ]; - mfcab +=3.0 * ( 0.5 * forcingTerm[dPM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SE ]; - mfaba +=3.0 * ( 0.5 * forcingTerm[dM0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BW ]; - mfcba +=3.0 * ( 0.5 * forcingTerm[dP0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BE ]; - mfbaa +=3.0 * ( 0.5 * forcingTerm[d0MM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BS ]; - mfbca +=3.0 * ( 0.5 * forcingTerm[d0PM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BN ]; - mfaaa +=3.0 * ( 0.5 * forcingTerm[dMMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSW]; - mfcaa +=3.0 * ( 0.5 * forcingTerm[dPMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSE]; - mfaca +=3.0 * ( 0.5 * forcingTerm[dMPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNW]; - mfcca +=3.0 * ( 0.5 * forcingTerm[dPPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNE]; - mfbbb +=3.0 * ( 0.5 * forcingTerm[d000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST] - - //-------------------------------------------------------- - - - //////////End classic source term - //forcing - /////////////////////////////////////////////////////////////////////////////////////////// - if (withForcing) - { - muX1 = static_cast<real>(x1 - 1 + ix1 * maxX1); - muX2 = static_cast<real>(x2 - 1 + ix2 * maxX2); - muX3 = static_cast<real>(x3 - 1 + ix3 * maxX3); - - forcingX1 = muForcingX1.Eval(); - forcingX2 = muForcingX2.Eval(); - forcingX3 = muForcingX3.Eval(); - - vvx += forcingX1 * deltaT * 0.5; // X - vvy += forcingX2 * deltaT * 0.5; // Y - vvz += forcingX3 * deltaT * 0.5; // Z - } - - real vx2; - real vy2; - real vz2; - vx2 = vvx * vvx; - vy2 = vvy * vvy; - vz2 = vvz * vvz; - - /////// - - - - /////////////////////////////////////////////////////////////////////////////////////////// - real oMdrho; - - - oMdrho = mfccc + mfaaa; - m0 = mfaca + mfcac; - m1 = mfacc + mfcaa; - m2 = mfaac + mfcca; - oMdrho += m0; - m1 += m2; - oMdrho += m1; - m0 = mfbac + mfbca; - m1 = mfbaa + mfbcc; - m0 += m1; - m1 = mfabc + mfcba; - m2 = mfaba + mfcbc; - m1 += m2; - m0 += m1; - m1 = mfacb + mfcab; - m2 = mfaab + mfccb; - m1 += m2; - m0 += m1; - oMdrho += m0; - m0 = mfabb + mfcbb; - m1 = mfbab + mfbcb; - m2 = mfbba + mfbbc; - m0 += m1 + m2; - m0 += mfbbb; //hat gefehlt - oMdrho = (rhoRef - (oMdrho + m0))/rhoRef;// 12.03.21 check derivation!!!! - - - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimit = 0.01; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += 1. * oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = 1.; //omega2 or bulk viscosity - //LBMReal OxyyPxzz = 2.0 - collFactorM;// 1.;//-s9;//2+s9;// - //LBMReal OxyyMxzz = 2.0 - collFactorM;// 1.;//2+s9;// - real O4 = 1.0;//collFactorM;// 1.; - real O5 = 1.; - real O6 = 1.; - - - /////fourth order parameters; here only for test. Move out of loop! - - real OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0))); - real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM); - real Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0)); - real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - //FIXME: warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::d00M' ) - real BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - - - //Cum 4. - //LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015 - //LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015 - //LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015 - - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab); - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); - - real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - - //Cum 5. - real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho; - real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho; - real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho; - - //Cum 6. - real 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 - real mxxPyyPzz = mfcaa + mfaca + mfaac; - mxxPyyPzz-=mfaaa;//12.03.21 shifted by mfaaa - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - //applying phase field gradients first part: - // mxxPyyPzz += c2o3 * rhoToPhi * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz); - - //17.03.2021 attempt for statililization by assymptotically vanishing bias - //LBMReal correctionScaling = rhoToPhi /rho;// +0.5;// (vx2 + vy2 + vz2) * 100;// +0.5;//(vx2 + vy2 + vz2)*1000; - //mxxPyyPzz += (1.0/3.0) * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz)* correctionScaling; // As in Hesam's code - //mxxMyy += c1o3 * (dX1_phi * vvx - dX2_phi * vvy)* correctionScaling; - //mxxMzz += c1o3 * (dX1_phi * vvx - dX3_phi * vvz) * correctionScaling; - //mfabb += c1o6 * (dX2_phi * vvz + dX3_phi * vvy) * correctionScaling; - //mfbab += c1o6 * (dX1_phi * vvz + dX3_phi * vvx) * correctionScaling; - //mfbba += c1o6 * (dX1_phi * vvy + dX2_phi * vvx) * correctionScaling; - - - //14.04.2021 filtered velocity - - //LBMReal correctionScaling = rhoToPhi / rho;// +0.5;// (vx2 + vy2 + vz2) * 100;// +0.5;//(vx2 + vy2 + vz2)*1000; - //mxxPyyPzz += (1.0 / 3.0) * (dX1_phi * vvxF + dX2_phi * vvyF + dX3_phi * vvzF) * correctionScaling; // As in Hesam's code - //mxxMyy += c1o3 * (dX1_phi * vvxF - dX2_phi * vvyF) * correctionScaling; - //mxxMzz += c1o3 * (dX1_phi * vvxF - dX3_phi * vvzF) * correctionScaling; - //mfabb += c1o6 * (dX2_phi * vvzF + dX3_phi * vvyF) * correctionScaling; - //mfbab += c1o6 * (dX1_phi * vvzF + dX3_phi * vvxF) * correctionScaling; - //mfbba += c1o6 * (dX1_phi * vvyF + dX2_phi * vvxF) * correctionScaling; - - - real dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz); - real dyuy = dxux + collFactorM * c3o2 * mxxMyy; - real dzuz = dxux + collFactorM * c3o2 * mxxMzz; - - real Dxy = -c3o1 * collFactorM * mfbba; - real Dxz = -c3o1 * collFactorM * mfbab; - real Dyz = -c3o1 * collFactorM * mfabb; - - ////relax unfiltered - //! divergenceFilter 10.05.2021 - real divMag= (1.0 - phi[d000]) * (phi[d000])*10*5*sqrt(fabs((OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz)))); - // LBMReal divMag = 500 *500* 50*(fabs((OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz))))* (fabs((OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz)))); - //LBMReal divMag = (dX1_phi * dxux) > 0 ? (dX1_phi * dxux) : 0; - //divMag += (dX2_phi * dyuy) > 0 ? (dX2_phi * dyuy) : 0; - //divMag += (dX3_phi * dzuz) > 0 ? (dX3_phi * dzuz) : 0; - //divMag *= 5000; - //divMag+= denom * 10 * 5 * sqrt(fabs((OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz)))); - //LBMReal divMag = 5000 * (fabs(dX1_phi * dxux)+fabs(dX2_phi * dyuy)+fabs(dX3_phi * dzuz)); - collFactorM = collFactorM / (1.0 + 3.0 * divMag); - - collFactorM = (collFactorM > 1.0) ? collFactorM : 1.0; - - - mxxPyyPzz += OxxPyyPzz * (/*mfaaa*/ - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vz2 * dzuz); - - mfabb += collFactorM * (-mfabb); - mfbab += collFactorM * (-mfbab); - mfbba += collFactorM * (-mfbba); - - - //relax filtered - //LBMReal interfaceFilter=0.001; - //LBMReal interfaceFactor = c1;// (dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi); - - //mxxPyyPzz += OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - // - //wadjust = collFactorM + (1. - collFactorM) * fabs(mxxMyy) / (fabs(mxxMyy) * interfaceFactor + interfaceFilter)* interfaceFactor; - //mxxMyy += wadjust * (-mxxMyy);// -3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vy2 * dyuy); - //wadjust = collFactorM + (1. - collFactorM) * fabs(mxxMzz) / (fabs(mxxMzz) * interfaceFactor + interfaceFilter) * interfaceFactor; - //mxxMzz += wadjust * (-mxxMzz);// -3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vz2 * dzuz); - - //wadjust = collFactorM + (1. - collFactorM) * fabs(mfabb) / (fabs(mfabb) * interfaceFactor + interfaceFilter) * interfaceFactor; - //mfabb += wadjust * (-mfabb); - //wadjust = collFactorM + (1. - collFactorM) * fabs(mfbab) / (fabs(mfbab) * interfaceFactor + interfaceFilter) * interfaceFactor; - //mfbab += wadjust * (-mfbab); - //wadjust = collFactorM + (1. - collFactorM) * fabs(mfbba) / (fabs(mfbba) * interfaceFactor + interfaceFilter) * interfaceFactor; - //mfbba += wadjust * (-mfbba); - - //applying phase field gradients second part: - //mxxPyyPzz += c2o3 * rhoToPhi * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz); - //mxxPyyPzz += (1.0 / 3.0) * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling; // As in Hesam's code - //mxxMyy += c1o3 * (dX1_phi * vvx - dX2_phi * vvy) * correctionScaling; - //mxxMzz += c1o3 * (dX1_phi * vvx - dX3_phi * vvz) * correctionScaling; - //mfabb += c1o6 * (dX2_phi * vvz + dX3_phi * vvy) * correctionScaling; - //mfbab += c1o6 * (dX1_phi * vvz + dX3_phi * vvx) * correctionScaling; - //mfbba += c1o6 * (dX1_phi * vvy + dX2_phi * vvx) * correctionScaling; - - - //////updated pressure - //mfaaa += (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling; - - - //mxxPyyPzz += (1.0 / 3.0) * (dX1_phi * vvxF + dX2_phi * vvyF + dX3_phi * vvzF) * correctionScaling; // As in Hesam's code - //mxxMyy += c1o3 * (dX1_phi * vvxF - dX2_phi * vvyF) * correctionScaling; - //mxxMzz += c1o3 * (dX1_phi * vvxF - dX3_phi * vvzF) * correctionScaling; - //mfabb += c1o6 * (dX2_phi * vvzF + dX3_phi * vvyF) * correctionScaling; - //mfbab += c1o6 * (dX1_phi * vvzF + dX3_phi * vvxF) * correctionScaling; - //mfbba += c1o6 * (dX1_phi * vvyF + dX2_phi * vvxF) * correctionScaling; - - - //////updated pressure - //mfaaa += (dX1_phi * vvxF + dX2_phi * vvyF + dX3_phi * vvzF) * correctionScaling; - - - mxxPyyPzz += mfaaa;//12.03.21 shifted by mfaaa - // mxxPyyPzz = mfaaa; //12.03.21 reguarized pressure !? - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - wadjust = Oxyz + (1. - Oxyz) * 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); - - - CUMacc = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc); - CUMcac = -O4 * (c1o1 / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac); - CUMcca = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca); - CUMbbc = -O4 * (c1o1 / collFactorM - c1o2) * Dxy * c1o3 * BB + (c1o1 - O4) * (CUMbbc); - CUMbcb = -O4 * (c1o1 / collFactorM - c1o2) * Dxz * c1o3 * BB + (c1o1 - O4) * (CUMbcb); - CUMcbb = -O4 * (c1o1 / collFactorM - c1o2) * Dyz * c1o3 * BB + (c1o1 - O4) * (CUMcbb); - - - - - //CUMacc -= (one / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A ; - //CUMcac -= (one / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A ; - //CUMcca -= (one / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A ; - //CUMbbc -= (one / collFactorM - c1o2) * Dxy * c1o3 * B ; - //CUMbcb -= (one / collFactorM - c1o2) * Dxz * c1o3 * B ; - //CUMcbb -= (one / collFactorM - c1o2) * Dyz * c1o3 * B ; - - //wadjust = O4 + (1. - O4) * fabs(CUMacc) / (fabs(CUMacc) + qudricLimit); - //CUMacc += wadjust * (-CUMacc); - //wadjust = O4 + (1. - O4) * fabs(CUMcac) / (fabs(CUMcac) + qudricLimit); - //CUMcac += wadjust * (-CUMcac); - //wadjust = O4 + (1. - O4) * fabs(CUMcca) / (fabs(CUMcca) + qudricLimit); - //CUMcca += wadjust * (-CUMcca); - //wadjust = O4 + (1. - O4) * fabs(CUMbbc) / (fabs(CUMbbc) + qudricLimit); - //CUMbbc += wadjust * (-CUMbbc); - //wadjust = O4 + (1. - O4) * fabs(CUMbcb) / (fabs(CUMbcb) + qudricLimit); - //CUMbcb += wadjust * (-CUMbcb); - //wadjust = O4 + (1. - O4) * fabs(CUMcbb) / (fabs(CUMcbb) + qudricLimit); - //CUMcbb += wadjust * (-CUMcbb); - - - - - - - //CUMacc += (one / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A; - //CUMcac += (one / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A; - //CUMcca += (one / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A; - //CUMbbc += (one / collFactorM - c1o2) * Dxy * c1o3 * B; - //CUMbcb += (one / collFactorM - c1o2) * Dxz * c1o3 * B; - //CUMcbb += (one / collFactorM - c1o2) * Dyz * c1o3 * B; - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - - //wadjust = O5 + (1. - O5) * fabs(CUMbcc) / (fabs(CUMbcc) + qudricLimit); - //CUMbcc += wadjust * (-CUMbcc); - //wadjust = O5 + (1. - O5) * fabs(CUMcbc) / (fabs(CUMcbc) + qudricLimit); - //CUMbcc += wadjust * (-CUMcbc); - //wadjust = O5 + (1. - O5) * fabs(CUMccb) / (fabs(CUMccb) + qudricLimit); - //CUMbcc += wadjust * (-CUMccb); - - - //6. - CUMccc += O6 * (-CUMccc); - - //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 - c1o1) * oMdrho; - mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho; - mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * 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 * (vvz - c1o2) + (mfaaa + 1. * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - 2. * mfaab * vvz + mfaaa * (1. - vz2) - 1. * oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + 1. * oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - 2. * mfabb * vvz + mfaba * (1. - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - 2. * mfacb * vvz + mfaca * (1. - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - 2. * mfbab * vvz + mfbaa * (1. - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - 2. * mfbbb * vvz + mfbba * (1. - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - 2. * mfbcb * vvz + mfbca * (1. - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - 2. * mfcab * vvz + mfcaa * (1. - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - 2. * mfcbb * vvz + mfcba * (1. - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - 2. * mfccb * vvz + mfcca * (1. - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - 2. * mfaba * vvy + mfaaa * (1. - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - 2. * mfabb * vvy + mfaab * (1. - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - 2. * mfabc * vvy + mfaac * (1. - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - 2. * mfbba * vvy + mfbaa * (1. - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - 2. * mfbbb * vvy + mfbab * (1. - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - 2. * mfbbc * vvy + mfbac * (1. - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - 2. * mfcba * vvy + mfcaa * (1. - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - 2. * mfcbb * vvy + mfcab * (1. - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - 2. * mfcbc * vvy + mfcac * (1. - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - 2. * mfbaa * vvx + mfaaa * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - 2. * mfbba * vvx + mfaba * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - 2. * mfbca * vvx + mfaca * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - 2. * mfbab * vvx + mfaab * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - 2. * mfbbb * vvx + mfabb * (1. - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - 2. * mfbcb * vvx + mfacb * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - 2. * mfbac * vvx + mfaac * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - 2. * mfbbc * vvx + mfabc * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - 2. * mfbcc * vvx + mfacc * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - - ////////////////////////////////////////////////////////////////////////// - //proof correctness - ////////////////////////////////////////////////////////////////////////// -//#ifdef PROOF_CORRECTNESS -// LBMReal rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) -// + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) -// + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; -// //LBMReal dif = fabs(drho - rho_post); -// LBMReal dif = drho+ (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) *correctionScaling - rho_post; -//#ifdef SINGLEPRECISION -// if (dif > 10.0E-7 || dif < -10.0E-7) -//#else -// if (dif > 10.0E-15 || dif < -10.0E-15) -//#endif -// { -// UB_THROW(UbException(UB_EXARGS, "drho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(rho_post) -// + " dif=" + UbSystem::toString(dif) -// + " drho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3))); -// //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): drho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3)); -// //exit(EXIT_FAILURE); -// } -//#endif - ////////////////////////////////////////////////////////////////////////// - //write distribution - ////////////////////////////////////////////////////////////////////////// - - /////classical source term 8.4.2021 - - mfcbb += 3.0 * (0.5 * forcingTerm[dP00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; - mfbcb += 3.0 * (0.5 * forcingTerm[d0P0]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; - mfbbc += 3.0 * (0.5 * forcingTerm[d00P]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; - mfccb += 3.0 * (0.5 * forcingTerm[dPP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; - mfacb += 3.0 * (0.5 * forcingTerm[dMP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NW ]; - mfcbc += 3.0 * (0.5 * forcingTerm[dP0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TE ]; - mfabc += 3.0 * (0.5 * forcingTerm[dM0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TW ]; - mfbcc += 3.0 * (0.5 * forcingTerm[d0PP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TN ]; - mfbac += 3.0 * (0.5 * forcingTerm[d0MP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TS ]; - mfccc += 3.0 * (0.5 * forcingTerm[dPPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNE]; - mfacc += 3.0 * (0.5 * forcingTerm[dMPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNW]; - mfcac += 3.0 * (0.5 * forcingTerm[dPMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSE]; - mfaac += 3.0 * (0.5 * forcingTerm[dMMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSW]; - mfabb += 3.0 * (0.5 * forcingTerm[dM00]) / rho; //-(3.0*p1 - rho)*WEIGTH[W ]; - mfbab += 3.0 * (0.5 * forcingTerm[d0M0]) / rho; //-(3.0*p1 - rho)*WEIGTH[S ]; - mfbba += 3.0 * (0.5 * forcingTerm[d00M]) / rho; //-(3.0*p1 - rho)*WEIGTH[B ]; - mfaab += 3.0 * (0.5 * forcingTerm[dMM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SW ]; - mfcab += 3.0 * (0.5 * forcingTerm[dPM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SE ]; - mfaba += 3.0 * (0.5 * forcingTerm[dM0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BW ]; - mfcba += 3.0 * (0.5 * forcingTerm[dP0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BE ]; - mfbaa += 3.0 * (0.5 * forcingTerm[d0MM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BS ]; - mfbca += 3.0 * (0.5 * forcingTerm[d0PM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BN ]; - mfaaa += 3.0 * (0.5 * forcingTerm[dMMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSW]; - mfcaa += 3.0 * (0.5 * forcingTerm[dPMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSE]; - mfaca += 3.0 * (0.5 * forcingTerm[dMPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNW]; - mfcca += 3.0 * (0.5 * forcingTerm[dPPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNE]; - mfbbb += 3.0 * (0.5 * forcingTerm[d000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST] - - - - //////////////////// - - - (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb * rho*c1o3; - (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab * rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba * rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab * rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab * rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba * rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba * rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa * rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca * rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa * rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa * rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca * rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca * rho * c1o3; - - (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb * rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb * rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc * rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb * rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb * rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc * rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc * rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc * rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac * rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc * rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc * rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac * rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac * rho * c1o3; - - (*this->zeroDistributionsF)(x1, x2, x3) = mfbbb * rho * c1o3; - ////////////////////////////////////////////////////////////////////////// - - ////!Incompressible Kernal - - -// ///////Old Kernel \|/ -// // 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 ux2 = ux * ux; -// LBMReal uy2 = uy * uy; -// LBMReal uz2 = uz * uz; -// -// //----------- Calculating Forcing Terms * ------------- -// 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 fac1 = (gamma - WEIGTH[dir]) * c1o3 * rhoToPhi; -// -// 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)); -// 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)); -// -// //-------------------------------------------------------- -// -// mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[dP00]) / 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; -// -// -// 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) * mfabb + 2. * mfbba * mfbab); -// LBMReal CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); -// LBMReal CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); -// -// LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + -// c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho); -// LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + -// c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho); -// LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + -// c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho); -// -// // Cum 5. -// LBMReal CUMbcc = mfbcc - -// (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + -// 2. * (mfbab * mfacb + mfbba * mfabc)) - -// c1o3 * (mfbca + mfbac) * oMdrho; -// LBMReal CUMcbc = mfcbc - -// (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + -// 2. * (mfabb * mfcab + mfbba * mfbac)) - -// c1o3 * (mfcba + mfabc) * oMdrho; -// LBMReal CUMccb = mfccb - -// (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + -// 2. * (mfbab * mfbca + mfabb * mfcba)) - -// c1o3 * (mfacb + mfcab) * oMdrho; -// -// // Cum 6. -// LBMReal CUMccc = -// mfccc + -// ((-4. * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - -// 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - -// 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) + -// (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) + -// 2. * (mfcaa * mfaca * mfaac) + 16. * mfbba * mfbab * mfabb) - -// c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho - -// c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - -// c1o27 * oMdrho * oMdrho * (-2. * oMdrho) + -// (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) + -// (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * -// c2o3 * oMdrho) + -// c1o27 * oMdrho; -// -// // 2. -// // linear combinations -// LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac; -// LBMReal mxxMyy = mfcaa - mfaca; -// LBMReal mxxMzz = mfcaa - mfaac; -// -// LBMReal dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); -// LBMReal dyuy = dxux + collFactorM * c3o2 * mxxMyy; -// LBMReal dzuz = dxux + collFactorM * c3o2 * mxxMzz; -// -// (*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) * mfabb + 2. * mfbba * mfbab); -// mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); -// mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); -// -// mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + -// c1o9 * (oMdrho - 1) * oMdrho; -// mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + -// c1o9 * (oMdrho - 1) * oMdrho; -// mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + -// c1o9 * (oMdrho - 1) * oMdrho; -// -// // 5. -// mfbcc = CUMbcc + -// (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + -// 2. * (mfbab * mfacb + mfbba * mfabc)) + -// c1o3 * (mfbca + mfbac) * oMdrho; -// mfcbc = CUMcbc + -// (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + -// 2. * (mfabb * mfcab + mfbba * mfbac)) + -// c1o3 * (mfcba + mfabc) * oMdrho; -// mfccb = CUMccb + -// (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + -// 2. * (mfbab * mfbca + mfabb * mfcba)) + -// c1o3 * (mfacb + mfcab) * oMdrho; -// -// // 6. -// mfccc = CUMccc - -// ((-4. * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - -// 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) - -// 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) + -// (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) + -// 2. * (mfcaa * mfaca * mfaac) + 16. * mfbba * mfbab * mfabb) - -// c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho - -// c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - -// c1o27 * oMdrho * oMdrho * (-2. * oMdrho) + -// (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) + -// (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * -// c2o3 * oMdrho) - -// c1o27 * oMdrho; -// -// //////////////////////////////////////////////////////////////////////////////////// -// // 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 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))); -// } -//#endif -// -// mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[dP00]; -// 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; -// !Old Kernel - ///////////////////// P H A S E - F I E L D S O L V E R - //////////////////////////////////////////// - /////CUMULANT PHASE-FIELD - real omegaD =1.0/( 3.0 * mob + 0.5); - - 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); - - - //////////////////////////////////////////////////////////////////////////////////// - //! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // fluid component - //LBMReal drhoFluid = - // ((((fccc + faaa) + (faca + fcac)) + ((facc + fcaa) + (faac + fcca))) + - // (((fbac + fbca) + (fbaa + fbcc)) + ((fabc + fcba) + (faba + fcbc)) + ((facb + fcab) + (faab + fccb))) + - // ((fabb + fcbb) + (fbab + fbcb) + (fbba + fbbc))) + fbbb; - - //LBMReal rhoFluid = c1 + drhoFluid; - //LBMReal OOrhoFluid = c1 / rhoFluid; - - - //LBMReal vvx = - // ((((fccc - faaa) + (fcac - faca)) + ((fcaa - facc) + (fcca - faac))) + - // (((fcba - fabc) + (fcbc - faba)) + ((fcab - facb) + (fccb - faab))) + - // (fcbb - fabb)) * OOrhoFluid; - //LBMReal vvy = - // ((((fccc - faaa) + (faca - fcac)) + ((facc - fcaa) + (fcca - faac))) + - // (((fbca - fbac) + (fbcc - fbaa)) + ((facb - fcab) + (fccb - faab))) + - // (fbcb - fbab)) * OOrhoFluid; - //LBMReal vvz = - // ((((fccc - faaa) + (fcac - faca)) + ((facc - fcaa) + (faac - fcca))) + - // (((fbac - fbca) + (fbcc - fbaa)) + ((fabc - fcba) + (fcbc - faba))) + - // (fbbc - fbba)) * OOrhoFluid; - - // LBMReal vvx = ux; - // LBMReal vvy = uy; - // LBMReal vvz = uz; - //////////////////////////////////////////////////////////////////////////////////// - // second component - real concentration = - ((((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; - //////////////////////////////////////////////////////////////////////////////////// - //! - Add half of the acceleration (body force) to the velocity as in Eq. (42) \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - // LBMReal fx = forces[0]; - // LBMReal fy = forces[1]; - // LBMReal fz = -concentration * forces[2]; - // vvx += fx * c1o2; - // vvy += fy * c1o2; - // vvz += fz * c1o2; - //////////////////////////////////////////////////////////////////////////////////// - real oneMinusRho = c1o1 - concentration; - - real cx = - ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)); - real cy = - ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)); - real cz = - ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)); - - //////////////////////////////////////////////////////////////////////////////////// - // calculate the square of velocities for this lattice node - real cx2 = cx * cx; - real cy2 = cy * cy; - real cz2 = cz * cz; - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (6)-(14) in \ref - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho); - forwardChimera(mfaab, mfabb, mfacb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho); - forwardChimera(mfbab, mfbbb, mfbcb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho); - forwardChimera(mfcab, mfcbb, mfccb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho); - forwardChimera(mfaba, mfbba, mfcba, cx, cx2); - forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho); - forwardChimera(mfaab, mfbab, mfcab, cx, cx2); - forwardChimera(mfabb, mfbbb, mfcbb, cx, cx2); - forwardChimera(mfacb, mfbcb, mfccb, cx, cx2); - forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho); - forwardChimera(mfabc, mfbbc, mfcbc, cx, cx2); - forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c3o1, c1o9, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - //! - experimental Cumulant ... to be published ... hopefully - //! - - // linearized orthogonalization of 3rd order central moments - real Mabc = mfabc - mfaba * c1o3; - real Mbca = mfbca - mfbaa * c1o3; - real Macb = mfacb - mfaab * c1o3; - real Mcba = mfcba - mfaba * c1o3; - real Mcab = mfcab - mfaab * c1o3; - real Mbac = mfbac - mfbaa * c1o3; - // linearized orthogonalization of 5th order central moments - real Mcbc = mfcbc - mfaba * c1o9; - real Mbcc = mfbcc - mfbaa * c1o9; - real Mccb = mfccb - mfaab * c1o9; - - // collision of 1st order moments - cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; - cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; - cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; - - //mhx = (ux * phi[REST] + normX1 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhx; - //mhy = (uy * phi[REST] + normX2 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhy; - //mhz = (uz * phi[REST] + normX3 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhz; - - - cx2 = cx * cx; - cy2 = cy * cy; - cz2 = cz * cz; - - // equilibration of 2nd order moments - mfbba = c0o1; - mfbab = c0o1; - mfabb = c0o1; - - mfcaa = c1o3 * concentration; - mfaca = c1o3 * concentration; - mfaac = c1o3 * concentration; - - - //LBMReal omega2 = 1.0f;// omegaD; - //mfbba *= (c1 - omega2); - //mfbab *= (c1 - omega2); - //mfabb *= (c1 - omega2); - - //mfcaa = mfcaa*(c1 - omega2) + omega2*c1o3 * concentration; - //mfaca = mfaca*(c1 - omega2) + omega2*c1o3 * concentration; - //mfaac = mfaac*(c1 - omega2) + omega2*c1o3 * concentration; - - // equilibration of 3rd order moments - Mabc = c0o1; - Mbca = c0o1; - Macb = c0o1; - Mcba = c0o1; - Mcab = c0o1; - Mbac = c0o1; - mfbbb = c0o1; - - // from linearized orthogonalization 3rd order central moments to central moments - mfabc = Mabc + mfaba * c1o3; - mfbca = Mbca + mfbaa * c1o3; - mfacb = Macb + mfaab * c1o3; - mfcba = Mcba + mfaba * c1o3; - mfcab = Mcab + mfaab * c1o3; - mfbac = Mbac + mfbaa * c1o3; - - // equilibration of 4th order moments - mfacc = c1o9 * concentration; - mfcac = c1o9 * concentration; - mfcca = c1o9 * concentration; - - mfcbb = c0o1; - mfbcb = c0o1; - mfbbc = c0o1; - - // equilibration of 5th order moments - Mcbc = c0o1; - Mbcc = c0o1; - Mccb = c0o1; - - // from linearized orthogonalization 5th order central moments to central moments - mfcbc = Mcbc + mfaba * c1o9; - mfbcc = Mbcc + mfbaa * c1o9; - mfccb = Mccb + mfaab * c1o9; - - // equilibration of 6th order moment - mfccc = c1o27 * concentration; - - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (88)-(96) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho); - backwardChimera(mfaba, mfbba, mfcba, cx, cx2); - backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho); - backwardChimera(mfaab, mfbab, mfcab, cx, cx2); - backwardChimera(mfabb, mfbbb, mfcbb, cx, cx2); - backwardChimera(mfacb, mfbcb, mfccb, cx, cx2); - backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho); - backwardChimera(mfabc, mfbbc, mfcbc, cx, cx2); - backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c9o1, c1o9, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho); - backwardChimera(mfaab, mfabb, mfacb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho); - backwardChimera(mfbab, mfbbb, mfbcb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho); - backwardChimera(mfcab, mfcbb, mfccb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho); - - - - (*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; - - /////!CUMULANT PHASE-FIELD - - - - /////////////////// PHASE-FIELD BGK SOLVER /////////////////////////////// -//using namespace D3Q27System; - - // h[dP00] = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); - // h[N] = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3); - // h[T] = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3); - // h[NE] = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3); - // h[NW] = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3); - // h[TE] = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3); - // h[TW] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3); - // h[TN] = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3); - // h[TS] = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3); - // h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3); - // h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3); - // h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3); - // h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3); - - // h[W] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3); - // h[S] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3); - // h[B] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p); - // h[SW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3); - // h[SE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3); - // h[BW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p); - // h[BE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p); - // h[BS] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p); - // h[BN] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p); - // h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p); - // h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p); - // h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p); - // h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p); - - // h[REST] = (*this->zeroDistributionsH)(x1, x2, x3); - ////vvx *= 3; - ////vvy *= 3; - ////vvz *= 3; - ////vx2 = vvx * vvx; - ////vy2 = vvy * vvy; - ////vz2 = vvz * vvz; - - // for (int dir = STARTF; dir < (ENDF + 1); dir++) { - // LBMReal velProd = DX1[dir] * vvx + DX2[dir] * vvy + DX3[dir] * vvz; - // LBMReal velSq1 = velProd * velProd; - // LBMReal hEq; //, gEq; - - // if (dir != REST) { - // LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]]) / 2.0; - // LBMReal hSource = (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST]) * (dirGrad_phi) / denom; - // hEq = phi[REST] * WEIGTH[dir] * (1.0 + 3.0 * velProd + 4.5 * velSq1 - 1.5 * (vx2 + vy2 + vz2)) + hSource * WEIGTH[dir]; - - // // This corresponds with the collision factor of 1.0 which equals (tauH + 0.5). - // h[dir] = h[dir] - (h[dir] - hEq) / (tauH); - - // } else { - // hEq = phi[REST] * WEIGTH[REST] * (1.0 - 1.5 * (vx2 + vy2 + vz2)); - // h[REST] = h[REST] - (h[REST] - hEq) / (tauH); - // } - // } - - // (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3) = h[D3Q27System::INV_E]; - // (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3) = h[D3Q27System::INV_N]; - // (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3) = h[D3Q27System::INV_T]; - // (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3) = h[D3Q27System::INV_NE]; - // (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3) = h[D3Q27System::INV_NW]; - // (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3) = h[D3Q27System::INV_TE]; - // (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3) = h[D3Q27System::INV_TW]; - // (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3) = h[D3Q27System::INV_TN]; - // (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3) = h[D3Q27System::INV_TS]; - // (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3) = h[D3Q27System::INV_TNE]; - // (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3) = h[D3Q27System::INV_TNW]; - // (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3) = h[D3Q27System::INV_TSE]; - // (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = h[D3Q27System::INV_TSW]; - - // (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3) = h[D3Q27System::INV_W]; - // (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3) = h[D3Q27System::INV_S]; - // (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p) = h[D3Q27System::INV_B]; - // (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3) = h[D3Q27System::INV_SW]; - // (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3) = h[D3Q27System::INV_SE]; - // (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p) = h[D3Q27System::INV_BW]; - // (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p) = h[D3Q27System::INV_BE]; - // (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p) = h[D3Q27System::INV_BS]; - // (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p) = h[D3Q27System::INV_BN]; - // (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = h[D3Q27System::INV_BSW]; - // (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p) = h[D3Q27System::INV_BSE]; - // (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p) = h[D3Q27System::INV_BNW]; - // (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p) = h[D3Q27System::INV_BNE]; - - // (*this->zeroDistributionsH)(x1, x2, x3) = h[D3Q27System::REST]; - - /////////////////// END OF OLD BGK SOLVER /////////////////////////////// - } - } - } - - dataSet->setPhaseField(divU); - } -} -////////////////////////////////////////////////////////////////////////// - -real MultiphaseScratchCumulantLBMKernel::gradX1_phi() -{ - using namespace vf::lbm::dir; - using namespace D3Q27System; - - return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP]))) - + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) + - +WEIGTH[d0P0] * (phi[dP00] - phi[dM00])); - //LBMReal sum = 0.0; - //for (int k = FSTARTDIR; k <= FENDDIR; k++) { - // sum += WEIGTH[k] * DX1[k] * phi[k]; - //} - //return 3.0 * sum; -} - -real MultiphaseScratchCumulantLBMKernel::gradX2_phi() -{ - using namespace vf::lbm::dir; - using namespace D3Q27System; - - return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM]))) - + WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) + - +WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0])); - //LBMReal sum = 0.0; - //for (int k = FSTARTDIR; k <= FENDDIR; k++) { - // sum += WEIGTH[k] * DX2[k] * phi[k]; - //} - //return 3.0 * sum; -} - -real MultiphaseScratchCumulantLBMKernel::gradX3_phi() -{ - using namespace vf::lbm::dir; - using namespace D3Q27System; - - return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP]))) - + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) + - +WEIGTH[d0P0] * (phi[d00P] - phi[d00M])); - //LBMReal sum = 0.0; - //for (int k = FSTARTDIR; k <= FENDDIR; k++) { - // sum += WEIGTH[k] * DX3[k] * phi[k]; - //} - //return 3.0 * sum; -} - -real MultiphaseScratchCumulantLBMKernel::nabla2_phi() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - real sum = 0.0; - sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000]))) - + (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000])))); - sum += WEIGTH[d0PP] * ( - (((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000]))) - + (((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000]))) - + (((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000]))) - ); - sum += WEIGTH[d00P] * ( - ((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000])) - + ((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000])) - + ((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000])) - ); - //for (int k = FSTARTDIR; k <= FENDDIR; k++) { - // sum += WEIGTH[k] * (phi[k] - phi[REST]); - //} - return 6.0 * sum; -} - -void MultiphaseScratchCumulantLBMKernel::computePhasefield() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - SPtr<DistributionArray3D> distributionsH = dataSet->getHdistributions(); - - 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[dP00] = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); - h[d0P0] = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3); - h[d00P] = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3); - h[dPP0] = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3); - h[dMP0] = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3); - h[dP0P] = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3); - h[dM0P] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3); - h[d0PP] = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3); - h[d0MP] = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3); - h[dPPP] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3); - h[dMPP] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3); - h[dPMP] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3); - h[dMMP] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3); - - h[dM00] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3); - h[d0M0] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3); - h[d00M] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p); - h[dMM0] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3); - h[dPM0] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3); - h[dM0M] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p); - h[dP0M] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p); - h[d0MM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p); - h[d0PM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p); - h[dMMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p); - h[dPMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p); - h[dMPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p); - h[dPPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p); - - h[d000] = (*this->zeroDistributionsH)(x1, x2, x3); - } - } - } - } -} - -void MultiphaseScratchCumulantLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, - int x3) -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - phi[d000] = (*ph)(x1, x2, x3); - - 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 { - phi[k] = 0.0; - } - } -} - -void MultiphaseScratchCumulantLBMKernel::swapDistributions() -{ - LBMKernel::swapDistributions(); - dataSet->getHdistributions()->swap(); -} \ No newline at end of file diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseScratchCumulantLBMKernel.h b/src/cpu/MultiphaseFlow/LBM/MultiphaseScratchCumulantLBMKernel.h deleted file mode 100644 index db4e547a2054f1a37468bb726f4f3fc20c33bd53..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/LBM/MultiphaseScratchCumulantLBMKernel.h +++ /dev/null @@ -1,104 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseScratchCumulantLBMKernel.h -//! \ingroup LBMKernel -//! \author Hesameddin Safari -//======================================================================================= - -#ifndef MultiphaseScratchCumulantLBMKernel_H -#define MultiphaseScratchCumulantLBMKernel_H - -#include "LBMKernel.h" -#include "BCSet.h" -#include "D3Q27System.h" -#include "basics/utilities/UbTiming.h" -#include "basics/container/CbArray4D.h" -#include "basics/container/CbArray3D.h" - -//! \brief 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 MultiphaseScratchCumulantLBMKernel : public LBMKernel -{ -public: - MultiphaseScratchCumulantLBMKernel(); - virtual ~MultiphaseScratchCumulantLBMKernel(void) = default; - void calculate(int step) override; - SPtr<LBMKernel> clone() override; - void forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho); - void backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho); - void forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2); - void backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2); - - real getCalculationTime() override { return .0; } -protected: - virtual void initDataSet(); - void swapDistributions() override; - real f1[D3Q27System::ENDF+1]; - - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF; - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF; - CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr zeroDistributionsF; - - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH; - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH; - CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr zeroDistributionsH; - - //CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr phaseField; - - real h [D3Q27System::ENDF+1]; - real g [D3Q27System::ENDF+1]; - real phi[D3Q27System::ENDF+1]; - real pr1[D3Q27System::ENDF+1]; - real phi_cutoff[D3Q27System::ENDF+1]; - - real gradX1_phi(); - real gradX2_phi(); - real gradX3_phi(); - //LBMReal gradX1_pr1(); - //LBMReal gradX2_pr1(); - //LBMReal gradX3_pr1(); - //LBMReal dirgradC_phi(int n, int k); - void computePhasefield(); - void findNeighbors(CbArray3D<real,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*/); - - real nabla2_phi(); - - - mu::value_type muX1,muX2,muX3; - mu::value_type muDeltaT; - mu::value_type muNu; - real forcingX1; - real forcingX2; - real forcingX3; -}; - -#endif diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseSharpInterfaceLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseSharpInterfaceLBMKernel.cpp deleted file mode 100644 index 125e9397865a9028984dcf5407323bb8a57d7374..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/LBM/MultiphaseSharpInterfaceLBMKernel.cpp +++ /dev/null @@ -1,1716 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseSharpInterfaceLBMKernel.cpp -//! \ingroup LBMKernel -//! \author M. Geier, K. Kutscher, Hesameddin Safari -//======================================================================================= - -#include "MultiphaseSharpInterfaceLBMKernel.h" -#include "BCArray3D.h" -#include "Block3D.h" -#include "D3Q27EsoTwist3DSplittedVector.h" -#include "D3Q27System.h" -#include "DataSet3D.h" -#include "LBMKernel.h" -#include <cmath> -#include <iostream> -#include <string> -#include "NonNewtonianFluids/LBM/Rheology.h" - -#define PROOF_CORRECTNESS - -using namespace vf::lbm::dir; -using namespace vf::basics::constant; - -////////////////////////////////////////////////////////////////////////// -MultiphaseSharpInterfaceLBMKernel::MultiphaseSharpInterfaceLBMKernel() { this->compressible = false; } -////////////////////////////////////////////////////////////////////////// -void MultiphaseSharpInterfaceLBMKernel::initDataSet() -{ - SPtr<DistributionArray3D> f(new D3Q27EsoTwist3DSplittedVector( nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9)); - SPtr<DistributionArray3D> h(new D3Q27EsoTwist3DSplittedVector( nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9)); // For phase-field - //SPtr<DistributionArray3D> h2(new D3Q27EsoTwist3DSplittedVector(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9)); - //SPtr<PhaseFieldArray3D> divU1(new PhaseFieldArray3D( nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - //CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure(new CbArray3D<real, IndexerX3X2X1>( nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - //pressureOld = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - //p1Old = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - - rhoNode = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - vxNode = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - vyNode = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - vzNode = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - dataSet->setFdistributions(f); - dataSet->setHdistributions(h); // For phase-field - //dataSet->setH2distributions(h2); - //dataSet->setPhaseField(divU1); - //dataSet->setPressureField(pressure); - - phaseField = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.0)); - phaseFieldOld = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 999.0)); - - //divU = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); -} -////////////////////////////////////////////////////////////////////////// -SPtr<LBMKernel> MultiphaseSharpInterfaceLBMKernel::clone() -{ - SPtr<LBMKernel> kernel(new MultiphaseSharpInterfaceLBMKernel()); - kernel->setNX(nx); - dynamicPointerCast<MultiphaseSharpInterfaceLBMKernel>(kernel)->initDataSet(); - kernel->setCollisionFactorMultiphase(this->collFactorL, this->collFactorG); - kernel->setDensityRatio(this->densityRatio); - //kernel->setMultiphaseModelParameters(this->beta, this->kappa); - kernel->setSigma(this->sigma); - kernel->setContactAngle(this->contactAngle); - kernel->setPhiL(this->phiL); - kernel->setPhiH(this->phiH); - kernel->setPhaseFieldRelaxation(this->tauH); - kernel->setMobility(this->mob); - kernel->setInterfaceWidth(this->interfaceWidth); - - kernel->setBCSet(bcSet->clone(kernel)); - kernel->setWithForcing(withForcing); - kernel->setForcingX1(muForcingX1); - kernel->setForcingX2(muForcingX2); - kernel->setForcingX3(muForcingX3); - kernel->setIndex(ix1, ix2, ix3); - kernel->setDeltaT(deltaT); - kernel->setGhostLayerWidth(2); - dynamicPointerCast<MultiphaseSharpInterfaceLBMKernel>(kernel)->initForcing(); - - return kernel; -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseSharpInterfaceLBMKernel::forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) { - //using namespace UbMath; - real m2 = mfa + mfc; - real m1 = mfc - mfa; - real m0 = m2 + mfb; - mfa = m0; - m0 *= Kinverse; - m0 += oneMinusRho; - mfb = (m1 * Kinverse - m0 * vv) * K; - mfc = ((m2 - c2o1 * m1 * vv) * Kinverse + v2 * m0) * K; -} - -//////////////////////////////////////////////////////////////////////////////// -void MultiphaseSharpInterfaceLBMKernel::backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) { - //using namespace UbMath; - real m0 = (((mfc - mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 - vv) * c1o2) * K; - real m1 = (((mfa - mfc) - c2o1 * mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (-v2)) * K; - mfc = (((mfc + mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 + vv) * c1o2) * K; - mfa = m0; - mfb = m1; -} - - -//////////////////////////////////////////////////////////////////////////////// -void MultiphaseSharpInterfaceLBMKernel::forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) { - //using namespace UbMath; - real m1 = (mfa + mfc) + mfb; - real m2 = mfc - mfa; - mfc = (mfc + mfa) + (v2 * m1 - c2o1 * vv * m2); - mfb = m2 - vv * m1; - mfa = m1; -} - - -void MultiphaseSharpInterfaceLBMKernel::backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) { - //using namespace UbMath; - real ma = (mfc + mfa * (v2 - vv)) * c1o2 + mfb * (vv - c1o2); - real mb = ((mfa - mfc) - mfa * v2) - c2o1 * mfb * vv; - mfc = (mfc + mfa * (v2 + vv)) * c1o2 + mfb * (vv + c1o2); - mfb = mb; - mfa = ma; -} - - -void MultiphaseSharpInterfaceLBMKernel::calculate(int step) -{ - using namespace D3Q27System; - //using namespace UbMath; - - forcingX1 = 0.0; - forcingX2 = 0.0; - forcingX3 = 0.0; - - real oneOverInterfaceScale = c4o1 / interfaceWidth; //1.0;//1.5; - ///////////////////////////////////// - - localDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); - nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); - zeroDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); - - localDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions(); - nonLocalDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions(); - zeroDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions(); - - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure = dataSet->getPressureField(); - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - const int bcArrayMaxX1 = (int)bcArray->getNX1(); - const int bcArrayMaxX2 = (int)bcArray->getNX2(); - const int bcArrayMaxX3 = (int)bcArray->getNX3(); - - int minX1 = ghostLayerWidth; - int minX2 = ghostLayerWidth; - int minX3 = ghostLayerWidth; - int maxX1 = bcArrayMaxX1 - ghostLayerWidth; - int maxX2 = bcArrayMaxX2 - ghostLayerWidth; - int maxX3 = bcArrayMaxX3 - ghostLayerWidth; - //real omegaDRho = 1.0;// 1.25;// 1.3; - for (int x3 = minX3 - ghostLayerWidth; x3 < maxX3 + ghostLayerWidth; x3++) { - for (int x2 = minX2 - ghostLayerWidth; x2 < maxX2 + ghostLayerWidth; x2++) { - for (int x1 = minX1 - ghostLayerWidth; x1 < maxX1 + ghostLayerWidth; x1++) { - if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { - int x1p = x1 + 1; - int x2p = x2 + 1; - int x3p = x3 + 1; - - - - real mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - real mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - real mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3); - - //omegaDRho = 2.0;// 1.5; - //real phiOld = (*phaseField)(x1, x2, x3); - - (*phaseField)(x1, x2, x3) = (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca) + (mfcaa + mfacc))) + - (((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) { - (*phaseField)(x1, x2, x3) = c1o1; - } - - if ((*phaseField)(x1, x2, x3) < 0) { - (*phaseField)(x1, x2, x3) = 0; - - - } - } - } - } - } - - this->swapDistributions(); - for (int x3 = minX3 - ghostLayerWidth+1; x3 < maxX3 + ghostLayerWidth-1; x3++) { - for (int x2 = minX2 - ghostLayerWidth+1; x2 < maxX2 + ghostLayerWidth-1; x2++) { - for (int x1 = minX1 - ghostLayerWidth+1; x1 < maxX1 + ghostLayerWidth-1; x1++) { - if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { - //int x1p = x1 + 1; - //int x2p = x2 + 1; - //int x3p = x3 + 1; - - - SPtr<DistributionArray3D> distributionH = this->getDataSet()->getHdistributions(); - real hh[27]; - distributionH->getPostCollisionDistribution(hh, x1, x2, x3); - real phiD, vxP, vyP, vzP; - - D3Q27System::calcIncompMacroscopicValues(hh, phiD, vxP, vyP, vzP); - (*phaseFieldOld)(x1, x2, x3) = phiD; - - - SPtr<DistributionArray3D> distribution = this->getDataSet()->getFdistributions(); - real ff[27]; - distribution->getPostCollisionDistribution(ff, x1, x2, x3); - real rhoG,vx,vy,vz; - - D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz); - - (*rhoNode)(x1, x2, x3) = rhoG;// *((*phaseField)(x1, x2, x3) > c1o2 ? densityRatio : c1o1); - (*vxNode)(x1, x2, x3) = vx; - (*vyNode)(x1, x2, x3) = vy; - (*vzNode)(x1, x2, x3) = vz; - - - } - } - } - } - - SPtr<DistributionArray3D> distribution = this->getDataSet()->getFdistributions(); - real ff[27]; - for (int x3 = minX3 - 1; x3 < maxX3 + 1; x3++) { - for (int x2 = minX2 - 1; x2 < maxX2 + 1; x2++) { - for (int x1 = minX1 - 1; x1 < maxX1 + 1; x1++) { - if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { - //int x1p = x1 + 1; - //int x2p = x2 + 1; - //int x3p = x3 + 1; - findNeighbors(phaseFieldOld, x1, x2, x3); - ////////////////////////////////Momentum conservation experiment 06.03.2023 - //surfacetension - - if ((((*phaseField)(x1, x2, x3) <= c1o2) || phi[d000]<=c1o2)&& ( - (phi[dP00] > c1o2) || - (phi[dM00] > c1o2) || - (phi[d00P] > c1o2) || - (phi[d00M] > c1o2) || - (phi[d0M0] > c1o2) || - (phi[d0P0] > c1o2) || - (phi[dPP0] > c1o2) || - (phi[dPM0] > c1o2) || - (phi[dP0P] > c1o2) || - (phi[dP0M] > c1o2) || - (phi[dMP0] > c1o2) || - (phi[dMM0] > c1o2) || - (phi[dM0P] > c1o2) || - (phi[dM0M] > c1o2) || - (phi[d0PM] > c1o2) || - (phi[d0MM] > c1o2) || - (phi[d0PP] > c1o2) || - (phi[d0MP] > c1o2) || - (phi[dPPP] > c1o2) || - (phi[dPMP] > c1o2) || - (phi[dMPP] > c1o2) || - (phi[dMMP] > c1o2) || - (phi[dPPM] > c1o2) || - (phi[dPMM] > c1o2) || - (phi[dMPM] > c1o2) || - (phi[dMMM] > c1o2) - )) { - real vx = (*vxNode)(x1, x2, x3); - real vy = (*vyNode)(x1, x2, x3); - real vz = (*vzNode)(x1, x2, x3); - findNeighbors(phaseField, x1, x2, x3); - real laplacePressure = c12o1 * sigma * computeCurvature_phi(); - // if (step > 5000) - // UBLOG(logINFO, x1 << ","<< x2 << ","<< x3 << " "<< "3*dP=" << laplacePressure << " dP=" << laplacePressure / 3.0<< " phi=" << phi[d000]<< "\n"); - findNeighbors(phaseFieldOld, x1, x2, x3); - -//16.03.23 c: BB gas side with updated boundary velocity - - distribution->getPostCollisionDistribution(ff, x1, x2, x3); - real rhoG; - if (phi[d000] > c1o2) { //initialization necessary - real sumRho = 0; - real sumWeight = 1.e-100; - for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - if ((phi[fdir] <= c1o2)) { - sumRho += WEIGTH[fdir] * (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); - sumWeight += WEIGTH[fdir]; - } - - } - rhoG = sumRho / sumWeight;// uncheck excpetion: what if there is no adequate neighbor? - for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - if ((phi[fdir] > c1o2) ) { - // real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - - if ((phi[D3Q27System::INVDIR[fdir]] > c1o2)) { - real vxBC = ((*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real vyBC = ((*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real vzBC = ((*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC); - real vDir = (D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + D3Q27System::DX3[fdir] * vz); - vBC = (vBC + vDir) / (c2o1 + vBC - vDir); - - //27.04.23 - // real vxI = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // real vyI = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // real vzI = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - //real vIDir = (D3Q27System::DX1[fdir] * vxI + D3Q27System::DX2[fdir] * vyI + D3Q27System::DX3[fdir] * vzI); - //real dvDir = (vBC - vIDir)*c1o2; - real dvDir = (vBC - vDir); - - LBMReal fGEQ = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz); - LBMReal fBC = (fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC); - //real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew; - - //real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - //real fGEQOld = D3Q27System::getIncompFeqForDirection(fdir, (*rhoNode)(x1, x2, x3), vx, vy, vz); - //real fGEQNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz); - //real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;// fL -feqOLD + feqNew; - //real fBC = fGG - c6o1 * WEIGTH[fdir] * (vBC); - distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - ///// other possibility is tor replace the node itself instead of the neighbor (only c1o1 of them is allowed!) - //real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - //real feqOLD = D3Q27System::getIncompFeqForDirection(fdir, (*rhoNode)(x1 , x2 , x3 ), (*vxNode)(x1 , x2 , x3 ), (*vyNode)(x1 , x2 , x3 ), (*vzNode)(x1 , x2 , x3 )); - //real feqNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG, (*vxNode)(x1 , x2 , x3 ), (*vyNode)(x1 , x2 , x3 ), (*vzNode)(x1, x2, x3 )); - //real fBC = fG - feqOLD + feqNew; - //distribution->setPostCollisionDistributionForDirection(fBC, x1, x2, x3, fdir); - - - } - } - } - //distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1, x2, x3, d000); - { - real fL = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, d000); - real feqOLD = D3Q27System::getIncompFeqForDirection(d000, (*rhoNode)(x1, x2, x3), vx,vy,vz); - real feqNew = D3Q27System::getIncompFeqForDirection(d000, rhoG,vx,vy,vz); - distribution->setPostCollisionDistributionForDirection(fL-feqOLD+feqNew, x1, x2, x3, d000); - } - - } - else {//no refill of gas required - rhoG = (*rhoNode)(x1, x2, x3); - if ((*phaseField)(x1, x2, x3) <= c1o2) {//no refill liquid - for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - if ((phi[fdir] > c1o2)) { - real vxBC = ((*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real vyBC = ((*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real vzBC = ((*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC); - real vDir = (D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + D3Q27System::DX3[fdir] * vz); - //real dvDir = vBC - vDir; - //27.04.23 - // real vxI = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // real vyI = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // real vzI = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - //real vIDir = (D3Q27System::DX1[fdir] * vxI + D3Q27System::DX2[fdir] * vyI + D3Q27System::DX3[fdir] * vzI); - //real dvDir = (vBC - vIDir)*c1o2; - real dvDir = (vBC - vDir); - - vBC = (vBC + vDir) / (c2o1 + vBC - vDir); - real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - //real fBC = fG - c6o1 * WEIGTH[fdir] * (vBC); - real fGEQ = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz); - // real fBC = (-fGInv + fGInvEQ + fGEQ - c6o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC); - real fBC = (fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC); - - //real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - //real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew; - - //if ((*phaseField)(x1, x2, x3) <= c1o2) - distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) { - //real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real vzBC = c1o2 * (vz + (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); - //real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - - //distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio*0 - fL - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - //distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL-2*fL+2*feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - //real flW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC; - //real flWW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC; - //real fLi = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir); - //real number = 666; - //distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC, x1, x2, x3, fdir); - //// real eqBC= D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, vx, vy, vz); - //// real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); - // real eqBC = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - - ////real flNew = (fBC + fG-eqBC-eqG) / densityRatio +eqBC+eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC; - // distribution->setPostCollisionDistributionForDirection(c2o1*laplacePressure * WEIGTH[fdir] +(fBC + fG - eqBC - eqG) / densityRatio + (eqBC + eqG) - fL, x1, x2, x3, fdir);// -0* (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - // //if (vxBC != 0) { - // // int set = 0; - // //} - - - real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - - real eqBC = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, vx, vy, vz); - real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); - real eqBCN = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real eqGN = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - - // real flNew = (fBC + fG-eqBC-eqG) / densityRatio +eqBC+eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC; - real laplacePressureBC; - if ((x1 + D3Q27System::DX1[fdir] > 0) && (x1 + D3Q27System::DX1[fdir] < maxX1 + 1) && (x2 + D3Q27System::DX2[fdir] > 0) && (x2 + D3Q27System::DX2[fdir] < maxX2 + 1) && (x3 + D3Q27System::DX3[fdir] > 0) && (x3 + D3Q27System::DX3[fdir] < maxX3 + 1)) { - findNeighbors(phaseField, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); - laplacePressureBC =c6o1*c2o1* computeCurvature_phi() * sigma; - findNeighbors(phaseFieldOld, x1, x2, x3); - } else - laplacePressureBC = laplacePressure; // curv; // reset to the above - laplacePressureBC = laplacePressure * (c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) + laplacePressureBC * (-c1o1 + c2o1 * (*phaseField)(x1, x2, x3)) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //laplacePressureBC *= sigma; - distribution->setPostCollisionDistributionForDirection(laplacePressureBC * WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio * 0) - fL - 0 * (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir); - - } - - } - - - } - } - else {//refill liquid - - for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - if ((phi[fdir] > c1o2)) { - real vxBC = ((*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real vyBC = ((*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real vzBC = ((*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC); - real vDir = (D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + D3Q27System::DX3[fdir] * vz); - //real dvDir = vBC - vDir; - //27.04.23 - // real vxI = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // real vyI = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // real vzI = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - //real vIDir = (D3Q27System::DX1[fdir] * vxI + D3Q27System::DX2[fdir] * vyI + D3Q27System::DX3[fdir] * vzI); - //real dvDir = (vBC - vIDir)*c1o2; - real dvDir = (vBC - vDir); - - vBC = (vBC + vDir) / (c2o1 + vBC - vDir); - real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - //real fBC = fG - c6o1 * WEIGTH[fdir] * (vBC); - - real fGEQ = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz); - // real fBC = (-fGInv + fGInvEQ + fGEQ - c6o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC); - real fBC = (fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC); - - //real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, fdir); - //real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew; - - ff[D3Q27System::INVDIR[fdir]] = fBC; - if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) { - //real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); - //real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - - //distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio*0 - fL- (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vBC), x1, x2, x3, fdir); - //distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - //distribution->setPostCollisionDistributionForDirection(0, x1, x2, x3, fdir); - //real flW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC; - //real flWW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC; - //real fLi = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir); - // real eqBC = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // //real flNew = (fBC + fG - eqBC - eqG) / densityRatio + eqBC + eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC; - // distribution->setPostCollisionDistributionForDirection(c2o1*laplacePressure* WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBC + eqG) - fL, x1, x2, x3, fdir);// - 0*(feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - - //// real number = 666; - - real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - - real eqBC = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, vx, vy, vz); - real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); - real eqBCN = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real eqGN = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - - // real flNew = (fBC + fG-eqBC-eqG) / densityRatio +eqBC+eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC; - real laplacePressureBC; - if ((x1 + D3Q27System::DX1[fdir] > 0) && (x1 + D3Q27System::DX1[fdir] < maxX1 + 1) && (x2 + D3Q27System::DX2[fdir] > 0) && (x2 + D3Q27System::DX2[fdir] < maxX2 + 1) && (x3 + D3Q27System::DX3[fdir] > 0) && (x3 + D3Q27System::DX3[fdir] < maxX3 + 1)) { - findNeighbors(phaseField, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); - laplacePressureBC = c12o1 * computeCurvature_phi() * sigma; - findNeighbors(phaseFieldOld, x1, x2, x3); - } else - laplacePressureBC = laplacePressure; // curv; // reset to the above - laplacePressureBC = laplacePressure * (c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) + laplacePressureBC * (-c1o1 + c2o1 * (*phaseField)(x1, x2, x3)) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - // laplacePressureBC *= sigma; - distribution->setPostCollisionDistributionForDirection(laplacePressureBC * WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio * 0) - fL - 0 * (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir); - - } - - } - else { - ff[D3Q27System::INVDIR[fdir]] = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);; - } - - - } - - real sum2 = 1e-100; - real sumRho = 0; - // real sumVx = 0; - // real sumVy = 0; - // real sumVz = 0; - for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - if ((phi[fdir] > c1o2)) { - - sumRho += WEIGTH[fdir] * (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]);// * tempRho; - // sumVx += WEIGTH[fdir] * (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); - // sumVy += WEIGTH[fdir] * (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); - // sumVz += WEIGTH[fdir] * (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); - sum2 += WEIGTH[fdir]; - } - } - real rhoL; - D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz); - rhoL = sumRho / sum2; - //vx = sumVx / sum2; - //vy = sumVy / sum2; - //vz = sumVz / sum2; - //rhoL = (*rhoNode)(x1, x2, x3)/densityRatio; - - //for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // ff[D3Q27System::INVDIR[fdir]] = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - //} - - for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - if (((phi[fdir] <= c1o2) ))//&& (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2))) - { - real vxBC = ((*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real vyBC = ((*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real vzBC = ((*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); - real vBC = (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX3[fdir] * vzBC); - real vDir = (D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + D3Q27System::DX3[fdir] * vz); - vBC = (vBC + vDir) / (c2o1 + vBC - vDir); - - //27.04.23 - // real vxI = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // real vyI = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // real vzI = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - //real vIDir = (D3Q27System::DX1[fdir] * vxI + D3Q27System::DX2[fdir] * vyI + D3Q27System::DX3[fdir] * vzI); - //real dvDir = (vBC - vIDir)*c1o2; - real dvDir = (vBC - vDir); - - - real fGEQ = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz); - ff[D3Q27System::INVDIR[fdir]] = (fGEQ - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorL - c1o1)) - c6o1 * WEIGTH[fdir] * (vBC); - // real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vx, vy, vz); - // real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoL, vx, vy, vz); - // ff[D3Q27System::INVDIR[fdir]] = (ff[D3Q27System::INVDIR[fdir]] - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew; - distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - } - } - - - //for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // if ((phi[D3Q27System::INVDIR[fdir]] <= c1o2) && (phi[fdir] > c1o2)) { - // //real vxBC = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // //real vyBC = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // //real vzBC = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // //real vBC = -(D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX2[fdir] * vzBC); - // real vDir = -(D3Q27System::DX1[fdir] * vx + D3Q27System::DX2[fdir] * vy + D3Q27System::DX2[fdir] * vz); - // //vBC = (vBC + vDir) / (c2o1 -( vBC - vDir)); - // //real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) - c6o1 * WEIGTH[fdir] * vDir; - // //real fL = distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) + c6o1 * WEIGTH[fdir] * (vx * D3Q27System::DX1[fdir] + vy * D3Q27System::DX2[fdir] + vz * D3Q27System::DX3[fdir]); - // real fL= D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz); - // distribution->setPostCollisionDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); - // ff[fdir] = fL; - // } - // if (!(phi[fdir] > c1o2)) { - // //std::cout << "Eq at dir=" << fdir << "\n"; - // real vxBC = ((*vxNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // real vyBC = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // real vzBC = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); - // real feqL = D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz); - // distribution->setPostCollisionDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); - // ff[fdir] = feqL; - // } - //} - //real sumRho2= 0; - //for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // sumRho2 += ff[fdir];// -D3Q27System::getIncompFeqForDirection(fdir, 0, sumVx, sumVy, sumVz); - //} - //ff[d000] = rhoL - sumRho2; - //rhoL = 27.0 / 18.0 * sumRho2; - //std::cout << "rhoL=" << rhoL <<" sumRho="<< 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "\n"; - D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz); - //std::cout << "RecalCrhoL=" << rhoL << " sumRho=" << 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "ffRest="<<ff[d000]<<"\n"; - //distribution->setPostCollisionDistributionForDirection(ff[d000], x1, x2, x3, d000); - { - real fG = distribution->getPostCollisionDistributionForDirection(x1, x2, x3, d000); - real feqOLD = D3Q27System::getIncompFeqForDirection(d000, (*rhoNode)(x1, x2, x3), vx, vy, vz); - real feqNew = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz); - distribution->setPostCollisionDistributionForDirection(fG - feqOLD + feqNew, x1, x2, x3, d000); - } - //for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - // ff[D3Q27System::INVDIR[fdir]]=distribution->getPostCollisionDistributionForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); - //} - //D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz); - //std::cout << "AfterRead rhoL=" << rhoL << " rhoGToL=" << rhoG/densityRatio << " vx=" << vx << " vy=" << vy << "ffRest=" << ff[d000] <<" x="<<x1<<" y="<<x2<<" z="<<x3<< "\n"; - - //real feqL = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz); - //distribution->setPostCollisionDistributionForDirection(feqL, x1, x2, x3, d000); - - - - } - - - - } - -}//end Loop - - - - - - } - } - } - } - - - - this->swapDistributions(); - - real collFactorM; - - 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; - - findNeighbors(phaseField, x1, x2, x3); - - - - real mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3); - real mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p); - real mfbbb = (*this->zeroDistributionsF)(x1, x2, x3); - - - - - real rhoH = 1.0; - real rhoL = 1.0/ densityRatio; - - //real rhoToPhi = (rhoH - rhoL) / (phiH - phiL); - - real dX1_phi = gradX1_phi(); - real dX2_phi = gradX2_phi(); - real dX3_phi = gradX3_phi(); - - real denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi)+ 1.0e-20;//+ 1e-9+1e-3; - // 01.09.2022: unclear what value we have to add to the normal: lager values better cut of in gas phase? - real normX1 = dX1_phi / denom; - real normX2 = dX2_phi / denom; - real normX3 = dX3_phi / denom; - - - - collFactorM = phi[d000] > c1o2 ? collFactorL : collFactorG; - //real collFactorMInv = phi[d000] > c1o2 ? collFactorG : collFactorL; - - //real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi(); - - //----------- Calculating Macroscopic Values ------------- - real rho = phi[d000] > c1o2 ? rhoH : rhoL; - - - - real m0, m1, m2; - real rhoRef=c1o1; - - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb))/rhoRef; - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab))/rhoRef; - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba))/rhoRef; - ///////////////////// - - forcingX1 = 0.0; - forcingX2 = 0.0; - forcingX3 = 0.0; - - if (withForcing) { - muRho = rho; - muPhi = phi[d000]; - forcingX1 += muForcingX1.Eval(); - forcingX2 += muForcingX2.Eval(); - forcingX3 += muForcingX3.Eval(); - - vvx += (forcingX1)*deltaT * c1o2; - vvy += (forcingX2)*deltaT * c1o2; - vvz += (forcingX3)*deltaT * c1o2; - } - real vx2; - real vy2; - real vz2; - vx2 = vvx * vvx; - vy2 = vvy * vvy; - vz2 = vvz * vvz; - /////////////////////////////////////////////////////////////////////////////////////////// - real oMdrho; - /////////////// - - oMdrho = mfccc + mfaaa; - m0 = mfaca + mfcac; - m1 = mfacc + mfcaa; - m2 = mfaac + mfcca; - oMdrho += m0; - m1 += m2; - oMdrho += m1; - m0 = mfbac + mfbca; - m1 = mfbaa + mfbcc; - m0 += m1; - m1 = mfabc + mfcba; - m2 = mfaba + mfcbc; - m1 += m2; - m0 += m1; - m1 = mfacb + mfcab; - m2 = mfaab + mfccb; - m1 += m2; - m0 += m1; - oMdrho += m0; - m0 = mfabb + mfcbb; - m1 = mfbab + mfbcb; - m2 = mfbba + mfbbc; - m0 += m1 + m2; - m0 += mfbbb; //hat gefehlt - oMdrho = (rhoRef - (oMdrho + m0))/rhoRef;// 12.03.21 check derivation!!!! - - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; -// real qudricLimit = 0.01 / (c1o1 + 1.0e4 * phi[d000] * (c1o1 - phi[d000])); - //real qudricLimit = 0.01 / (c1o1 + (((*phaseField)(x1, x2, x3) > c1o2) ? 1.0e6 * phi[d000] * (c1o1 - phi[d000]):c0o1)); - real qudricLimit = 0.01; - - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (6)-(14) in \ref - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, vvz, vz2, c36o1, c1o36, oMdrho); - forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, vvz, vz2, c9o1, c1o9, oMdrho); - forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, vvz, vz2, c36o1, c1o36, oMdrho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, vvz, vz2, c9o1, c1o9, oMdrho); - forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, vvz, vz2, c9o4, c4o9, oMdrho); - forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, vvz, vz2, c9o1, c1o9, oMdrho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, vvz, vz2, c36o1, c1o36, oMdrho); - forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, vvz, vz2, c9o1, c1o9, oMdrho); - forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, vvz, vz2, c36o1, c1o36, oMdrho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, vvy, vy2, c6o1, c1o6, oMdrho); - forwardChimera(mfaab, mfabb, mfacb, vvy, vy2); - forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, vvy, vy2, c18o1, c1o18, oMdrho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, vvy, vy2, c3o2, c2o3, oMdrho); - forwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2); - forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, vvy, vy2, c9o2, c2o9, oMdrho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, vvy, vy2, c6o1, c1o6, oMdrho); - forwardChimera(mfcab, mfcbb, mfccb, vvy, vy2); - forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, vvy, vy2, c18o1, c1o18, oMdrho); - - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, vvx, vx2, c1o1, c1o1, oMdrho); - forwardChimera(mfaba, mfbba, mfcba, vvx, vx2); - forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, vvx, vx2, c3o1, c1o3, oMdrho); - forwardChimera(mfaab, mfbab, mfcab, vvx, vx2); - forwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2); - forwardChimera(mfacb, mfbcb, mfccb, vvx, vx2); - forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, vvx, vx2, c3o1, c1o3, oMdrho); - forwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2); - forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, vvx, vx2, c3o1, c1o9, oMdrho); - - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - - // mfaaa = 0.0; - real OxxPyyPzz = 1.0; //omega2 or bulk viscosity - // real OxyyPxzz = 1.;//-s9;//2+s9;// - // real OxyyMxzz = 1.;//2+s9;// - real O4 = 1.; - real O5 = 1.; - real O6 = 1.; - ///// - - /////fourth order parameters; here only for test. Move out of loop! - - real OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0))); - real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM); - real Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0)); - real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - //FIXME: warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::B' ) - real BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - - - //Cum 4. - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab); - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); - - real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - - //Cum 5. - real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho; - real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho; - real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho; - - //Cum 6. - real 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 - real mxxPyyPzz = mfcaa + mfaca + mfaac; - mxxPyyPzz -= mfaaa ;//12.03.21 shifted by mfaaa - //mxxPyyPzz-=(mfaaa+mfaaaS)*c1o2;//12.03.21 shifted by mfaaa - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - /// - // real mmfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - // real mmfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz); - // real mmfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz); - // real mmfabb = mfabb; - // real mmfbab = mfbab; - // real mmfbba = mfbba; - /// - - real dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz)*0; - //real dxux = -c1o2 * (mxxMyy + mxxMzz) * collFactorM - mfaaa * c1o3* omegaDRho; - real dyuy = dxux + collFactorM * c3o2 * mxxMyy; - real dzuz = dxux + collFactorM * c3o2 * mxxMzz; - real Dxy = -c3o1 * collFactorM * mfbba; - real Dxz = -c3o1 * collFactorM * mfbab; - real Dyz = -c3o1 * collFactorM * mfabb; - - // if (phi[d000] > c1o2) { - // /// QR eddyviscosity: - // real eddyR = -(Dxy * Dxy + Dxz * Dxz + c1o3 * dxux * dxux) * (dxux) - (Dxy * Dxy + Dyz * Dyz + c1o3 * dyuy * dyuy) * dyuy - (Dxz * Dxz + Dyz * Dyz + c1o3 * dzuz * dzuz) * dzuz - c2o1 * Dxy * Dxz * Dyz; - // real eddyQ = Dxy * Dxz + Dxy * Dyz + Dxz * Dyz + c1o2 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz); - // real nuEddy = 5.0e1 * (eddyR / (eddyQ + 1e-100)) * (dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi); - // nuEddy = (nuEddy < c1o1 / collFactorM) ? c1o1 / collFactorM : nuEddy; - // collFactorM = c1o1 / nuEddy; - // // collFactorM = c1o1 / (c1o1 / collFactorM +1.e2*nuEddy*(dX1_phi*dX1_phi+dX2_phi*dX2_phi+dX3_phi*dX3_phi)); - // collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM; - // OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0))); - // OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM); - // Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0)); - // A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - // BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - // } - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // non Newtonian fluid collision factor - if (phi[d000] > c1o2) - { - real shearRate = sqrt(c2o1 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz); - collFactorM = Rheology::getBinghamCollFactor(collFactorM, shearRate, c1o1); - collFactorM = (collFactorM < c1o1) ? c1o1 : collFactorM; - } - // omega = Rheology::getHerschelBulkleyCollFactor(omega, shearRate, drho); - // omega = Rheology::getBinghamCollFactor(omega, shearRate, drho); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - ///////// - //real mxxMyyh = -c2o1 * (dxux - dyuy) / collFactorMInv * c1o3; - //real mxxMzzh = -c2o1 * (dxux - dzuz) / collFactorMInv * c1o3; - - //relax - mxxPyyPzz += OxxPyyPzz * (/*mfaaa*/ - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vz2 * dzuz); - - mfabb += collFactorM * (-mfabb); - mfbab += collFactorM * (-mfbab); - mfbba += collFactorM * (-mfbba); - - //mxxMyyh += collFactorMInv * (-mxxMyyh) - 3. * (1. - c1o2 * collFactorMInv) * (vx2 * dxux - vy2 * dyuy); - //mxxMzzh += collFactorMInv * (-mxxMzzh) - 3. * (1. - c1o2 * collFactorMInv) * (vx2 * dxux - vz2 * dzuz); - - mxxPyyPzz += mfaaa; // 12.03.21 shifted by mfaaa - - // mxxPyyPzz += (mfaaa + mfaaaS) * c1o2; - //mfaaa = mfaaaS; - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - // mmfcaa += c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz- mfaaa); - // mmfaca += c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz- mfaaa); - // mmfaac += c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz- mfaaa); - // mmfabb += mfabb; - // mmfbab += mfbab; - // mmfbba += mfbba; - - //relax - wadjust = Oxyz + (1. - Oxyz) * 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 * (c1o1 / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc); - CUMcac = -O4 * (c1o1 / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac); - CUMcca = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca); - CUMbbc = -O4 * (c1o1 / collFactorM - c1o2) * Dxy * c1o3 * BB + (c1o1 - O4) * (CUMbbc); - CUMbcb = -O4 * (c1o1 / collFactorM - c1o2) * Dxz * c1o3 * BB + (c1o1 - O4) * (CUMbcb); - CUMcbb = -O4 * (c1o1 / collFactorM - c1o2) * Dyz * c1o3 * BB + (c1o1 - O4) * (CUMcbb); - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - //back cumulants to central moments - //4. - mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 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 - c1o1) * oMdrho; - mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho; - mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * 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; - - backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, vvx, vx2, c1o1, c1o1, oMdrho); - backwardChimera(mfaba, mfbba, mfcba, vvx, vx2); - backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, vvx, vx2, c3o1, c1o3, oMdrho); - backwardChimera(mfaab, mfbab, mfcab, vvx, vx2); - backwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2); - backwardChimera(mfacb, mfbcb, mfccb, vvx, vx2); - backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, vvx, vx2, c3o1, c1o3, oMdrho); - backwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2); - backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, vvx, vx2, c9o1, c1o9, oMdrho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, vvy, vy2, c6o1, c1o6, oMdrho); - backwardChimera(mfaab, mfabb, mfacb, vvy, vy2); - backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, vvy, vy2, c18o1, c1o18, oMdrho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, vvy, vy2, c3o2, c2o3, oMdrho); - backwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2); - backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, vvy, vy2, c9o2, c2o9, oMdrho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, vvy, vy2, c6o1, c1o6, oMdrho); - backwardChimera(mfcab, mfcbb, mfccb, vvy, vy2); - backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, vvy, vy2, c18o1, c1o18, oMdrho); - - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, vvz, vz2, c36o1, c1o36, oMdrho); - backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, vvz, vz2, c9o1, c1o9, oMdrho); - backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, vvz, vz2, c36o1, c1o36, oMdrho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, vvz, vz2, c9o1, c1o9, oMdrho); - backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, vvz, vz2, c9o4, c4o9, oMdrho); - backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, vvz, vz2, c9o1, c1o9, oMdrho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, vvz, vz2, c36o1, c1o36, oMdrho); - backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, vvz, vz2, c9o1, c1o9, oMdrho); - backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, vvz, vz2, c36o1, c1o36, oMdrho); - ////////////////////////////////////////////////////////////////////////// - //proof correctness - ////////////////////////////////////////////////////////////////////////// - //#ifdef PROOF_CORRECTNESS - real rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) - + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) - + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - - if (UbMath::isNaN(rho_post) || UbMath::isInfinity(rho_post)) - UB_THROW(UbException( - UB_EXARGS, "rho_post is not a number (nan or -1.#IND) or infinity number -1.#INF, node=" + UbSystem::toString(x1) + "," + - UbSystem::toString(x2) + "," + UbSystem::toString(x3))); - - ////////////////////////////////////////////////////////////////////////// - //write distribution - ////////////////////////////////////////////////////////////////////////// - // if (phi[d000] < c1o2) { - (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac;//* rho * c1o3; - - (*this->zeroDistributionsF)(x1, x2, x3) = mfbbb;// *rho* c1o3; -///////////////////// P H A S E - F I E L D S O L V E R -//////////////////////////////////////////// -/////CUMULANT PHASE-FIELD - real omegaD =1.0/( 3.0 * mob + 0.5); - { - mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3); - - - //////////////////////////////////////////////////////////////////////////////////// - //! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // second component - real concentration = - ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; - //////////////////////////////////////////////////////////////////////////////////// - real oneMinusRho = c1o1- concentration; - - real cx = - ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)); - real cy = - ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)); - real cz = - ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)); - - //////////////////////////////////////////////////////////////////////////////////// - // calculate the square of velocities for this lattice node - real cx2 = cx * cx; - real cy2 = cy * cy; - real cz2 = cz * cz; - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (6)-(14) in \ref - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho); - forwardChimera(mfaab, mfabb, mfacb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho); - forwardChimera(mfbab, mfbbb, mfbcb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho); - forwardChimera(mfcab, mfcbb, mfccb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho); - forwardChimera(mfaba, mfbba, mfcba, cx, cx2); - forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho); - forwardChimera(mfaab, mfbab, mfcab, cx, cx2); - forwardChimera(mfabb, mfbbb, mfcbb, cx, cx2); - forwardChimera(mfacb, mfbcb, mfccb, cx, cx2); - forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho); - forwardChimera(mfabc, mfbbc, mfcbc, cx, cx2); - forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c3o1, c1o9, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - //! - experimental Cumulant ... to be published ... hopefully - //! - - // linearized orthogonalization of 3rd order central moments - real Mabc = mfabc - mfaba * c1o3; - real Mbca = mfbca - mfbaa * c1o3; - real Macb = mfacb - mfaab * c1o3; - real Mcba = mfcba - mfaba * c1o3; - real Mcab = mfcab - mfaab * c1o3; - real Mbac = mfbac - mfbaa * c1o3; - // linearized orthogonalization of 5th order central moments - real Mcbc = mfcbc - mfaba * c1o9; - real Mbcc = mfbcc - mfbaa * c1o9; - real Mccb = mfccb - mfaab * c1o9; - - //31.05.2022 addaptive mobility - //omegaD = c1o1 + (sqrt((cx - vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration))) / (sqrt((cx - vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration)) + fabs((1.0 - concentration) * (concentration)) * c1o6 * oneOverInterfaceScale+1.0e-200); - //omegaD = c2o1 * (concentration * (concentration - c1o1)) / (-c6o1 * (sqrt((cx - vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration))) + (concentration * (concentration - c1o1))+1.0e-200); - // collision of 1st order moments - cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + - normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration) * c1o3 * oneOverInterfaceScale; - cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + - normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration) * c1o3 * oneOverInterfaceScale; - cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + - normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration) * c1o3 * oneOverInterfaceScale; - - cx2 = cx * cx; - cy2 = cy * cy; - cz2 = cz * cz; - - // equilibration of 2nd order moments - mfbba = c0o1; - mfbab = c0o1; - mfabb = c0o1; - - mfcaa = c1o3 * concentration; - mfaca = c1o3 * concentration; - mfaac = c1o3 * concentration; - - // equilibration of 3rd order moments - Mabc = c0o1; - Mbca = c0o1; - Macb = c0o1; - Mcba = c0o1; - Mcab = c0o1; - Mbac = c0o1; - mfbbb = c0o1; - - // from linearized orthogonalization 3rd order central moments to central moments - mfabc = Mabc + mfaba * c1o3; - mfbca = Mbca + mfbaa * c1o3; - mfacb = Macb + mfaab * c1o3; - mfcba = Mcba + mfaba * c1o3; - mfcab = Mcab + mfaab * c1o3; - mfbac = Mbac + mfbaa * c1o3; - - // equilibration of 4th order moments - mfacc = c1o9 * concentration; - mfcac = c1o9 * concentration; - mfcca = c1o9 * concentration; - - mfcbb = c0o1; - mfbcb = c0o1; - mfbbc = c0o1; - - // equilibration of 5th order moments - Mcbc = c0o1; - Mbcc = c0o1; - Mccb = c0o1; - - // from linearized orthogonalization 5th order central moments to central moments - mfcbc = Mcbc + mfaba * c1o9; - mfbcc = Mbcc + mfbaa * c1o9; - mfccb = Mccb + mfaab * c1o9; - - // equilibration of 6th order moment - mfccc = c1o27 * concentration; - - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (88)-(96) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho); - backwardChimera(mfaba, mfbba, mfcba, cx, cx2); - backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho); - backwardChimera(mfaab, mfbab, mfcab, cx, cx2); - backwardChimera(mfabb, mfbbb, mfcbb, cx, cx2); - backwardChimera(mfacb, mfbcb, mfccb, cx, cx2); - backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho); - backwardChimera(mfabc, mfbbc, mfcbc, cx, cx2); - backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c9o1, c1o9, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho); - backwardChimera(mfaab, mfabb, mfacb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho); - backwardChimera(mfbab, mfbbb, mfbcb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho); - backwardChimera(mfcab, mfcbb, mfccb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho); - - - - (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3) = mfabb; - (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3) = mfbab; - (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3) = mfbba; - (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3) = mfaab; - (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab; - (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3) = mfaba; - (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba; - (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa; - (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca; - (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa; - (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa; - (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca; - (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca; - - (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3 ) = mfcbb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3 ) = mfbcb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3 ) = mfccb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3 ) = mfacb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac; - - (*this->zeroDistributionsH1)(x1,x2,x3) = mfbbb; - - - - - } - } - } - } - } -} -////////////////////////////////////////////////////////////////////////// - -real MultiphaseSharpInterfaceLBMKernel::gradX1_phi() -{ - using namespace D3Q27System; - return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP]))) - + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) + - +WEIGTH[d0P0] * (phi[dP00] - phi[dM00])); -} - -real MultiphaseSharpInterfaceLBMKernel::gradX2_phi() -{ - using namespace D3Q27System; - return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM]))) - + WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) + - +WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0])); -} - -real MultiphaseSharpInterfaceLBMKernel::gradX3_phi() -{ - using namespace D3Q27System; - return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP]))) - + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) + - +WEIGTH[d0P0] * (phi[d00P] - phi[d00M])); -} - -real MultiphaseSharpInterfaceLBMKernel::gradX1_rhoInv(real rhoL,real rhoDIV) -{ - using namespace D3Q27System; - return 3.0 * ((WEIGTH[dPPP] * (((1.0/(rhoL+rhoDIV*phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) + (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) + (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])))) - + WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) + (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) + ((1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0])) + (1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0]))))) + - +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[dP00]) - 1.0 / (rhoL + rhoDIV * phi[dM00]))); -} - -real MultiphaseSharpInterfaceLBMKernel::gradX2_rhoInv(real rhoL,real rhoDIV) -{ - using namespace D3Q27System; - return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])) - (1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])))) - + WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM])) + (1.0 / (rhoL + rhoDIV * phi[d0PM]) - 1.0 / (rhoL + rhoDIV * phi[d0MP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0])) - (1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0]))))) + - +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d0P0]) - 1.0 / (rhoL + rhoDIV * phi[d0M0]))); -} - -real MultiphaseSharpInterfaceLBMKernel::gradX3_rhoInv(real rhoL, real rhoDIV) -{ - using namespace D3Q27System; - return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) - (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])))) - + WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) - (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) + ((1.0 / (rhoL + rhoDIV * phi[d0MP]) - 1.0 / (rhoL + rhoDIV * phi[d0PM])) + (1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM]))))) + - +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d00P]) - 1.0 / (rhoL + rhoDIV * phi[d00M]))); -} - -real MultiphaseSharpInterfaceLBMKernel::gradX1_phi2() -{ - using namespace D3Q27System; - return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP]))) - + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) + - +WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00])); -} - -real MultiphaseSharpInterfaceLBMKernel::gradX2_phi2() -{ - using namespace D3Q27System; - return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM]))) - + WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) + - +WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0])); -} - -real MultiphaseSharpInterfaceLBMKernel::gradX3_phi2() -{ - using namespace D3Q27System; - return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP]))) - + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) + - +WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M])); -} - -real MultiphaseSharpInterfaceLBMKernel::nabla2_phi() -{ - using namespace D3Q27System; - real sum = 0.0; - sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000]))) - + (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000])))); - sum += WEIGTH[d0PP] * ( - (((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000]))) - + (((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000]))) - + (((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000]))) - ); - sum += WEIGTH[d00P] * ( - ((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000])) - + ((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000])) - + ((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000])) - ); - - return 6.0 * sum; -} - -real MultiphaseSharpInterfaceLBMKernel::computeCurvature_phi() -{ - using namespace D3Q27System; - using namespace UbMath; - - real phiX = gradX1_phi(); - real phiY = gradX2_phi(); - real phiZ = gradX3_phi(); - real phiXX = c4o9*(phi[dP00] - c2o1 * phi[d000] + phi[dM00]) - +(c1o9*(((phi[dPP0] - c2o1 * phi[d0P0] + phi[dMP0])+ (phi[dPM0] - c2o1 * phi[d0M0] + phi[dMM0]))+ ((phi[dP0P] - c2o1 * phi[d00P] + phi[dM0P]) + (phi[dP0M] - c2o1 * phi[d00M] + phi[dM0M]))) - +c1o36* (((phi[dPPP] - c2o1 * phi[d0PP] + phi[dMPP]) + (phi[dPMP] - c2o1 * phi[d0MP] + phi[dMMP])) + ((phi[dPPM] - c2o1 * phi[d0PM] + phi[dMPM]) + (phi[dPMM] - c2o1 * phi[d0MM] + phi[dMMM])))); - real phiYY = c4o9*(phi[d0P0] - c2o1 * phi[d000] + phi[d0M0]) - +(c1o9*(((phi[dPP0] - c2o1 * phi[dP00] + phi[dPM0])+ (phi[dMP0] - c2o1 * phi[dM00] + phi[dMM0]))+ ((phi[d0PP] - c2o1 * phi[d00P] + phi[d0MP]) + (phi[d0PM] - c2o1 * phi[d00M] + phi[d0MM]))) - +c1o36* (((phi[dPPP] - c2o1 * phi[dP0P] + phi[dPMP]) + (phi[dMPM] - c2o1 * phi[dM0M] + phi[dMMM])) + ((phi[dMPP] - c2o1 * phi[dM0P] + phi[dMMP]) + (phi[dPPM] - c2o1 * phi[dP0M] + phi[dPMM])))); - real phiZZ = c4o9*(phi[d00P] - c2o1 * phi[d000] + phi[d00M]) - +(c1o9*(((phi[dM0P] - c2o1 * phi[dM00] + phi[dM0M])+ (phi[dP0P] - c2o1 * phi[dP00] + phi[dP0M]))+ ((phi[d0MP] - c2o1 * phi[d0M0] + phi[d0MM]) + (phi[d0PP] - c2o1 * phi[d0P0] + phi[d0PM]))) - +c1o36* (((phi[dMPP] - c2o1 * phi[dMP0] + phi[dMPM]) + (phi[dPMP] - c2o1 * phi[dPM0] + phi[dPMM])) + ((phi[dMMP] - c2o1 * phi[dMM0] + phi[dMMM]) + (phi[dPPP] - c2o1 * phi[dPP0] + phi[dPPM])))); - real phiXY = c1o4 *(c2o3* (phi[dMM0] - phi[dPM0] + phi[dPP0] - phi[dMP0])+c1o6*((phi[dMMP] - phi[dPMP] + phi[dPPP] - phi[dMPP])+ (phi[dMMM] - phi[dPMM] + phi[dPPM] - phi[dMPM]))); - real phiXZ = c1o4 *(c2o3* (phi[dM0M] - phi[dP0M] + phi[dP0P] - phi[dM0P])+c1o6*((phi[dMPM] - phi[dPPM] + phi[dPPP] - phi[dMPP])+ (phi[dMMM] - phi[dPMM] + phi[dPMP] - phi[dMMP]))); - real phiYZ = c1o4 *(c2o3* (phi[d0MM] - phi[d0MP] + phi[d0PP] - phi[d0PM])+c1o6*((phi[dMMM] - phi[dMMP] + phi[dMPP] - phi[dMPM])+ (phi[dPMM] - phi[dPMP] + phi[dPPP] - phi[dPPM]))); - - //non isotropic FD (to be improved): - //real phiX = (phi[dP00] - phi[dM00]) * c1o2; //gradX1_phi(); - //real phiY = (phi[d0P0] - phi[d0M0]) * c1o2; //gradX2_phi(); - //real phiZ = (phi[d00P] - phi[d00M]) * c1o2; //gradX3_phi(); - - //real phiXX = phi[dP00] - c2o1 * phi[d000] + phi[dM00]; - //real phiYY = phi[d0P0] - c2o1 * phi[d000] + phi[d0M0]; - //real phiZZ =( phi[d00P] - c2o1 * phi[d000] + phi[d00M]); - //real phiXY = c1o4 * (phi[dMM0] - phi[dPM0] + phi[dPP0] - phi[dMP0]); - //real phiXZ = c1o4 * (phi[dM0M] - phi[dP0M] + phi[dP0P] - phi[dM0P]); - //real phiYZ = c1o4 * (phi[d0MM] - phi[d0MP] + phi[d0PP] - phi[d0PM]); - //real back= (c2o1 * (phiX * phiY * phiXY + phiX * phiZ * phiXZ + phiY * phiZ * phiYZ) - phiXX * (phiY * phiY + phiZ * phiZ) - phiYY * (phiX * phiX + phiZ * phiZ) - phiZZ * (phiX * phiX + phiY * phiY)) / (c2o1 * pow(phiX * phiX + phiY * phiY + phiZ * phiZ, c3o2)); - return (c2o1 * (phiX * phiY * phiXY + phiX * phiZ * phiXZ + phiY * phiZ * phiYZ) - phiXX * (phiY * phiY + phiZ * phiZ) - phiYY * (phiX * phiX + phiZ * phiZ) - phiZZ * (phiX * phiX + phiY * phiY)) / (c2o1*pow(phiX*phiX+phiY*phiY+phiZ*phiZ,c3o2)); - -} - -void MultiphaseSharpInterfaceLBMKernel::computePhasefield() -{ - using namespace D3Q27System; - SPtr<DistributionArray3D> distributionsH = dataSet->getHdistributions(); - - 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[dP00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - h[d0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - h[d00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - h[dPP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - h[dMP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - h[dP0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - h[dM0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - h[d0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - h[d0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - - h[dM00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - h[d0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - h[d00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - h[dMM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - h[dPM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - h[dM0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - h[dP0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - h[d0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - h[d0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - - h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3); - } - } - } - } -} - -void MultiphaseSharpInterfaceLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, - int x3) -{ - using namespace D3Q27System; - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - phi[d000] = (*ph)(x1, x2, x3); - - - 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 { - //phi[k] = (*ph)(x1 , x2, x3 );// neutral wetting - phi[k] = 0.0;//unwetting - } - } -} - -void MultiphaseSharpInterfaceLBMKernel::findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, - int x3) -{ - using namespace D3Q27System; - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - phi2[d000] = (*ph)(x1, x2, x3); - - - for (int k = FSTARTDIR; k <= FENDDIR; k++) { - - if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) { - phi2[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]); - } - else { - phi2[k] = 0.05; - } - } -} - -void MultiphaseSharpInterfaceLBMKernel::swapDistributions() -{ - LBMKernel::swapDistributions(); - dataSet->getHdistributions()->swap(); -} - -void MultiphaseSharpInterfaceLBMKernel::initForcing() -{ - 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); - - muForcingX1.DefineVar("rho",&muRho); - muForcingX2.DefineVar("rho",&muRho); - muForcingX3.DefineVar("rho",&muRho); - -} diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseSharpInterfaceLBMKernel.h b/src/cpu/MultiphaseFlow/LBM/MultiphaseSharpInterfaceLBMKernel.h deleted file mode 100644 index fd4b2d88ad4f195683fa2cf17990380a581221dd..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/LBM/MultiphaseSharpInterfaceLBMKernel.h +++ /dev/null @@ -1,129 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseSharpInterfaceLBMKernel.h -//! \ingroup LBMKernel -//! \author M. Geier, K. Kutscher, Hesameddin Safari -//======================================================================================= - -#ifndef MultiphaseSharpInterfaceLBMKernel_H -#define MultiphaseSharpInterfaceLBMKernel_H - -#include "LBMKernel.h" -#include "BCSet.h" -#include "D3Q27System.h" -#include "basics/utilities/UbTiming.h" -#include "basics/container/CbArray4D.h" -#include "basics/container/CbArray3D.h" - -//! \brief Multiphase Cascaded Cumulant LBM kernel. -//! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model -//! \author M. Geier, K. Kutscher, Hesameddin Safari -class MultiphaseSharpInterfaceLBMKernel : public LBMKernel -{ -public: - MultiphaseSharpInterfaceLBMKernel(); - virtual ~MultiphaseSharpInterfaceLBMKernel(void) = default; - void calculate(int step) override; - SPtr<LBMKernel> clone() override; - - - ///refactor - //CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure; - - - double getCalculationTime() override { return .0; } -protected: - virtual void initDataSet(); - void swapDistributions() override; - - void initForcing(); - - void forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho); - void backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho); - void forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2); - void backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2); - - real f1[D3Q27System::ENDF+1]; - - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF; - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF; - CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr zeroDistributionsF; - - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH1; - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH1; - CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr zeroDistributionsH1; - - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressureOld; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr p1Old; - - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseFieldOld; - //CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr divU; - - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr rhoNode; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr vxNode; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr vyNode; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr vzNode; - - real h [D3Q27System::ENDF+1]; - //real h2[D3Q27System::ENDF + 1]; - //real g [D3Q27System::ENDF+1]; - real phi[D3Q27System::ENDF+1]; - real phi2[D3Q27System::ENDF + 1]; - //real pr1[D3Q27System::ENDF+1]; - real phi_cutoff[D3Q27System::ENDF+1]; - - real gradX1_phi(); - real gradX2_phi(); - real gradX3_phi(); - real gradX1_rhoInv(real rhoL, real rhoDIV); - real gradX2_rhoInv(real rhoL, real rhoDIV); - real gradX3_rhoInv(real rhoL, real rhoDIV); - real gradX1_phi2(); - real gradX2_phi2(); - real gradX3_phi2(); - void computePhasefield(); - void findNeighbors(CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, int x1, int x2, int x3); - void findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, int x3); - - real nabla2_phi(); - - real computeCurvature_phi(); - - mu::value_type muX1,muX2,muX3; - mu::value_type muDeltaT; - mu::value_type muNu; - mu::value_type muRho; - mu::value_type muPhi; - real forcingX1; - real forcingX2; - real forcingX3; -}; - -#endif diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.cpp deleted file mode 100644 index a01c86ff8a63c89cde6405d32b590dd3fefb9825..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.cpp +++ /dev/null @@ -1,3055 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.cpp -//! \ingroup LBMKernel -//! \author M. Geier, K. Kutscher, Hesameddin Safari -//======================================================================================= - -#include "MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.h" -#include "BCArray3D.h" -#include "Block3D.h" -#include "D3Q27EsoTwist3DSplittedVector.h" -#include "D3Q27System.h" -#include "DataSet3D.h" -#include "LBMKernel.h" -#include <cmath> -#include <iostream> -#include <string> -#include "basics/constants/NumericConstants.h" -//#include <basics/utilities/UbMath.h> - -#define PROOF_CORRECTNESS - -////////////////////////////////////////////////////////////////////////// -MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::MultiphaseSimpleVelocityBaseExternalPressureLBMKernel() { this->compressible = false; } -////////////////////////////////////////////////////////////////////////// -void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::initDataSet() -{ - SPtr<DistributionArray3D> f(new D3Q27EsoTwist3DSplittedVector( nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9)); - SPtr<DistributionArray3D> h(new D3Q27EsoTwist3DSplittedVector( nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9)); // For phase-field - SPtr<DistributionArray3D> h2(new D3Q27EsoTwist3DSplittedVector(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9)); - SPtr<PhaseFieldArray3D> divU1(new PhaseFieldArray3D( nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure(new CbArray3D<real, IndexerX3X2X1>( nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - pressureOld = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - p1Old = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - dataSet->setFdistributions(f); - dataSet->setHdistributions(h); // For phase-field - dataSet->setH2distributions(h2); - dataSet->setPhaseField(divU1); - dataSet->setPressureField(pressure); - - phaseField = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.0)); - phaseFieldOld = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 999.0)); - - divU = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); -} -////////////////////////////////////////////////////////////////////////// -SPtr<LBMKernel> MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::clone() -{ - SPtr<LBMKernel> kernel(new MultiphaseSimpleVelocityBaseExternalPressureLBMKernel()); - kernel->setNX(nx); - dynamicPointerCast<MultiphaseSimpleVelocityBaseExternalPressureLBMKernel>(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->setInterfaceWidth(this->interfaceWidth); - - kernel->setBCSet(bcSet->clone(kernel)); - kernel->setWithForcing(withForcing); - kernel->setForcingX1(muForcingX1); - kernel->setForcingX2(muForcingX2); - kernel->setForcingX3(muForcingX3); - kernel->setIndex(ix1, ix2, ix3); - kernel->setDeltaT(deltaT); - kernel->setGhostLayerWidth(2); - dynamicPointerCast<MultiphaseSimpleVelocityBaseExternalPressureLBMKernel>(kernel)->initForcing(); - - return kernel; -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) { - using namespace vf::basics::constant; - real m2 = mfa + mfc; - real m1 = mfc - mfa; - real m0 = m2 + mfb; - mfa = m0; - m0 *= Kinverse; - m0 += oneMinusRho; - mfb = (m1 * Kinverse - m0 * vv) * K; - mfc = ((m2 - c2o1 * m1 * vv) * Kinverse + v2 * m0) * K; -} - -//////////////////////////////////////////////////////////////////////////////// -void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) { - using namespace vf::basics::constant; - real m0 = (((mfc - mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 - vv) * c1o2) * K; - real m1 = (((mfa - mfc) - c2o1 * mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (-v2)) * K; - mfc = (((mfc + mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 + vv) * c1o2) * K; - mfa = m0; - mfb = m1; -} - - -//////////////////////////////////////////////////////////////////////////////// -void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) { - using namespace vf::basics::constant; - real m1 = (mfa + mfc) + mfb; - real m2 = mfc - mfa; - mfc = (mfc + mfa) + (v2 * m1 - c2o1 * vv * m2); - mfb = m2 - vv * m1; - mfa = m1; -} - - -void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) { - using namespace vf::basics::constant; - real ma = (mfc + mfa * (v2 - vv)) * c1o2 + mfb * (vv - c1o2); - real mb = ((mfa - mfc) - mfa * v2) - c2o1 * mfb * vv; - mfc = (mfc + mfa * (v2 + vv)) * c1o2 + mfb * (vv + c1o2); - mfb = mb; - mfa = ma; -} - - -void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step) -{ - using namespace D3Q27System; - using namespace vf::basics::constant; - using namespace vf::lbm::dir; - - forcingX1 = 0.0; - forcingX2 = 0.0; - forcingX3 = 0.0; - - real oneOverInterfaceScale = c4o1 / interfaceWidth; //1.0;//1.5; - ///////////////////////////////////// - - localDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); - nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); - zeroDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); - - localDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions(); - nonLocalDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions(); - zeroDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions(); - - localDistributionsH2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getLocalDistributions(); - nonLocalDistributionsH2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getNonLocalDistributions(); - zeroDistributionsH2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getZeroDistributions(); - - - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure = dataSet->getPressureField(); - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - const int bcArrayMaxX1 = (int)bcArray->getNX1(); - const int bcArrayMaxX2 = (int)bcArray->getNX2(); - const int bcArrayMaxX3 = (int)bcArray->getNX3(); - - int minX1 = ghostLayerWidth; - int minX2 = ghostLayerWidth; - int minX3 = ghostLayerWidth; - int maxX1 = bcArrayMaxX1 - ghostLayerWidth; - int maxX2 = bcArrayMaxX2 - ghostLayerWidth; - int maxX3 = bcArrayMaxX3 - ghostLayerWidth; - real omegaDRho = 1.0;// 1.25;// 1.3; - - for (int x3 = minX3-ghostLayerWidth; x3 < maxX3+ghostLayerWidth; x3++) { - for (int x2 = minX2-ghostLayerWidth; x2 < maxX2+ghostLayerWidth; x2++) { - for (int x1 = minX1-ghostLayerWidth; x1 < maxX1+ghostLayerWidth; x1++) { - if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { - int x1p = x1 + 1; - int x2p = x2 + 1; - int x3p = x3 + 1; - - real mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - real mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - - real mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3); - (*phaseField)(x1, x2, x3) = (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca) + (mfcaa + mfacc)) ) + - (((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 ) { - (*phaseField)(x1, x2, x3) = c1o1; - } - - if ((*phaseField)(x1, x2, x3) < 0) { - (*phaseField)(x1, x2, x3) = 0; - } - ////// read F-distributions for velocity formalism - - 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); - - //LBMReal rhoH = 1.0; - //LBMReal rhoL = 1.0 / densityRatio; - - real rhoH = 1.0*densityRatio; - real rhoL = 1.0; - - real rhoToPhi = (rhoH - rhoL) / (phiH - phiL); - - real drho = (((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc)) ) - + (((mfaab + mfccb) + (mfacb + mfcab) ) + ((mfaba + mfcbc) + (mfabc + mfcba) ) + ((mfbaa + mfbcc) + (mfbac + mfbca) ))) - + ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; - - omegaDRho = 2.0;// 1.5; - drho *= omegaDRho; - real keepDrho = drho; - drho = ((*p1Old)(x1, x2, x3) + drho) * c1o2; - // drho = ((*p1Old)(x1, x2, x3)*c2o3 + drho*c1o3) ; - (*p1Old)(x1, x2, x3) = keepDrho; - - //LBMReal rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) - phiH); //Incompressible -///Density correction - //LBMReal dX1_phi = gradX1_phi(); - //LBMReal dX2_phi = gradX2_phi(); - //LBMReal dX3_phi = gradX3_phi(); - //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 rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) - phiH) + (one - (*phaseField)(x1, x2, x3)) * three * (*pressure)(x1, x2, x3); //explicit Compressible - //(*pressureOld)(x1, x2, x3) = (((*pressure)(x1, x2, x3) + rho * c1o3 * drho-(rhoH-rhoL)*(vvx*dX1_phi+vvy*dX2_phi+vvz*dX3_phi)*c1o3)) / (one - (one - (*phaseField)(x1, x2, x3)) * drho); - - //(*pressureOld)(x1, x2, x3) = ((*pressure)(x1, x2, x3) - c1o3 * drho * ((*phaseField)(x1, x2, x3) * (rhoH - rhoL) + rhoL)) / (c1 - ((*phaseField)(x1, x2, x3) - c1) * drho); - //LBMReal rho=rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) - phiH) + (one - (*phaseField)(x1, x2, x3)) * three * (*pressureOld)(x1, x2, x3); - //LBMReal tempDrho = drho; - //drho = (drho*0.9 + (*pressureOld)(x1, x2, x3)*0.1) ; - //(*pressureOld)(x1, x2, x3) = tempDrho; - - //Mathematica - - //LBMReal rho = ((*pressure)(x1, x2, x3) - (*phaseField)(x1, x2, x3) * (*pressure)(x1, x2, x3) + c1o3 * (rhoH + ((*phaseField)(x1, x2, x3) - phiH) * rhoToPhi)) / (c1o3 + c1o3 * drho * (-1 + (*phaseField)(x1, x2, x3))); - (*pressureOld)(x1, x2, x3) = ((*pressure)(x1, x2, x3) + c1o3 * drho * (rhoH + ((*phaseField)(x1, x2, x3) - phiH) * rhoToPhi)) / (1 + drho * (-1 + (*phaseField)(x1, x2, x3))); -/////Full Filter - //LBMReal rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) - phiH)+(one- (*phaseField)(x1, x2, x3))*three* (*pressure)(x1, x2, x3); //explicit Compressible - //(*pressureOld)(x1, x2, x3) = (((*pressure)(x1, x2, x3) + rho * c1o3 * drho)) / (one - (one - (*phaseField)(x1, x2, x3)) * drho); -//// reduced Filter - //LBMReal rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) - phiH) + (one - (*phaseField)(x1, x2, x3)) * three * (*pressureOld)(x1, x2, x3); //explicit Compressible - //(*pressure)(x1, x2, x3) = (((*pressureOld)(x1, x2, x3) + rho * c1o3 * drho)) / (one - (one - (*phaseField)(x1, x2, x3)) * drho); - - //rho = (rho)/(one- (one - (*phaseField)(x1, x2, x3)) * drho); // now implicit Compressible - - //(*pressure)(x1, x2, x3) = (((*phaseField)(x1, x2, x3)) + ((*phaseField2)(x1, x2, x3)) - c1) * c1o3; - ////!!!!!! relplace by pointer swap! - //(*pressureOld)(x1, x2, x3) = (*pressure)(x1, x2, x3); - } - } - } - } - - real collFactorM; - - ////Periodic Filter - //for (int x3 = minX3-1; x3 <= maxX3; x3++) { - // for (int x2 = minX2-1; x2 <= maxX2; x2++) { - // for (int x1 = minX1-1; x1 <= maxX1; x1++) { - // if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { - - // LBMReal sum = 0.; - - // ///Version for boundaries - // for (int xx = -1; xx <= 1; xx++) { - // //int xxx = (xx+x1 <= maxX1) ? ((xx + x1 > 0) ? xx + x1 : maxX1) : 0; - // int xxx = xx + x1; - - // for (int yy = -1; yy <= 1; yy++) { - // //int yyy = (yy+x2 <= maxX2) ?( (yy + x2 > 0) ? yy + x2 : maxX2) : 0; - // int yyy = yy + x2; - - // for (int zz = -1; zz <= 1; zz++) { - // //int zzz = (zz+x3 <= maxX3) ? zzz = ((zz + x3 > 0) ? zz + x3 : maxX3 ): 0; - // int zzz = zz + x3; - - // if (!bcArray->isSolid(xxx, yyy, zzz) && !bcArray->isUndefined(xxx, yyy, zzz)) { - // sum+= 64.0/(216.0*(c1+c3*abs(xx))* (c1 + c3 * abs(yy))* (c1 + c3 * abs(zz)))*(*pressureOld)(xxx, yyy, zzz); - // } - // else{ sum+= 64.0 / (216.0 * (c1 + c3 * abs(xx)) * (c1 + c3 * abs(yy)) * (c1 + c3 * abs(zz))) * (*pressureOld)(x1, x2, x3); - // } - - - // } - // } - // } - // (*pressure)(x1, x2, x3) = sum; - // } - // } - // } - //} - - ////!filter - - 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 - - findNeighbors(phaseField, x1, x2, x3); - - real mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3); - real mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p); - - real mfbbb = (*this->zeroDistributionsF)(x1, x2, x3); - - - real mfhcbb = (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3); - real mfhbcb = (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3); - real mfhbbc = (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3); - real mfhccb = (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3); - real mfhacb = (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3); - real mfhcbc = (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3); - real mfhabc = (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3); - real mfhbcc = (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3); - real mfhbac = (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3); - real mfhccc = (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3); - real mfhacc = (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfhcac = (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfhaac = (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3); - real mfhabb = (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3); - real mfhbab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3); - real mfhbba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p); - real mfhaab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfhcab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3); - real mfhaba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfhcba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p); - real mfhbaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfhbca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p); - real mfhaaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfhcaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfhaca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfhcca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p); - - real mfhbbb = (*this->zeroDistributionsH2)(x1, x2, x3); - - //LBMReal rhoH = 1.0; - //LBMReal rhoL = 1.0 / densityRatio; - - real rhoH = 1.0; - real rhoL = 1.0/ densityRatio; - - real rhoToPhi = (rhoH - rhoL) / (phiH - phiL); - - real dX1_phi = gradX1_phi(); - real dX2_phi = gradX2_phi(); - real dX3_phi = gradX3_phi(); - - real denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi) + 1e-9+1e-3; - // 01.09.2022: unclear what value we have to add to the normal: lager values better cut of in gas phase? - real normX1 = dX1_phi / denom; - real normX2 = dX2_phi / denom; - real normX3 = dX3_phi / denom; - - - - collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL); - - - real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi(); - - //----------- Calculating Macroscopic Values ------------- - real rho = rhoH + rhoToPhi * (phi[d000] - phiH); //Incompressible - - ///scaled phase field - //LBMReal rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) * (*phaseField)(x1, x2, x3) / ((*phaseField)(x1, x2, x3) * (*phaseField)(x1, x2, x3) + (c1 - (*phaseField)(x1, x2, x3)) * (c1 - (*phaseField)(x1, x2, x3))) - phiH); - ///!scaled phase field - - //LBMReal rho = rhoH + rhoToPhi * (phi[d000] - phiH)+(one-phi[d000])* (*pressure)(x1, x2, x3)*three; //compressible - //LBMReal rho = rhoL + (rhoH - rhoL) * phi[d000] + (one - phi[d000]) * (*pressure)(x1, x2, x3) * three; //compressible - - real m0, m1, m2; - real rhoRef= c1o1; - - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb))/rhoRef; - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab))/rhoRef; - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba))/rhoRef; - ////Filter&Gradient merged - real pressureHere = (*pressureOld)(x1, x2, x3); - //LBMReal pressureHere = (*pressure)(x1, x2, x3); - - real arrayP[3][3][3] = { {{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere}}, - {{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere}}, - { {pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere}} }; - //LBMReal LaplaceP = 0.0; - //LaplaceP += WEIGTH[dPPP] * (((((*pressureOld)(x1+1,x2+1,x3+1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 + 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3 + 1) - pressureHere))) - // + ((((*pressureOld)(x1 + 1, x2 - 1, x3 + 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 - 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3 + 1) - pressureHere)))); - //LaplaceP += WEIGTH[d0PP] * ( - // ((((*pressureOld)(x1 + 1, x2 + 1, x3) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 - 1, x3) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3) - pressureHere))) - // + ((((*pressureOld)(x1 + 1, x2, x3 + 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2, x3 -1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2, x3 + 1) - pressureHere))) - // + ((((*pressureOld)(x1, x2 + 1, x3 + 1) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1, x2 + 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3 + 1) - pressureHere))) - // ); - //LaplaceP += WEIGTH[d00P] * ( - // (((*pressureOld)(x1 + 1, x2, x3) - pressureHere) + ((*pressureOld)(x1, x2-1, x3) - pressureHere)) - // + (((*pressureOld)(x1, x2 + 1, x3) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3) - pressureHere)) - // + (((*pressureOld)(x1, x2, x3 + 1) - pressureHere) + ((*pressureOld)(x1, x2, x3 - 1) - pressureHere)) - // ); - - //LaplaceP= 6.0 * LaplaceP; - - //LBMReal sum = 0.0; - - for (int dir1 = -1; dir1 <= 1; dir1++) { - for (int dir2 = -1; dir2 <= 1; dir2++) { - for (int dir3 = -1; dir3 <= 1; dir3++){ - int xxx = x1 + dir1; - int yyy = x2 + dir2; - int zzz = x3 + dir3; - if (!bcArray->isSolid(xxx, yyy, zzz) && !bcArray->isUndefined(xxx, yyy, zzz)) arrayP[dir1 + 1][dir2 + 1][dir3 + 1] = (*pressureOld)(xxx, yyy, zzz); - //if (!bcArray->isSolid(xxx, yyy, zzz) && !bcArray->isUndefined(xxx, yyy, zzz)) arrayP[dir1 + 1][dir2 + 1][dir3 + 1] = (*pressure)(xxx, yyy, zzz); - // sum += 64.0 / (216.0 * (c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2)) * (c1 + c3 * abs(dir3))) * arrayP[dir1 + 1][dir2 + 1][dir3 + 1]; - } - } - } -// (*pressure)(x1, x2, x3) = sum;// *0.1 + (1.0 - 0.1) * (*pressureOld)(x1, x2, x3); - - - (*pressure)(x1, x2, x3) = (((((arrayP[0][0][0] + arrayP[2][2][2]) + (arrayP[0][2][0] + arrayP[2][0][2])) + ((arrayP[2][0][0] + arrayP[0][2][2]) + (arrayP[2][2][0] + arrayP[0][0][2]))) * c1o216 - + (((arrayP[0][0][1] + arrayP[2][2][1]) + (arrayP[0][1][0] + arrayP[2][1][2])) + ((arrayP[1][0][0] + arrayP[1][2][2]) + (arrayP[0][1][2] + arrayP[2][1][0])) + ((arrayP[1][0][2] + arrayP[1][2][0]) + (arrayP[0][2][1] + arrayP[2][0][1]))) * c1o54) - + ((arrayP[0][1][1] + arrayP[2][1][1]) + (arrayP[1][0][1] + arrayP[1][2][1]) + (arrayP[1][1][0] + arrayP[1][1][2])) * c2o27) - + arrayP[1][1][1] * c8o27; - //LBMReal gradPx = 0.0; - //LBMReal gradPy = 0.0; - //LBMReal gradPz = 0.0; - //for (int dir1 = -1; dir1 <= 1; dir1++) { - // for (int dir2 = -1; dir2 <= 1; dir2++) { - // gradPx -= arrayP[0][dir1+1][dir2+1] * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2))); - // gradPx += arrayP[2][dir1+1][dir2+1] * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2))); - - - - // gradPy -= arrayP[dir1+1][0][dir2+1] * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2))); - // gradPy += arrayP[dir1+1][2][dir2+1] * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2))); - // - - // gradPz -= arrayP[dir1+1][dir2+1][0] * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2))); - // gradPz += arrayP[dir1+1][dir2+1][2] * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2))); - // } - //} - - //LBMReal gradPx = ((((arrayP[2][0][0] - arrayP[0][2][2]) + (arrayP[2][2][0] - arrayP[0][0][2])) + ((arrayP[2][2][2] - arrayP[0][0][0]) + (arrayP[2][0][2] - arrayP[0][2][0]))) * c1o72 - // + (((arrayP[2][1][0] - arrayP[0][1][2]) + (arrayP[2][2][1] - arrayP[0][0][1])) + ((arrayP[2][0][1] - arrayP[0][2][1]) + (arrayP[2][1][2] - arrayP[0][1][0]))) * c1o18) - // + (arrayP[2][1][1] - arrayP[0][1][1]) * c2o9; - //LBMReal gradPy = ((((arrayP[0][2][0] - arrayP[2][0][2]) + (arrayP[2][2][0] - arrayP[0][0][2])) + ((arrayP[2][2][2] - arrayP[0][0][0]) + (arrayP[0][2][2] - arrayP[2][0][0]))) * c1o72 - // + (((arrayP[1][2][0] - arrayP[1][0][2]) + (arrayP[2][2][1] - arrayP[0][0][1])) + ((arrayP[0][2][1] - arrayP[2][0][1]) + (arrayP[1][2][2] - arrayP[1][0][0]))) * c1o18) - // + (arrayP[1][2][1] - arrayP[1][0][1]) * c2o9; - //LBMReal gradPz = ((((arrayP[0][0][2] - arrayP[2][2][0]) + (arrayP[0][2][2] - arrayP[2][0][0])) + ((arrayP[2][2][2] - arrayP[0][0][0]) + (arrayP[2][0][2] - arrayP[0][2][0]))) * c1o72 - // + (((arrayP[0][1][2] - arrayP[2][1][0]) + (arrayP[1][2][2] - arrayP[1][0][0])) + ((arrayP[1][0][2] - arrayP[1][2][0]) + (arrayP[2][1][2] - arrayP[0][1][0]))) * c1o18) - // + (arrayP[1][1][2] - arrayP[1][1][0]) * c2o9; - - //gradPx *=c1 - (*pressure)(x1, x2, x3)+pressureHere; - //gradPy *=c1 - (*pressure)(x1, x2, x3) + pressureHere; - //gradPz *=c1 - (*pressure)(x1, x2, x3) + pressureHere; - - ////!Filter&Gradient merged - //LBMReal gradPx = 0.0; - //LBMReal gradPy = 0.0; - //LBMReal gradPz = 0.0; - //for (int dir1 = -1; dir1 <= 1; dir1++) { - // for (int dir2 = -1; dir2 <= 1; dir2++) { - // int yyy = x2 + dir1; - // int zzz = x3 + dir2; - // if (!bcArray->isSolid(x1-1, yyy, zzz) && !bcArray->isUndefined(x1-1, yyy, zzz)) { - // gradPx -= (*pressure)(x1 - 1, yyy, zzz) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2))); - // } - // else { - // gradPx -= (*pressure)(x1, x2, x3) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2))); - // } - // if (!bcArray->isSolid(x1 + 1, yyy, zzz) && !bcArray->isUndefined(x1 + 1, yyy, zzz)) { - // gradPx += (*pressure)(x1 + 1, yyy, zzz) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2))); - // } - // else { - // gradPx += (*pressure)(x1, x2, x3) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2))); - // } - - // int xxx = x1 + dir1; - // if (!bcArray->isSolid(xxx, x2-1, zzz) && !bcArray->isUndefined(xxx, x2-1, zzz)) { - // gradPy -= (*pressure)(xxx, x2-1, zzz) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2))); - // } - // else { - // gradPy -= (*pressure)(x1, x2, x3) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2))); - // } - // if (!bcArray->isSolid(xxx, x2+1, zzz) && !bcArray->isUndefined(xxx, x2+1, zzz)) { - // gradPy += (*pressure)(xxx, x2+1, zzz) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2))); - // } - // else { - // gradPy += (*pressure)(x1, x2, x3) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2))); - // } - - // yyy = x2 + dir2; - // if (!bcArray->isSolid(xxx, yyy, x3-1) && !bcArray->isUndefined(xxx, yyy, x3-1)) { - // gradPz -= (*pressure)(xxx, yyy, x3-1) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2))); - // } - // else { - // gradPz -= (*pressure)(x1, x2, x3) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2))); - // } - // if (!bcArray->isSolid(xxx, yyy, x3+1) && !bcArray->isUndefined(xxx, yyy, x3+1)) { - // gradPz += (*pressure)(xxx, yyy, x3+1) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2))); - // } - // else { - // gradPz += (*pressure)(x1, x2, x3) * c2o9 / ((c1 + c3 * abs(dir1)) * (c1 + c3 * abs(dir2))); - // } - - // } - //} - - //Viscosity increase by phase field residuum - //LBMReal errPhi = (((1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale)- denom); - //LBMReal limVis = 0.01;// 0.0000001 * 10;//0.01; - // collFactorM =collFactorM/(c1+limVis*(errPhi*errPhi)*collFactorM); - // collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM; - //errPhi = errPhi * errPhi* errPhi * errPhi * errPhi * errPhi; - //collFactorM = collFactorM + (1.8 - collFactorM) * errPhi / (errPhi + limVis); - - //3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP]))) - //+WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) + - //+WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M])); - - muRho = rho; - - ////external pressure - //forcingX1 =/* muForcingX1.Eval()/rho */- gradPx/rho; - //forcingX2 =/* muForcingX2.Eval()/rho */- gradPy/rho; - //forcingX3 =/* muForcingX3.Eval()/rho */- gradPz/rho; - - /////////////////////////////////////////////// - - //LBMReal pBefore = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc))) - // + (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca)))) - // + ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb) * c1o3; - //pBefore = -c1o3 * (-1.0e-10)/((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) ); - ////if (vvx * vvx + vvy * vvy + vvz * vvz > 1.0e-100) { - // mfabb -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dP00] * (rhoH - rhoL) / (phiH - phiL))); - // mfbab -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0P0] * (rhoH - rhoL) / (phiH - phiL))); - // mfbba -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d00P] * (rhoH - rhoL) / (phiH - phiL))); - // mfaab -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPP0] * (rhoH - rhoL) / (phiH - phiL))); - // mfcab -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMP0] * (rhoH - rhoL) / (phiH - phiL))); - // mfaba -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dP0P] * (rhoH - rhoL) / (phiH - phiL))); - // mfcba -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dM0P] * (rhoH - rhoL) / (phiH - phiL))); - // mfbaa -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0PP] * (rhoH - rhoL) / (phiH - phiL))); - // mfbca -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0MP] * (rhoH - rhoL) / (phiH - phiL))); - // mfaaa -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPPP] * (rhoH - rhoL) / (phiH - phiL))); - // mfcaa -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMPP] * (rhoH - rhoL) / (phiH - phiL))); - // mfaca -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPMP] * (rhoH - rhoL) / (phiH - phiL))); - // mfcca -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMMP] * (rhoH - rhoL) / (phiH - phiL))); - // mfcbb -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dM00] * (rhoH - rhoL) / (phiH - phiL))); - // mfbcb -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0M0] * (rhoH - rhoL) / (phiH - phiL))); - // mfbbc -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d00M] * (rhoH - rhoL) / (phiH - phiL))); - // mfccb -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMM0] * (rhoH - rhoL) / (phiH - phiL))); - // mfacb -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPM0] * (rhoH - rhoL) / (phiH - phiL))); - // mfcbc -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dM0M] * (rhoH - rhoL) / (phiH - phiL))); - // mfabc -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dP0M] * (rhoH - rhoL) / (phiH - phiL))); - // mfbcc -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0MM] * (rhoH - rhoL) / (phiH - phiL))); - // mfbac -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0PM] * (rhoH - rhoL) / (phiH - phiL))); - // mfccc -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMMM] * (rhoH - rhoL) / (phiH - phiL))); - // mfacc -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPMM] * (rhoH - rhoL) / (phiH - phiL))); - // mfcac -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMPM] * (rhoH - rhoL) / (phiH - phiL))); - // mfaac -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPPM] * (rhoH - rhoL) / (phiH - phiL))); - // mfbbb -= pBefore * 8.0 / 9.0; - //} - - /////////////////////////////////////////////// - - real pStarStart = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc))) - + (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca)))) - + ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb) * c1o3; - - ///////////////////// - //LBMReal vvxh = ((((mfhccc - mfhaaa) + (mfhcac - mfhaca)) + ((mfhcaa - mfhacc) + (mfhcca - mfhaac))) + - // (((mfhcba - mfhabc) + (mfhcbc - mfhaba)) + ((mfhcab - mfhacb) + (mfhccb - mfhaab))) + - // (mfhcbb - mfhabb)) / rhoRef; - //LBMReal vvyh = ((((mfhccc - mfhaaa) + (mfhaca - mfhcac)) + ((mfhacc - mfhcaa) + (mfhcca - mfhaac))) + - // (((mfhbca - mfhbac) + (mfhbcc - mfhbaa)) + ((mfhacb - mfhcab) + (mfhccb - mfhaab))) + - // (mfhbcb - mfhbab)) / rhoRef; - //LBMReal vvzh = ((((mfhccc - mfhaaa) + (mfhcac - mfhaca)) + ((mfhacc - mfhcaa) + (mfhaac - mfhcca))) + - // (((mfhbac - mfhbca) + (mfhbcc - mfhbaa)) + ((mfhabc - mfhcba) + (mfhcbc - mfhaba))) + - // (mfhbbc - mfhbba)) / rhoRef; - - //LBMReal deltaPP = 0*(vvxh * dX1_phi + vvyh * dX2_phi + vvzh * dX3_phi) * rhoToPhi / (rho); - //mfhbcb += c1o6* c2o9 * deltaPP; - //mfhbbc += c1o6* c2o9 * deltaPP; - //mfhcbb += c1o6* c2o9 * deltaPP; - //mfhccb += c1o6* c1o18 * deltaPP; - //mfhacb += c1o6* c1o18 * deltaPP; - //mfhcbc += c1o6* c1o18 * deltaPP; - //mfhabc += c1o6* c1o18 * deltaPP; - //mfhbcc += c1o6* c1o18 * deltaPP; - //mfhbac += c1o6* c1o18 * deltaPP; - //mfhccc += c1o6* c1o72 * deltaPP; - //mfhacc += c1o6* c1o72 * deltaPP; - //mfhcac += c1o6* c1o72 * deltaPP; - //mfhaac += c1o6* c1o72 * deltaPP; - //mfhabb += c1o6* c2o9 * deltaPP; - //mfhbab += c1o6* c2o9 * deltaPP; - //mfhbba += c1o6* c2o9 * deltaPP; - //mfhaab += c1o6* c1o18 * deltaPP; - //mfhcab += c1o6* c1o18 * deltaPP; - //mfhaba += c1o6* c1o18 * deltaPP; - //mfhcba += c1o6* c1o18 * deltaPP; - //mfhbaa += c1o6* c1o18 * deltaPP; - //mfhbca += c1o6* c1o18 * deltaPP; - //mfhaaa += c1o6* c1o72 * deltaPP; - //mfhcaa += c1o6* c1o72 * deltaPP; - //mfhaca += c1o6* c1o72 * deltaPP; - //mfhcca += c1o6* c1o72 * deltaPP; - //mfhbbb += c1o6* c4 * c2o9 * deltaPP; - - ////////////////////// - - /////Recovering the origin distributions - //LBMReal mfStartcbb = mfcbb ; - //LBMReal mfStartbcb = mfbcb ; - //LBMReal mfStartbbc = mfbbc ; - //LBMReal mfStartccb = mfccb ; - //LBMReal mfStartacb = mfacb ; - //LBMReal mfStartcbc = mfcbc ; - //LBMReal mfStartabc = mfabc ; - //LBMReal mfStartbcc = mfbcc ; - //LBMReal mfStartbac = mfbac ; - //LBMReal mfStartccc = mfccc ; - //LBMReal mfStartacc = mfacc ; - //LBMReal mfStartcac = mfcac ; - //LBMReal mfStartaac = mfaac ; - //LBMReal mfStartabb = mfabb ; - //LBMReal mfStartbab = mfbab ; - //LBMReal mfStartbba = mfbba ; - //LBMReal mfStartaab = mfaab ; - //LBMReal mfStartcab = mfcab ; - //LBMReal mfStartaba = mfaba ; - //LBMReal mfStartcba = mfcba ; - //LBMReal mfStartbaa = mfbaa ; - //LBMReal mfStartbca = mfbca ; - //LBMReal mfStartaaa = mfaaa ; - //LBMReal mfStartcaa = mfcaa ; - //LBMReal mfStartaca = mfaca ; - //LBMReal mfStartcca = mfcca ; - //LBMReal mfStartbbb = mfbbb ; - - - mfcbb += mfhcbb /rho; - mfbcb += mfhbcb /rho; - mfbbc += mfhbbc /rho; - mfccb += mfhccb /rho; - mfacb += mfhacb /rho; - mfcbc += mfhcbc /rho; - mfabc += mfhabc /rho; - mfbcc += mfhbcc /rho; - mfbac += mfhbac /rho; - mfccc += mfhccc /rho; - mfacc += mfhacc /rho; - mfcac += mfhcac /rho; - mfaac += mfhaac /rho; - mfabb += mfhabb /rho; - mfbab += mfhbab /rho; - mfbba += mfhbba /rho; - mfaab += mfhaab /rho; - mfcab += mfhcab /rho; - mfaba += mfhaba /rho; - mfcba += mfhcba /rho; - mfbaa += mfhbaa /rho; - mfbca += mfhbca /rho; - mfaaa += mfhaaa /rho; - mfcaa += mfhcaa /rho; - mfaca += mfhaca /rho; - mfcca += mfhcca /rho; - mfbbb += mfhbbb /rho; - - - - //Abbas - real pStar = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc))) - + (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca)))) - + ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb) * c1o3; - //22.09.22 not yet in balance, repaire here - //LBMReal ppStar = ((((((mfhaaa + mfhccc) + (mfhaac + mfhcca)) + ((mfhcac + mfhaca) + (mfhcaa + mfhacc)))*c3 - // + (((mfhaab + mfhccb) + (mfhacb + mfhcab)) + ((mfhaba + mfhcbc) + (mfhabc + mfhcba)) + ((mfhbaa + mfhbcc) + (mfhbac + mfhbca))))*c2 - // + ((mfhabb + mfhcbb) + (mfhbab + mfhbcb) + (mfhbba + mfhbbc))) ) * c1o3/rho; - - //ppStar = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc))) * c3 - // + (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca)))) * c2 - // + ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc)))) * c1o3 ; - - //(*phaseFieldOld)(x1, x2, x3) = ((*phaseFieldOld)(x1, x2, x3) > 99.0) ? phi[d000] : (*phaseFieldOld)(x1, x2, x3); - //LBMReal dtPhi = phi[d000] - (*phaseFieldOld)(x1, x2, x3); - //LBMReal deltaP = -pStar * (c1 - rho / (rho + c1o2 * rhoToPhi * dtPhi));// -pStar * pStar * pStar * 1.0e-4 * rho * rho * rho; - //LBMReal deltaP = pStar * (c1 - mfhbbb*rho) * c1o2;//Explicit - //LBMReal deltaP = pStar * (c1 - mfhbbb * rho) / (c1 + mfhbbb * rho);//Semi-Implicit - //(*phaseFieldOld)(x1, x2, x3) = phi[d000]; - - //mfabb += c2o9 *deltaP; - //mfbab += c2o9 *deltaP; - //mfbba += c2o9 *deltaP; - //mfaab += c1o18*deltaP; - //mfcab += c1o18*deltaP; - //mfaba += c1o18*deltaP; - //mfcba += c1o18*deltaP; - //mfbaa += c1o18*deltaP; - //mfbca += c1o18*deltaP; - //mfaaa += c1o72*deltaP; - //mfcaa += c1o72*deltaP; - //mfaca += c1o72*deltaP; - //mfcca += c1o72*deltaP; - //mfcbb += c2o9 *deltaP; - //mfbcb += c2o9 *deltaP; - //mfbbc += c2o9 *deltaP; - //mfccb += c1o18*deltaP; - //mfacb += c1o18*deltaP; - //mfcbc += c1o18*deltaP; - //mfabc += c1o18*deltaP; - //mfbcc += c1o18*deltaP; - //mfbac += c1o18*deltaP; - //mfccc += c1o72*deltaP; - //mfacc += c1o72*deltaP; - //mfcac += c1o72*deltaP; - //mfaac += c1o72*deltaP; - - //pStar = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc))) - // + (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca)))) - // + ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb) * c1o3; - - - - - //mfabb -= c1o2 * c2o9 *pStar*(phi[d000]-phi[dP00])*rhoToPhi/rho; - //mfbab -= c1o2 * c2o9 *pStar*(phi[d000]-phi[d0P0])*rhoToPhi/rho; - //mfbba -= c1o2 * c2o9 *pStar*(phi[d000]-phi[d00P])*rhoToPhi/rho; - //mfaab -= c1o2 * c1o18*pStar*(phi[d000]-phi[dPP0])*rhoToPhi/rho; - //mfcab -= c1o2 * c1o18*pStar*(phi[d000]-phi[dMP0])*rhoToPhi/rho; - //mfaba -= c1o2 * c1o18*pStar*(phi[d000]-phi[dP0P])*rhoToPhi/rho; - //mfcba -= c1o2 * c1o18*pStar*(phi[d000]-phi[dM0P])*rhoToPhi/rho; - //mfbaa -= c1o2 * c1o18*pStar*(phi[d000]-phi[d0PP])*rhoToPhi/rho; - //mfbca -= c1o2 * c1o18*pStar*(phi[d000]-phi[d0MP])*rhoToPhi/rho; - //mfaaa -= c1o2 * c1o72*pStar*(phi[d000]-phi[dPPP])*rhoToPhi/rho; - //mfcaa -= c1o2 * c1o72*pStar*(phi[d000]-phi[dMPP])*rhoToPhi/rho; - //mfaca -= c1o2 * c1o72*pStar*(phi[d000]-phi[dPMP])*rhoToPhi/rho; - //mfcca -= c1o2 * c1o72*pStar*(phi[d000]-phi[dMMP])*rhoToPhi/rho; - //mfcbb -= c1o2 * c2o9 *pStar*(phi[d000]-phi[dM00])*rhoToPhi/rho; - //mfbcb -= c1o2 * c2o9 *pStar*(phi[d000]-phi[d0M0])*rhoToPhi/rho; - //mfbbc -= c1o2 * c2o9 *pStar*(phi[d000]-phi[d00M])*rhoToPhi/rho; - //mfccb -= c1o2 * c1o18*pStar*(phi[d000]-phi[dMM0])*rhoToPhi/rho; - //mfacb -= c1o2 * c1o18*pStar*(phi[d000]-phi[dPM0])*rhoToPhi/rho; - //mfcbc -= c1o2 * c1o18*pStar*(phi[d000]-phi[dM0M])*rhoToPhi/rho; - //mfabc -= c1o2 * c1o18*pStar*(phi[d000]-phi[dP0M])*rhoToPhi/rho; - //mfbcc -= c1o2 * c1o18*pStar*(phi[d000]-phi[d0MM])*rhoToPhi/rho; - //mfbac -= c1o2 * c1o18*pStar*(phi[d000]-phi[d0PM])*rhoToPhi/rho; - //mfccc -= c1o2 * c1o72*pStar*(phi[d000]-phi[dMMM])*rhoToPhi/rho; - //mfacc -= c1o2 * c1o72*pStar*(phi[d000]-phi[dPMM])*rhoToPhi/rho; - //mfcac -= c1o2 * c1o72*pStar*(phi[d000]-phi[dMPM])*rhoToPhi/rho; - //mfaac -= c1o2 * c1o72*pStar*(phi[d000]-phi[dPPM])*rhoToPhi/rho; - - - //forcingX1 =/* muForcingX1.Eval() / rho*/ - pStar * dX1_phi * rhoToPhi / rho; - //forcingX2 =/* muForcingX2.Eval() / rho*/ - pStar * dX2_phi * rhoToPhi / rho; - //forcingX3 =/* muForcingX3.Eval() / rho*/ - pStar * dX3_phi * rhoToPhi / rho; - - - //mfabb += (-forcingX1) * c2o9; - //mfbab += (-forcingX2) * c2o9; - //mfbba += (-forcingX3) * c2o9; - //mfaab += (-forcingX1 - forcingX2) * c1o16; - //mfcab += (forcingX1 - forcingX2) * c1o16; - //mfaba += (-forcingX1 - forcingX3) * c1o16; - //mfcba += (forcingX1 - forcingX3) * c1o16; - //mfbaa += (-forcingX2 - forcingX3) * c1o16; - //mfbca += (forcingX2 - forcingX3) * c1o16; - //mfaaa += (-forcingX1 - forcingX2 - forcingX3) * c1o72; - //mfcaa += (forcingX1 - forcingX2 - forcingX3) * c1o72; - //mfaca += (-forcingX1 + forcingX2 - forcingX3) * c1o72; - //mfcca += (forcingX1 + forcingX2 - forcingX3) * c1o72; - //mfcbb += (forcingX1)*c2o9; - //mfbcb += (forcingX2)*c2o9; - //mfbbc += (forcingX3)*c2o9; - //mfccb += (forcingX1 + forcingX2) * c1o16; - //mfacb += (-forcingX1 + forcingX2) * c1o16; - //mfcbc += (forcingX1 + forcingX3) * c1o16; - //mfabc += (-forcingX1 + forcingX3) * c1o16; - //mfbcc += (forcingX2 + forcingX3) * c1o16; - //mfbac += (-forcingX2 + forcingX3) * c1o16; - //mfccc += (forcingX1 + forcingX2 + forcingX3) * c1o72; - //mfacc += (-forcingX1 + forcingX2 + forcingX3) * c1o72; - //mfcac += (forcingX1 - forcingX2 + forcingX3) * c1o72; - //mfaac += (-forcingX1 - forcingX2 + forcingX3) * c1o72; - - //LBMReal saveForceX1 = forcingX1; - //LBMReal saveForceX2 = forcingX2; - //LBMReal saveForceX3 = forcingX3; - - vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)) / rhoRef; - vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)) / rhoRef; - vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)) / rhoRef; - - - //LBMReal dRhoInvX = -(((((mfhccc - mfhaaa) + (mfhcac - mfhaca)) + ((mfhcaa - mfhacc) + (mfhcca - mfhaac))) + - // (((mfhcba - mfhabc) + (mfhcbc - mfhaba)) + ((mfhcab - mfhacb) + (mfhccb - mfhaab))) + - // (mfhcbb - mfhabb))); - //LBMReal dRhoInvY = -(((((mfhccc - mfhaaa) + (mfhaca - mfhcac)) + ((mfhacc - mfhcaa) + (mfhcca - mfhaac))) + - // (((mfhbca - mfhbac) + (mfhbcc - mfhbaa)) + ((mfhacb - mfhcab) + (mfhccb - mfhaab))) + - // (mfhbcb - mfhbab))); - //LBMReal dRhoInvZ = -(((((mfhccc - mfhaaa) + (mfhcac - mfhaca)) + ((mfhacc - mfhcaa) + (mfhaac - mfhcca))) + - // (((mfhbac - mfhbca) + (mfhbcc - mfhbaa)) + ((mfhabc - mfhcba) + (mfhcbc - mfhaba))) + - // (mfhbbc - mfhbba))); - - - forcingX1 = 0.0; - forcingX2 = 0.0; - forcingX3 = 0.0; - //!Abbas - //LBMReal dX1_rhoInv = gradX1_rhoInv(rhoL, rhoH - rhoL); - //LBMReal dX2_rhoInv = gradX2_rhoInv(rhoL, rhoH - rhoL); - //LBMReal dX3_rhoInv = gradX3_rhoInv(rhoL, rhoH - rhoL); - //forcingX1 =/* muForcingX1.Eval() / rho*/ +pStar * dX1_rhoInv * rho; - //forcingX2 =/* muForcingX2.Eval() / rho*/ +pStar * dX2_rhoInv * rho; - //forcingX3 =/* muForcingX3.Eval() / rho*/ +pStar * dX3_rhoInv * rho; - - //forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho + pStar * dX1_rhoInv * rho) *c1o2; - //forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho + pStar * dX2_rhoInv * rho) *c1o2; - //forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho + pStar * dX3_rhoInv * rho) *c1o2; - //LBMReal FdX1_phi = normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; - //LBMReal FdX2_phi = normX2 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; - //LBMReal FdX3_phi = normX3 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; - - - //forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho ) ; - //forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho ) ; - //forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho ) ; - - //forcingX1 = (pStar * dRhoInvX* rho *c3) ; - //forcingX2 = (pStar * dRhoInvY* rho *c3) ; - //forcingX3 = (pStar * dRhoInvZ* rho *c3) ; - //if (phi[d000] > 0.1 && phi[d000] < 0.9) std::cout << phi[d000] << " " << dX1_phi * rhoToPhi / rho << " " << dRhoInvX * rho *3<< std::endl; - //LBMReal forcingX1ALTERNAT = ( pStar * dX1_rhoInv * rho) ; - //LBMReal forcingX2ALTERNAT = ( pStar * dX2_rhoInv * rho) ; - //LBMReal forcingX3ALTERNAT = ( pStar * dX3_rhoInv * rho) ; - - //forcingX1 = (fabs(vvx + c1o2 * forcingX1) < fabs(vvx + c1o2 * forcingX1ALTERNAT)) ? forcingX1 : forcingX1ALTERNAT; - //forcingX2 = (fabs(vvy + c1o2 * forcingX2) < fabs(vvy + c1o2 * forcingX2ALTERNAT)) ? forcingX2 : forcingX2ALTERNAT; - //forcingX3 = (fabs(vvz + c1o2 * forcingX3) < fabs(vvz + c1o2 * forcingX3ALTERNAT)) ? forcingX3 : forcingX3ALTERNAT; - - // forcingX1 = -pStar * rhoToPhi / rho * normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; - // forcingX2 = -pStar * rhoToPhi / rho * normX2 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; - // forcingX3 = -pStar * rhoToPhi / rho * normX3 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; - - //forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho *(c1- phi[d000]) + pStar * dX1_rhoInv * rho*(phi[d000])); - //forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho *(c1- phi[d000]) + pStar * dX2_rhoInv * rho*(phi[d000])); - //forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho *(c1- phi[d000]) + pStar * dX3_rhoInv * rho*(phi[d000])); - //if (phi[d000] > 0.3 && phi[d000] < 0.7) - //{ - // int test = 1; - // std::cout << phi[d000] <<" "<< dX1_phi <<" "<< normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale<<" "<< normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale/ dX1_phi<< std::endl; - //} - - - - //LBMReal scaleGrad = c2 * phi[d000] * (1.0 - phi[d000]) / ((phi[d000] * phi[d000] + (1.0 - phi[d000]) * (1.0 - phi[d000])) * (phi[d000] * phi[d000] + (1.0 - phi[d000]) * (1.0 - phi[d000]))); - //dX1_phi *= scaleGrad; - //dX2_phi *= scaleGrad; - //dX3_phi *= scaleGrad; - - ///Experimental interface sharpening force 20.06.2022 - - //LBMReal scaleSharpener = 1.0; - //forcingX1 += scaleSharpener * (FdX1_phi - dX1_phi) * fabsf(FdX1_phi - dX1_phi) / rho; - //forcingX2 += scaleSharpener * (FdX2_phi - dX2_phi) * fabsf(FdX2_phi - dX2_phi) / rho; - //forcingX3 += scaleSharpener * (FdX3_phi - dX3_phi) * fabsf(FdX3_phi - dX3_phi) / rho; - ///surface tension force - forcingX1 += mu * dX1_phi/rho; - forcingX2 += mu * dX2_phi/rho; - forcingX3 += mu * dX3_phi/rho; - - //LBMReal forcingBIAS = 0.5; - forcingX1 += muForcingX1.Eval() / rho;//*phi[d000]; - forcingX2 += muForcingX2.Eval() / rho;// * phi[d000]; - forcingX3 += muForcingX3.Eval() / rho;// * phi[d000]; - - // //19.08.2022 - //vvx += vvxh / rho * c1o2; - //vvy += vvyh / rho * c1o2; - //vvz += vvzh / rho * c1o2; - // // - - - vvx += (forcingX1) * deltaT * c1o2; - vvy += (forcingX2) * deltaT * c1o2; - vvz += (forcingX3) * deltaT * c1o2; - - //vvx += (forcingX1 + muForcingX1.Eval() / rho) * deltaT * c1o2; // X - //vvy += (forcingX2 + muForcingX2.Eval() / rho) * deltaT * c1o2; // Y - //vvz += (forcingX3 + muForcingX3.Eval() / rho) * deltaT * c1o2; // Z - - - - // vvx += (forcingX1 + muForcingX1.Eval() / rho) * deltaT * forcingBIAS; // X - // vvy += (forcingX2 + muForcingX2.Eval() / rho) * deltaT * forcingBIAS; // Y - // vvz += (forcingX3 + muForcingX3.Eval() / rho) * deltaT * forcingBIAS; // Z - - - - //Abbas - //LBMReal M200 = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc))) - // + (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) )) - // + ((mfabb + mfcbb))) ); - //LBMReal M020 = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc))) - // + (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfbaa + mfbcc) + (mfbac + mfbca)))) - // + ( (mfbab + mfbcb) )) ); - //LBMReal M002 = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc))) - // + ( + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca)))) - // + ( (mfbba + mfbbc)))); - - //LBMReal M110 = ((((((mfaaa + mfccc) + (-mfcac - mfaca)) + ((mfaac + mfcca) + (-mfcaa -mfacc))) - // + (((mfaab + mfccb) + (-mfacb - mfcab)) )) - // ) ); - //LBMReal M101 = ((((((mfaaa + mfccc) - (mfaac + mfcca)) + ((mfcac + mfaca) - (mfcaa + mfacc))) - // + (((mfaba + mfcbc) + (-mfabc - mfcba)))) - // )); - //LBMReal M011 = ((((((mfaaa + mfccc) - (mfaac + mfcca)) + ( (mfcaa + mfacc)- (mfcac + mfaca))) - // + (((mfbaa + mfbcc) + (-mfbac - mfbca)))) - // )); - real vvxI = vvx; - real vvyI = vvy; - real vvzI = vvz; - - //LBMReal collFactorStore=collFactorM; - //LBMReal stress; - //for(int iter=0;iter<5;iter++) - //{ - // LBMReal OxxPyyPzz = 1.0; - // LBMReal mxxPyyPzz = (M200-vvxI*vvxI) + (M020-vvyI*vvyI) + (M002-vvzI*vvzI); - // //pStar = mxxPyyPzz * c1o3; - //mxxPyyPzz -= c3 *pStar; - - //LBMReal mxxMyy = (M200-vvxI*vvxI) - (M020-vvyI*vvyI); - //LBMReal mxxMzz = (M200-vvxI*vvxI) - (M002-vvzI*vvzI); - //LBMReal mxy = M110 - vvxI * vvyI; - //LBMReal mxz = M101 - vvxI * vvzI; - //LBMReal myz = M011 - vvyI * vvzI; - - - //mxxMyy *= c1 - collFactorM * c1o2; - //mxxMzz *= c1 - collFactorM * c1o2; - //mxy *= c1 - collFactorM * c1o2; - //mxz *= c1 - collFactorM * c1o2; - //myz *= c1 - collFactorM * c1o2; - //mxxPyyPzz *= c1 - OxxPyyPzz * c1o2; - ////mxxPyyPzz = mxxPyyPzz*fabs(mxxPyyPzz)/(1.0e-6+fabs(mxxPyyPzz)); - ////mxxPyyPzz += c3 * pStar; - //LBMReal mxx = (mxxMyy + mxxMzz + mxxPyyPzz)*c1o3; - //LBMReal myy = (-c2*mxxMyy + mxxMzz + mxxPyyPzz)*c1o3; - //LBMReal mzz = (mxxMyy -c2* mxxMzz + mxxPyyPzz) * c1o3; - //vvxI = vvx - (mxx * dX1_phi + mxy * dX2_phi + mxz * dX3_phi) * rhoToPhi / (rho); - //vvyI = vvy - (mxy * dX1_phi + myy * dX2_phi + myz * dX3_phi) * rhoToPhi / (rho); - //vvzI = vvz - (mxz * dX1_phi + myz * dX2_phi + mzz * dX3_phi) * rhoToPhi / (rho); - - - //// vvzI = vvz + (mxz * dRhoInvX + myz * dRhoInvY + mzz * dRhoInvZ) * (rho)*c3; - //// vvxI = vvx + (mxx * dRhoInvX + mxy * dRhoInvY + mxz * dRhoInvZ) * (rho)*c3; - //// vvyI = vvy + (mxy * dRhoInvX + myy * dRhoInvY + myz * dRhoInvZ) * (rho)*c3; - - - // //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 * mxy; - // //LBMReal Dxz = -three * collFactorM * mxz; - // //LBMReal Dyz = -three * collFactorM * myz; - // ////LBMReal stress = sqrt(sqrt((dyuy+dxux+dzuz)* (dyuy + dxux + dzuz))) * sqrt(forcingX1 * forcingX1 + forcingX2 * forcingX2 + forcingX3 * forcingX3); - // // stress = sqrt(dyuy * dyuy + dxux * dxux + dzuz*dzuz + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz)*sqrt(forcingX1*forcingX1+forcingX2*forcingX2+forcingX3*forcingX3); - // ////collFactorM = collFactorStore + (1.75 - collFactorStore) * stress / (stress + 1.0e-8); - // // - // //LBMReal dX2_rho = (rhoToPhi)*dX2_phi; - // //LBMReal dX1_rho = (rhoToPhi)*dX1_phi; - // //LBMReal dX3_rho = (rhoToPhi)*dX3_phi; - // ////vvxI= vvx+ c1o6 * (c1 / collFactorM - c1o2) * (2 * dxux * dX1_rho + Dxy * dX2_rho + Dxz * dX3_rho) / (rho); - // ////vvyI= vvy+ c1o6 * (c1 / collFactorM - c1o2) * (Dxy * dX1_rho + 2 * dyuy * dX2_rho + Dyz * dX3_rho) / (rho); - // ////vvzI= vvz+ c1o6 * (c1 / collFactorM - c1o2) * (Dxz * dX1_rho + Dyz * dX2_rho + 2 * dyuy * dX3_rho) / (rho); - - // //vvxI = vvx + c1o3*forcingBIAS * (c1 / collFactorM - c1o2) * (2 * dxux * dX1_rho + Dxy * dX2_rho + Dxz * dX3_rho) / (rho); - // //vvyI = vvy + c1o3*forcingBIAS * (c1 / collFactorM - c1o2) * (Dxy * dX1_rho + 2 * dyuy * dX2_rho + Dyz * dX3_rho) / (rho); - // //vvzI = vvz + c1o3*forcingBIAS * (c1 / collFactorM - c1o2) * (Dxz * dX1_rho + Dyz * dX2_rho + 2 * dyuy * dX3_rho) / (rho); - - // ////vvxI = vvx - c1o3 * forcingBIAS * (c1 / collFactorM - c1o2) * (2 * dxux * dX1_rhoInv + Dxy * dX2_rhoInv + Dxz * dX3_rhoInv); - // ////vvyI = vvy - c1o3 * forcingBIAS * (c1 / collFactorM - c1o2) * (Dxy * dX1_rhoInv + 2 * dyuy * dX2_rhoInv + Dyz * dX3_rhoInv); - // ////vvzI = vvz - c1o3 * forcingBIAS * (c1 / collFactorM - c1o2) * (Dxz * dX1_rhoInv + Dyz * dX2_rhoInv + 2 * dyuy * dX3_rhoInv); - - - //} - // //forcingX1+=(vvxI-vvx)/(deltaT* forcingBIAS) + muForcingX1.Eval() / rho; - // //forcingX2 += (vvyI - vvy) / (deltaT * forcingBIAS) + muForcingX2.Eval() / rho; - // //forcingX3 += (vvzI - vvz) / (deltaT * forcingBIAS) + muForcingX3.Eval() / rho; - - - //// forcingX1 += c2 * (vvxI - vvx); - //// forcingX2 += c2 * (vvyI - vvy); - //// forcingX3 += c2 * (vvzI - vvz); - - - //mfabb += c1o2*(-forcingX1) * c2o9; - //mfbab += c1o2*(-forcingX2) * c2o9; - //mfbba += c1o2*(-forcingX3) * c2o9; - //mfaab += c1o2*(-forcingX1 - forcingX2) * c1o18; - //mfcab += c1o2*( forcingX1 - forcingX2) * c1o18; - //mfaba += c1o2*(-forcingX1 - forcingX3) * c1o18; - //mfcba += c1o2*( forcingX1 - forcingX3) * c1o18; - //mfbaa += c1o2*(-forcingX2 - forcingX3) * c1o18; - //mfbca += c1o2*( forcingX2 - forcingX3) * c1o18; - //mfaaa += c1o2*(-forcingX1 - forcingX2 - forcingX3) * c1o72; - //mfcaa += c1o2*(forcingX1 - forcingX2 - forcingX3) * c1o72; - //mfaca += c1o2*(-forcingX1 + forcingX2 - forcingX3) * c1o72; - //mfcca += c1o2*(forcingX1 + forcingX2 - forcingX3) * c1o72; - //mfcbb += c1o2*(forcingX1)*c2o9; - //mfbcb += c1o2*(forcingX2)*c2o9; - //mfbbc += c1o2*(forcingX3)*c2o9; - //mfccb += c1o2*( forcingX1 + forcingX2) * c1o18; - //mfacb += c1o2*(-forcingX1 + forcingX2) * c1o18; - //mfcbc += c1o2*( forcingX1 + forcingX3) * c1o18; - //mfabc += c1o2*(-forcingX1 + forcingX3) * c1o18; - //mfbcc += c1o2*( forcingX2 + forcingX3) * c1o18; - //mfbac += c1o2*(-forcingX2 + forcingX3) * c1o18; - //mfccc += c1o2*(forcingX1 + forcingX2 + forcingX3) * c1o72; - //mfacc += c1o2*(-forcingX1 + forcingX2 + forcingX3) * c1o72; - //mfcac += c1o2*(forcingX1 - forcingX2 + forcingX3) * c1o72; - //mfaac += c1o2*(-forcingX1 - forcingX2 + forcingX3) * c1o72; - - - //forcingX1 = saveForceX1; - //forcingX2 = saveForceX2; - //forcingX3 = saveForceX3; - vvx = vvxI; - vvy = vvyI; - vvz = vvzI; - - - - //!Abbas - - real vx2; - real vy2; - real vz2; - vx2 = vvx * vvx; - vy2 = vvy * vvy; - vz2 = vvz * vvz; - //pStar =ppStar- (vx2 + vy2 + vz2)*pStar; - // pStar = (pStar + ppStar)*c1o2; - /////////////////////////////////////////////////////////////////////////////////////////// - real oMdrho; - /////////////// - //mfabb -= pStar * c2o9; - //mfbab -= pStar * c2o9; - //mfbba -= pStar * c2o9; - //mfaab -= pStar * c1o16; - //mfcab -= pStar * c1o16; - //mfaba -= pStar * c1o16; - //mfcba -= pStar * c1o16; - //mfbaa -= pStar * c1o16; - //mfbca -= pStar * c1o16; - //mfaaa -= pStar * c1o72; - //mfcaa -= pStar * c1o72; - //mfaca -= pStar * c1o72; - //mfcca -= pStar * c1o72; - //mfcbb -= pStar * c2o9; - //mfbcb -= pStar * c2o9; - //mfbbc -= pStar * c2o9; - //mfccb -= pStar * c1o16; - //mfacb -= pStar * c1o16; - //mfcbc -= pStar * c1o16; - //mfabc -= pStar * c1o16; - //mfbcc -= pStar * c1o16; - //mfbac -= pStar * c1o16; - //mfccc -= pStar * c1o72; - //mfacc -= pStar * c1o72; - //mfcac -= pStar * c1o72; - //mfaac -= pStar * c1o72; - //mfbbb -= pStar * 8.0/9.0; - /////////////////// - - 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 = (rhoRef - (oMdrho + m0))/rhoRef;// 12.03.21 check derivation!!!! - - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimit = 0.01 / (c1o1 + 1.0e4 * phi[d000] * (c1o1 - phi[d000])); //real qudricLimit = 0.01; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += 1. * oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - - // mfaaa = 0.0; - real OxxPyyPzz = 1.0; //omega2 or bulk viscosity - // LBMReal OxyyPxzz = 1.;//-s9;//2+s9;// - // LBMReal OxyyMxzz = 1.;//2+s9;// - real O4 = 1.; - real O5 = 1.; - real O6 = 1.; - - //collFactorM+= (1.7 - collFactorM) * fabs(mfaaa) / (fabs(mfaaa) + 0.001f); - - - /////fourth order parameters; here only for test. Move out of loop! - - real OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0))); - real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM); - real Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0)); - real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - //FIXME: warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::B' ) - real BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - //LBMReal stress = 1.0;// stress / (stress + 1.0e-10); - //stress = 1.0; - //OxyyPxzz += stress*(1.0-OxyyPxzz); - //OxyyPxzz = c3 * (collFactorM - c2) / (collFactorM - c3); - //OxyyMxzz += stress*(1.0-OxyyMxzz); - //Oxyz += stress*(1.0-Oxyz); - //A *= 1.0-stress; - //BB *= 1.0-stress; - - //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 - - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab); - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); - - real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - - //Cum 5. - real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho; - real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho; - real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho; - - //Cum 6. - real 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 - real mxxPyyPzz = mfcaa + mfaca + mfaac; - //pStar = (mxxPyyPzz+vx2+vy2+vz2) * c1o3;//does not work - //pStar = (mxxPyyPzz) * c1o3; - //pStar = pStar + 1.5 * (mxxPyyPzz * c1o3 - pStar); - //mfaaa = mxxPyyPzz; - // LBMReal mfaaaS = (mfaaa * (-4 - 3 * OxxPyyPzz * (-1 + rho)) + 6 * mxxPyyPzz * OxxPyyPzz * (-1 + rho)) / (-4 + 3 * OxxPyyPzz * (-1 + rho)); - mxxPyyPzz -= mfaaa ;//12.03.21 shifted by mfaaa - //mxxPyyPzz-=(mfaaa+mfaaaS)*c1o2;//12.03.21 shifted by mfaaa - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - /// - real mmfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - real mmfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz); - real mmfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz); - real mmfabb = mfabb; - real mmfbab = mfbab; - real mmfbba = mfbba; - /// - - real dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz)*0; - //LBMReal dxux = -c1o2 * (mxxMyy + mxxMzz) * collFactorM - mfaaa * c1o3* omegaDRho; - real dyuy = dxux + collFactorM * c3o2 * mxxMyy; - real dzuz = dxux + collFactorM * c3o2 * mxxMzz; - real Dxy = -c3o1 * collFactorM * mfbba; - real Dxz = -c3o1 * collFactorM * mfbab; - real Dyz = -c3o1 * collFactorM * mfabb; -// // attempt to improve implicit stress computation by fixed iteration -// LBMReal dX2_rho = (rhoToPhi)*dX2_phi; -// LBMReal dX1_rho = (rhoToPhi)*dX1_phi; -// LBMReal dX3_rho = (rhoToPhi)*dX3_phi; -// -// LBMReal dfx= c1o3 * (c1 / collFactorM - c1o2) *(2 * dxux * dX1_rho + Dxy * dX2_rho + Dxz * dX3_rho) / (rho); -// LBMReal dfy = c1o3 * (c1 / collFactorM - c1o2) *(Dxy * dX1_rho + 2 * dyuy * dX2_rho + Dyz * dX3_rho) / (rho); -// LBMReal dfz = c1o3 * (c1 / collFactorM - c1o2) *(Dxz * dX1_rho + Dyz * dX2_rho + 2 * dyuy * dX3_rho) / (rho); -// -// for (int iteration = 0; iteration < 5; iteration++) { -// mxxMyy = (mfcaa - dfx * dfx * c1o2) - (mfaca - dfy * dfy * c1o2); -// mxxMzz = (mfcaa - dfx * dfx * c1o2) - (mfaac - dfz * dfz * c1o2); -// } -/////end fixed iteration -// - - - //relax - mxxPyyPzz += OxxPyyPzz * (/*mfaaa*/ - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vz2 * dzuz); - - mfabb += collFactorM * (-mfabb); - mfbab += collFactorM * (-mfbab); - mfbba += collFactorM * (-mfbba); - - //if (fabsf(mfaaa + (dxux + dyuy + dzuz) > 1e-9)){ - // std::cout << mfaaa <<" "<< (dxux + dyuy + dzuz)<< std::endl; - //} - - - ////updated pressure - //mfaaa += (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling; - //mfaaa *= (one-omegaDRho);// (mfaaa + (dxux + dyuy + dzuz)) * .5; // Pressure elimination as in standard velocity model - // mfaaa += (rho - c1) * (dxux + dyuy + dzuz); - - mxxPyyPzz += mfaaa; // 12.03.21 shifted by mfaaa - - // mxxPyyPzz += (mfaaa + mfaaaS) * c1o2; - //mfaaa = mfaaaS; - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - mmfcaa += c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz- mfaaa); - mmfaca += c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz- mfaaa); - mmfaac += c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz- mfaaa); - mmfabb += mfabb; - mmfbab += mfbab; - mmfbba += mfbba; - - //relax - wadjust = Oxyz + (1. - Oxyz) * 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 * (c1o1 / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc); - CUMcac = -O4 * (c1o1 / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac); - CUMcca = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca); - CUMbbc = -O4 * (c1o1 / collFactorM - c1o2) * Dxy * c1o3 * BB + (c1o1 - O4) * (CUMbbc); - CUMbcb = -O4 * (c1o1 / collFactorM - c1o2) * Dxz * c1o3 * BB + (c1o1 - O4) * (CUMbcb); - CUMcbb = -O4 * (c1o1 / collFactorM - c1o2) * Dyz * c1o3 * BB + (c1o1 - O4) * (CUMcbb); - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - //back cumulants to central moments - //4. - //mfcbb = CUMcbb + ((mfcaa + c1o3 * 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 - c1o1) * oMdrho; - mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho; - mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * 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;// *(c1 - forcingBIAS) / forcingBIAS; - mfaba = -mfaba;// *(c1 - forcingBIAS) / forcingBIAS; - mfaab = -mfaab;// *(c1 - forcingBIAS) / forcingBIAS; - - //mfbaa += c1o3 * (c1 / collFactorM - c1o2) * rhoToPhi * (2 * dxux * dX1_phi + Dxy * dX2_phi + Dxz * dX3_phi) / (rho); - //mfaba += c1o3 * (c1 / collFactorM - c1o2) * rhoToPhi * (Dxy * dX1_phi + 2 * dyuy * dX2_phi + Dyz * dX3_phi) / (rho); - //mfaab += c1o3 * (c1 / collFactorM - c1o2) * rhoToPhi * (Dxz * dX1_phi + Dyz * dX2_phi + 2 * dyuy * dX3_phi) / (rho); - - mfbaa -= c1o2 * rhoToPhi * (mmfcaa* dX1_phi + mmfbba * dX2_phi + mmfbab * dX3_phi) / (rho); - mfaba -= c1o2 * rhoToPhi * (mmfbba* dX1_phi + mmfaca * dX2_phi + mmfabb * dX3_phi) / (rho); - mfaab -= c1o2 * rhoToPhi * (mmfbab* dX1_phi + mmfabb * dX2_phi + mmfaac * dX3_phi) / (rho); - - vvx -= c1o4 * rhoToPhi * (mmfcaa * dX1_phi + mmfbba * dX2_phi + mmfbab * dX3_phi) / (rho); - vvy -= c1o4 * rhoToPhi * (mmfbba * dX1_phi + mmfaca * dX2_phi + mmfabb * dX3_phi) / (rho); - vvz -= c1o4 * rhoToPhi * (mmfbab * dX1_phi + mmfabb * dX2_phi + mmfaac * dX3_phi) / (rho); - - vx2 = vvx * vvx; - vy2 = vvy * vvy; - vz2 = vvz * vvz; - - //mmfcaa =0;// c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz - mfaaa); - //mmfaca =0;// c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz - mfaaa); - //mmfaac =0;// c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz - mfaaa); - //mmfabb =0;// mfabb; - //mmfbab =0;// mfbab; - //mmfbba =0;// mfbba; - - - ////////////////////////////////////////////////////////////////////////////////////// - //grad Rho - //LBMReal dX1_rho = (rhoToPhi - three * (*pressure)(x1, x2, x3)) * dX1_phi - phi[d000] * three * gradPx; - //LBMReal dX2_rho = (rhoToPhi - three * (*pressure)(x1, x2, x3)) * dX2_phi - phi[d000] * three * gradPy; - //LBMReal dX3_rho = (rhoToPhi - three * (*pressure)(x1, x2, x3)) * dX3_phi - phi[d000] * three * gradPz; - - //LBMReal dX2_rho = (rhoToPhi ) * dX2_phi ; - //LBMReal dX1_rho = (rhoToPhi ) * dX1_phi ; - //LBMReal dX3_rho = (rhoToPhi ) * dX3_phi ; - /////////////////////////////////////////////////////////////////////////////////////// - //mfbaa += c1o3 * (c1 / collFactorM - c1o2) *(2 * dxux * dX1_rho + Dxy * dX2_rho + Dxz * dX3_rho) / (rho); - //mfaba += c1o3 * (c1 / collFactorM - c1o2) *(Dxy * dX1_rho + 2 * dyuy * dX2_rho + Dyz * dX3_rho) / (rho); - //mfaab += c1o3 * (c1 / collFactorM - c1o2) *(Dxz * dX1_rho + Dyz * dX2_rho + 2 * dyuy * dX3_rho) / (rho); - - ///////Fakhari pressure correction - //mfbaa -= mfaaa / rho * dX1_rho*c1o3; - //mfaba -= mfaaa / rho * dX2_rho*c1o3; - //mfaab -= mfaaa / rho * dX3_rho*c1o3; - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + 1. * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - 2. * mfaab * vvz + mfaaa * (1. - vz2) - 1. * oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + 1. * oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - 2. * mfabb * vvz + mfaba * (1. - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - 2. * mfacb * vvz + mfaca * (1. - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - 2. * mfbab * vvz + mfbaa * (1. - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - 2. * mfbbb * vvz + mfbba * (1. - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - 2. * mfbcb * vvz + mfbca * (1. - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - 2. * mfcab * vvz + mfcaa * (1. - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - 2. * mfcbb * vvz + mfcba * (1. - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - 2. * mfccb * vvz + mfcca * (1. - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - 2. * mfaba * vvy + mfaaa * (1. - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - 2. * mfabb * vvy + mfaab * (1. - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - 2. * mfabc * vvy + mfaac * (1. - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - 2. * mfbba * vvy + mfbaa * (1. - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - 2. * mfbbb * vvy + mfbab * (1. - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - 2. * mfbbc * vvy + mfbac * (1. - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - 2. * mfcba * vvy + mfcaa * (1. - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - 2. * mfcbb * vvy + mfcab * (1. - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - 2. * mfcbc * vvy + mfcac * (1. - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - 2. * mfbaa * vvx + mfaaa * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - 2. * mfbba * vvx + mfaba * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - 2. * mfbca * vvx + mfaca * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - 2. * mfbab * vvx + mfaab * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - 2. * mfbbb * vvx + mfabb * (1. - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - 2. * mfbcb * vvx + mfacb * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - 2. * mfbac * vvx + mfaac * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - 2. * mfbbc * vvx + mfabc * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - 2. * mfbcc * vvx + mfacc * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - /////SimpleForce - - //mfabb += c2o9 * deltaP; - //mfbab += c2o9 * deltaP; - //mfbba += c2o9 * deltaP; - //mfaab += c1o18 * deltaP; - //mfcab += c1o18 * deltaP; - //mfaba += c1o18 * deltaP; - //mfcba += c1o18 * deltaP; - //mfbaa += c1o18 * deltaP; - //mfbca += c1o18 * deltaP; - //mfaaa += c1o72 * deltaP; - //mfcaa += c1o72 * deltaP; - //mfaca += c1o72 * deltaP; - //mfcca += c1o72 * deltaP; - //mfcbb += c2o9 * deltaP; - //mfbcb += c2o9 * deltaP; - //mfbbc += c2o9 * deltaP; - //mfccb += c1o18 * deltaP; - //mfacb += c1o18 * deltaP; - //mfcbc += c1o18 * deltaP; - //mfabc += c1o18 * deltaP; - //mfbcc += c1o18 * deltaP; - //mfbac += c1o18 * deltaP; - //mfccc += c1o72 * deltaP; - //mfacc += c1o72 * deltaP; - //mfcac += c1o72 * deltaP; - //mfaac += c1o72 * deltaP; - - //mfabb += c1o2*(-forcingX1 ) * c2o9; - //mfbab += c1o2*( - forcingX2 ) * c2o9; - //mfbba += c1o2*( - forcingX3) * c2o9; - //mfaab += c1o2*(-forcingX1 - forcingX2 ) * c1o18; - //mfcab += c1o2*( forcingX1 - forcingX2 ) * c1o18; - //mfaba += c1o2*(-forcingX1 - forcingX3) * c1o18; - //mfcba += c1o2*( forcingX1 - forcingX3) * c1o18; - //mfbaa += c1o2*( - forcingX2 - forcingX3) * c1o18; - //mfbca += c1o2*( forcingX2 - forcingX3) * c1o18; - //mfaaa += c1o2*(-forcingX1 - forcingX2 - forcingX3) * c1o72; - //mfcaa += c1o2*( forcingX1 - forcingX2 - forcingX3) * c1o72; - //mfaca += c1o2*(-forcingX1 + forcingX2 - forcingX3) * c1o72; - //mfcca += c1o2*( forcingX1 + forcingX2 - forcingX3) * c1o72; - //mfcbb += c1o2*( forcingX1 ) * c2o9; - //mfbcb += c1o2*( forcingX2 ) * c2o9; - //mfbbc += c1o2*( forcingX3) * c2o9; - //mfccb += c1o2*( forcingX1 + forcingX2 ) * c1o18; - //mfacb += c1o2*(-forcingX1 + forcingX2 ) * c1o18; - //mfcbc += c1o2*( forcingX1 + forcingX3) * c1o18; - //mfabc += c1o2*(-forcingX1 + forcingX3) * c1o18; - //mfbcc += c1o2*( forcingX2 + forcingX3) * c1o18; - //mfbac += c1o2*( - forcingX2 + forcingX3) * c1o18; - //mfccc += c1o2*( forcingX1 + forcingX2 + forcingX3) * c1o72; - //mfacc += c1o2*(-forcingX1 + forcingX2 + forcingX3) * c1o72; - //mfcac += c1o2*( forcingX1 - forcingX2 + forcingX3) * c1o72; - //mfaac += c1o2*(-forcingX1 - forcingX2 + forcingX3) * c1o72; - //pStarStart -= (vx2 + vy2 + vz2) * c1o3; - - ///Take the diffusion part with out - - //mfStartcbb -= D3Q27System::getIncompFeqForDirection(D3Q27System::E , zeroReal, vvx, vvy, vvz); - //mfStartbcb -= D3Q27System::getIncompFeqForDirection(D3Q27System::N , zeroReal, vvx, vvy, vvz); - //mfStartbbc -= D3Q27System::getIncompFeqForDirection(D3Q27System::T , zeroReal, vvx, vvy, vvz); - //mfStartccb -= D3Q27System::getIncompFeqForDirection(D3Q27System::NE , zeroReal, vvx, vvy, vvz); - //mfStartacb -= D3Q27System::getIncompFeqForDirection(D3Q27System::NW , zeroReal, vvx, vvy, vvz); - //mfStartcbc -= D3Q27System::getIncompFeqForDirection(D3Q27System::TE , zeroReal, vvx, vvy, vvz); - //mfStartabc -= D3Q27System::getIncompFeqForDirection(D3Q27System::TW , zeroReal, vvx, vvy, vvz); - //mfStartbcc -= D3Q27System::getIncompFeqForDirection(D3Q27System::TN , zeroReal, vvx, vvy, vvz); - //mfStartbac -= D3Q27System::getIncompFeqForDirection(D3Q27System::TS , zeroReal, vvx, vvy, vvz); - //mfStartccc -= D3Q27System::getIncompFeqForDirection(D3Q27System::TNE, zeroReal, vvx, vvy, vvz); - //mfStartacc -= D3Q27System::getIncompFeqForDirection(D3Q27System::TNW, zeroReal, vvx, vvy, vvz); - //mfStartcac -= D3Q27System::getIncompFeqForDirection(D3Q27System::TSE, zeroReal, vvx, vvy, vvz); - //mfStartaac -= D3Q27System::getIncompFeqForDirection(D3Q27System::TSW, zeroReal, vvx, vvy, vvz); - //mfStartabb -= D3Q27System::getIncompFeqForDirection(D3Q27System::W , zeroReal, vvx, vvy, vvz); - //mfStartbab -= D3Q27System::getIncompFeqForDirection(D3Q27System::S , zeroReal, vvx, vvy, vvz); - //mfStartbba -= D3Q27System::getIncompFeqForDirection(D3Q27System::B , zeroReal, vvx, vvy, vvz); - //mfStartaab -= D3Q27System::getIncompFeqForDirection(D3Q27System::SW , zeroReal, vvx, vvy, vvz); - //mfStartcab -= D3Q27System::getIncompFeqForDirection(D3Q27System::SE , zeroReal, vvx, vvy, vvz); - //mfStartaba -= D3Q27System::getIncompFeqForDirection(D3Q27System::BW , zeroReal, vvx, vvy, vvz); - //mfStartcba -= D3Q27System::getIncompFeqForDirection(D3Q27System::BE , zeroReal, vvx, vvy, vvz); - //mfStartbaa -= D3Q27System::getIncompFeqForDirection(D3Q27System::BS , zeroReal, vvx, vvy, vvz); - //mfStartbca -= D3Q27System::getIncompFeqForDirection(D3Q27System::BN , zeroReal, vvx, vvy, vvz); - //mfStartaaa -= D3Q27System::getIncompFeqForDirection(D3Q27System::BSW, zeroReal, vvx, vvy, vvz); - //mfStartcaa -= D3Q27System::getIncompFeqForDirection(D3Q27System::BSE, zeroReal, vvx, vvy, vvz); - //mfStartaca -= D3Q27System::getIncompFeqForDirection(D3Q27System::BNW, zeroReal, vvx, vvy, vvz); - //mfStartcca -= D3Q27System::getIncompFeqForDirection(D3Q27System::BNE, zeroReal, vvx, vvy, vvz); - //mfStartbbb -= D3Q27System::getIncompFeqForDirection(D3Q27System::REST, zeroReal, vvx, vvy, vvz); - // - //pStar += pStarStart*(omegaDRho-c1); - - //mfStartcbb = c2o9 * pStar; - // mfStartbcb= c2o9 * pStar; - // mfStartbbc= c2o9 * pStar; - // mfStartccb= c1o18 * pStar; - // mfStartacb= c1o18 * pStar; - // mfStartcbc= c1o18 * pStar; - // mfStartabc= c1o18 * pStar; - // mfStartbcc= c1o18 * pStar; - // mfStartbac= c1o18 * pStar; - // mfStartccc= c1o72 * pStar; - // mfStartacc= c1o72 * pStar; - // mfStartcac= c1o72 * pStar; - // mfStartaac= c1o72 * pStar; - // mfStartabb= c2o9 * pStar; - // mfStartbab= c2o9 * pStar; - // mfStartbba= c2o9 * pStar; - // mfStartaab= c1o18 * pStar; - // mfStartcab= c1o18 * pStar; - // mfStartaba= c1o18 * pStar; - // mfStartcba= c1o18 * pStar; - // mfStartbaa= c1o18 * pStar; - // mfStartbca= c1o18 * pStar; - // mfStartaaa= c1o72 * pStar; - // mfStartcaa= c1o72 * pStar; - // mfStartaca= c1o72 * pStar; - // mfStartcca= c1o72 * pStar; - // mfStartbbb= c4 * c2o9 * pStar; - - //mfaaa -= c1o2 * (mfStartaaa + mfStartccc)+ c1o72 * (mmfaac + c3 * mmfabb + mmfaca + c3 * mmfbab + c3 * mmfbba + mmfcaa); - //mfaab -= c1o2 * (mfStartaab + mfStartccb)+c1o36 * (-mmfaac + c2 * (mmfaca + c3 * mmfbba + mmfcaa)); - //mfaac -= c1o2 * (mfStartaac + mfStartcca)+c1o72 * (mmfaac - c3 * mmfabb + mmfaca - c3 * mmfbab + c3 * mmfbba + mmfcaa); - //mfaba -= c1o2 * (mfStartaba + mfStartcbc)+c1o36 * (c2 * mmfaac - mmfaca + c6 * mmfbab + c2 * mmfcaa); - //mfabb -= c1o2 * (mfStartabb + mfStartcbb)+c1o9 * (-mmfaac - mmfaca + c2 * mmfcaa); - //mfabc -= c1o2 * (mfStartabc + mfStartcba)+c1o36 * (c2 * mmfaac - mmfaca - 6 * mmfbab + c2 * mmfcaa); - //mfaca -= c1o2 * (mfStartaca + mfStartcac)+c1o72 * (mmfaac - c3 * mmfabb + mmfaca + c3 * mmfbab - c3 * mmfbba + mmfcaa); - //mfacb -= c1o2 * (mfStartacb + mfStartcab)+c1o36 * (-mmfaac + c2 * (mmfaca - c3 * mmfbba + mmfcaa)); - //mfacc -= c1o2 * (mfStartacc + mfStartcaa)+c1o72 * (mmfaac + c3 * mmfabb + mmfaca - c3 * mmfbab - c3 * mmfbba + mmfcaa); - //mfbaa -= c1o2 * (mfStartbaa + mfStartbcc)+c1o36 * (c2 * mmfaac + c6 * mmfabb + c2 * mmfaca - mmfcaa); - //mfbab -= c1o2 * (mfStartbab + mfStartbcb)+c1o9 * (-mmfaac + c2 * mmfaca - mmfcaa); - //mfbac -= c1o2 * (mfStartbac + mfStartbca)+c1o36 * (c2 * mmfaac - 6 * mmfabb + c2 * mmfaca - mmfcaa); - //mfbba -= c1o2 * (mfStartbba + mfStartbbc)+c1o9 * (c2 * mmfaac - mmfaca - mmfcaa); - //mfbbb -= (mfStartbbb)-(c4o9 * (mmfaac + mmfaca + mmfcaa)); - //mfbbc -= c1o2 * (mfStartbbc + mfStartbba)+c1o9 * (c2 * mmfaac - mmfaca - mmfcaa); - //mfbca -= c1o2 * (mfStartbca + mfStartbac)+c1o36 * (c2 * mmfaac - 6 * mmfabb + c2 * mmfaca - mmfcaa); - //mfbcb -= c1o2 * (mfStartbcb + mfStartbab)+c1o9 * (-mmfaac + c2 * mmfaca - mmfcaa); - //mfbcc -= c1o2 * (mfStartbcc + mfStartbaa)+c1o36 * (c2 * mmfaac + c6 * mmfabb + c2 * mmfaca - mmfcaa); - //mfcaa -= c1o2 * (mfStartcaa + mfStartacc)+c1o72 * (mmfaac + c3 * mmfabb + mmfaca - c3 * mmfbab - c3 * mmfbba + mmfcaa); - //mfcab -= c1o2 * (mfStartcab + mfStartacb)+c1o36 * (-mmfaac + c2 * (mmfaca - c3 * mmfbba + mmfcaa)); - //mfcac -= c1o2 * (mfStartcac + mfStartaca)+c1o72 * (mmfaac - c3 * mmfabb + mmfaca + c3 * mmfbab - c3 * mmfbba + mmfcaa); - //mfcba -= c1o2 * (mfStartcba + mfStartabc)+c1o36 * (c2 * mmfaac - mmfaca - 6 * mmfbab + c2 * mmfcaa); - //mfcbb -= c1o2 * (mfStartcbb + mfStartabb)+c1o9 * (-mmfaac - mmfaca + c2 * mmfcaa); - //mfcbc -= c1o2 * (mfStartcbc + mfStartaba)+c1o36 * (c2 * mmfaac - mmfaca + c6 * mmfbab + c2 * mmfcaa); - //mfcca -= c1o2 * (mfStartcca + mfStartaac)+c1o72 * (mmfaac - c3 * mmfabb + mmfaca - c3 * mmfbab + c3 * mmfbba + mmfcaa); - //mfccb -= c1o2 * (mfStartccb + mfStartaab)+c1o36 * (-mmfaac + c2 * (mmfaca + c3 * mmfbba + mmfcaa)); - //mfccc -= c1o2 * (mfStartccc + mfStartaaa)+c1o72 * (mmfaac + c3 * mmfabb + mmfaca + c3 * mmfbab + c3 * mmfbba + mmfcaa); - - //mfhaaa =rho*( c1o2 * (mfStartaaa + mfStartccc) + c1o72 * (mmfaac + c3 * mmfabb + mmfaca + c3 * mmfbab + c3 * mmfbba + mmfcaa)); - //mfhaab =rho*( c1o2 * (mfStartaab + mfStartccb) + c1o36 * (-mmfaac + c2 * (mmfaca + c3 * mmfbba + mmfcaa))); - //mfhaac =rho*( c1o2 * (mfStartaac + mfStartcca) + c1o72 * (mmfaac - c3 * mmfabb + mmfaca - c3 * mmfbab + c3 * mmfbba + mmfcaa)); - //mfhaba =rho*( c1o2 * (mfStartaba + mfStartcbc) + c1o36 * (c2 * mmfaac - mmfaca + c6 * mmfbab + c2 * mmfcaa)); - //mfhabb =rho*( c1o2 * (mfStartabb + mfStartcbb) + c1o9 * (-mmfaac - mmfaca + c2 * mmfcaa)); - //mfhabc =rho*( c1o2 * (mfStartabc + mfStartcba) + c1o36 * (c2 * mmfaac - mmfaca - 6 * mmfbab + c2 * mmfcaa)); - //mfhaca =rho*( c1o2 * (mfStartaca + mfStartcac) + c1o72 * (mmfaac - c3 * mmfabb + mmfaca + c3 * mmfbab - c3 * mmfbba + mmfcaa)); - //mfhacb =rho*( c1o2 * (mfStartacb + mfStartcab) + c1o36 * (-mmfaac + c2 * (mmfaca - c3 * mmfbba + mmfcaa))); - //mfhacc =rho*( c1o2 * (mfStartacc + mfStartcaa) + c1o72 * (mmfaac + c3 * mmfabb + mmfaca - c3 * mmfbab - c3 * mmfbba + mmfcaa)); - //mfhbaa =rho*( c1o2 * (mfStartbaa + mfStartbcc) + c1o36 * (c2 * mmfaac + c6 * mmfabb + c2 * mmfaca - mmfcaa)); - //mfhbab =rho*( c1o2 * (mfStartbab + mfStartbcb) + c1o9 * (-mmfaac + c2 * mmfaca - mmfcaa)); - //mfhbac =rho*( c1o2 * (mfStartbac + mfStartbca) + c1o36 * (c2 * mmfaac - 6 * mmfabb + c2 * mmfaca - mmfcaa)); - //mfhbba =rho*( c1o2 * (mfStartbba + mfStartbbc) + c1o9 * (c2 * mmfaac - mmfaca - mmfcaa)); - //mfhbbb =rho*( (mfStartbbb)-(c4o9 * (mmfaac + mmfaca + mmfcaa))); - //mfhbbc =rho*( c1o2 * (mfStartbbc + mfStartbba) + c1o9 * (c2 * mmfaac - mmfaca - mmfcaa)); - //mfhbca =rho*( c1o2 * (mfStartbca + mfStartbac) + c1o36 * (c2 * mmfaac - 6 * mmfabb + c2 * mmfaca - mmfcaa)); - //mfhbcb =rho*( c1o2 * (mfStartbcb + mfStartbab) + c1o9 * (-mmfaac + c2 * mmfaca - mmfcaa)); - //mfhbcc =rho*( c1o2 * (mfStartbcc + mfStartbaa) + c1o36 * (c2 * mmfaac + c6 * mmfabb + c2 * mmfaca - mmfcaa)); - //mfhcaa =rho*( c1o2 * (mfStartcaa + mfStartacc) + c1o72 * (mmfaac + c3 * mmfabb + mmfaca - c3 * mmfbab - c3 * mmfbba + mmfcaa)); - //mfhcab =rho*( c1o2 * (mfStartcab + mfStartacb) + c1o36 * (-mmfaac + c2 * (mmfaca - c3 * mmfbba + mmfcaa))); - //mfhcac =rho*( c1o2 * (mfStartcac + mfStartaca) + c1o72 * (mmfaac - c3 * mmfabb + mmfaca + c3 * mmfbab - c3 * mmfbba + mmfcaa)); - //mfhcba =rho*( c1o2 * (mfStartcba + mfStartabc) + c1o36 * (c2 * mmfaac - mmfaca - 6 * mmfbab + c2 * mmfcaa)); - //mfhcbb =rho*( c1o2 * (mfStartcbb + mfStartabb) + c1o9 * (-mmfaac - mmfaca + c2 * mmfcaa)); - //mfhcbc =rho*( c1o2 * (mfStartcbc + mfStartaba) + c1o36 * (c2 * mmfaac - mmfaca + c6 * mmfbab + c2 * mmfcaa)); - //mfhcca =rho*( c1o2 * (mfStartcca + mfStartaac) + c1o72 * (mmfaac - c3 * mmfabb + mmfaca - c3 * mmfbab + c3 * mmfbba + mmfcaa)); - //mfhccb =rho*( c1o2 * (mfStartccb + mfStartaab) + c1o36 * (-mmfaac + c2 * (mmfaca + c3 * mmfbba + mmfcaa))); - //mfhccc =rho*( c1o2 * (mfStartccc + mfStartaaa) + c1o72 * (mmfaac + c3 * mmfabb + mmfaca + c3 * mmfbab + c3 * mmfbba + mmfcaa)); - - - - - pStar += pStarStart*(omegaDRho- c1o1); - - mfcbb -= c2o9*pStar; - mfbcb -= c2o9*pStar; - mfbbc -= c2o9*pStar; - mfccb -= c1o18*pStar; - mfacb -= c1o18*pStar; - mfcbc -= c1o18*pStar; - mfabc -= c1o18*pStar; - mfbcc -= c1o18*pStar; - mfbac -= c1o18*pStar; - mfccc -= c1o72*pStar; - mfacc -= c1o72*pStar; - mfcac -= c1o72*pStar; - mfaac -= c1o72*pStar; - mfabb -= c2o9*pStar; - mfbab -= c2o9*pStar; - mfbba -= c2o9*pStar; - mfaab -= c1o18*pStar; - mfcab -= c1o18*pStar; - mfaba -= c1o18*pStar; - mfcba -= c1o18*pStar; - mfbaa -= c1o18*pStar; - mfbca -= c1o18*pStar; - mfaaa -= c1o72*pStar; - mfcaa -= c1o72*pStar; - mfaca -= c1o72*pStar; - mfcca -= c1o72*pStar; - mfbbb -= c4o1*c2o9*pStar; - - mfhbcb = rho*c2o9 * pStar; - mfhbbc = rho*c2o9 * pStar; - mfhcbb = rho*c2o9 * pStar; - mfhccb = rho*c1o18 * pStar; - mfhacb = rho*c1o18 * pStar; - mfhcbc = rho*c1o18 * pStar; - mfhabc = rho*c1o18 * pStar; - mfhbcc = rho*c1o18 * pStar; - mfhbac = rho*c1o18 * pStar; - mfhccc = rho*c1o72 * pStar; - mfhacc = rho*c1o72 * pStar; - mfhcac = rho*c1o72 * pStar; - mfhaac = rho*c1o72 * pStar; - mfhabb = rho*c2o9 * pStar; - mfhbab = rho*c2o9 * pStar; - mfhbba = rho*c2o9 * pStar; - mfhaab = rho*c1o18 * pStar; - mfhcab = rho*c1o18 * pStar; - mfhaba = rho*c1o18 * pStar; - mfhcba = rho*c1o18 * pStar; - mfhbaa = rho*c1o18 * pStar; - mfhbca = rho*c1o18 * pStar; - mfhaaa = rho*c1o72 * pStar; - mfhcaa = rho*c1o72 * pStar; - mfhaca = rho*c1o72 * pStar; - mfhcca = rho*c1o72 * pStar; - mfhbbb = rho* c4o1 * c2o9 * pStar; - - //mfStartbcb = c2o9 * pStarStart; - //mfStartbbc = c2o9 * pStarStart; - //mfStartcbb = c2o9 * pStarStart; - //mfStartccb = c1o18 * pStarStart; - //mfStartacb = c1o18 * pStarStart; - //mfStartcbc = c1o18 * pStarStart; - //mfStartabc = c1o18 * pStarStart; - //mfStartbcc = c1o18 * pStarStart; - //mfStartbac = c1o18 * pStarStart; - //mfStartccc = c1o72 * pStarStart; - //mfStartacc = c1o72 * pStarStart; - //mfStartcac = c1o72 * pStarStart; - //mfStartaac = c1o72 * pStarStart; - //mfStartabb = c2o9 * pStarStart; - //mfStartbab = c2o9 * pStarStart; - //mfStartbba = c2o9 * pStarStart; - //mfStartaab = c1o18 * pStarStart; - //mfStartcab = c1o18 * pStarStart; - //mfStartaba = c1o18 * pStarStart; - //mfStartcba = c1o18 * pStarStart; - //mfStartbaa = c1o18 * pStarStart; - //mfStartbca = c1o18 * pStarStart; - //mfStartaaa = c1o72 * pStarStart; - //mfStartcaa = c1o72 * pStarStart; - //mfStartaca = c1o72 * pStarStart; - //mfStartcca = c1o72 * pStarStart; - //mfStartbbb = c4 * c2o9 * pStarStart; - - //LBMReal scaleSplit = 0.5; - //mfStartbcb = mfStartbcb*scaleSplit+(c1-scaleSplit)* c2o9 * pStarStart; - //mfStartbbc = mfStartbbc*scaleSplit+(c1-scaleSplit)* c2o9 * pStarStart; - //mfStartcbb = mfStartcbb*scaleSplit+(c1-scaleSplit)* c2o9 * pStarStart; - //mfStartccb = mfStartccb*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart; - //mfStartacb = mfStartacb*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart; - //mfStartcbc = mfStartcbc*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart; - //mfStartabc = mfStartabc*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart; - //mfStartbcc = mfStartbcc*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart; - //mfStartbac = mfStartbac*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart; - //mfStartccc = mfStartccc*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart; - //mfStartacc = mfStartacc*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart; - //mfStartcac = mfStartcac*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart; - //mfStartaac = mfStartaac*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart; - //mfStartabb = mfStartabb*scaleSplit+(c1-scaleSplit)* c2o9 * pStarStart; - //mfStartbab = mfStartbab*scaleSplit+(c1-scaleSplit)* c2o9 * pStarStart; - //mfStartbba = mfStartbba*scaleSplit+(c1-scaleSplit)* c2o9 * pStarStart; - //mfStartaab = mfStartaab*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart; - //mfStartcab = mfStartcab*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart; - //mfStartaba = mfStartaba*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart; - //mfStartcba = mfStartcba*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart; - //mfStartbaa = mfStartbaa*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart; - //mfStartbca = mfStartbca*scaleSplit+(c1-scaleSplit)* c1o18 * pStarStart; - //mfStartaaa = mfStartaaa*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart; - //mfStartcaa = mfStartcaa*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart; - //mfStartaca = mfStartaca*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart; - //mfStartcca = mfStartcca*scaleSplit+(c1-scaleSplit)* c1o72 * pStarStart; - //mfStartbbb = mfStartbbb*scaleSplit+(c1-scaleSplit)* c4 * c2o9 * pStarStart; - - - //mfaaa -= c1o2 * (mfStartaaa + mfStartccc); - // mfaab -= c1o2 * (mfStartaab + mfStartccb); - // mfaac -= c1o2 * (mfStartaac + mfStartcca); - // mfaba -= c1o2 * (mfStartaba + mfStartcbc); - // mfabb -= c1o2 * (mfStartabb + mfStartcbb); - // mfabc -= c1o2 * (mfStartabc + mfStartcba); - // mfaca -= c1o2 * (mfStartaca + mfStartcac); - // mfacb -= c1o2 * (mfStartacb + mfStartcab); - // mfacc -= c1o2 * (mfStartacc + mfStartcaa); - // mfbaa -= c1o2 * (mfStartbaa + mfStartbcc); - // mfbab -= c1o2 * (mfStartbab + mfStartbcb); - // mfbac -= c1o2 * (mfStartbac + mfStartbca); - // mfbba -= c1o2 * (mfStartbba + mfStartbbc); - //mfbbb -= (mfStartbbb); - // mfbbc -= c1o2 * (mfStartbbc + mfStartbba); - // mfbca -= c1o2 * (mfStartbca + mfStartbac); - // mfbcb -= c1o2 * (mfStartbcb + mfStartbab); - // mfbcc -= c1o2 * (mfStartbcc + mfStartbaa); - // mfcaa -= c1o2 * (mfStartcaa + mfStartacc); - // mfcab -= c1o2 * (mfStartcab + mfStartacb); - // mfcac -= c1o2 * (mfStartcac + mfStartaca); - // mfcba -= c1o2 * (mfStartcba + mfStartabc); - // mfcbb -= c1o2 * (mfStartcbb + mfStartabb); - // mfcbc -= c1o2 * (mfStartcbc + mfStartaba); - // mfcca -= c1o2 * (mfStartcca + mfStartaac); - // mfccb -= c1o2 * (mfStartccb + mfStartaab); - // mfccc -= c1o2 * (mfStartccc + mfStartaaa); - // - //mfhaaa += rho*c1o2 * (mfStartaaa + mfStartccc); - //mfhaab += rho*c1o2 * (mfStartaab + mfStartccb); - //mfhaac += rho*c1o2 * (mfStartaac + mfStartcca); - //mfhaba += rho*c1o2 * (mfStartaba + mfStartcbc); - //mfhabb += rho*c1o2 * (mfStartabb + mfStartcbb); - //mfhabc += rho*c1o2 * (mfStartabc + mfStartcba); - //mfhaca += rho*c1o2 * (mfStartaca + mfStartcac); - //mfhacb += rho*c1o2 * (mfStartacb + mfStartcab); - //mfhacc += rho*c1o2 * (mfStartacc + mfStartcaa); - //mfhbaa += rho*c1o2 * (mfStartbaa + mfStartbcc); - //mfhbab += rho*c1o2 * (mfStartbab + mfStartbcb); - //mfhbac += rho*c1o2 * (mfStartbac + mfStartbca); - //mfhbba += rho*c1o2 * (mfStartbba + mfStartbbc); - //mfhbbb += rho*(mfStartbbb); - //mfhbbc += rho*c1o2 * (mfStartbbc + mfStartbba); - //mfhbca += rho*c1o2 * (mfStartbca + mfStartbac); - //mfhbcb += rho*c1o2 * (mfStartbcb + mfStartbab); - //mfhbcc += rho*c1o2 * (mfStartbcc + mfStartbaa); - //mfhcaa += rho*c1o2 * (mfStartcaa + mfStartacc); - //mfhcab += rho*c1o2 * (mfStartcab + mfStartacb); - //mfhcac += rho*c1o2 * (mfStartcac + mfStartaca); - //mfhcba += rho*c1o2 * (mfStartcba + mfStartabc); - //mfhcbb += rho*c1o2 * (mfStartcbb + mfStartabb); - //mfhcbc += rho*c1o2 * (mfStartcbc + mfStartaba); - //mfhcca += rho*c1o2 * (mfStartcca + mfStartaac); - //mfhccb += rho*c1o2 * (mfStartccb + mfStartaab); - //mfhccc += rho*c1o2 * (mfStartccc + mfStartaaa); - //mfhbcb += c1o6 * c2o9 * deltaPP; - //mfhbbc += c1o6 * c2o9 * deltaPP; - //mfhcbb += c1o6 * c2o9 * deltaPP; - //mfhccb += c1o6 * c1o18 * deltaPP; - //mfhacb += c1o6 * c1o18 * deltaPP; - //mfhcbc += c1o6 * c1o18 * deltaPP; - //mfhabc += c1o6 * c1o18 * deltaPP; - //mfhbcc += c1o6 * c1o18 * deltaPP; - //mfhbac += c1o6 * c1o18 * deltaPP; - //mfhccc += c1o6 * c1o72 * deltaPP; - //mfhacc += c1o6 * c1o72 * deltaPP; - //mfhcac += c1o6 * c1o72 * deltaPP; - //mfhaac += c1o6 * c1o72 * deltaPP; - //mfhabb += c1o6 * c2o9 * deltaPP; - //mfhbab += c1o6 * c2o9 * deltaPP; - //mfhbba += c1o6 * c2o9 * deltaPP; - //mfhaab += c1o6 * c1o18 * deltaPP; - //mfhcab += c1o6 * c1o18 * deltaPP; - //mfhaba += c1o6 * c1o18 * deltaPP; - //mfhcba += c1o6 * c1o18 * deltaPP; - //mfhbaa += c1o6 * c1o18 * deltaPP; - //mfhbca += c1o6 * c1o18 * deltaPP; - //mfhaaa += c1o6 * c1o72 * deltaPP; - //mfhcaa += c1o6 * c1o72 * deltaPP; - //mfhaca += c1o6 * c1o72 * deltaPP; - //mfhcca += c1o6 * c1o72 * deltaPP; - //mfhbbb += c1o6 * c4 * c2o9 * deltaPP; - - - //mfhbcb = c1o3/rho * c2o9 ; - //mfhbbc = c1o3/rho * c2o9 ; - //mfhcbb = c1o3/rho * c2o9 ; - //mfhccb = c1o3/rho * c1o18 ; - //mfhacb = c1o3/rho * c1o18 ; - //mfhcbc = c1o3/rho * c1o18 ; - //mfhabc = c1o3/rho * c1o18 ; - //mfhbcc = c1o3/rho * c1o18 ; - //mfhbac = c1o3/rho * c1o18 ; - //mfhccc = c1o3/rho * c1o72 ; - //mfhacc = c1o3/rho * c1o72 ; - //mfhcac = c1o3/rho * c1o72 ; - //mfhaac = c1o3/rho * c1o72 ; - //mfhabb = c1o3/rho * c2o9 ; - //mfhbab = c1o3/rho * c2o9 ; - //mfhbba = c1o3/rho * c2o9 ; - //mfhaab = c1o3/rho * c1o18 ; - //mfhcab = c1o3/rho * c1o18 ; - //mfhaba = c1o3/rho * c1o18 ; - //mfhcba = c1o3/rho * c1o18 ; - //mfhbaa = c1o3/rho * c1o18 ; - //mfhbca = c1o3/rho * c1o18 ; - //mfhaaa = c1o3/rho * c1o72 ; - //mfhcaa = c1o3/rho * c1o72 ; - //mfhaca = c1o3/rho * c1o72 ; - //mfhcca = c1o3/rho * c1o72 ; - //mfhbbb = c1/rho;//c1o3/rho * c4 * c2o9 ; - - - - //mfabb += c1o2 * c2o9 * pStar * (phi[d000] - phi[dM00]) * rhoToPhi / rho; - //mfbab += c1o2 * c2o9 * pStar * (phi[d000] - phi[d0M0]) * rhoToPhi / rho; - //mfbba += c1o2 * c2o9 * pStar * (phi[d000] - phi[d00M]) * rhoToPhi / rho; - //mfaab += c1o2 * c1o18 * pStar * (phi[d000] - phi[dMM0]) * rhoToPhi / rho; - //mfcab += c1o2 * c1o18 * pStar * (phi[d000] - phi[dPM0]) * rhoToPhi / rho; - //mfaba += c1o2 * c1o18 * pStar * (phi[d000] - phi[dM0M]) * rhoToPhi / rho; - //mfcba += c1o2 * c1o18 * pStar * (phi[d000] - phi[dP0M]) * rhoToPhi / rho; - //mfbaa += c1o2 * c1o18 * pStar * (phi[d000] - phi[d0MM]) * rhoToPhi / rho; - //mfbca += c1o2 * c1o18 * pStar * (phi[d000] - phi[d0PM]) * rhoToPhi / rho; - //mfaaa += c1o2 * c1o72 * pStar * (phi[d000] - phi[dMMM]) * rhoToPhi / rho; - //mfcaa += c1o2 * c1o72 * pStar * (phi[d000] - phi[dPMM]) * rhoToPhi / rho; - //mfaca += c1o2 * c1o72 * pStar * (phi[d000] - phi[dMPM]) * rhoToPhi / rho; - //mfcca += c1o2 * c1o72 * pStar * (phi[d000] - phi[dPPM]) * rhoToPhi / rho; - //mfcbb += c1o2 * c2o9 * pStar * (phi[d000] - phi[dP00]) * rhoToPhi / rho; - //mfbcb += c1o2 * c2o9 * pStar * (phi[d000] - phi[d0P0]) * rhoToPhi / rho; - //mfbbc += c1o2 * c2o9 * pStar * (phi[d000] - phi[d00P]) * rhoToPhi / rho; - //mfccb += c1o2 * c1o18 * pStar * (phi[d000] - phi[dPP0]) * rhoToPhi / rho; - //mfacb += c1o2 * c1o18 * pStar * (phi[d000] - phi[dMP0]) * rhoToPhi / rho; - //mfcbc += c1o2 * c1o18 * pStar * (phi[d000] - phi[dP0P]) * rhoToPhi / rho; - //mfabc += c1o2 * c1o18 * pStar * (phi[d000] - phi[dM0P]) * rhoToPhi / rho; - //mfbcc += c1o2 * c1o18 * pStar * (phi[d000] - phi[d0PP]) * rhoToPhi / rho; - //mfbac += c1o2 * c1o18 * pStar * (phi[d000] - phi[d0MP]) * rhoToPhi / rho; - //mfccc += c1o2 * c1o72 * pStar * (phi[d000] - phi[dPPP]) * rhoToPhi / rho; - //mfacc += c1o2 * c1o72 * pStar * (phi[d000] - phi[dMPP]) * rhoToPhi / rho; - //mfcac += c1o2 * c1o72 * pStar * (phi[d000] - phi[dPMP]) * rhoToPhi / rho; - //mfaac += c1o2 * c1o72 * pStar * (phi[d000] - phi[dMMP]) * rhoToPhi / rho; - - /////////////// - //mfabb += (pBefore-pStar) * c2o9 ; - //mfbab += (pBefore-pStar) * c2o9 ; - //mfbba += (pBefore-pStar) * c2o9 ; - //mfaab += (pBefore-pStar) * c1o18 ; - //mfcab += (pBefore-pStar) * c1o18 ; - //mfaba += (pBefore-pStar) * c1o18 ; - //mfcba += (pBefore-pStar) * c1o18 ; - //mfbaa += (pBefore-pStar) * c1o18 ; - //mfbca += (pBefore-pStar) * c1o18 ; - //mfaaa += (pBefore-pStar) * c1o72 ; - //mfcaa += (pBefore-pStar) * c1o72 ; - //mfaca += (pBefore-pStar) * c1o72 ; - //mfcca += (pBefore-pStar) * c1o72 ; - //mfcbb += (pBefore-pStar) * c2o9 ; - //mfbcb += (pBefore-pStar) * c2o9 ; - //mfbbc += (pBefore-pStar) * c2o9 ; - //mfccb += (pBefore-pStar) * c1o18 ; - //mfacb += (pBefore-pStar) * c1o18 ; - //mfcbc += (pBefore-pStar) * c1o18 ; - //mfabc += (pBefore-pStar) * c1o18 ; - //mfbcc += (pBefore-pStar) * c1o18 ; - //mfbac += (pBefore-pStar) * c1o18 ; - //mfccc += (pBefore-pStar) * c1o72 ; - //mfacc += (pBefore-pStar) * c1o72 ; - //mfcac += (pBefore-pStar) * c1o72 ; - //mfaac += (pBefore-pStar) * c1o72 ; - //mfbbb += (pBefore-pStar) * 8.0 / 9.0; - - //mfabb = (pBefore ) * c2o9; - //mfbab = (pBefore ) * c2o9; - //mfbba = (pBefore ) * c2o9; - //mfaab = (pBefore ) * c1o16; - //mfcab = (pBefore ) * c1o16; - //mfaba = (pBefore ) * c1o16; - //mfcba = (pBefore ) * c1o16; - //mfbaa = (pBefore ) * c1o16; - //mfbca = (pBefore ) * c1o16; - //mfaaa = (pBefore ) * c1o72; - //mfcaa = (pBefore ) * c1o72; - //mfaca = (pBefore ) * c1o72; - //mfcca = (pBefore ) * c1o72; - //mfcbb = (pBefore ) * c2o9; - //mfbcb = (pBefore ) * c2o9; - //mfbbc = (pBefore ) * c2o9; - //mfccb = (pBefore ) * c1o16; - //mfacb = (pBefore ) * c1o16; - //mfcbc = (pBefore ) * c1o16; - //mfabc = (pBefore ) * c1o16; - //mfbcc = (pBefore ) * c1o16; - //mfbac = (pBefore ) * c1o16; - //mfccc = (pBefore ) * c1o72; - //mfacc = (pBefore ) * c1o72; - //mfcac = (pBefore ) * c1o72; - //mfaac = (pBefore ) * c1o72; - //mfbbb = (pBefore ) * 8.0 / 9.0; - /////////////////// - - ////////////////////////////////////////////////////////////////////////// - //proof correctness - ////////////////////////////////////////////////////////////////////////// - //#ifdef PROOF_CORRECTNESS - real rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) - + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) - + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - // //LBMReal dif = fabs(drho - rho_post); - // LBMReal dif = drho + (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling - rho_post; - //#ifdef SINGLEPRECISION - // if (dif > 10.0E-7 || dif < -10.0E-7) - //#else - // if (dif > 10.0E-15 || dif < -10.0E-15) - //#endif - // { - // UB_THROW(UbException(UB_EXARGS, "drho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(rho_post) - // + " dif=" + UbSystem::toString(dif) - // + " drho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3))); - // //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): drho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3)); - // //exit(EXIT_FAILURE); - // } - //#endif - - if (UbMath::isNaN(rho_post) || UbMath::isInfinity(rho_post)) - UB_THROW(UbException( - UB_EXARGS, "rho_post is not a number (nan or -1.#IND) or infinity number -1.#INF, node=" + UbSystem::toString(x1) + "," + - UbSystem::toString(x2) + "," + UbSystem::toString(x3))); - - ////////////////////////////////////////////////////////////////////////// - //write distribution - ////////////////////////////////////////////////////////////////////////// - (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac ;//* rho * c1o3; - - (*this->zeroDistributionsF)(x1, x2, x3) = mfbbb;// *rho* c1o3; - - - (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3) = mfhabb;//* rho * c1o3; - (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3) = mfhbab;//* rho * c1o3; - (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3) = mfhbba;//* rho * c1o3; - (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3) = mfhaab;//* rho * c1o3; - (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3) = mfhcab;//* rho * c1o3; - (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3) = mfhaba;//* rho * c1o3; - (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3) = mfhcba;//* rho * c1o3; - (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3) = mfhbaa;//* rho * c1o3; - (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3) = mfhbca;//* rho * c1o3; - (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3) = mfhaaa;//* rho * c1o3; - (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3) = mfhcaa;//* rho * c1o3; - (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3) = mfhaca;//* rho * c1o3; - (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfhcca;//* rho * c1o3; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3) = mfhcbb;//* rho * c1o3; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3) = mfhbcb;//* rho * c1o3; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p) = mfhbbc;//* rho * c1o3; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3) = mfhccb;//* rho * c1o3; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3) = mfhacb;//* rho * c1o3; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p) = mfhcbc;//* rho * c1o3; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p) = mfhabc;//* rho * c1o3; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p) = mfhbcc;//* rho * c1o3; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p) = mfhbac;//* rho * c1o3; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfhccc;//* rho * c1o3; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfhacc;//* rho * c1o3; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfhcac;//* rho * c1o3; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p) = mfhaac;//* rho * c1o3; - - (*this->zeroDistributionsH2)(x1, x2, x3) = mfhbbb;// *rho* c1o3; - - // !Old Kernel -///////////////////// P H A S E - F I E L D S O L V E R -//////////////////////////////////////////// -/////CUMULANT PHASE-FIELD - real omegaD =1.0/( 3.0 * mob + 0.5); - { - mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3); - - - //////////////////////////////////////////////////////////////////////////////////// - //! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // second component - real concentration = - ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; - //////////////////////////////////////////////////////////////////////////////////// - real oneMinusRho = c1o1 - concentration; - - real cx = - ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)); - real cy = - ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)); - real cz = - ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)); - - //////////////////////////////////////////////////////////////////////////////////// - // calculate the square of velocities for this lattice node - real cx2 = cx * cx; - real cy2 = cy * cy; - real cz2 = cz * cz; - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (6)-(14) in \ref - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho); - forwardChimera(mfaab, mfabb, mfacb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho); - forwardChimera(mfbab, mfbbb, mfbcb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho); - forwardChimera(mfcab, mfcbb, mfccb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho); - forwardChimera(mfaba, mfbba, mfcba, cx, cx2); - forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho); - forwardChimera(mfaab, mfbab, mfcab, cx, cx2); - forwardChimera(mfabb, mfbbb, mfcbb, cx, cx2); - forwardChimera(mfacb, mfbcb, mfccb, cx, cx2); - forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho); - forwardChimera(mfabc, mfbbc, mfcbc, cx, cx2); - forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c3o1, c1o9, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - //! - experimental Cumulant ... to be published ... hopefully - //! - - // linearized orthogonalization of 3rd order central moments - real Mabc = mfabc - mfaba * c1o3; - real Mbca = mfbca - mfbaa * c1o3; - real Macb = mfacb - mfaab * c1o3; - real Mcba = mfcba - mfaba * c1o3; - real Mcab = mfcab - mfaab * c1o3; - real Mbac = mfbac - mfbaa * c1o3; - // linearized orthogonalization of 5th order central moments - real Mcbc = mfcbc - mfaba * c1o9; - real Mbcc = mfbcc - mfbaa * c1o9; - real Mccb = mfccb - mfaab * c1o9; - - //31.05.2022 addaptive mobility - //omegaD = c1 + (sqrt((cx - vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration))) / (sqrt((cx - vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration)) + fabs((1.0 - concentration) * (concentration)) * c1o6 * oneOverInterfaceScale+1.0e-200); - //omegaD = c2 * (concentration * (concentration - c1)) / (-c6 * (sqrt((cx - vvx * concentration) * (cx - vvx * concentration) + (cy - vvy * concentration) * (cy - vvy * concentration) + (cz - vvz * concentration) * (cz - vvz * concentration))) + (concentration * (concentration - c1))+1.0e-200); - // collision of 1st order moments - cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + - normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration) * c1o3 * oneOverInterfaceScale; - cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + - normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration) * c1o3 * oneOverInterfaceScale; - cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + - normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - concentration) * (concentration) * c1o3 * oneOverInterfaceScale; - - cx2 = cx * cx; - cy2 = cy * cy; - cz2 = cz * cz; - - // equilibration of 2nd order moments - mfbba = c0o1; - mfbab = c0o1; - mfabb = c0o1; - - mfcaa = c1o3 * concentration; - mfaca = c1o3 * concentration; - mfaac = c1o3 * concentration; - - // equilibration of 3rd order moments - Mabc = c0o1; - Mbca = c0o1; - Macb = c0o1; - Mcba = c0o1; - Mcab = c0o1; - Mbac = c0o1; - mfbbb = c0o1; - - // from linearized orthogonalization 3rd order central moments to central moments - mfabc = Mabc + mfaba * c1o3; - mfbca = Mbca + mfbaa * c1o3; - mfacb = Macb + mfaab * c1o3; - mfcba = Mcba + mfaba * c1o3; - mfcab = Mcab + mfaab * c1o3; - mfbac = Mbac + mfbaa * c1o3; - - // equilibration of 4th order moments - mfacc = c1o9 * concentration; - mfcac = c1o9 * concentration; - mfcca = c1o9 * concentration; - - mfcbb = c0o1; - mfbcb = c0o1; - mfbbc = c0o1; - - // equilibration of 5th order moments - Mcbc = c0o1; - Mbcc = c0o1; - Mccb = c0o1; - - // from linearized orthogonalization 5th order central moments to central moments - mfcbc = Mcbc + mfaba * c1o9; - mfbcc = Mbcc + mfbaa * c1o9; - mfccb = Mccb + mfaab * c1o9; - - // equilibration of 6th order moment - mfccc = c1o27 * concentration; - - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (88)-(96) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho); - backwardChimera(mfaba, mfbba, mfcba, cx, cx2); - backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho); - backwardChimera(mfaab, mfbab, mfcab, cx, cx2); - backwardChimera(mfabb, mfbbb, mfcbb, cx, cx2); - backwardChimera(mfacb, mfbcb, mfccb, cx, cx2); - backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho); - backwardChimera(mfabc, mfbbc, mfcbc, cx, cx2); - backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c9o1, c1o9, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho); - backwardChimera(mfaab, mfabb, mfacb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho); - backwardChimera(mfbab, mfbbb, mfbcb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho); - backwardChimera(mfcab, mfcbb, mfccb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho); - - - - (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3) = mfabb; - (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3) = mfbab; - (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3) = mfbba; - (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3) = mfaab; - (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab; - (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3) = mfaba; - (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba; - (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa; - (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca; - (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa; - (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa; - (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca; - (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca; - - (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3 ) = mfcbb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3 ) = mfbcb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3 ) = mfccb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3 ) = mfacb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac; - - (*this->zeroDistributionsH1)(x1,x2,x3) = mfbbb; - - - - - } - } - } - } - } -} -////////////////////////////////////////////////////////////////////////// - -real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX1_phi() -{ - using namespace vf::lbm::dir; - using namespace D3Q27System; - - return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP]))) - + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) + - +WEIGTH[d0P0] * (phi[dP00] - phi[dM00])); -} - -real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX2_phi() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM]))) - + WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) + - +WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0])); -} - -real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX3_phi() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP]))) - + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) + - +WEIGTH[d0P0] * (phi[d00P] - phi[d00M])); -} - -real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX1_rhoInv(real rhoL,real rhoDIV) -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((1.0/(rhoL+rhoDIV*phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) + (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) + (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])))) - + WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) + (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) + ((1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0])) + (1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0]))))) + - +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[dP00]) - 1.0 / (rhoL + rhoDIV * phi[dM00]))); -} - -real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX2_rhoInv(real rhoL,real rhoDIV) -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])) - (1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])))) - + WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM])) + (1.0 / (rhoL + rhoDIV * phi[d0PM]) - 1.0 / (rhoL + rhoDIV * phi[d0MP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0])) - (1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0]))))) + - +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d0P0]) - 1.0 / (rhoL + rhoDIV * phi[d0M0]))); -} - -real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX3_rhoInv(real rhoL, real rhoDIV) -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) - (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])))) - + WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) - (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) + ((1.0 / (rhoL + rhoDIV * phi[d0MP]) - 1.0 / (rhoL + rhoDIV * phi[d0PM])) + (1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM]))))) + - +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d00P]) - 1.0 / (rhoL + rhoDIV * phi[d00M]))); -} - -real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX1_phi2() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP]))) - + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) + - +WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00])); -} - -real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX2_phi2() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM]))) - + WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) + - +WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0])); -} - -real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX3_phi2() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP]))) - + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) + - +WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M])); -} - -real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::nabla2_phi() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - real sum = 0.0; - sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000]))) - + (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000])))); - sum += WEIGTH[d0PP] * ( - (((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000]))) - + (((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000]))) - + (((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000]))) - ); - sum += WEIGTH[d00P] * ( - ((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000])) - + ((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000])) - + ((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000])) - ); - - - return 6.0 * sum; -} - -void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::computePhasefield() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - SPtr<DistributionArray3D> distributionsH = dataSet->getHdistributions(); - - 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[dP00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - h[d0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - h[d00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - h[dPP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - h[dMP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - h[dP0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - h[dM0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - h[d0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - h[d0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - - h[dM00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - h[d0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - h[d00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - h[dMM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - h[dPM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - h[dM0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - h[dP0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - h[d0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - h[d0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - - h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3); - } - } - } - } -} - -void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, - int x3) -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - using namespace vf::basics::constant; - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - phi[d000] = (*ph)(x1, x2, x3); - if (phi[d000] < 0) { - phi[d000] = c0o1; - } - - - 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 { - //phi[k] = (*ph)(x1 , x2, x3 );// neutral wetting - phi[k] = 0.0;//unwetting - } - } -} - -void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, - int x3) -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - phi2[d000] = (*ph)(x1, x2, x3); - - - for (int k = FSTARTDIR; k <= FENDDIR; k++) { - - if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) { - phi2[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]); - } - else { - phi2[k] = 0.05; - } - } -} - -void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::swapDistributions() -{ - LBMKernel::swapDistributions(); - dataSet->getHdistributions()->swap(); - dataSet->getH2distributions()->swap(); -} - -void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::initForcing() -{ - 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); - - muForcingX1.DefineVar("rho",&muRho); - muForcingX2.DefineVar("rho",&muRho); - muForcingX3.DefineVar("rho",&muRho); - -} diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.h b/src/cpu/MultiphaseFlow/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.h deleted file mode 100644 index 98ca6108dca8f0835bc5e4e9479f696791cc354c..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.h +++ /dev/null @@ -1,125 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.h -//! \ingroup LBMKernel -//! \author M. Geier, K. Kutscher, Hesameddin Safari -//======================================================================================= - -#ifndef MultiphaseSimpleVelocityBaseExternalPressureLBMKernel_H -#define MultiphaseSimpleVelocityBaseExternalPressureLBMKernel_H - -#include "LBMKernel.h" -#include "BCSet.h" -#include "D3Q27System.h" -#include "basics/utilities/UbTiming.h" -#include "basics/container/CbArray4D.h" -#include "basics/container/CbArray3D.h" - -//! \brief Multiphase Cascaded Cumulant LBM kernel. -//! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model -//! \author M. Geier, K. Kutscher, Hesameddin Safari -class MultiphaseSimpleVelocityBaseExternalPressureLBMKernel : public LBMKernel -{ -public: - MultiphaseSimpleVelocityBaseExternalPressureLBMKernel(); - virtual ~MultiphaseSimpleVelocityBaseExternalPressureLBMKernel(void) = default; - void calculate(int step) override; - SPtr<LBMKernel> clone() override; - - - ///refactor - //CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr pressure; - - - real getCalculationTime() override { return .0; } -protected: - virtual void initDataSet(); - void swapDistributions() override; - - void initForcing(); - - void forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho); - void backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho); - void forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2); - void backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2); - - real f1[D3Q27System::ENDF+1]; - - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF; - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF; - CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr zeroDistributionsF; - - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH1; - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH1; - CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr zeroDistributionsH1; - - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH2; - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH2; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributionsH2; - - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressureOld; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr p1Old; - - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseFieldOld; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr divU; - - real h [D3Q27System::ENDF+1]; - real h2[D3Q27System::ENDF + 1]; - real g [D3Q27System::ENDF+1]; - real phi[D3Q27System::ENDF+1]; - real phi2[D3Q27System::ENDF + 1]; - real pr1[D3Q27System::ENDF+1]; - real phi_cutoff[D3Q27System::ENDF+1]; - - real gradX1_phi(); - real gradX2_phi(); - real gradX3_phi(); - real gradX1_rhoInv(real rhoL, real rhoDIV); - real gradX2_rhoInv(real rhoL, real rhoDIV); - real gradX3_rhoInv(real rhoL, real rhoDIV); - real gradX1_phi2(); - real gradX2_phi2(); - real gradX3_phi2(); - void computePhasefield(); - void findNeighbors(CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, int x1, int x2, int x3); - void findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, int x3); - - real nabla2_phi(); - - mu::value_type muX1,muX2,muX3; - mu::value_type muDeltaT; - mu::value_type muNu; - mu::value_type muRho; - real forcingX1; - real forcingX2; - real forcingX3; -}; - -#endif diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsCumulantLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsCumulantLBMKernel.cpp deleted file mode 100644 index 30e4fa4f8e634dfc629a37ac3e405f245168beff..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsCumulantLBMKernel.cpp +++ /dev/null @@ -1,3219 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseTwoPhaseFieldsCumulantLBMKernel.cpp -//! \ingroup LBMKernel -//! \author Hesameddin Safari -//======================================================================================= - -#include "MultiphaseTwoPhaseFieldsCumulantLBMKernel.h" -#include "BCArray3D.h" -#include "Block3D.h" -#include "D3Q27EsoTwist3DSplittedVector.h" -#include "D3Q27System.h" -#include "DataSet3D.h" -#include "LBMKernel.h" -#include <cmath> - -#define PROOF_CORRECTNESS - -////////////////////////////////////////////////////////////////////////// -MultiphaseTwoPhaseFieldsCumulantLBMKernel::MultiphaseTwoPhaseFieldsCumulantLBMKernel() { this->compressible = false; } -////////////////////////////////////////////////////////////////////////// -void MultiphaseTwoPhaseFieldsCumulantLBMKernel::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<DistributionArray3D> h2(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->setH2distributions(h2); // For phase-field - dataSet->setPhaseField(divU); -} -////////////////////////////////////////////////////////////////////////// -SPtr<LBMKernel> MultiphaseTwoPhaseFieldsCumulantLBMKernel::clone() -{ - SPtr<LBMKernel> kernel(new MultiphaseTwoPhaseFieldsCumulantLBMKernel()); - kernel->setNX(nx); - dynamicPointerCast<MultiphaseTwoPhaseFieldsCumulantLBMKernel>(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->setBCSet(bcSet->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 MultiphaseTwoPhaseFieldsCumulantLBMKernel::forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) { -// using namespace UbMath; - using namespace vf::basics::constant; - - real m2 = mfa + mfc; - real m1 = mfc - mfa; - real m0 = m2 + mfb; - mfa = m0; - m0 *= Kinverse; - m0 += oneMinusRho; - mfb = (m1 * Kinverse - m0 * vv) * K; - mfc = ((m2 - c2o1 * m1 * vv) * Kinverse + v2 * m0) * K; -} - -//////////////////////////////////////////////////////////////////////////////// - void MultiphaseTwoPhaseFieldsCumulantLBMKernel::backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) { -// using namespace UbMath; - using namespace vf::basics::constant; - - real m0 = (((mfc - mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 - vv) * c1o2) * K; - real m1 = (((mfa - mfc) - c2o1 * mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (-v2)) * K; - mfc = (((mfc + mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 + vv) * c1o2) * K; - mfa = m0; - mfb = m1; -} - - -//////////////////////////////////////////////////////////////////////////////// - void MultiphaseTwoPhaseFieldsCumulantLBMKernel::forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) { -// using namespace UbMath; - using namespace vf::basics::constant; - - real m1 = (mfa + mfc) + mfb; - real m2 = mfc - mfa; - mfc = (mfc + mfa) + (v2 * m1 - c2o1 * vv * m2); - mfb = m2 - vv * m1; - mfa = m1; -} - - - void MultiphaseTwoPhaseFieldsCumulantLBMKernel::backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) { -// using namespace UbMath; - using namespace vf::basics::constant; - - real ma = (mfc + mfa * (v2 - vv)) * c1o2 + mfb * (vv - c1o2); - real mb = ((mfa - mfc) - mfa * v2) - c2o1 * mfb * vv; - mfc = (mfc + mfa * (v2 + vv)) * c1o2 + mfb * (vv + c1o2); - mfb = mb; - mfa = ma; -} - - -void MultiphaseTwoPhaseFieldsCumulantLBMKernel::calculate(int step) -{ - using namespace D3Q27System; -// using namespace UbMath; - using namespace vf::lbm::dir; - using namespace vf::basics::constant; - - forcingX1 = 0.0; - forcingX2 = 0.0; - forcingX3 = 0.0; - - real oneOverInterfaceScale = 1.0; - ///////////////////////////////////// - - localDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); - nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); - zeroDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); - - localDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions(); - nonLocalDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions(); - zeroDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions(); - - localDistributionsH2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getLocalDistributions(); - nonLocalDistributionsH2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getNonLocalDistributions(); - zeroDistributionsH2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getZeroDistributions(); - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - const int bcArrayMaxX1 = (int)bcArray->getNX1(); - const int bcArrayMaxX2 = (int)bcArray->getNX2(); - const int bcArrayMaxX3 = (int)bcArray->getNX3(); - - int minX1 = ghostLayerWidth; - int minX2 = ghostLayerWidth; - int minX3 = ghostLayerWidth; - int maxX1 = bcArrayMaxX1 - ghostLayerWidth; - int maxX2 = bcArrayMaxX2 - ghostLayerWidth; - int maxX3 = bcArrayMaxX3 - ghostLayerWidth; - - //TODO - //very expensive !!!!! - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField( - new CbArray3D<real, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0)); - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField2( - new CbArray3D<real, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0)); - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr divU( - new CbArray3D<real, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, 0.0)); - - - 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; - - real mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - real mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - - real mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3); - (*phaseField)(x1, x2, x3) = (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca) + (mfcaa + mfacc)) ) + - (((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) + - ((mfbaa + mfbac) + (mfbca + mfbcc))) + ((mfabb + mfcbb) + - (mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb; - - mfcbb = (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3); - mfbcb = (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3); - mfbbc = (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3); - mfccb = (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3); - mfacb = (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3); - mfcbc = (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3); - mfabc = (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3); - mfbcc = (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3); - mfbac = (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3); - mfccc = (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3); - mfacc = (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3); - mfcac = (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3); - mfaac = (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3); - mfabb = (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3); - mfbab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3); - mfbba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p); - mfaab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3); - mfcab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3); - mfaba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p); - mfcba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p); - mfbaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p); - mfbca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p); - mfaaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p); - mfcaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p); - mfaca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p); - mfcca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p); - - mfbbb = (*this->zeroDistributionsH2)(x1, x2, x3); - (*phaseField2)(x1, x2, x3) = - (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca) + (mfcaa + mfacc))) + - (((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) + - ((mfbaa + mfbac) + (mfbca + mfbcc))) + - ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb; - //(*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; - } - } - } - } - - real collFactorM; - //LBMReal forcingTerm[D3Q27System::ENDF + 1]; - - 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 - - findNeighbors(phaseField, x1, x2, x3); - findNeighbors2(phaseField2, x1, x2, x3); - - real mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3); - real mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p); - - real mfbbb = (*this->zeroDistributionsF)(x1, x2, x3); - - real rhoH = 1.0; - real rhoL = 1.0 / densityRatio; - - real rhoToPhi = (rhoH - rhoL) / (phiH - phiL); - - real dX1_phi = gradX1_phi(); - real dX2_phi = gradX2_phi(); - real dX3_phi = gradX3_phi(); - - real dX1_phi2 = gradX1_phi2(); - real dX2_phi2 = gradX2_phi2(); - real dX3_phi2 = gradX3_phi2(); - - - real denom2 = sqrt(dX1_phi * dX1_phi+ dX1_phi2 * dX1_phi2 + dX2_phi * dX2_phi + dX2_phi2 * dX2_phi2 + dX3_phi * dX3_phi+ dX3_phi2 * dX3_phi2) + 1e-9; - real normX1 = (dX1_phi-dX1_phi2)/denom2; - real normX2 = (dX2_phi-dX2_phi2)/denom2; - real normX3 = (dX3_phi-dX3_phi2)/denom2; - - //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[d000] - phiH) / (phiH - phiL); - - - real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi(); - - //----------- Calculating Macroscopic Values ------------- - real rho = rhoH + rhoToPhi * (phi[d000] - phiH); - - ////Incompressible Kernal - - mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) / rho * c3o1; - mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) / rho * c3o1; - mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) / rho * c3o1; - mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) / rho * c3o1; - mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) / rho * c3o1; - mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) / rho * c3o1; - mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) / rho * c3o1; - mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) / rho * c3o1; - mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) / rho * c3o1; - mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) / rho * c3o1; - mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) / rho * c3o1; - mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) / rho * c3o1; - mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) / rho * c3o1; - - mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) / rho * c3o1; - mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) / rho * c3o1; - mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) / rho * c3o1; - mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) / rho * c3o1; - mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) / rho * c3o1; - mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) / rho * c3o1; - mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) / rho * c3o1; - mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) / rho * c3o1; - mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) / rho * c3o1; - mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) / rho * c3o1; - mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) / rho * c3o1; - mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) / rho * c3o1; - mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) / rho * c3o1; - - mfbbb = (*this->zeroDistributionsF)(x1, x2, x3) / rho * c3o1; - - - real m0, m1, m2; - real rhoRef=c1o1; - - //LBMReal - // LBMReal drho = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) - // + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) - // + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb))/rhoRef; - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab))/rhoRef; - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba))/rhoRef; - - - 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); - vvx += forcingX1 * deltaT * 0.5; // X - vvy += forcingX2 * deltaT * 0.5; // Y - vvz += forcingX3 * deltaT * 0.5; // Z - - } - - - ///surface tension force - vvx += mu * dX1_phi*c1o2; - vvy += mu * dX2_phi * c1o2 ; - vvz += mu * dX3_phi * c1o2; - - //////classic source term - ///----Classic source term 8.4.2021 - - real vvxF, vvyF, vvzF; - vvxF = vvx;//-2*c1o24 * lap_vx;// - vvyF = vvy;//-2*c1o24 * lap_vy;// - vvzF = vvz;//-2*c1o24 * lap_vz;// - -// vvxF = 1.2* vvx- 0.2*0.5 * ((*velocityX)(x1 - 1, x2, x3) + (*velocityX)(x1 + 1, x2, x3)); -// vvyF = 1.2 *vvy- 0.2*0.5* ((*velocityY)(x1 , x2-1, x3) + (*velocityY)(x1 , x2+1, x3)); -// vvzF = 1.2 *vvz-0.2*0.5* ((*velocityZ)(x1 , x2, x3-1) + (*velocityZ)(x1 , x2, x3+1)); - //if (vvxF != vvx) { - // vvxF = vvxF; - //} - real weightGrad = 1.0;// -denom * denom / (denom * denom + 0.0001 * 0.001); - real dX1_phiF = dX1_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[d000]) * (phi[d000]) * normX1; - real dX2_phiF = dX2_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[d000]) * (phi[d000]) * normX2; - real dX3_phiF = dX3_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[d000]) * (phi[d000]) * normX3; - - //dX1_phiF *= 1.2; - //dX2_phiF *= 1.2; - //dX3_phiF *= 1.2; - - //LBMReal gradFD = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi); - //LBMReal gradPhi = (1.0 - phi[REST]) * (phi[REST]); - //gradPhi = (gradPhi > gradFD) ? gradPhi : gradFD; - //dX1_phiF = gradPhi * normX1; - // dX2_phiF = gradPhi * normX2; - // dX3_phiF = gradPhi * normX3; - - real ux2; - real uy2; - real uz2; - ux2 = vvxF * vvxF; - uy2 = vvyF * vvyF; - uz2 = vvzF * vvzF; - real forcingTerm[D3Q27System::ENDF + 1]; - for (int dir = FSTARTDIR; dir <= FENDDIR; dir++) { - real velProd = DX1[dir] * vvxF + DX2[dir] * vvyF + DX3[dir] * vvzF; - real velSq1 = velProd * velProd; - real gamma = WEIGTH[dir] * (1.0 + 3 * velProd + (4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2))); - - //LBMReal fac1 = (gamma - WEIGTH[dir]) * c1o3 * rhoToPhi; - - //forcingTerm[dir] = - // (-vvxF) * (fac1 * dX1_phiF) + - // (-vvyF) * (fac1 * dX2_phiF) + - // (-vvzF) * (fac1 * dX3_phiF) + - // (DX1[dir]) * (fac1 * dX1_phiF) + - // (DX2[dir]) * (fac1 * dX2_phiF) + - // (DX3[dir]) * (fac1 * dX3_phiF); - - - real fac1 = (gamma - WEIGTH[dir]) * c1o3 ; - - forcingTerm[dir] = - (-vvxF) * (fac1 * (dX1_phiF * rhoH + dX2_phi2 * rhoL)) + - (-vvyF) * (fac1 * (dX2_phiF * rhoH + dX2_phi2 * rhoL)) + - (-vvzF) * (fac1 * (dX3_phiF * rhoH + dX3_phi2 * rhoL)) + - (DX1[dir]) * (fac1 * (dX1_phiF * rhoH + dX2_phi2 * rhoL)) + - (DX2[dir]) * (fac1 * (dX2_phiF * rhoH + dX2_phi2 * rhoL)) + - (DX3[dir]) * (fac1 * (dX3_phiF * rhoH + dX3_phi2 * rhoL)); - - - - } - - real gamma = WEIGTH[d000] * (1.0 - 1.5 * (ux2 + uy2 + uz2)); - real fac1 = (gamma - WEIGTH[d000]) * c1o3 * rhoToPhi; - forcingTerm[d000] = (-vvxF) * (fac1 * (dX1_phiF * rhoH + dX2_phi2 * rhoL)) + - (-vvyF) * (fac1 * (dX2_phiF * rhoH + dX2_phi2 * rhoL)) + - (-vvzF) * (fac1 * (dX3_phiF * rhoH + dX3_phi2 * rhoL)); - - //////// - // LBMReal divAfterSource= - //( mfcbb + 3.0 * (0.5 * forcingTerm[dP00]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF) *(vvyF) +(vvzF) *(vvzF)-1)+ - //( mfbcb + 3.0 * (0.5 * forcingTerm[N]) / rho ) *((vvxF) *(vvxF) +(vvyF-1)*(vvyF-1)+(vvzF) *(vvzF)-1)+ - //( mfbbc + 3.0 * (0.5 * forcingTerm[T]) / rho ) *((vvxF) *(vvxF) +(vvyF) *(vvyF) +(vvzF-1)*(vvzF-1)-1)+ - //( mfccb + 3.0 * (0.5 * forcingTerm[NE]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF) *(vvzF)-1)+ - //( mfacb + 3.0 * (0.5 * forcingTerm[NW]) / rho ) *((vvxF+1)*(vvxF+1)+(vvyF-1)*(vvyF-1)+(vvzF) *(vvzF)-1)+ - //( mfcbc + 3.0 * (0.5 * forcingTerm[TE]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF) *(vvyF) +(vvzF-1)*(vvzF-1)-1)+ - //( mfabc + 3.0 * (0.5 * forcingTerm[TW]) / rho ) *((vvxF+1)*(vvxF+1)+(vvyF) *(vvyF) +(vvzF-1)*(vvzF-1)-1)+ - //( mfbcc + 3.0 * (0.5 * forcingTerm[TN]) / rho ) *((vvxF) *(vvxF) +(vvyF-1)*(vvyF-1)+(vvzF-1)*(vvzF-1)-1)+ - //( mfbac + 3.0 * (0.5 * forcingTerm[TS]) / rho ) *((vvxF) *(vvxF) +(vvyF+1)*(vvyF+1)+(vvzF-1)*(vvzF-1)-1)+ - //( mfccc + 3.0 * (0.5 * forcingTerm[TNE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF-1)*(vvzF-1)-1)+ - //( mfacc + 3.0 * (0.5 * forcingTerm[TNW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF-1)*(vvyF-1)+(vvzF-1)*(vvzF-1)-1)+ - //( mfcac + 3.0 * (0.5 * forcingTerm[TSE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF+1)*(vvyF+1)+(vvzF-1)*(vvzF-1)-1)+ - //( mfaac + 3.0 * (0.5 * forcingTerm[TSW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF+1)*(vvyF+1)+(vvzF-1)*(vvzF-1)-1)+ - //( mfabb + 3.0 * (0.5 * forcingTerm[W]) / rho ) *((vvxF+1)*(vvxF+1)+(vvyF) *(vvyF) +(vvzF) *(vvzF)-1)+ - //( mfbab + 3.0 * (0.5 * forcingTerm[S]) / rho ) *((vvxF) *(vvxF) +(vvyF+1)*(vvyF+1)+(vvzF) *(vvzF)-1)+ - //( mfbba + 3.0 * (0.5 * forcingTerm[B]) / rho ) *((vvxF) *(vvxF) +(vvyF) *(vvyF) +(vvzF+1)*(vvzF+1)-1)+ - //( mfaab + 3.0 * (0.5 * forcingTerm[SW]) / rho ) *((vvxF+1)*(vvxF+1)+(vvyF+1)*(vvyF+1)+(vvzF) *(vvzF)-1)+ - //( mfcab + 3.0 * (0.5 * forcingTerm[SE]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF+1)*(vvyF+1)+(vvzF) *(vvzF)-1)+ - //( mfaba + 3.0 * (0.5 * forcingTerm[BW]) / rho ) *((vvxF+1)*(vvxF+1)+(vvyF) *(vvyF) +(vvzF+1)*(vvzF+1)-1)+ - //( mfcba + 3.0 * (0.5 * forcingTerm[BE]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF) *(vvyF) +(vvzF+1)*(vvzF+1)-1)+ - //( mfbaa + 3.0 * (0.5 * forcingTerm[BS]) / rho ) *((vvxF) *(vvxF) +(vvyF+1)*(vvyF+1)+(vvzF+1)*(vvzF+1)-1)+ - //( mfbca + 3.0 * (0.5 * forcingTerm[BN]) / rho ) *((vvxF) *(vvxF) +(vvyF-1)*(vvyF-1)+(vvzF+1)*(vvzF+1)-1)+ - //( mfaaa + 3.0 * (0.5 * forcingTerm[BSW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF+1)*(vvyF+1)+(vvzF+1)*(vvzF+1)-1)+ - //( mfcaa + 3.0 * (0.5 * forcingTerm[BSE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF+1)*(vvyF+1)+(vvzF+1)*(vvzF+1)-1)+ - //( mfaca + 3.0 * (0.5 * forcingTerm[BNW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF-1)*(vvyF-1)+(vvzF+1)*(vvzF+1)-1)+ - //( mfcca + 3.0 * (0.5 * forcingTerm[BNE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF+1)*(vvzF+1)-1)+ - //( mfbbb + 3.0 * (0.5 * forcingTerm[REST]) / rho)*((vvxF)*(vvxF)+(vvyF)*(vvyF)+(vvzF)*(vvzF)-1); - - // LBMReal divBeforeSource = - // (mfcbb) * ((vvxF - 1) * (vvxF - 1) + (vvyF) * (vvyF)+(vvzF) * (vvzF)-1) + - // (mfbcb) * ((vvxF) * (vvxF)+(vvyF - 1) * (vvyF - 1) + (vvzF) * (vvzF)-1) + - // (mfbbc) * ((vvxF) * (vvxF)+(vvyF) * (vvyF)+(vvzF - 1) * (vvzF - 1)-1) + - // (mfccb) * ((vvxF - 1) * (vvxF - 1) + (vvyF - 1) * (vvyF - 1) + (vvzF) * (vvzF)-1) + - // (mfacb) * ((vvxF + 1) * (vvxF + 1) + (vvyF - 1) * (vvyF - 1) + (vvzF) * (vvzF)-1) + - // (mfcbc) * ((vvxF - 1) * (vvxF - 1) + (vvyF) * (vvyF)+(vvzF - 1) * (vvzF - 1)-1) + - // (mfabc) * ((vvxF + 1) * (vvxF + 1) + (vvyF) * (vvyF)+(vvzF - 1) * (vvzF - 1)-1) + - // (mfbcc) * ((vvxF) * (vvxF)+(vvyF - 1) * (vvyF - 1) + (vvzF - 1) * (vvzF - 1)-1) + - // (mfbac) * ((vvxF) * (vvxF)+(vvyF + 1) * (vvyF + 1) + (vvzF - 1) * (vvzF - 1)-1) + - // (mfccc) * ((vvxF - 1) * (vvxF - 1) + (vvyF - 1) * (vvyF - 1) + (vvzF - 1) * (vvzF - 1)-1) + - // (mfacc) * ((vvxF + 1) * (vvxF + 1) + (vvyF - 1) * (vvyF - 1) + (vvzF - 1) * (vvzF - 1)-1) + - // (mfcac) * ((vvxF - 1) * (vvxF - 1) + (vvyF + 1) * (vvyF + 1) + (vvzF - 1) * (vvzF - 1)-1) + - // (mfaac) * ((vvxF + 1) * (vvxF + 1) + (vvyF + 1) * (vvyF + 1) + (vvzF - 1) * (vvzF - 1)-1) + - // (mfabb) * ((vvxF + 1) * (vvxF + 1) + (vvyF) * (vvyF)+(vvzF) * (vvzF)-1) + - // (mfbab) * ((vvxF) * (vvxF)+(vvyF + 1) * (vvyF + 1) + (vvzF) * (vvzF)-1) + - // (mfbba) * ((vvxF) * (vvxF)+(vvyF) * (vvyF)+(vvzF + 1) * (vvzF + 1)-1) + - // (mfaab) * ((vvxF + 1) * (vvxF + 1) + (vvyF + 1) * (vvyF + 1) + (vvzF) * (vvzF)-1) + - // (mfcab) * ((vvxF - 1) * (vvxF - 1) + (vvyF + 1) * (vvyF + 1) + (vvzF) * (vvzF)-1) + - // (mfaba) * ((vvxF + 1) * (vvxF + 1) + (vvyF) * (vvyF)+(vvzF + 1) * (vvzF + 1)-1) + - // (mfcba) * ((vvxF - 1) * (vvxF - 1) + (vvyF) * (vvyF)+(vvzF + 1) * (vvzF + 1)-1) + - // (mfbaa) * ((vvxF) * (vvxF)+(vvyF + 1) * (vvyF + 1) + (vvzF + 1) * (vvzF + 1)-1) + - // (mfbca) * ((vvxF) * (vvxF)+(vvyF - 1) * (vvyF - 1) + (vvzF + 1) * (vvzF + 1)-1) + - // (mfaaa) * ((vvxF + 1) * (vvxF + 1) + (vvyF + 1) * (vvyF + 1) + (vvzF + 1) * (vvzF + 1)-1) + - // (mfcaa) * ((vvxF - 1) * (vvxF - 1) + (vvyF + 1) * (vvyF + 1) + (vvzF + 1) * (vvzF + 1)-1) + - // (mfaca) * ((vvxF + 1) * (vvxF + 1) + (vvyF - 1) * (vvyF - 1) + (vvzF + 1) * (vvzF + 1)-1) + - // (mfcca) * ((vvxF - 1) * (vvxF - 1) + (vvyF - 1) * (vvyF - 1) + (vvzF + 1) * (vvzF + 1)-1) + - // (mfbbb) * ((vvxF) * (vvxF)+(vvyF) * (vvyF)+(vvzF) * (vvzF)-1); - //if (divAfterSource - divBeforeSource != 0 && phi[REST]>0.0001 && phi[REST]<0.999) { - // std::cout << phi[REST]<<" "<< divAfterSource << " " << divBeforeSource <<" "<< divAfterSource/ divBeforeSource << std::endl; - //} - - //if (fabs(divAfterSource - divBeforeSource)/(fabs(divAfterSource) + fabs(divBeforeSource)+1e-10) > 1e-5) { - // LBMReal scaleDiv =0.95+(1-0.95)* (divBeforeSource) / (divBeforeSource - divAfterSource); - - // forcingTerm[dP00] *=scaleDiv; - // forcingTerm[N] *=scaleDiv; - // forcingTerm[T] *=scaleDiv; - // forcingTerm[NE] *=scaleDiv; - // forcingTerm[NW] *=scaleDiv; - // forcingTerm[TE] *=scaleDiv; - // forcingTerm[TW] *=scaleDiv; - // forcingTerm[TN] *=scaleDiv; - // forcingTerm[TS] *=scaleDiv; - // forcingTerm[TNE] *=scaleDiv; - // forcingTerm[TNW] *=scaleDiv; - // forcingTerm[TSE] *=scaleDiv; - // forcingTerm[TSW] *=scaleDiv; - // forcingTerm[W] *=scaleDiv; - // forcingTerm[S] *=scaleDiv; - // forcingTerm[B] *=scaleDiv; - // forcingTerm[SW] *=scaleDiv; - // forcingTerm[SE] *=scaleDiv; - // forcingTerm[BW] *=scaleDiv; - // forcingTerm[BE] *=scaleDiv; - // forcingTerm[BS] *=scaleDiv; - // forcingTerm[BN] *=scaleDiv; - // forcingTerm[BSW] *=scaleDiv; - // forcingTerm[BSE] *=scaleDiv; - // forcingTerm[BNW] *=scaleDiv; - // forcingTerm[BNE] *=scaleDiv; - // forcingTerm[REST] *=scaleDiv; - //} - //////// - - - mfcbb += 3.0 * (0.5 * forcingTerm[dP00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; - mfbcb += 3.0 * (0.5 * forcingTerm[d0P0]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; - mfbbc += 3.0 * (0.5 * forcingTerm[d00P]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; - mfccb += 3.0 * (0.5 * forcingTerm[dPP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; - mfacb += 3.0 * (0.5 * forcingTerm[dMP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NW ]; - mfcbc += 3.0 * (0.5 * forcingTerm[dP0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TE ]; - mfabc += 3.0 * (0.5 * forcingTerm[dM0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TW ]; - mfbcc += 3.0 * (0.5 * forcingTerm[d0PP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TN ]; - mfbac += 3.0 * (0.5 * forcingTerm[d0MP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TS ]; - mfccc += 3.0 * (0.5 * forcingTerm[dPPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNE]; - mfacc += 3.0 * (0.5 * forcingTerm[dMPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNW]; - mfcac += 3.0 * (0.5 * forcingTerm[dPMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSE]; - mfaac += 3.0 * (0.5 * forcingTerm[dMMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSW]; - mfabb += 3.0 * (0.5 * forcingTerm[dM00]) / rho; //-(3.0*p1 - rho)*WEIGTH[W ]; - mfbab += 3.0 * (0.5 * forcingTerm[d0M0]) / rho; //-(3.0*p1 - rho)*WEIGTH[S ]; - mfbba += 3.0 * (0.5 * forcingTerm[d00M]) / rho; //-(3.0*p1 - rho)*WEIGTH[B ]; - mfaab += 3.0 * (0.5 * forcingTerm[dMM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SW ]; - mfcab += 3.0 * (0.5 * forcingTerm[dPM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SE ]; - mfaba += 3.0 * (0.5 * forcingTerm[dM0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BW ]; - mfcba += 3.0 * (0.5 * forcingTerm[dP0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BE ]; - mfbaa += 3.0 * (0.5 * forcingTerm[d0MM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BS ]; - mfbca += 3.0 * (0.5 * forcingTerm[d0PM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BN ]; - mfaaa += 3.0 * (0.5 * forcingTerm[dMMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSW]; - mfcaa += 3.0 * (0.5 * forcingTerm[dPMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSE]; - mfaca += 3.0 * (0.5 * forcingTerm[dMPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNW]; - mfcca += 3.0 * (0.5 * forcingTerm[dPPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNE]; - mfbbb += 3.0 * (0.5 * forcingTerm[d000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST] - - //-------------------------------------------------------- - - - - - - //////end classic source term - - - - - //forcing - /////////////////////////////////////////////////////////////////////////////////////////// - if (withForcing) - { - muX1 = static_cast<real>(x1 - 1 + ix1 * maxX1); - muX2 = static_cast<real>(x2 - 1 + ix2 * maxX2); - muX3 = static_cast<real>(x3 - 1 + ix3 * maxX3); - - //forcingX1 = muForcingX1.Eval(); - //forcingX2 = muForcingX2.Eval(); - //forcingX3 = muForcingX3.Eval(); - - //vvx += forcingX1 * deltaT * 0.5; // X - //vvy += forcingX2 * deltaT * 0.5; // Y - //vvz += forcingX3 * deltaT * 0.5; // Z - } - - real vx2; - real vy2; - real vz2; - vx2 = vvx * vvx; - vy2 = vvy * vvy; - vz2 = vvz * vvz; - /////////////////////////////////////////////////////////////////////////////////////////// - real oMdrho; - - - oMdrho = mfccc + mfaaa; - m0 = mfaca + mfcac; - m1 = mfacc + mfcaa; - m2 = mfaac + mfcca; - oMdrho += m0; - m1 += m2; - oMdrho += m1; - m0 = mfbac + mfbca; - m1 = mfbaa + mfbcc; - m0 += m1; - m1 = mfabc + mfcba; - m2 = mfaba + mfcbc; - m1 += m2; - m0 += m1; - m1 = mfacb + mfcab; - m2 = mfaab + mfccb; - m1 += m2; - m0 += m1; - oMdrho += m0; - m0 = mfabb + mfcbb; - m1 = mfbab + mfbcb; - m2 = mfbba + mfbbc; - m0 += m1 + m2; - m0 += mfbbb; //hat gefehlt - oMdrho = (rhoRef - (oMdrho + m0))/rhoRef;// 12.03.21 check derivation!!!! - - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimit = 0.01; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += 1. * oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = 1.; //omega2 or bulk viscosity - // LBMReal OxyyPxzz = 1.;//-s9;//2+s9;// - // LBMReal OxyyMxzz = 1.;//2+s9;// - real O4 = 1.; - real O5 = 1.; - real O6 = 1.; - - - - /////fourth order parameters; here only for test. Move out of loop! - - real OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0))); - real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM); - // LBMReal Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0)); - real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - //FIXME: warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::d00M' ) - real BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - - - //Cum 4. - //LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015 - //LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015 - //LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015 - - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab); - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); - - real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - - //Cum 5. - real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho; - real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho; - real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho; - - //Cum 6. - real 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 - real mxxPyyPzz = mfcaa + mfaca + mfaac; - mxxPyyPzz-=mfaaa;//12.03.21 shifted by mfaaa - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - //applying phase field gradients first part: - // mxxPyyPzz += c2o3 * rhoToPhi * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz); - // 17.03.2021 attempt for statililization by assymptotically vanishing bias - //LBMReal correctionScaling = - // rhoToPhi / rho; // +0.5;// (vx2 + vy2 + vz2) * 100;// +0.5;//(vx2 + vy2 + vz2)*1000; - //mxxPyyPzz += (1.0 / 6.0) * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * - // correctionScaling; // As in Hesam's code - //mxxMyy += c1o3 * (dX1_phi * vvx - dX2_phi * vvy) * correctionScaling; - //mxxMzz += c1o3 * (dX1_phi * vvx - dX3_phi * vvz) * correctionScaling; - //mfabb += c1o6 * (dX2_phi * vvz + dX3_phi * vvy) * correctionScaling; - //mfbab += c1o6 * (dX1_phi * vvz + dX3_phi * vvx) * correctionScaling; - //mfbba += c1o6 * (dX1_phi * vvy + dX2_phi * vvx) * correctionScaling; - - real dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz); - real dyuy = dxux + collFactorM * c3o2 * mxxMyy; - real dzuz = dxux + collFactorM * c3o2 * mxxMzz; - - real Dxy = -c3o1 * collFactorM * mfbba; - real Dxz = -c3o1 * collFactorM * mfbab; - real Dyz = -c3o1 * collFactorM * mfabb; - - - //relax - mxxPyyPzz += OxxPyyPzz * (/*mfaaa*/ - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vz2 * dzuz); - - mfabb += collFactorM * (-mfabb); - mfbab += collFactorM * (-mfbab); - mfbba += collFactorM * (-mfbba); - - //applying phase field gradients second part: - //mxxPyyPzz += c2o3 * rhoToPhi * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz); - //mxxPyyPzz += (1.0 / 6.0) * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * - // correctionScaling; // As in Hesam's code - //mxxMyy += c1o3 * (dX1_phi * vvx - dX2_phi * vvy) * correctionScaling; - //mxxMzz += c1o3 * (dX1_phi * vvx - dX3_phi * vvz) * correctionScaling; - //mfabb += c1o6 * (dX2_phi * vvz + dX3_phi * vvy) * correctionScaling; - //mfbab += c1o6 * (dX1_phi * vvz + dX3_phi * vvx) * correctionScaling; - //mfbba += c1o6 * (dX1_phi * vvy + dX2_phi * vvx) * correctionScaling; - - ////updated pressure - //mfaaa += (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling; - - mxxPyyPzz += mfaaa; // 12.03.21 shifted by mfaaa - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - wadjust = OxyyMxzz + (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); - CUMacc = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc); - CUMcac = -O4 * (c1o1 / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac); - CUMcca = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca); - CUMbbc = -O4 * (c1o1 / collFactorM - c1o2) * Dxy * c1o3 * BB + (c1o1 - O4) * (CUMbbc); - CUMbcb = -O4 * (c1o1 / collFactorM - c1o2) * Dxz * c1o3 * BB + (c1o1 - O4) * (CUMbcb); - CUMcbb = -O4 * (c1o1 / collFactorM - c1o2) * Dyz * c1o3 * BB + (c1o1 - O4) * (CUMcbb); - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - //back cumulants to central moments - //4. - //mfcbb = CUMcbb + ((mfcaa + c1o3 * 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 - c1o1) * oMdrho; - mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho; - mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * 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 * (vvz - c1o2) + (mfaaa + 1. * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - 2. * mfaab * vvz + mfaaa * (1. - vz2) - 1. * oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + 1. * oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - 2. * mfabb * vvz + mfaba * (1. - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - 2. * mfacb * vvz + mfaca * (1. - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - 2. * mfbab * vvz + mfbaa * (1. - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - 2. * mfbbb * vvz + mfbba * (1. - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - 2. * mfbcb * vvz + mfbca * (1. - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - 2. * mfcab * vvz + mfcaa * (1. - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - 2. * mfcbb * vvz + mfcba * (1. - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - 2. * mfccb * vvz + mfcca * (1. - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - 2. * mfaba * vvy + mfaaa * (1. - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - 2. * mfabb * vvy + mfaab * (1. - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - 2. * mfabc * vvy + mfaac * (1. - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - 2. * mfbba * vvy + mfbaa * (1. - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - 2. * mfbbb * vvy + mfbab * (1. - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - 2. * mfbbc * vvy + mfbac * (1. - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - 2. * mfcba * vvy + mfcaa * (1. - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - 2. * mfcbb * vvy + mfcab * (1. - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - 2. * mfcbc * vvy + mfcac * (1. - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - 2. * mfbaa * vvx + mfaaa * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - 2. * mfbba * vvx + mfaba * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - 2. * mfbca * vvx + mfaca * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - 2. * mfbab * vvx + mfaab * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - 2. * mfbbb * vvx + mfabb * (1. - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - 2. * mfbcb * vvx + mfacb * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - 2. * mfbac * vvx + mfaac * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - 2. * mfbbc * vvx + mfabc * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - 2. * mfbcc * vvx + mfacc * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - - /////classical source term 8.4.2021 - - mfcbb += 3.0 * (0.5 * forcingTerm[dP00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; - mfbcb += 3.0 * (0.5 * forcingTerm[d0P0]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; - mfbbc += 3.0 * (0.5 * forcingTerm[d00P]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; - mfccb += 3.0 * (0.5 * forcingTerm[dPP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; - mfacb += 3.0 * (0.5 * forcingTerm[dMP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NW ]; - mfcbc += 3.0 * (0.5 * forcingTerm[dP0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TE ]; - mfabc += 3.0 * (0.5 * forcingTerm[dM0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TW ]; - mfbcc += 3.0 * (0.5 * forcingTerm[d0PP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TN ]; - mfbac += 3.0 * (0.5 * forcingTerm[d0MP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TS ]; - mfccc += 3.0 * (0.5 * forcingTerm[dPPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNE]; - mfacc += 3.0 * (0.5 * forcingTerm[dMPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNW]; - mfcac += 3.0 * (0.5 * forcingTerm[dPMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSE]; - mfaac += 3.0 * (0.5 * forcingTerm[dMMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSW]; - mfabb += 3.0 * (0.5 * forcingTerm[dM00]) / rho; //-(3.0*p1 - rho)*WEIGTH[W ]; - mfbab += 3.0 * (0.5 * forcingTerm[d0M0]) / rho; //-(3.0*p1 - rho)*WEIGTH[S ]; - mfbba += 3.0 * (0.5 * forcingTerm[d00M]) / rho; //-(3.0*p1 - rho)*WEIGTH[B ]; - mfaab += 3.0 * (0.5 * forcingTerm[dMM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SW ]; - mfcab += 3.0 * (0.5 * forcingTerm[dPM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SE ]; - mfaba += 3.0 * (0.5 * forcingTerm[dM0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BW ]; - mfcba += 3.0 * (0.5 * forcingTerm[dP0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BE ]; - mfbaa += 3.0 * (0.5 * forcingTerm[d0MM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BS ]; - mfbca += 3.0 * (0.5 * forcingTerm[d0PM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BN ]; - mfaaa += 3.0 * (0.5 * forcingTerm[dMMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSW]; - mfcaa += 3.0 * (0.5 * forcingTerm[dPMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSE]; - mfaca += 3.0 * (0.5 * forcingTerm[dMPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNW]; - mfcca += 3.0 * (0.5 * forcingTerm[dPPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNE]; - mfbbb += 3.0 * (0.5 * forcingTerm[d000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST] - - - - ////////////////////////////////////////////////////////////////////////// - //proof correctness - ////////////////////////////////////////////////////////////////////////// -//#ifdef PROOF_CORRECTNESS -// LBMReal rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) -// + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) -// + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; -// //LBMReal dif = fabs(drho - rho_post); -// LBMReal dif = drho + (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling - rho_post; -//#ifdef SINGLEPRECISION -// if (dif > 10.0E-7 || dif < -10.0E-7) -//#else -// if (dif > 10.0E-15 || dif < -10.0E-15) -//#endif -// { -// UB_THROW(UbException(UB_EXARGS, "drho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(rho_post) -// + " dif=" + UbSystem::toString(dif) -// + " drho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3))); -// //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): drho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3)); -// //exit(EXIT_FAILURE); -// } -//#endif - ////////////////////////////////////////////////////////////////////////// - //write distribution - ////////////////////////////////////////////////////////////////////////// - (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb * rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab * rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba * rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab * rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab * rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba * rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba * rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa * rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca * rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa * rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa * rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca * rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca * rho * c1o3; - - (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb * rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb * rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc * rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb * rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb * rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc * rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc * rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc * rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac * rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc * rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc * rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac * rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac * rho * c1o3; - - (*this->zeroDistributionsF)(x1, x2, x3) = mfbbb * rho * c1o3; - ////////////////////////////////////////////////////////////////////////// - - ////!Incompressible Kernal - - -// ///////Old Kernel \|/ -// // 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 ux2 = ux * ux; -// LBMReal uy2 = uy * uy; -// LBMReal uz2 = uz * uz; -// -// //----------- Calculating Forcing Terms * ------------- -// 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 fac1 = (gamma - WEIGTH[dir]) * c1o3 * rhoToPhi; -// -// 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)); -// 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)); -// -// //-------------------------------------------------------- -// -// mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[dP00]) / 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; -// -// -// 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) * mfabb + 2. * mfbba * mfbab); -// LBMReal CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); -// LBMReal CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); -// -// LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + -// c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho); -// LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + -// c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho); -// LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + -// c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho); -// -// // Cum 5. -// LBMReal CUMbcc = mfbcc - -// (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + -// 2. * (mfbab * mfacb + mfbba * mfabc)) - -// c1o3 * (mfbca + mfbac) * oMdrho; -// LBMReal CUMcbc = mfcbc - -// (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + -// 2. * (mfabb * mfcab + mfbba * mfbac)) - -// c1o3 * (mfcba + mfabc) * oMdrho; -// LBMReal CUMccb = mfccb - -// (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + -// 2. * (mfbab * mfbca + mfabb * mfcba)) - -// c1o3 * (mfacb + mfcab) * oMdrho; -// -// // Cum 6. -// LBMReal CUMccc = -// mfccc + -// ((-4. * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - -// 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - -// 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) + -// (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) + -// 2. * (mfcaa * mfaca * mfaac) + 16. * mfbba * mfbab * mfabb) - -// c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho - -// c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - -// c1o27 * oMdrho * oMdrho * (-2. * oMdrho) + -// (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) + -// (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * -// c2o3 * oMdrho) + -// c1o27 * oMdrho; -// -// // 2. -// // linear combinations -// LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac; -// LBMReal mxxMyy = mfcaa - mfaca; -// LBMReal mxxMzz = mfcaa - mfaac; -// -// LBMReal dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); -// LBMReal dyuy = dxux + collFactorM * c3o2 * mxxMyy; -// LBMReal dzuz = dxux + collFactorM * c3o2 * mxxMzz; -// -// (*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) * mfabb + 2. * mfbba * mfbab); -// mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); -// mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); -// -// mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + -// c1o9 * (oMdrho - 1) * oMdrho; -// mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + -// c1o9 * (oMdrho - 1) * oMdrho; -// mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + -// c1o9 * (oMdrho - 1) * oMdrho; -// -// // 5. -// mfbcc = CUMbcc + -// (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + -// 2. * (mfbab * mfacb + mfbba * mfabc)) + -// c1o3 * (mfbca + mfbac) * oMdrho; -// mfcbc = CUMcbc + -// (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + -// 2. * (mfabb * mfcab + mfbba * mfbac)) + -// c1o3 * (mfcba + mfabc) * oMdrho; -// mfccb = CUMccb + -// (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + -// 2. * (mfbab * mfbca + mfabb * mfcba)) + -// c1o3 * (mfacb + mfcab) * oMdrho; -// -// // 6. -// mfccc = CUMccc - -// ((-4. * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - -// 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) - -// 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) + -// (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) + -// 2. * (mfcaa * mfaca * mfaac) + 16. * mfbba * mfbab * mfabb) - -// c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho - -// c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - -// c1o27 * oMdrho * oMdrho * (-2. * oMdrho) + -// (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) + -// (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * -// c2o3 * oMdrho) - -// c1o27 * oMdrho; -// -// //////////////////////////////////////////////////////////////////////////////////// -// // 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 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))); -// } -//#endif -// -// mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[dP00]; -// 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; -// !Old Kernel - ///////////////////// P H A S E - F I E L D S O L V E R - //////////////////////////////////////////// - /////CUMULANT PHASE-FIELD - real omegaD =1.0/( 3.0 * mob + 0.5); - { - mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3); - - - //////////////////////////////////////////////////////////////////////////////////// - //! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // fluid component - //LBMReal drhoFluid = - // ((((fccc + faaa) + (faca + fcac)) + ((facc + fcaa) + (faac + fcca))) + - // (((fbac + fbca) + (fbaa + fbcc)) + ((fabc + fcba) + (faba + fcbc)) + ((facb + fcab) + (faab + fccb))) + - // ((fabb + fcbb) + (fbab + fbcb) + (fbba + fbbc))) + fbbb; - - //LBMReal rhoFluid = c1 + drhoFluid; - //LBMReal OOrhoFluid = c1 / rhoFluid; - - - //LBMReal vvx = - // ((((fccc - faaa) + (fcac - faca)) + ((fcaa - facc) + (fcca - faac))) + - // (((fcba - fabc) + (fcbc - faba)) + ((fcab - facb) + (fccb - faab))) + - // (fcbb - fabb)) * OOrhoFluid; - //LBMReal vvy = - // ((((fccc - faaa) + (faca - fcac)) + ((facc - fcaa) + (fcca - faac))) + - // (((fbca - fbac) + (fbcc - fbaa)) + ((facb - fcab) + (fccb - faab))) + - // (fbcb - fbab)) * OOrhoFluid; - //LBMReal vvz = - // ((((fccc - faaa) + (fcac - faca)) + ((facc - fcaa) + (faac - fcca))) + - // (((fbac - fbca) + (fbcc - fbaa)) + ((fabc - fcba) + (fcbc - faba))) + - // (fbbc - fbba)) * OOrhoFluid; - - // LBMReal vvx = ux; - // LBMReal vvy = uy; - // LBMReal vvz = uz; - //////////////////////////////////////////////////////////////////////////////////// - // second component - real concentration = - ((((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; - //////////////////////////////////////////////////////////////////////////////////// - //! - Add half of the acceleration (body force) to the velocity as in Eq. (42) \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - // LBMReal fx = forces[0]; - // LBMReal fy = forces[1]; - // LBMReal fz = -concentration * forces[2]; - // vvx += fx * c1o2; - // vvy += fy * c1o2; - // vvz += fz * c1o2; - //////////////////////////////////////////////////////////////////////////////////// - real oneMinusRho = c1o1 - concentration; - - real cx = - ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)); - real cy = - ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)); - real cz = - ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)); - - //////////////////////////////////////////////////////////////////////////////////// - // calculate the square of velocities for this lattice node - real cx2 = cx * cx; - real cy2 = cy * cy; - real cz2 = cz * cz; - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (6)-(14) in \ref - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho); - forwardChimera(mfaab, mfabb, mfacb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho); - forwardChimera(mfbab, mfbbb, mfbcb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho); - forwardChimera(mfcab, mfcbb, mfccb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho); - forwardChimera(mfaba, mfbba, mfcba, cx, cx2); - forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho); - forwardChimera(mfaab, mfbab, mfcab, cx, cx2); - forwardChimera(mfabb, mfbbb, mfcbb, cx, cx2); - forwardChimera(mfacb, mfbcb, mfccb, cx, cx2); - forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho); - forwardChimera(mfabc, mfbbc, mfcbc, cx, cx2); - forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c3o1, c1o9, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - //! - experimental Cumulant ... to be published ... hopefully - //! - - // linearized orthogonalization of 3rd order central moments - real Mabc = mfabc - mfaba * c1o3; - real Mbca = mfbca - mfbaa * c1o3; - real Macb = mfacb - mfaab * c1o3; - real Mcba = mfcba - mfaba * c1o3; - real Mcab = mfcab - mfaab * c1o3; - real Mbac = mfbac - mfbaa * c1o3; - // linearized orthogonalization of 5th order central moments - real Mcbc = mfcbc - mfaba * c1o9; - real Mbcc = mfbcc - mfbaa * c1o9; - real Mccb = mfccb - mfaab * c1o9; - - // collision of 1st order moments - // LBMReal ccx, ccy, ccz; - - - cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + - normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; - cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + - normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; - cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + - normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; - - //mhx = (ux * phi[REST] + normX1 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhx; - //mhy = (uy * phi[REST] + normX2 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhy; - //mhz = (uz * phi[REST] + normX3 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhz; - - - cx2 = cx * cx; - cy2 = cy * cy; - cz2 = cz * cz; - - // equilibration of 2nd order moments - mfbba = c0o1; - mfbab = c0o1; - mfabb = c0o1; - - mfcaa = c1o3 * concentration; - mfaca = c1o3 * concentration; - mfaac = c1o3 * concentration; - - - //LBMReal omega2 = 1.0f;// omegaD; - //mfbba *= (c1 - omega2); - //mfbab *= (c1 - omega2); - //mfabb *= (c1 - omega2); - - //mfcaa = mfcaa*(c1 - omega2) + omega2*c1o3 * concentration; - //mfaca = mfaca*(c1 - omega2) + omega2*c1o3 * concentration; - //mfaac = mfaac*(c1 - omega2) + omega2*c1o3 * concentration; - - // equilibration of 3rd order moments - Mabc = c0o1; - Mbca = c0o1; - Macb = c0o1; - Mcba = c0o1; - Mcab = c0o1; - Mbac = c0o1; - mfbbb = c0o1; - - // from linearized orthogonalization 3rd order central moments to central moments - mfabc = Mabc + mfaba * c1o3; - mfbca = Mbca + mfbaa * c1o3; - mfacb = Macb + mfaab * c1o3; - mfcba = Mcba + mfaba * c1o3; - mfcab = Mcab + mfaab * c1o3; - mfbac = Mbac + mfbaa * c1o3; - - // equilibration of 4th order moments - mfacc = c1o9 * concentration; - mfcac = c1o9 * concentration; - mfcca = c1o9 * concentration; - - mfcbb = c0o1; - mfbcb = c0o1; - mfbbc = c0o1; - - // equilibration of 5th order moments - Mcbc = c0o1; - Mbcc = c0o1; - Mccb = c0o1; - - // from linearized orthogonalization 5th order central moments to central moments - mfcbc = Mcbc + mfaba * c1o9; - mfbcc = Mbcc + mfbaa * c1o9; - mfccb = Mccb + mfaab * c1o9; - - // equilibration of 6th order moment - mfccc = c1o27 * concentration; - - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (88)-(96) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho); - backwardChimera(mfaba, mfbba, mfcba, cx, cx2); - backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho); - backwardChimera(mfaab, mfbab, mfcab, cx, cx2); - backwardChimera(mfabb, mfbbb, mfcbb, cx, cx2); - backwardChimera(mfacb, mfbcb, mfccb, cx, cx2); - backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho); - backwardChimera(mfabc, mfbbc, mfcbc, cx, cx2); - backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c9o1, c1o9, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho); - backwardChimera(mfaab, mfabb, mfacb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho); - backwardChimera(mfbab, mfbbb, mfbcb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho); - backwardChimera(mfcab, mfcbb, mfccb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho); - - - - (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3) = mfabb; - (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3) = mfbab; - (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3) = mfbba; - (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3) = mfaab; - (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab; - (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3) = mfaba; - (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba; - (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa; - (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca; - (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa; - (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa; - (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca; - (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca; - - (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3 ) = mfcbb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3 ) = mfbcb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3 ) = mfccb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3 ) = mfacb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac; - - (*this->zeroDistributionsH1)(x1,x2,x3) = mfbbb; - } - - ////Phasefield 2: - - { - - normX1 *= -1; - normX2 *= -1; - normX3 *= -1; - - mfcbb = (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3); - mfbcb = (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3); - mfbbc = (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3); - mfccb = (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3); - mfacb = (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3); - mfcbc = (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3); - mfabc = (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3); - mfbcc = (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3); - mfbac = (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3); - mfccc = (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3); - mfacc = (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3); - mfcac = (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3); - mfaac = (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3); - mfabb = (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3); - mfbab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3); - mfbba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p); - mfaab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3); - mfcab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3); - mfaba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p); - mfcba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p); - mfbaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p); - mfbca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p); - mfaaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p); - mfcaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p); - mfaca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p); - mfcca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p); - mfbbb = (*this->zeroDistributionsH2)(x1, x2, x3); - - - //////////////////////////////////////////////////////////////////////////////////// -//! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref -//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> -//! -//////////////////////////////////////////////////////////////////////////////////// -// fluid component - //LBMReal drhoFluid = - // ((((fccc + faaa) + (faca + fcac)) + ((facc + fcaa) + (faac + fcca))) + - // (((fbac + fbca) + (fbaa + fbcc)) + ((fabc + fcba) + (faba + fcbc)) + ((facb + fcab) + (faab + fccb))) + - // ((fabb + fcbb) + (fbab + fbcb) + (fbba + fbbc))) + fbbb; - - //LBMReal rhoFluid = c1 + drhoFluid; - //LBMReal OOrhoFluid = c1 / rhoFluid; - - - //LBMReal vvx = - // ((((fccc - faaa) + (fcac - faca)) + ((fcaa - facc) + (fcca - faac))) + - // (((fcba - fabc) + (fcbc - faba)) + ((fcab - facb) + (fccb - faab))) + - // (fcbb - fabb)) * OOrhoFluid; - //LBMReal vvy = - // ((((fccc - faaa) + (faca - fcac)) + ((facc - fcaa) + (fcca - faac))) + - // (((fbca - fbac) + (fbcc - fbaa)) + ((facb - fcab) + (fccb - faab))) + - // (fbcb - fbab)) * OOrhoFluid; - //LBMReal vvz = - // ((((fccc - faaa) + (fcac - faca)) + ((facc - fcaa) + (faac - fcca))) + - // (((fbac - fbca) + (fbcc - fbaa)) + ((fabc - fcba) + (fcbc - faba))) + - // (fbbc - fbba)) * OOrhoFluid; - - // LBMReal vvx = ux; - // LBMReal vvy = uy; - // LBMReal vvz = uz; - //////////////////////////////////////////////////////////////////////////////////// - // second component - real concentration = - ((((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; - //////////////////////////////////////////////////////////////////////////////////// - //! - Add half of the acceleration (body force) to the velocity as in Eq. (42) \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - // LBMReal fx = forces[0]; - // LBMReal fy = forces[1]; - // LBMReal fz = -concentration * forces[2]; - // vvx += fx * c1o2; - // vvy += fy * c1o2; - // vvz += fz * c1o2; - //////////////////////////////////////////////////////////////////////////////////// - real oneMinusRho = c1o1 - concentration; - - real cx = - ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)); - real cy = - ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)); - real cz = - ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)); - - //////////////////////////////////////////////////////////////////////////////////// - // calculate the square of velocities for this lattice node - real cx2 = cx * cx; - real cy2 = cy * cy; - real cz2 = cz * cz; - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (6)-(14) in \ref - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho); - forwardChimera(mfaab, mfabb, mfacb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho); - forwardChimera(mfbab, mfbbb, mfbcb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho); - forwardChimera(mfcab, mfcbb, mfccb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho); - forwardChimera(mfaba, mfbba, mfcba, cx, cx2); - forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho); - forwardChimera(mfaab, mfbab, mfcab, cx, cx2); - forwardChimera(mfabb, mfbbb, mfcbb, cx, cx2); - forwardChimera(mfacb, mfbcb, mfccb, cx, cx2); - forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho); - forwardChimera(mfabc, mfbbc, mfcbc, cx, cx2); - forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c3o1, c1o9, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - //! - experimental Cumulant ... to be published ... hopefully - //! - - // linearized orthogonalization of 3rd order central moments - real Mabc = mfabc - mfaba * c1o3; - real Mbca = mfbca - mfbaa * c1o3; - real Macb = mfacb - mfaab * c1o3; - real Mcba = mfcba - mfaba * c1o3; - real Mcab = mfcab - mfaab * c1o3; - real Mbac = mfbac - mfbaa * c1o3; - // linearized orthogonalization of 5th order central moments - real Mcbc = mfcbc - mfaba * c1o9; - real Mbcc = mfbcc - mfbaa * c1o9; - real Mccb = mfccb - mfaab * c1o9; - - // collision of 1st order moments - cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + - normX1 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale; - cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + - normX2 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale; - cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + - normX3 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale; - - //mhx = (ux * phi[REST] + normX1 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhx; - //mhy = (uy * phi[REST] + normX2 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhy; -//mhz = (uz * phi[REST] + normX3 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhz; - - - cx2 = cx * cx; - cy2 = cy * cy; - cz2 = cz * cz; - - // equilibration of 2nd order moments - mfbba = c0o1; - mfbab = c0o1; - mfabb = c0o1; - - mfcaa = c1o3 * concentration; - mfaca = c1o3 * concentration; - mfaac = c1o3 * concentration; - - - //LBMReal omega2 = 1.0f;// omegaD; - //mfbba *= (c1 - omega2); - //mfbab *= (c1 - omega2); - //mfabb *= (c1 - omega2); - - //mfcaa = mfcaa*(c1 - omega2) + omega2*c1o3 * concentration; - //mfaca = mfaca*(c1 - omega2) + omega2*c1o3 * concentration; - //mfaac = mfaac*(c1 - omega2) + omega2*c1o3 * concentration; - - // equilibration of 3rd order moments - Mabc = c0o1; - Mbca = c0o1; - Macb = c0o1; - Mcba = c0o1; - Mcab = c0o1; - Mbac = c0o1; - mfbbb = c0o1; - - // from linearized orthogonalization 3rd order central moments to central moments - mfabc = Mabc + mfaba * c1o3; - mfbca = Mbca + mfbaa * c1o3; - mfacb = Macb + mfaab * c1o3; - mfcba = Mcba + mfaba * c1o3; - mfcab = Mcab + mfaab * c1o3; - mfbac = Mbac + mfbaa * c1o3; - - // equilibration of 4th order moments - mfacc = c1o9 * concentration; - mfcac = c1o9 * concentration; - mfcca = c1o9 * concentration; - - mfcbb = c0o1; - mfbcb = c0o1; - mfbbc = c0o1; - - // equilibration of 5th order moments - Mcbc = c0o1; - Mbcc = c0o1; - Mccb = c0o1; - - // from linearized orthogonalization 5th order central moments to central moments - mfcbc = Mcbc + mfaba * c1o9; - mfbcc = Mbcc + mfbaa * c1o9; - mfccb = Mccb + mfaab * c1o9; - - // equilibration of 6th order moment - mfccc = c1o27 * concentration; - - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (88)-(96) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho); - backwardChimera(mfaba, mfbba, mfcba, cx, cx2); - backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho); - backwardChimera(mfaab, mfbab, mfcab, cx, cx2); - backwardChimera(mfabb, mfbbb, mfcbb, cx, cx2); - backwardChimera(mfacb, mfbcb, mfccb, cx, cx2); - backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho); - backwardChimera(mfabc, mfbbc, mfcbc, cx, cx2); - backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c9o1, c1o9, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho); - backwardChimera(mfaab, mfabb, mfacb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho); - backwardChimera(mfbab, mfbbb, mfbcb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho); - backwardChimera(mfcab, mfcbb, mfccb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho); - - - - (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3) = mfabb; - (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3) = mfbab; - (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3) = mfbba; - (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3) = mfaab; - (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab; - (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3) = mfaba; - (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba; - (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa; - (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca; - (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa; - (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa; - (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca; - (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca; - - (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac; - - (*this->zeroDistributionsH2)(x1, x2, x3) = mfbbb; - - } - - - - /////!CUMULANT PHASE-FIELD - - - - ///////////////////// PHASE-FIELD BGK SOLVER /////////////////////////////// - - //h[dP00] = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); - //h[N] = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3); - //h[T] = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3); - //h[NE] = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3); - //h[NW] = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3); - //h[TE] = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3); - //h[TW] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3); - //h[TN] = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3); - //h[TS] = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3); - //h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3); - //h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3); - //h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3); - //h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3); - - //h[W] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3); - //h[S] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3); - //h[B] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p); - //h[SW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3); - //h[SE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3); - //h[BW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p); - //h[BE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p); - //h[BS] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p); - //h[BN] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p); - //h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p); - //h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p); - //h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p); - //h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p); - - //h[REST] = (*this->zeroDistributionsH)(x1, x2, x3); - - //for (int dir = STARTF; dir < (ENDF + 1); dir++) { - // LBMReal velProd = DX1[dir] * ux + DX2[dir] * uy + DX3[dir] * uz; - // LBMReal velSq1 = velProd * velProd; - // LBMReal hEq; //, gEq; - - // if (dir != REST) { - // LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]]) / 2.0; - // LBMReal hSource = (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST]) * (dirGrad_phi) / denom; - // hEq = phi[REST] * WEIGTH[dir] * (1.0 + 3.0 * velProd + 4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2)) + hSource * WEIGTH[dir]; - - // // This corresponds with the collision factor of 1.0 which equals (tauH + 0.5). - // h[dir] = h[dir] - (h[dir] - hEq) / (tauH); - - // } else { - // hEq = phi[REST] * WEIGTH[REST] * (1.0 - 1.5 * (ux2 + uy2 + uz2)); - // h[REST] = h[REST] - (h[REST] - hEq) / (tauH); - // } - //} - - //(*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3) = h[D3Q27System::INV_E]; - //(*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3) = h[D3Q27System::INV_N]; - //(*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3) = h[D3Q27System::INV_T]; - //(*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3) = h[D3Q27System::INV_NE]; - //(*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3) = h[D3Q27System::INV_NW]; - //(*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3) = h[D3Q27System::INV_TE]; - //(*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3) = h[D3Q27System::INV_TW]; - //(*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3) = h[D3Q27System::INV_TN]; - //(*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3) = h[D3Q27System::INV_TS]; - //(*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3) = h[D3Q27System::INV_TNE]; - //(*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3) = h[D3Q27System::INV_TNW]; - //(*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3) = h[D3Q27System::INV_TSE]; - //(*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = h[D3Q27System::INV_TSW]; - - //(*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3) = h[D3Q27System::INV_W]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3) = h[D3Q27System::INV_S]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p) = h[D3Q27System::INV_B]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3) = h[D3Q27System::INV_SW]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3) = h[D3Q27System::INV_SE]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p) = h[D3Q27System::INV_BW]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p) = h[D3Q27System::INV_BE]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p) = h[D3Q27System::INV_BS]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p) = h[D3Q27System::INV_BN]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = h[D3Q27System::INV_BSW]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p) = h[D3Q27System::INV_BSE]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p) = h[D3Q27System::INV_BNW]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p) = h[D3Q27System::INV_BNE]; - - //(*this->zeroDistributionsH)(x1, x2, x3) = h[D3Q27System::REST]; - - ///////////////////// END OF OLD BGK SOLVER /////////////////////////////// - } - } - } - - // dataSet->setPhaseField(divU); - } -} -////////////////////////////////////////////////////////////////////////// - -real MultiphaseTwoPhaseFieldsCumulantLBMKernel::gradX1_phi() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP]))) - + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) + - +WEIGTH[d0P0] * (phi[dP00] - phi[dM00])); - //LBMReal sum = 0.0; - //for (int k = FSTARTDIR; k <= FENDDIR; k++) { - // sum += WEIGTH[k] * DX1[k] * phi[k]; - //} - //return 3.0 * sum; -} - -real MultiphaseTwoPhaseFieldsCumulantLBMKernel::gradX2_phi() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM]))) - + WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) + - +WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0])); - //LBMReal sum = 0.0; - //for (int k = FSTARTDIR; k <= FENDDIR; k++) { - // sum += WEIGTH[k] * DX2[k] * phi[k]; - //} - //return 3.0 * sum; -} - -real MultiphaseTwoPhaseFieldsCumulantLBMKernel::gradX3_phi() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP]))) - + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) + - +WEIGTH[d0P0] * (phi[d00P] - phi[d00M])); - //LBMReal sum = 0.0; - //for (int k = FSTARTDIR; k <= FENDDIR; k++) { - // sum += WEIGTH[k] * DX3[k] * phi[k]; - //} - //return 3.0 * sum; -} - -real MultiphaseTwoPhaseFieldsCumulantLBMKernel::gradX1_phi2() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP]))) - + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) + - +WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00])); - //LBMReal sum = 0.0; - //for (int k = FSTARTDIR; k <= FENDDIR; k++) { - // sum += WEIGTH[k] * DX1[k] * phi2[k]; - //} - //return 3.0 * sum; -} - -real MultiphaseTwoPhaseFieldsCumulantLBMKernel::gradX2_phi2() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM]))) - + WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) + - +WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0])); - //LBMReal sum = 0.0; - //for (int k = FSTARTDIR; k <= FENDDIR; k++) { - // sum += WEIGTH[k] * DX2[k] * phi2[k]; - //} - //return 3.0 * sum; -} - -real MultiphaseTwoPhaseFieldsCumulantLBMKernel::gradX3_phi2() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP]))) - + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) + - +WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M])); - //LBMReal sum = 0.0; - //for (int k = FSTARTDIR; k <= FENDDIR; k++) { - // sum += WEIGTH[k] * DX3[k] * phi2[k]; - //} - //return 3.0 * sum; -} - - - - - -real MultiphaseTwoPhaseFieldsCumulantLBMKernel::nabla2_phi() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - real sum = 0.0; - sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000]))) - + (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000])))); - sum += WEIGTH[d0PP] * ( - (((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000]))) - + (((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000]))) - + (((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000]))) - ); - sum += WEIGTH[d00P] * ( - ((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000])) - + ((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000])) - + ((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000])) - ); - //for (int k = FSTARTDIR; k <= FENDDIR; k++) { - // sum += WEIGTH[k] * (phi[k] - phi[REST]); - //} - return 6.0 * sum; -} - -void MultiphaseTwoPhaseFieldsCumulantLBMKernel::computePhasefield() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - SPtr<DistributionArray3D> distributionsH = dataSet->getHdistributions(); - - 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[dP00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - h[d0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - h[d00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - h[dPP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - h[dMP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - h[dP0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - h[dM0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - h[d0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - h[d0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - - h[dM00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - h[d0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - h[d00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - h[dMM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - h[dPM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - h[dM0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - h[dP0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - h[d0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - h[d0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - - h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3); - } - } - } - } -} - -void MultiphaseTwoPhaseFieldsCumulantLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, - int x3) -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - phi[d000] = (*ph)(x1, x2, x3); - - - 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 { - phi[k] = 0.0; - } - } -} - -void MultiphaseTwoPhaseFieldsCumulantLBMKernel::findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, - int x3) -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - phi2[d000] = (*ph)(x1, x2, x3); - - - for (int k = FSTARTDIR; k <= FENDDIR; k++) { - - if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) { - phi2[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]); - } - else { - phi2[k] = 0.0; - } - } -} - -void MultiphaseTwoPhaseFieldsCumulantLBMKernel::swapDistributions() -{ - LBMKernel::swapDistributions(); - dataSet->getHdistributions()->swap(); - dataSet->getH2distributions()->swap(); -} \ No newline at end of file diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsCumulantLBMKernel.h b/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsCumulantLBMKernel.h deleted file mode 100644 index 34730f454faf81a126eb1431fb623f0447f52fa1..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsCumulantLBMKernel.h +++ /dev/null @@ -1,114 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseTwoPhaseFieldsCumulantLBMKernel.h -//! \ingroup LBMKernel -//! \author Hesameddin Safari -//======================================================================================= - -#ifndef MultiphaseTwoPhaseFieldsCumulantLBMKernel_H -#define MultiphaseTwoPhaseFieldsCumulantLBMKernel_H - -#include "LBMKernel.h" -#include "BCSet.h" -#include "D3Q27System.h" -#include "basics/utilities/UbTiming.h" -#include "basics/container/CbArray4D.h" -#include "basics/container/CbArray3D.h" - -//! \brief 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 MultiphaseTwoPhaseFieldsCumulantLBMKernel : public LBMKernel -{ -public: - MultiphaseTwoPhaseFieldsCumulantLBMKernel(); - virtual ~MultiphaseTwoPhaseFieldsCumulantLBMKernel(void) = default; - void calculate(int step) override; - SPtr<LBMKernel> clone() override; - void forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho); - void backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho); - void forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2); - void backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2); - - real getCalculationTime() override { return .0; } -protected: - virtual void initDataSet(); - void swapDistributions() override; - real f1[D3Q27System::ENDF+1]; - - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF; - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF; - CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr zeroDistributionsF; - - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH1; - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH1; - CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr zeroDistributionsH1; - - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH2; - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH2; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributionsH2; - - //CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr phaseField; - - real h [D3Q27System::ENDF+1]; - real h2[D3Q27System::ENDF + 1]; - real g [D3Q27System::ENDF+1]; - real phi[D3Q27System::ENDF+1]; - real phi2[D3Q27System::ENDF + 1]; - real pr1[D3Q27System::ENDF+1]; - real phi_cutoff[D3Q27System::ENDF+1]; - - real gradX1_phi(); - real gradX2_phi(); - real gradX3_phi(); - real gradX1_phi2(); - real gradX2_phi2(); - real gradX3_phi2(); - //LBMReal gradX1_pr1(); - //LBMReal gradX2_pr1(); - //LBMReal gradX3_pr1(); - //LBMReal dirgradC_phi(int n, int k); - void computePhasefield(); - void findNeighbors(CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, int x1, int x2, int x3); - void findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, 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*/); - - real nabla2_phi(); - - - mu::value_type muX1,muX2,muX3; - mu::value_type muDeltaT; - mu::value_type muNu; - real forcingX1; - real forcingX2; - real forcingX3; -}; - -#endif diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.cpp deleted file mode 100644 index df28e16d1a717418aa0474ad4e74c7e85878bdf6..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.cpp +++ /dev/null @@ -1,3609 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.cpp -//! \ingroup LBMKernel -//! \author Hesameddin Safari -//======================================================================================= - -#include "MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.h" -#include "BCArray3D.h" -#include "Block3D.h" -#include "D3Q27EsoTwist3DSplittedVector.h" -#include "D3Q27System.h" -#include "DataSet3D.h" -#include "LBMKernel.h" -#include <cmath> -//#include "UbMath.h" - -#define PROOF_CORRECTNESS - -////////////////////////////////////////////////////////////////////////// -MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::MultiphaseTwoPhaseFieldsPressureFilterLBMKernel() { this->compressible = false; } -////////////////////////////////////////////////////////////////////////// -void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::initDataSet() -{ - SPtr<DistributionArray3D> f(new D3Q27EsoTwist3DSplittedVector( nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9)); - SPtr<DistributionArray3D> h(new D3Q27EsoTwist3DSplittedVector( nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9)); // For phase-field - SPtr<DistributionArray3D> h2(new D3Q27EsoTwist3DSplittedVector(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.9)); // For phase-field - //SPtr<PhaseFieldArray3D> divU(new PhaseFieldArray3D( nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - SPtr<PhaseFieldArray3D> divU1(new PhaseFieldArray3D( nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure(new CbArray3D<real, IndexerX3X2X1>( nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - pressureOld = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - dataSet->setFdistributions(f); - dataSet->setHdistributions(h); // For phase-field - dataSet->setH2distributions(h2); // For phase-field - //dataSet->setPhaseField(divU); - dataSet->setPhaseField(divU1); - dataSet->setPressureField(pressure); - - phaseField = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.0)); - phaseField2 = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, -999.0)); - divU = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 4, nx[1] + 4, nx[2] + 4, 0.0)); - -} -////////////////////////////////////////////////////////////////////////// -SPtr<LBMKernel> MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::clone() -{ - SPtr<LBMKernel> kernel(new MultiphaseTwoPhaseFieldsPressureFilterLBMKernel()); - kernel->setNX(nx); - dynamicPointerCast<MultiphaseTwoPhaseFieldsPressureFilterLBMKernel>(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->setInterfaceWidth(this->interfaceWidth); - - kernel->setBCSet(bcSet->clone(kernel)); - kernel->setWithForcing(withForcing); - kernel->setForcingX1(muForcingX1); - kernel->setForcingX2(muForcingX2); - kernel->setForcingX3(muForcingX3); - kernel->setIndex(ix1, ix2, ix3); - kernel->setDeltaT(deltaT); - kernel->setGhostLayerWidth(2); - dynamicPointerCast<MultiphaseTwoPhaseFieldsPressureFilterLBMKernel>(kernel)->initForcing(); - - return kernel; -} -////////////////////////////////////////////////////////////////////////// - void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) { -// using namespace UbMath; - using namespace vf::basics::constant; - - real m2 = mfa + mfc; - real m1 = mfc - mfa; - real m0 = m2 + mfb; - mfa = m0; - m0 *= Kinverse; - m0 += oneMinusRho; - mfb = (m1 * Kinverse - m0 * vv) * K; - mfc = ((m2 - c2o1 * m1 * vv) * Kinverse + v2 * m0) * K; -} - -//////////////////////////////////////////////////////////////////////////////// - void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) { -// using namespace UbMath; - using namespace vf::basics::constant; - - real m0 = (((mfc - mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 - vv) * c1o2) * K; - real m1 = (((mfa - mfc) - c2o1 * mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (-v2)) * K; - mfc = (((mfc + mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 + vv) * c1o2) * K; - mfa = m0; - mfb = m1; -} - - -//////////////////////////////////////////////////////////////////////////////// - void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) { -// using namespace UbMath; - using namespace vf::basics::constant; - - real m1 = (mfa + mfc) + mfb; - real m2 = mfc - mfa; - mfc = (mfc + mfa) + (v2 * m1 - c2o1 * vv * m2); - mfb = m2 - vv * m1; - mfa = m1; -} - - - void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) { -// using namespace UbMath; - using namespace vf::basics::constant; - - real ma = (mfc + mfa * (v2 - vv)) * c1o2 + mfb * (vv - c1o2); - real mb = ((mfa - mfc) - mfa * v2) - c2o1 * mfb * vv; - mfc = (mfc + mfa * (v2 + vv)) * c1o2 + mfb * (vv + c1o2); - mfb = mb; - mfa = ma; -} - - -void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step) -{ - using namespace D3Q27System; - // using namespace UbMath; - using namespace vf::lbm::dir; - using namespace vf::basics::constant; - - forcingX1 = 0.0; - forcingX2 = 0.0; - forcingX3 = 0.0; - - real oneOverInterfaceScale = c4o1 / interfaceWidth; //1.0;//1.5; - ///////////////////////////////////// - - localDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); - nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); - zeroDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); - - localDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions(); - nonLocalDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions(); - zeroDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions(); - - localDistributionsH2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getLocalDistributions(); - nonLocalDistributionsH2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getNonLocalDistributions(); - zeroDistributionsH2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getZeroDistributions(); - - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure = dataSet->getPressureField(); - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - const int bcArrayMaxX1 = (int)bcArray->getNX1(); - const int bcArrayMaxX2 = (int)bcArray->getNX2(); - const int bcArrayMaxX3 = (int)bcArray->getNX3(); - - int minX1 = ghostLayerWidth; - int minX2 = ghostLayerWidth; - int minX3 = ghostLayerWidth; - int maxX1 = bcArrayMaxX1 - ghostLayerWidth; - int maxX2 = bcArrayMaxX2 - ghostLayerWidth; - int maxX3 = bcArrayMaxX3 - ghostLayerWidth; - - - - //TODO - //very expensive !!!!! - //CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField( - // new CbArray3D<LBMReal, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0)); - // CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr phaseField2( - // new CbArray3D<LBMReal, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0)); - // CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr divU( - // new CbArray3D<LBMReal, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, 0.0)); - -//#pragma omp parallel for - for (int x3 = minX3-ghostLayerWidth; x3 < maxX3+ghostLayerWidth; x3++) { - for (int x2 = minX2-ghostLayerWidth; x2 < maxX2+ghostLayerWidth; x2++) { - for (int x1 = minX1-ghostLayerWidth; x1 < maxX1+ghostLayerWidth; x1++) { - if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { - int x1p = x1 + 1; - int x2p = x2 + 1; - int x3p = x3 + 1; - - real mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - real mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - - real mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3); - (*phaseField)(x1, x2, x3) = (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca) + (mfcaa + mfacc)) ) + - (((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) + - ((mfbaa + mfbac) + (mfbca + mfbcc))) + ((mfabb + mfcbb) + - (mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb; - - mfcbb = (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3); - mfbcb = (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3); - mfbbc = (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3); - mfccb = (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3); - mfacb = (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3); - mfcbc = (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3); - mfabc = (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3); - mfbcc = (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3); - mfbac = (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3); - mfccc = (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3); - mfacc = (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3); - mfcac = (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3); - mfaac = (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3); - mfabb = (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3); - mfbab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3); - mfbba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p); - mfaab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3); - mfcab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3); - mfaba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p); - mfcba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p); - mfbaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p); - mfbca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p); - mfaaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p); - mfcaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p); - mfaca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p); - mfcca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p); - - mfbbb = (*this->zeroDistributionsH2)(x1, x2, x3); - (*phaseField2)(x1, x2, x3) = - (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca) + (mfcaa + mfacc))) + - (((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) + - ((mfbaa + mfbac) + (mfbca + mfbcc))) + - ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb; - //(*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; - -////// read F-distributions for velocity formalism - - - 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); - - real rhoH = 1.0; - real rhoL = 1.0 / densityRatio; - - real rhoToPhi = (rhoH - rhoL) / (phiH - phiL); - - real drho = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) - + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) - + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - - real rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) - phiH); - //! variable density -> TRANSFER! - //LBMReal rho = rhoH * ((*phaseField)(x1, x2, x3)) + rhoL * ((*phaseField2)(x1, x2, x3)); - - (*pressureOld)(x1, x2, x3) = (*pressure)(x1, x2, x3) + rho * c1o3 * drho; - - //(*pressure)(x1, x2, x3) = (((*phaseField)(x1, x2, x3)) + ((*phaseField2)(x1, x2, x3)) - c1) * c1o3; - ////!!!!!! relplace by pointer swap! - //(*pressureOld)(x1, x2, x3) = (*pressure)(x1, x2, x3); - } - } - } - } - - real collFactorM; - //LBMReal forcingTerm[D3Q27System::ENDF + 1]; - - ////filter - - //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)) { - - // LBMReal sum = 0.; - - // //Lapalce pressure - // //sum += WEIGTH[TNE] * (((((*pressure)(x1+1, x2+1, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2-1, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2+1, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2-1, x3+1) - (*pressure)(x1, x2, x3)))) - // // + ((((*pressure)(x1+1, x2-1, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2+1, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2-1, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2+1, x3+1) - (*pressure)(x1, x2, x3))))); - // //sum += WEIGTH[TN] * ( - // // ((((*pressure)(x1+1, x2+1, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2-1, x3) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2-1, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2+1, x3) - (*pressure)(x1, x2, x3)))) - // // + ((((*pressure)(x1+1, x2, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2, x3+1) - (*pressure)(x1, x2, x3)))) - // // + ((((*pressure)(x1, x2+1, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2-1, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1, x2+1, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2-1, x3+1) - (*pressure)(x1, x2, x3)))) - // // ); - // //sum += WEIGTH[T] * ( - // // (((*pressure)(x1+1, x2, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2, x3) - (*pressure)(x1, x2, x3))) - // // + (((*pressure)(x1, x2+1, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2-1, x3) - (*pressure)(x1, x2, x3))) - // // + (((*pressure)(x1, x2, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2, x3-1) - (*pressure)(x1, x2, x3))) - // // ); - - - // //LBMReal pressureFilter = 100; - // //(*pressureOld)(x1, x2, x3) = (*pressure)(x1, x2, x3) + pressureFilter * sum * (sqrt(fabs(sum))); - - // //Situpol Eq. 81 - // sum += WEIGTH[TNE] * (((((*pressure)(x1+1, x2+1, x3+1)) + ((*pressure)(x1-1, x2-1, x3-1) )) + (((*pressure)(x1+1, x2+1, x3-1) ) + ((*pressure)(x1-1, x2-1, x3+1) ))) - // + ((((*pressure)(x1+1, x2-1, x3+1) ) + ((*pressure)(x1-1, x2+1, x3-1) )) + (((*pressure)(x1+1, x2-1, x3-1) ) + ((*pressure)(x1-1, x2+1, x3+1) )))); - // sum += WEIGTH[TN] * ( - // ((((*pressure)(x1+1, x2+1, x3) ) + ((*pressure)(x1-1, x2-1, x3) )) + (((*pressure)(x1+1, x2-1, x3) ) + ((*pressure)(x1-1, x2+1, x3) ))) - // + ((((*pressure)(x1+1, x2, x3+1) ) + ((*pressure)(x1-1, x2, x3-1) )) + (((*pressure)(x1+1, x2, x3-1) ) + ((*pressure)(x1-1, x2, x3+1) ))) - // + ((((*pressure)(x1, x2+1, x3+1) ) + ((*pressure)(x1, x2-1, x3-1) )) + (((*pressure)(x1, x2+1, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2-1, x3+1) ))) - // ); - // sum += WEIGTH[T] * ( - // (((*pressure)(x1+1, x2, x3) ) + ((*pressure)(x1-1, x2, x3) )) - // + (((*pressure)(x1, x2+1, x3) ) + ((*pressure)(x1, x2-1, x3) )) - // + (((*pressure)(x1, x2, x3+1)) + ((*pressure)(x1, x2, x3-1) )) - // ); - // sum += WEIGTH[REST] * (*pressure)(x1, x2, x3); - // (*pressureOld)(x1, x2, x3) = sum; - - - - - // } - // } - // } - //} - - ////Periodic Filter -//#pragma omp parallel for - for (int x3 = minX3-1; x3 <= maxX3; x3++) { - for (int x2 = minX2-1; x2 <= maxX2; x2++) { - for (int x1 = minX1-1; x1 <= maxX1; x1++) { - if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { - - real sum = 0.; - - - - //Lapalce pressure - //sum += WEIGTH[TNE] * (((((*pressure)(x1+1, x2+1, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2-1, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2+1, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2-1, x3+1) - (*pressure)(x1, x2, x3)))) - // + ((((*pressure)(x1+1, x2-1, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2+1, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2-1, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2+1, x3+1) - (*pressure)(x1, x2, x3))))); - //sum += WEIGTH[TN] * ( - // ((((*pressure)(x1+1, x2+1, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2-1, x3) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2-1, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2+1, x3) - (*pressure)(x1, x2, x3)))) - // + ((((*pressure)(x1+1, x2, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2, x3+1) - (*pressure)(x1, x2, x3)))) - // + ((((*pressure)(x1, x2+1, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2-1, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1, x2+1, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2-1, x3+1) - (*pressure)(x1, x2, x3)))) - // ); - //sum += WEIGTH[T] * ( - // (((*pressure)(x1+1, x2, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2, x3) - (*pressure)(x1, x2, x3))) - // + (((*pressure)(x1, x2+1, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2-1, x3) - (*pressure)(x1, x2, x3))) - // + (((*pressure)(x1, x2, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2, x3-1) - (*pressure)(x1, x2, x3))) - // ); - - - //LBMReal pressureFilter = 100; - //(*pressureOld)(x1, x2, x3) = (*pressure)(x1, x2, x3) + pressureFilter * sum * (sqrt(fabs(sum))); - - //Situpol Eq. 81 - - //int x1p = (x1 < maxX1) ? x1 + 1 : 0; - //int x1m = (x1 > 0) ? x1 - 1 : maxX1; - //int x2p = (x2 < maxX2) ? x2 + 1 : 0; - //int x2m = (x2 > 0) ? x2 - 1 : maxX2; - //int x3p = (x3 < maxX3) ? x3 + 1 : 0; - //int x3m = (x3 > 0) ? x3 - 1 : maxX3; - //sum += WEIGTH[TNE] * (((((*pressure)(x1p, x2p, x3p)) + ((*pressure)(x1m, x2m, x3m))) + (((*pressure)(x1p, x2p, x3m)) + ((*pressure)(x1m, x2m, x3p)))) - // + ((((*pressure)(x1p, x2m, x3p)) + ((*pressure)(x1m, x2p, x3m))) + (((*pressure)(x1p, x2m, x3m)) + ((*pressure)(x1m, x2p, x3p))))); - //sum += WEIGTH[TN] * ( - // ((((*pressure)(x1p, x2p, x3)) + ((*pressure)(x1m, x2m, x3))) + (((*pressure)(x1p, x2m, x3)) + ((*pressure)(x1m, x2p, x3)))) - // + ((((*pressure)(x1p, x2, x3p)) + ((*pressure)(x1m, x2, x3m))) + (((*pressure)(x1p, x2, x3m)) + ((*pressure)(x1m, x2, x3p)))) - // + ((((*pressure)(x1, x2p, x3p)) + ((*pressure)(x1, x2m, x3m))) + (((*pressure)(x1, x2p, x3m) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2m, x3p)))) - // ); - //sum += WEIGTH[T] * ( - // (((*pressure)(x1p, x2, x3)) + ((*pressure)(x1m, x2, x3))) - // + (((*pressure)(x1, x2p, x3)) + ((*pressure)(x1, x2m, x3))) - // + (((*pressure)(x1, x2, x3p)) + ((*pressure)(x1, x2, x3m))) - // ); - //sum += WEIGTH[REST] * (*pressure)(x1, x2, x3); - //(*pressureOld)(x1, x2, x3) = sum; - - ///Version for boundaries - for (int xx = -1; xx <= 1; xx++) { - //int xxx = (xx+x1 <= maxX1) ? ((xx + x1 > 0) ? xx + x1 : maxX1) : 0; - int xxx = xx + x1; - - for (int yy = -1; yy <= 1; yy++) { - //int yyy = (yy+x2 <= maxX2) ?( (yy + x2 > 0) ? yy + x2 : maxX2) : 0; - int yyy = yy + x2; - - for (int zz = -1; zz <= 1; zz++) { - //int zzz = (zz+x3 <= maxX3) ? zzz = ((zz + x3 > 0) ? zz + x3 : maxX3 ): 0; - int zzz = zz + x3; - - if (!bcArray->isSolid(xxx, yyy, zzz) && !bcArray->isUndefined(xxx, yyy, zzz)) { - sum+= 64.0/(216.0*(c1o1+c3o1*abs(xx))* (c1o1 + c3o1 * abs(yy))* (c1o1 + c3o1 * abs(zz)))*(*pressureOld)(xxx, yyy, zzz); - } - else{ sum+= 64.0 / (216.0 * (c1o1 + c3o1 * abs(xx)) * (c1o1 + c3o1 * abs(yy)) * (c1o1 + c3o1 * abs(zz))) * (*pressureOld)(x1, x2, x3); - } - - - } - } - } - (*pressure)(x1, x2, x3) = sum; - - - - } - } - } - } - -//#pragma omp parallel for - // for (int x3 = minX3-1; x3 <= maxX3; x3++) { - // for (int x2 = minX2-1; x2 <= maxX2; x2++) { - // for (int x1 = minX1-1; x1 <= maxX1; x1++) { - // if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { - // ///filter! - - // (*pressure)(x1, x2, x3) = (*pressureOld)(x1, x2, x3); - // } - // } - // } - // } - ////!filter - - -//#pragma omp parallel for - for (int x3 = minX3; x3 < maxX3; x3++) { - for (int x2 = minX2; x2 < maxX2; x2++) { - for (int x1 = minX1; x1 < maxX1; x1++) { - if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { - int x1p = x1 + 1; - int x2p = x2 + 1; - int x3p = x3 + 1; - - - - ////////////////////////////////////////////////////////////////////////// - // Read 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 - - findNeighbors(phaseField, x1, x2, x3); - findNeighbors2(phaseField2, x1, x2, x3); - - real mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3); - real mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p); - - real mfbbb = (*this->zeroDistributionsF)(x1, x2, x3); - - real rhoH = 1.0; - real rhoL = 1.0 / densityRatio; - - real rhoToPhi = (rhoH - rhoL) / (phiH - phiL); - - real dX1_phi = gradX1_phi(); - real dX2_phi = gradX2_phi(); - real dX3_phi = gradX3_phi(); - - //LBMReal dX1_phi2 = gradX1_phi2(); - //LBMReal dX2_phi2 = gradX2_phi2(); - //LBMReal dX3_phi2 = gradX3_phi2(); - - - // LBMReal denom2 = sqrt(dX1_phi * dX1_phi+ dX1_phi2 * dX1_phi2 + dX2_phi * dX2_phi + dX2_phi2 * dX2_phi2 + dX3_phi * dX3_phi+ dX3_phi2 * dX3_phi2) + 1e-9; - // LBMReal normX1 = (dX1_phi-dX1_phi2)/denom2; - //LBMReal normX2 = (dX2_phi-dX2_phi2)/denom2; - //LBMReal normX3 = (dX3_phi-dX3_phi2)/denom2; - - real denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi) + 1e-9; - real normX1 = dX1_phi / denom; - real normX2 = dX2_phi / denom; - real normX3 = dX3_phi / denom; - - - - collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL); - - - real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi(); - - //----------- Calculating Macroscopic Values ------------- - real rho = rhoH + rhoToPhi * (phi[d000] - phiH); - - //! variable density -> TRANSFER! - //LBMReal rho = rhoH * ((*phaseField)(x1, x2, x3)) + rhoL * ((*phaseField2)(x1, x2, x3)); - - - ////Incompressible Kernal - - //mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) ;// / rho * c3; - //mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) ;// / rho * c3; - //mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) ;// / rho * c3; - //mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) ;// / rho * c3; - //mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) ;// / rho * c3; - //mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) ;// / rho * c3; - //mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) ;// / rho * c3; - //mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) ;// / rho * c3; - //mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) ;// / rho * c3; - //mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) ;// / rho * c3; - //mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) ;// / rho * c3; - //mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) ;// / rho * c3; - //mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) ;// / rho * c3; - //mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) ;// / rho * c3; - //mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) ;// / rho * c3; - //mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) ;// / rho * c3; - //mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) ;// / rho * c3; - //mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) ;// / rho * c3; - //mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) ;// / rho * c3; - //mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) ;// / rho * c3; - //mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) ;// / rho * c3; - //mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) ;// / rho * c3; - //mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) ;// / rho * c3; - //mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) ;// / rho * c3; - //mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) ;// / rho * c3; - //mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) ;// / rho * c3; - - //mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);// / rho * c3; - - - real m0, m1, m2; - real rhoRef=c1o1; - - //LBMReal - // LBMReal drho = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) - // + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) - // + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb))/rhoRef; - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab))/rhoRef; - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba))/rhoRef; - - // (*pressure)(x1, x2, x3) = (*pressureOld)(x1, x2, x3)+rho*c1o3*drho; - - //LBMReal gradPx = c1o2 * ((*pressure)(x1 + 1, x2, x3) - (*pressure)(x1 - 1, x2, x3)); - //LBMReal gradPy = c1o2 * ((*pressure)(x1, x2 + 1, x3) - (*pressure)(x1, x2 - 1, x3)); - //LBMReal gradPz = c1o2 * ((*pressure)(x1, x2, x3 + 1) - (*pressure)(x1, x2, x3 - 1)); - - //LBMReal gradPx = 3.0 * (WEIGTH[TNE] * ( - // (((*pressure)(x1 + 1, x2 + 1, x3 + 1) - (*pressure)(x1 - 1, x2 - 1, x3 - 1)) + ((*pressure)(x1 + 1, x2 - 1, x3 + 1) - (*pressure)(x1 - 1, x2 + 1, x3 - 1))) - // + (((*pressure)(x1 + 1, x2 - 1, x3 - 1) - (*pressure)(x1 - 1, x2 + 1, x3 + 1)) + ((*pressure)(x1 + 1, x2 + 1, x3 - 1) - (*pressure)(x1 - 1, x2 - 1, x3 + 1)))) - // + WEIGTH[NE] * ( - // (((*pressure)(x1 + 1, x2 + 1, x3) - (*pressure)(x1 - 1, x2 - 1, x3)) + ((*pressure)(x1 + 1, x2 - 1, x3) - (*pressure)(x1 - 1, x2 + 1, x3))) - // + (((*pressure)(x1 + 1, x2, x3 - 1) - (*pressure)(x1 - 1, x2, x3 + 1)) + ((*pressure)(x1 + 1, x2, x3 + 1) - (*pressure)(x1 - 1, x2, x3 - 1)))) - // + WEIGTH[dP00] * ((*pressure)(x1 + 1, x2, x3) - (*pressure)(x1 - 1, x2, x3))); - - //LBMReal gradPy = 3.0 * (WEIGTH[TNE] * ( - // (((*pressure)(x1 + 1, x2 + 1, x3 + 1) - (*pressure)(x1 - 1, x2 - 1, x3 - 1)) + ((*pressure)(x1 - 1, x2 + 1, x3 + 1) - (*pressure)(x1 + 1, x2 - 1, x3 - 1))) - // + (((*pressure)(x1 - 1, x2 + 1, x3 - 1) - (*pressure)(x1 + 1, x2 - 1, x3 + 1)) + ((*pressure)(x1 + 1, x2 + 1, x3 - 1) - (*pressure)(x1 - 1, x2 - 1, x3 + 1)))) - // + WEIGTH[NE] * ( - // (((*pressure)(x1 + 1, x2 + 1, x3) - (*pressure)(x1 - 1, x2 - 1, x3)) + ((*pressure)(x1 - 1, x2 + 1, x3) - (*pressure)(x1 + 1, x2 - 1, x3))) - // + (((*pressure)(x1, x2+1, x3 - 1) - (*pressure)(x1, x2-1, x3 + 1)) + ((*pressure)(x1, x2+1, x3 + 1) - (*pressure)(x1, x2-1, x3 - 1)))) - // + WEIGTH[dP00] * ((*pressure)(x1, x2+1, x3) - (*pressure)(x1, x2-1, x3))); - - //LBMReal gradPz = 3.0 * (WEIGTH[TNE] * ( - // (((*pressure)(x1 + 1, x2 + 1, x3 + 1) - (*pressure)(x1 - 1, x2 - 1, x3 - 1)) + ((*pressure)(x1 - 1, x2 + 1, x3 + 1) - (*pressure)(x1 + 1, x2 - 1, x3 - 1))) - // + (((*pressure)(x1 - 1, x2 - 1, x3 + 1) - (*pressure)(x1 + 1, x2 + 1, x3 - 1)) + ((*pressure)(x1 + 1, x2 - 1, x3 + 1) - (*pressure)(x1 - 1, x2 + 1, x3 - 1)))) - // + WEIGTH[NE] * ( - // (((*pressure)(x1 + 1, x2, x3+1) - (*pressure)(x1 - 1, x2, x3-1)) + ((*pressure)(x1 - 1, x2, x3+1) - (*pressure)(x1 + 1, x2, x3-1))) - // + (((*pressure)(x1, x2 - 1, x3 + 1) - (*pressure)(x1, x2 + 1, x3 - 1)) + ((*pressure)(x1, x2 + 1, x3 + 1) - (*pressure)(x1, x2 - 1, x3 - 1)))) - // + WEIGTH[dP00] * ((*pressure)(x1, x2, x3+1) - (*pressure)(x1, x2, x3-1))); - - - real gradPx = 0.0; - real gradPy = 0.0; - real gradPz = 0.0; - for (int dir1 = -1; dir1 <= 1; dir1++) { - for (int dir2 = -1; dir2 <= 1; dir2++) { - int yyy = x2 + dir1; - int zzz = x3 + dir2; - if (!bcArray->isSolid(x1-1, yyy, zzz) && !bcArray->isUndefined(x1-1, yyy, zzz)) { - gradPx -= (*pressure)(x1 - 1, yyy, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - else { - gradPx -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - if (!bcArray->isSolid(x1 + 1, yyy, zzz) && !bcArray->isUndefined(x1 + 1, yyy, zzz)) { - gradPx += (*pressure)(x1 + 1, yyy, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - else { - gradPx += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - - int xxx = x1 + dir1; - if (!bcArray->isSolid(xxx, x2-1, zzz) && !bcArray->isUndefined(xxx, x2-1, zzz)) { - gradPy -= (*pressure)(xxx, x2-1, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - else { - gradPy -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - if (!bcArray->isSolid(xxx, x2+1, zzz) && !bcArray->isUndefined(xxx, x2+1, zzz)) { - gradPy += (*pressure)(xxx, x2+1, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - else { - gradPy += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - - yyy = x2 + dir2; - if (!bcArray->isSolid(xxx, yyy, x3-1) && !bcArray->isUndefined(xxx, yyy, x3-1)) { - gradPz -= (*pressure)(xxx, yyy, x3-1) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - else { - gradPz -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - if (!bcArray->isSolid(xxx, yyy, x3+1) && !bcArray->isUndefined(xxx, yyy, x3+1)) { - gradPz += (*pressure)(xxx, yyy, x3+1) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - else { - gradPz += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - - } - } - - //Viscosity increase by pressure gradient - real errPhi = (((1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale)- denom); - //LBMReal limVis = 0.0000001*10;//0.01; - // collFactorM =collFactorM/(c1+limVis*(errPhi*errPhi)*collFactorM); - // collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM; - errPhi = errPhi * errPhi* errPhi * errPhi * errPhi * errPhi; - //collFactorM = collFactorM + (1.8 - collFactorM) * errPhi / (errPhi + limVis); - - //3.0 * ((WEIGTH[TNE] * (((phi2[TNE] - phi2[BSW]) - (phi2[BSE] - phi2[TNW])) + ((phi2[TSE] - phi2[BNW]) - (phi2[BNE] - phi2[TSW]))) - //+WEIGTH[NE] * (((phi2[TE] - phi2[BW]) - (phi2[BE] - phi2[TW])) + ((phi2[TS] - phi2[BN]) + (phi2[TN] - phi2[BS])))) + - //+WEIGTH[N] * (phi2[T] - phi2[B])); - - //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()+c1o3*drho*dX1_phi*rhoToPhi/rho;//-gradPx/rho; - // forcingX2 = muForcingX2.Eval() + c1o3*drho*dX2_phi * rhoToPhi / rho;//-gradPy/rho; - //forcingX3 = muForcingX3.Eval() + c1o3*drho*dX3_phi * rhoToPhi / rho;//-gradPz/rho; - - - muRho = rho; - - //muForcingX1.DefineConst("rho", rho); - //muForcingX2.DefineConst("rho", rho); - //muForcingX3.DefineConst("rho", rho); - - - forcingX1 = muForcingX1.Eval()/rho - gradPx/rho; - forcingX2 = muForcingX2.Eval()/rho - gradPy/rho; - forcingX3 = muForcingX3.Eval()/rho - gradPz/rho; - - //LBMReal rho_m = 1.0 / densityRatio; - //forcingX1 = forcingX1 * (rho - rho_m); - //forcingX2 = forcingX2 * (rho - rho_m); - //forcingX3 = forcingX3 * (rho - rho_m); - vvx += forcingX1 * deltaT * 0.5; // X - vvy += forcingX2 * deltaT * 0.5; // Y - vvz += forcingX3 * deltaT * 0.5; // Z - - //} - - - ///surface tension force - vvx += mu * dX1_phi * c1o2 / rho; - vvy += mu * dX2_phi * c1o2 / rho ; - vvz += mu * dX3_phi * c1o2 / rho; - - //////classic source term - ///----Classic source term 8.4.2021 - - //LBMReal vvxF, vvyF, vvzF; - //vvxF = vvx;//-2*c1o24 * lap_vx;// - //vvyF = vvy;//-2*c1o24 * lap_vy;// - //vvzF = vvz;//-2*c1o24 * lap_vz;// - -// vvxF = 1.2* vvx- 0.2*0.5 * ((*velocityX)(x1 - 1, x2, x3) + (*velocityX)(x1 + 1, x2, x3)); -// vvyF = 1.2 *vvy- 0.2*0.5* ((*velocityY)(x1 , x2-1, x3) + (*velocityY)(x1 , x2+1, x3)); -// vvzF = 1.2 *vvz-0.2*0.5* ((*velocityZ)(x1 , x2, x3-1) + (*velocityZ)(x1 , x2, x3+1)); - //if (vvxF != vvx) { - // vvxF = vvxF; - //} - //LBMReal weightGrad = 1.0;// -denom * denom / (denom * denom + 0.0001 * 0.001); - //LBMReal dX1_phiF = dX1_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[REST]) * (phi[REST]) * normX1; - //LBMReal dX2_phiF = dX2_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[REST]) * (phi[REST]) * normX2; - //LBMReal dX3_phiF = dX3_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[REST]) * (phi[REST]) * normX3; - - //dX1_phiF *= 1.2; - //dX2_phiF *= 1.2; - //dX3_phiF *= 1.2; - - //LBMReal gradFD = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi); - //LBMReal gradPhi = (1.0 - phi[REST]) * (phi[REST]); - //gradPhi = (gradPhi > gradFD) ? gradPhi : gradFD; - //dX1_phiF = gradPhi * normX1; - // dX2_phiF = gradPhi * normX2; - // dX3_phiF = gradPhi * normX3; - - //LBMReal ux2; - //LBMReal uy2; - //LBMReal uz2; - //ux2 = vvxF * vvxF; - //uy2 = vvyF * vvyF; - //uz2 = vvzF * vvzF; - //LBMReal forcingTerm[D3Q27System::ENDF + 1]; - //for (int dir = STARTF; dir <= (FENDDIR); dir++) { - // LBMReal velProd = DX1[dir] * vvxF + DX2[dir] * vvyF + DX3[dir] * vvzF; - // LBMReal velSq1 = velProd * velProd; - // LBMReal gamma = WEIGTH[dir] * (1.0 + 3 * velProd + (4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2))); - - // //LBMReal fac1 = (gamma - WEIGTH[dir]) * c1o3 * rhoToPhi; - - // //forcingTerm[dir] = - // // (-vvxF) * (fac1 * dX1_phiF) + - // // (-vvyF) * (fac1 * dX2_phiF) + - // // (-vvzF) * (fac1 * dX3_phiF) + - // // (DX1[dir]) * (fac1 * dX1_phiF) + - // // (DX2[dir]) * (fac1 * dX2_phiF) + - // // (DX3[dir]) * (fac1 * dX3_phiF); - - - // //LBMReal fac1 = (gamma - WEIGTH[dir]) * c1o3 ; - - // //forcingTerm[dir] = - // // (-vvxF) * (fac1 * (dX1_phiF * rhoH + dX2_phi2 * rhoL)) + - // // (-vvyF) * (fac1 * (dX2_phiF * rhoH + dX2_phi2 * rhoL)) + - // // (-vvzF) * (fac1 * (dX3_phiF * rhoH + dX3_phi2 * rhoL)) + - // // (DX1[dir]) * (fac1 * (dX1_phiF * rhoH + dX2_phi2 * rhoL)) + - // // (DX2[dir]) * (fac1 * (dX2_phiF * rhoH + dX2_phi2 * rhoL)) + - // // (DX3[dir]) * (fac1 * (dX3_phiF * rhoH + dX3_phi2 * rhoL)); - - - - //} - - //LBMReal gamma = WEIGTH[REST] * (1.0 - 1.5 * (ux2 + uy2 + uz2)); - //LBMReal fac1 = (gamma - WEIGTH[REST]) * c1o3 * rhoToPhi; - //forcingTerm[REST] = (-vvxF) * (fac1 * (dX1_phiF * rhoH + dX2_phi2 * rhoL)) + - // (-vvyF) * (fac1 * (dX2_phiF * rhoH + dX2_phi2 * rhoL)) + - // (-vvzF) * (fac1 * (dX3_phiF * rhoH + dX3_phi2 * rhoL)); - - //////// - // LBMReal divAfterSource= - //( mfcbb + 3.0 * (0.5 * forcingTerm[dP00]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF) *(vvyF) +(vvzF) *(vvzF)-1)+ - //( mfbcb + 3.0 * (0.5 * forcingTerm[N]) / rho ) *((vvxF) *(vvxF) +(vvyF-1)*(vvyF-1)+(vvzF) *(vvzF)-1)+ - //( mfbbc + 3.0 * (0.5 * forcingTerm[T]) / rho ) *((vvxF) *(vvxF) +(vvyF) *(vvyF) +(vvzF-1)*(vvzF-1)-1)+ - //( mfccb + 3.0 * (0.5 * forcingTerm[NE]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF) *(vvzF)-1)+ - //( mfacb + 3.0 * (0.5 * forcingTerm[NW]) / rho ) *((vvxF+1)*(vvxF+1)+(vvyF-1)*(vvyF-1)+(vvzF) *(vvzF)-1)+ - //( mfcbc + 3.0 * (0.5 * forcingTerm[TE]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF) *(vvyF) +(vvzF-1)*(vvzF-1)-1)+ - //( mfabc + 3.0 * (0.5 * forcingTerm[TW]) / rho ) *((vvxF+1)*(vvxF+1)+(vvyF) *(vvyF) +(vvzF-1)*(vvzF-1)-1)+ - //( mfbcc + 3.0 * (0.5 * forcingTerm[TN]) / rho ) *((vvxF) *(vvxF) +(vvyF-1)*(vvyF-1)+(vvzF-1)*(vvzF-1)-1)+ - //( mfbac + 3.0 * (0.5 * forcingTerm[TS]) / rho ) *((vvxF) *(vvxF) +(vvyF+1)*(vvyF+1)+(vvzF-1)*(vvzF-1)-1)+ - //( mfccc + 3.0 * (0.5 * forcingTerm[TNE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF-1)*(vvzF-1)-1)+ - //( mfacc + 3.0 * (0.5 * forcingTerm[TNW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF-1)*(vvyF-1)+(vvzF-1)*(vvzF-1)-1)+ - //( mfcac + 3.0 * (0.5 * forcingTerm[TSE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF+1)*(vvyF+1)+(vvzF-1)*(vvzF-1)-1)+ - //( mfaac + 3.0 * (0.5 * forcingTerm[TSW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF+1)*(vvyF+1)+(vvzF-1)*(vvzF-1)-1)+ - //( mfabb + 3.0 * (0.5 * forcingTerm[W]) / rho ) *((vvxF+1)*(vvxF+1)+(vvyF) *(vvyF) +(vvzF) *(vvzF)-1)+ - //( mfbab + 3.0 * (0.5 * forcingTerm[S]) / rho ) *((vvxF) *(vvxF) +(vvyF+1)*(vvyF+1)+(vvzF) *(vvzF)-1)+ - //( mfbba + 3.0 * (0.5 * forcingTerm[B]) / rho ) *((vvxF) *(vvxF) +(vvyF) *(vvyF) +(vvzF+1)*(vvzF+1)-1)+ - //( mfaab + 3.0 * (0.5 * forcingTerm[SW]) / rho ) *((vvxF+1)*(vvxF+1)+(vvyF+1)*(vvyF+1)+(vvzF) *(vvzF)-1)+ - //( mfcab + 3.0 * (0.5 * forcingTerm[SE]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF+1)*(vvyF+1)+(vvzF) *(vvzF)-1)+ - //( mfaba + 3.0 * (0.5 * forcingTerm[BW]) / rho ) *((vvxF+1)*(vvxF+1)+(vvyF) *(vvyF) +(vvzF+1)*(vvzF+1)-1)+ - //( mfcba + 3.0 * (0.5 * forcingTerm[BE]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF) *(vvyF) +(vvzF+1)*(vvzF+1)-1)+ - //( mfbaa + 3.0 * (0.5 * forcingTerm[BS]) / rho ) *((vvxF) *(vvxF) +(vvyF+1)*(vvyF+1)+(vvzF+1)*(vvzF+1)-1)+ - //( mfbca + 3.0 * (0.5 * forcingTerm[BN]) / rho ) *((vvxF) *(vvxF) +(vvyF-1)*(vvyF-1)+(vvzF+1)*(vvzF+1)-1)+ - //( mfaaa + 3.0 * (0.5 * forcingTerm[BSW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF+1)*(vvyF+1)+(vvzF+1)*(vvzF+1)-1)+ - //( mfcaa + 3.0 * (0.5 * forcingTerm[BSE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF+1)*(vvyF+1)+(vvzF+1)*(vvzF+1)-1)+ - //( mfaca + 3.0 * (0.5 * forcingTerm[BNW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF-1)*(vvyF-1)+(vvzF+1)*(vvzF+1)-1)+ - //( mfcca + 3.0 * (0.5 * forcingTerm[BNE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF+1)*(vvzF+1)-1)+ - //( mfbbb + 3.0 * (0.5 * forcingTerm[REST]) / rho)*((vvxF)*(vvxF)+(vvyF)*(vvyF)+(vvzF)*(vvzF)-1); - - // LBMReal divBeforeSource = - // (mfcbb) * ((vvxF - 1) * (vvxF - 1) + (vvyF) * (vvyF)+(vvzF) * (vvzF)-1) + - // (mfbcb) * ((vvxF) * (vvxF)+(vvyF - 1) * (vvyF - 1) + (vvzF) * (vvzF)-1) + - // (mfbbc) * ((vvxF) * (vvxF)+(vvyF) * (vvyF)+(vvzF - 1) * (vvzF - 1)-1) + - // (mfccb) * ((vvxF - 1) * (vvxF - 1) + (vvyF - 1) * (vvyF - 1) + (vvzF) * (vvzF)-1) + - // (mfacb) * ((vvxF + 1) * (vvxF + 1) + (vvyF - 1) * (vvyF - 1) + (vvzF) * (vvzF)-1) + - // (mfcbc) * ((vvxF - 1) * (vvxF - 1) + (vvyF) * (vvyF)+(vvzF - 1) * (vvzF - 1)-1) + - // (mfabc) * ((vvxF + 1) * (vvxF + 1) + (vvyF) * (vvyF)+(vvzF - 1) * (vvzF - 1)-1) + - // (mfbcc) * ((vvxF) * (vvxF)+(vvyF - 1) * (vvyF - 1) + (vvzF - 1) * (vvzF - 1)-1) + - // (mfbac) * ((vvxF) * (vvxF)+(vvyF + 1) * (vvyF + 1) + (vvzF - 1) * (vvzF - 1)-1) + - // (mfccc) * ((vvxF - 1) * (vvxF - 1) + (vvyF - 1) * (vvyF - 1) + (vvzF - 1) * (vvzF - 1)-1) + - // (mfacc) * ((vvxF + 1) * (vvxF + 1) + (vvyF - 1) * (vvyF - 1) + (vvzF - 1) * (vvzF - 1)-1) + - // (mfcac) * ((vvxF - 1) * (vvxF - 1) + (vvyF + 1) * (vvyF + 1) + (vvzF - 1) * (vvzF - 1)-1) + - // (mfaac) * ((vvxF + 1) * (vvxF + 1) + (vvyF + 1) * (vvyF + 1) + (vvzF - 1) * (vvzF - 1)-1) + - // (mfabb) * ((vvxF + 1) * (vvxF + 1) + (vvyF) * (vvyF)+(vvzF) * (vvzF)-1) + - // (mfbab) * ((vvxF) * (vvxF)+(vvyF + 1) * (vvyF + 1) + (vvzF) * (vvzF)-1) + - // (mfbba) * ((vvxF) * (vvxF)+(vvyF) * (vvyF)+(vvzF + 1) * (vvzF + 1)-1) + - // (mfaab) * ((vvxF + 1) * (vvxF + 1) + (vvyF + 1) * (vvyF + 1) + (vvzF) * (vvzF)-1) + - // (mfcab) * ((vvxF - 1) * (vvxF - 1) + (vvyF + 1) * (vvyF + 1) + (vvzF) * (vvzF)-1) + - // (mfaba) * ((vvxF + 1) * (vvxF + 1) + (vvyF) * (vvyF)+(vvzF + 1) * (vvzF + 1)-1) + - // (mfcba) * ((vvxF - 1) * (vvxF - 1) + (vvyF) * (vvyF)+(vvzF + 1) * (vvzF + 1)-1) + - // (mfbaa) * ((vvxF) * (vvxF)+(vvyF + 1) * (vvyF + 1) + (vvzF + 1) * (vvzF + 1)-1) + - // (mfbca) * ((vvxF) * (vvxF)+(vvyF - 1) * (vvyF - 1) + (vvzF + 1) * (vvzF + 1)-1) + - // (mfaaa) * ((vvxF + 1) * (vvxF + 1) + (vvyF + 1) * (vvyF + 1) + (vvzF + 1) * (vvzF + 1)-1) + - // (mfcaa) * ((vvxF - 1) * (vvxF - 1) + (vvyF + 1) * (vvyF + 1) + (vvzF + 1) * (vvzF + 1)-1) + - // (mfaca) * ((vvxF + 1) * (vvxF + 1) + (vvyF - 1) * (vvyF - 1) + (vvzF + 1) * (vvzF + 1)-1) + - // (mfcca) * ((vvxF - 1) * (vvxF - 1) + (vvyF - 1) * (vvyF - 1) + (vvzF + 1) * (vvzF + 1)-1) + - // (mfbbb) * ((vvxF) * (vvxF)+(vvyF) * (vvyF)+(vvzF) * (vvzF)-1); - //if (divAfterSource - divBeforeSource != 0 && phi[REST]>0.0001 && phi[REST]<0.999) { - // std::cout << phi[REST]<<" "<< divAfterSource << " " << divBeforeSource <<" "<< divAfterSource/ divBeforeSource << std::endl; - //} - - //if (fabs(divAfterSource - divBeforeSource)/(fabs(divAfterSource) + fabs(divBeforeSource)+1e-10) > 1e-5) { - // LBMReal scaleDiv =0.95+(1-0.95)* (divBeforeSource) / (divBeforeSource - divAfterSource); - - // forcingTerm[dP00] *=scaleDiv; - // forcingTerm[N] *=scaleDiv; - // forcingTerm[T] *=scaleDiv; - // forcingTerm[NE] *=scaleDiv; - // forcingTerm[NW] *=scaleDiv; - // forcingTerm[TE] *=scaleDiv; - // forcingTerm[TW] *=scaleDiv; - // forcingTerm[TN] *=scaleDiv; - // forcingTerm[TS] *=scaleDiv; - // forcingTerm[TNE] *=scaleDiv; - // forcingTerm[TNW] *=scaleDiv; - // forcingTerm[TSE] *=scaleDiv; - // forcingTerm[TSW] *=scaleDiv; - // forcingTerm[W] *=scaleDiv; - // forcingTerm[S] *=scaleDiv; - // forcingTerm[B] *=scaleDiv; - // forcingTerm[SW] *=scaleDiv; - // forcingTerm[SE] *=scaleDiv; - // forcingTerm[BW] *=scaleDiv; - // forcingTerm[BE] *=scaleDiv; - // forcingTerm[BS] *=scaleDiv; - // forcingTerm[BN] *=scaleDiv; - // forcingTerm[BSW] *=scaleDiv; - // forcingTerm[BSE] *=scaleDiv; - // forcingTerm[BNW] *=scaleDiv; - // forcingTerm[BNE] *=scaleDiv; - // forcingTerm[REST] *=scaleDiv; - //} - //////// - - - //mfcbb += 3.0 * (0.5 * forcingTerm[dP00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; - //mfbcb += 3.0 * (0.5 * forcingTerm[N]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; - //mfbbc += 3.0 * (0.5 * forcingTerm[T]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; - //mfccb += 3.0 * (0.5 * forcingTerm[NE]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; - //mfacb += 3.0 * (0.5 * forcingTerm[NW]) / rho; //-(3.0*p1 - rho)*WEIGTH[NW ]; - //mfcbc += 3.0 * (0.5 * forcingTerm[TE]) / rho; //-(3.0*p1 - rho)*WEIGTH[TE ]; - //mfabc += 3.0 * (0.5 * forcingTerm[TW]) / rho; //-(3.0*p1 - rho)*WEIGTH[TW ]; - //mfbcc += 3.0 * (0.5 * forcingTerm[TN]) / rho; //-(3.0*p1 - rho)*WEIGTH[TN ]; - //mfbac += 3.0 * (0.5 * forcingTerm[TS]) / rho; //-(3.0*p1 - rho)*WEIGTH[TS ]; - //mfccc += 3.0 * (0.5 * forcingTerm[TNE]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNE]; - //mfacc += 3.0 * (0.5 * forcingTerm[TNW]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNW]; - //mfcac += 3.0 * (0.5 * forcingTerm[TSE]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSE]; - //mfaac += 3.0 * (0.5 * forcingTerm[TSW]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSW]; - //mfabb += 3.0 * (0.5 * forcingTerm[W]) / rho; //-(3.0*p1 - rho)*WEIGTH[W ]; - //mfbab += 3.0 * (0.5 * forcingTerm[S]) / rho; //-(3.0*p1 - rho)*WEIGTH[S ]; - //mfbba += 3.0 * (0.5 * forcingTerm[B]) / rho; //-(3.0*p1 - rho)*WEIGTH[B ]; - //mfaab += 3.0 * (0.5 * forcingTerm[SW]) / rho; //-(3.0*p1 - rho)*WEIGTH[SW ]; - //mfcab += 3.0 * (0.5 * forcingTerm[SE]) / rho; //-(3.0*p1 - rho)*WEIGTH[SE ]; - //mfaba += 3.0 * (0.5 * forcingTerm[BW]) / rho; //-(3.0*p1 - rho)*WEIGTH[BW ]; - //mfcba += 3.0 * (0.5 * forcingTerm[BE]) / rho; //-(3.0*p1 - rho)*WEIGTH[BE ]; - //mfbaa += 3.0 * (0.5 * forcingTerm[BS]) / rho; //-(3.0*p1 - rho)*WEIGTH[BS ]; - //mfbca += 3.0 * (0.5 * forcingTerm[BN]) / rho; //-(3.0*p1 - rho)*WEIGTH[BN ]; - //mfaaa += 3.0 * (0.5 * forcingTerm[BSW]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSW]; - //mfcaa += 3.0 * (0.5 * forcingTerm[BSE]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSE]; - //mfaca += 3.0 * (0.5 * forcingTerm[BNW]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNW]; - //mfcca += 3.0 * (0.5 * forcingTerm[BNE]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNE]; - //mfbbb += 3.0 * (0.5 * forcingTerm[REST]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST] - - //-------------------------------------------------------- - - - - - - //////end classic source term - - - - - //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 - //} - - real vx2; - real vy2; - real vz2; - vx2 = vvx * vvx; - vy2 = vvy * vvy; - vz2 = vvz * vvz; - /////////////////////////////////////////////////////////////////////////////////////////// - real oMdrho; - - - oMdrho = mfccc + mfaaa; - m0 = mfaca + mfcac; - m1 = mfacc + mfcaa; - m2 = mfaac + mfcca; - oMdrho += m0; - m1 += m2; - oMdrho += m1; - m0 = mfbac + mfbca; - m1 = mfbaa + mfbcc; - m0 += m1; - m1 = mfabc + mfcba; - m2 = mfaba + mfcbc; - m1 += m2; - m0 += m1; - m1 = mfacb + mfcab; - m2 = mfaab + mfccb; - m1 += m2; - m0 += m1; - oMdrho += m0; - m0 = mfabb + mfcbb; - m1 = mfbab + mfbcb; - m2 = mfbba + mfbbc; - m0 += m1 + m2; - m0 += mfbbb; //hat gefehlt - oMdrho = (rhoRef - (oMdrho + m0))/rhoRef;// 12.03.21 check derivation!!!! - - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimit = 0.01; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += 1. * oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - - - // mfaaa = 0.0; - real OxxPyyPzz = 1.; //omega2 or bulk viscosity - // LBMReal OxyyPxzz = 1.;//-s9;//2+s9;// - // LBMReal OxyyMxzz = 1.;//2+s9;// - real O4 = 1.; - real O5 = 1.; - real O6 = 1.; - - - - /////fourth order parameters; here only for test. Move out of loop! - - real OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0))); - real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM); - // real Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0)); - real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - //FIXME: warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::d00M' ) - real BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - - - //Cum 4. - //LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015 - //LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015 - //LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015 - - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab); - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); - - real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - - //Cum 5. - real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho; - real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho; - real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho; - - //Cum 6. - real 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; - - ///storing pre collision second moments - // LBMReal mbxx = mfcaa - c1o3 * mfaaa; - // LBMReal mbyy = mfaca - c1o3 * mfaaa; - // LBMReal mbzz = mfaac - c1o3 * mfaaa; - // LBMReal mbxy = mfbba; - // LBMReal mbxz = mfbab; - // LBMReal mbyz = mfabb; - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - - // LBMReal mfaaaS = (mfaaa * (-4 - 3 * OxxPyyPzz * (-1 + rho)) + 6 * mxxPyyPzz * OxxPyyPzz * (-1 + rho)) / (-4 + 3 * OxxPyyPzz * (-1 + rho)); - mxxPyyPzz -= mfaaa ;//12.03.21 shifted by mfaaa - //mxxPyyPzz-=(mfaaa+mfaaaS)*c1o2;//12.03.21 shifted by mfaaa - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - //applying phase field gradients first part: - // mxxPyyPzz += c2o3 * rhoToPhi * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz); - // 17.03.2021 attempt for statililization by assymptotically vanishing bias - //LBMReal correctionScaling = - // rhoToPhi / rho; // +0.5;// (vx2 + vy2 + vz2) * 100;// +0.5;//(vx2 + vy2 + vz2)*1000; - //mxxPyyPzz += (1.0 / 6.0) * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * - // correctionScaling; // As in Hesam's code - //mxxMyy += c1o3 * (dX1_phi * vvx - dX2_phi * vvy) * correctionScaling; - //mxxMzz += c1o3 * (dX1_phi * vvx - dX3_phi * vvz) * correctionScaling; - //mfabb += c1o6 * (dX2_phi * vvz + dX3_phi * vvy) * correctionScaling; - //mfbab += c1o6 * (dX1_phi * vvz + dX3_phi * vvx) * correctionScaling; - //mfbba += c1o6 * (dX1_phi * vvy + dX2_phi * vvx) * correctionScaling; - - real dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz); - real dyuy = dxux + collFactorM * c3o2 * mxxMyy; - real dzuz = dxux + collFactorM * c3o2 * mxxMzz; - - real Dxy = -c3o1 * collFactorM * mfbba; - real Dxz = -c3o1 * collFactorM * mfbab; - real Dyz = -c3o1 * collFactorM * mfabb; - - - //relax - mxxPyyPzz += OxxPyyPzz * (/*mfaaa*/ - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vz2 * dzuz); - - mfabb += collFactorM * (-mfabb); - mfbab += collFactorM * (-mfbab); - mfbba += collFactorM * (-mfbba); - - //applying phase field gradients second part: - //mxxPyyPzz += c2o3 * rhoToPhi * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz); - //mxxPyyPzz += (1.0 / 6.0) * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * - // correctionScaling; // As in Hesam's code - //mxxMyy += c1o3 * (dX1_phi * vvx - dX2_phi * vvy) * correctionScaling; - //mxxMzz += c1o3 * (dX1_phi * vvx - dX3_phi * vvz) * correctionScaling; - //mfabb += c1o6 * (dX2_phi * vvz + dX3_phi * vvy) * correctionScaling; - //mfbab += c1o6 * (dX1_phi * vvz + dX3_phi * vvx) * correctionScaling; - //mfbba += c1o6 * (dX1_phi * vvy + dX2_phi * vvx) * correctionScaling; - - ////updated pressure - //mfaaa += (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling; - mfaaa = 0.0; // Pressure elimination as in standard velocity model - // mfaaa += (rho - c1) * (dxux + dyuy + dzuz); - - mxxPyyPzz += mfaaa; // 12.03.21 shifted by mfaaa - - // mxxPyyPzz += (mfaaa + mfaaaS) * c1o2; - //mfaaa = mfaaaS; - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - wadjust = OxyyMxzz + (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); - CUMacc = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc); - CUMcac = -O4 * (c1o1 / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac); - CUMcca = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca); - CUMbbc = -O4 * (c1o1 / collFactorM - c1o2) * Dxy * c1o3 * BB + (c1o1 - O4) * (CUMbbc); - CUMbcb = -O4 * (c1o1 / collFactorM - c1o2) * Dxz * c1o3 * BB + (c1o1 - O4) * (CUMbcb); - CUMcbb = -O4 * (c1o1 / collFactorM - c1o2) * Dyz * c1o3 * BB + (c1o1 - O4) * (CUMcbb); - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - //back cumulants to central moments - //4. - //mfcbb = CUMcbb + ((mfcaa + c1o3 * 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 - c1o1) * oMdrho; - mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho; - mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * 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; - ////////////////////////////////////////////////////////////////////////////////////// - //mfbaa += -rho * rhoToPhi * c1o2 * ((mbxx + mfcaa) * dX1_phi + (mbxy + mfbba) * dX2_phi + (mbxz + mfbab) * dX3_phi); - //mfaba += -rho * rhoToPhi * c1o2 * ((mbxy + mfbba) * dX1_phi + (mbyy + mfaca) * dX2_phi + (mbyz + mfabb) * dX3_phi); - //mfaab += -rho * rhoToPhi * c1o2 * ((mbxz + mfbab) * dX1_phi + (mbyz + mfabb) * dX2_phi + (mbzz + mfaac) * dX3_phi); - mfbaa += c1o3 * (c1o1 / collFactorM - c1o2) * rhoToPhi * (2 * dxux * dX1_phi + Dxy * dX2_phi + Dxz * dX3_phi) / (rho); - mfaba += c1o3 * (c1o1 / collFactorM - c1o2) * rhoToPhi * (Dxy * dX1_phi + 2 * dyuy * dX2_phi + Dyz * dX3_phi) / (rho); - mfaab += c1o3 * (c1o1 / collFactorM - c1o2) * rhoToPhi * (Dxz * dX1_phi + Dyz * dX2_phi + 2 * dyuy * dX3_phi) / (rho); - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + 1. * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - 2. * mfaab * vvz + mfaaa * (1. - vz2) - 1. * oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + 1. * oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - 2. * mfabb * vvz + mfaba * (1. - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - 2. * mfacb * vvz + mfaca * (1. - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - 2. * mfbab * vvz + mfbaa * (1. - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - 2. * mfbbb * vvz + mfbba * (1. - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - 2. * mfbcb * vvz + mfbca * (1. - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - 2. * mfcab * vvz + mfcaa * (1. - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - 2. * mfcbb * vvz + mfcba * (1. - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - 2. * mfccb * vvz + mfcca * (1. - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - 2. * mfaba * vvy + mfaaa * (1. - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - 2. * mfabb * vvy + mfaab * (1. - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - 2. * mfabc * vvy + mfaac * (1. - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - 2. * mfbba * vvy + mfbaa * (1. - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - 2. * mfbbb * vvy + mfbab * (1. - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - 2. * mfbbc * vvy + mfbac * (1. - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - 2. * mfcba * vvy + mfcaa * (1. - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - 2. * mfcbb * vvy + mfcab * (1. - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - 2. * mfcbc * vvy + mfcac * (1. - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - 2. * mfbaa * vvx + mfaaa * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - 2. * mfbba * vvx + mfaba * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - 2. * mfbca * vvx + mfaca * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - 2. * mfbab * vvx + mfaab * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - 2. * mfbbb * vvx + mfabb * (1. - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - 2. * mfbcb * vvx + mfacb * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - 2. * mfbac * vvx + mfaac * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - 2. * mfbbc * vvx + mfabc * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - 2. * mfbcc * vvx + mfacc * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - - /////classical source term 8.4.2021 - - //mfcbb += 3.0 * (0.5 * forcingTerm[dP00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; - //mfbcb += 3.0 * (0.5 * forcingTerm[N]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; - //mfbbc += 3.0 * (0.5 * forcingTerm[T]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; - //mfccb += 3.0 * (0.5 * forcingTerm[NE]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; - //mfacb += 3.0 * (0.5 * forcingTerm[NW]) / rho; //-(3.0*p1 - rho)*WEIGTH[NW ]; - //mfcbc += 3.0 * (0.5 * forcingTerm[TE]) / rho; //-(3.0*p1 - rho)*WEIGTH[TE ]; - //mfabc += 3.0 * (0.5 * forcingTerm[TW]) / rho; //-(3.0*p1 - rho)*WEIGTH[TW ]; - //mfbcc += 3.0 * (0.5 * forcingTerm[TN]) / rho; //-(3.0*p1 - rho)*WEIGTH[TN ]; - //mfbac += 3.0 * (0.5 * forcingTerm[TS]) / rho; //-(3.0*p1 - rho)*WEIGTH[TS ]; - //mfccc += 3.0 * (0.5 * forcingTerm[TNE]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNE]; - //mfacc += 3.0 * (0.5 * forcingTerm[TNW]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNW]; - //mfcac += 3.0 * (0.5 * forcingTerm[TSE]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSE]; - //mfaac += 3.0 * (0.5 * forcingTerm[TSW]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSW]; - //mfabb += 3.0 * (0.5 * forcingTerm[W]) / rho; //-(3.0*p1 - rho)*WEIGTH[W ]; - //mfbab += 3.0 * (0.5 * forcingTerm[S]) / rho; //-(3.0*p1 - rho)*WEIGTH[S ]; - //mfbba += 3.0 * (0.5 * forcingTerm[B]) / rho; //-(3.0*p1 - rho)*WEIGTH[B ]; - //mfaab += 3.0 * (0.5 * forcingTerm[SW]) / rho; //-(3.0*p1 - rho)*WEIGTH[SW ]; - //mfcab += 3.0 * (0.5 * forcingTerm[SE]) / rho; //-(3.0*p1 - rho)*WEIGTH[SE ]; - //mfaba += 3.0 * (0.5 * forcingTerm[BW]) / rho; //-(3.0*p1 - rho)*WEIGTH[BW ]; - //mfcba += 3.0 * (0.5 * forcingTerm[BE]) / rho; //-(3.0*p1 - rho)*WEIGTH[BE ]; - //mfbaa += 3.0 * (0.5 * forcingTerm[BS]) / rho; //-(3.0*p1 - rho)*WEIGTH[BS ]; - //mfbca += 3.0 * (0.5 * forcingTerm[BN]) / rho; //-(3.0*p1 - rho)*WEIGTH[BN ]; - //mfaaa += 3.0 * (0.5 * forcingTerm[BSW]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSW]; - //mfcaa += 3.0 * (0.5 * forcingTerm[BSE]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSE]; - //mfaca += 3.0 * (0.5 * forcingTerm[BNW]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNW]; - //mfcca += 3.0 * (0.5 * forcingTerm[BNE]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNE]; - //mfbbb += 3.0 * (0.5 * forcingTerm[REST]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST] - - - - ////////////////////////////////////////////////////////////////////////// - //proof correctness - ////////////////////////////////////////////////////////////////////////// -//#ifdef PROOF_CORRECTNESS - real rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) - + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) - + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; -// //LBMReal dif = fabs(drho - rho_post); -// LBMReal dif = drho + (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling - rho_post; -//#ifdef SINGLEPRECISION -// if (dif > 10.0E-7 || dif < -10.0E-7) -//#else -// if (dif > 10.0E-15 || dif < -10.0E-15) -//#endif -// { -// UB_THROW(UbException(UB_EXARGS, "drho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(rho_post) -// + " dif=" + UbSystem::toString(dif) -// + " drho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3))); -// //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): drho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3)); -// //exit(EXIT_FAILURE); -// } -//#endif - - if (UbMath::isNaN(rho_post) || UbMath::isInfinity(rho_post)) - UB_THROW(UbException( - UB_EXARGS, "rho_post is not a number (nan or -1.#IND) or infinity number -1.#INF, node=" + UbSystem::toString(x1) + "," + - UbSystem::toString(x2) + "," + UbSystem::toString(x3))); - - ////////////////////////////////////////////////////////////////////////// - //write distribution - ////////////////////////////////////////////////////////////////////////// - (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac ;//* rho * c1o3; - - (*this->zeroDistributionsF)(x1, x2, x3) = mfbbb;// *rho* c1o3; - ////////////////////////////////////////////////////////////////////////// - - ////!Incompressible Kernal - - -// ///////Old Kernel \|/ -// // 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 ux2 = ux * ux; -// LBMReal uy2 = uy * uy; -// LBMReal uz2 = uz * uz; -// -// //----------- Calculating Forcing Terms * ------------- -// 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 fac1 = (gamma - WEIGTH[dir]) * c1o3 * rhoToPhi; -// -// 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)); -// 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)); -// -// //-------------------------------------------------------- -// -// mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[dP00]) / 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; -// -// -// 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) * mfabb + 2. * mfbba * mfbab); -// LBMReal CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); -// LBMReal CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); -// -// LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + -// c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho); -// LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + -// c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho); -// LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + -// c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho); -// -// // Cum 5. -// LBMReal CUMbcc = mfbcc - -// (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + -// 2. * (mfbab * mfacb + mfbba * mfabc)) - -// c1o3 * (mfbca + mfbac) * oMdrho; -// LBMReal CUMcbc = mfcbc - -// (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + -// 2. * (mfabb * mfcab + mfbba * mfbac)) - -// c1o3 * (mfcba + mfabc) * oMdrho; -// LBMReal CUMccb = mfccb - -// (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + -// 2. * (mfbab * mfbca + mfabb * mfcba)) - -// c1o3 * (mfacb + mfcab) * oMdrho; -// -// // Cum 6. -// LBMReal CUMccc = -// mfccc + -// ((-4. * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - -// 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - -// 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) + -// (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) + -// 2. * (mfcaa * mfaca * mfaac) + 16. * mfbba * mfbab * mfabb) - -// c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho - -// c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - -// c1o27 * oMdrho * oMdrho * (-2. * oMdrho) + -// (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) + -// (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * -// c2o3 * oMdrho) + -// c1o27 * oMdrho; -// -// // 2. -// // linear combinations -// LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac; -// LBMReal mxxMyy = mfcaa - mfaca; -// LBMReal mxxMzz = mfcaa - mfaac; -// -// LBMReal dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); -// LBMReal dyuy = dxux + collFactorM * c3o2 * mxxMyy; -// LBMReal dzuz = dxux + collFactorM * c3o2 * mxxMzz; -// -// (*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) * mfabb + 2. * mfbba * mfbab); -// mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); -// mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); -// -// mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + -// c1o9 * (oMdrho - 1) * oMdrho; -// mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + -// c1o9 * (oMdrho - 1) * oMdrho; -// mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + -// c1o9 * (oMdrho - 1) * oMdrho; -// -// // 5. -// mfbcc = CUMbcc + -// (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + -// 2. * (mfbab * mfacb + mfbba * mfabc)) + -// c1o3 * (mfbca + mfbac) * oMdrho; -// mfcbc = CUMcbc + -// (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + -// 2. * (mfabb * mfcab + mfbba * mfbac)) + -// c1o3 * (mfcba + mfabc) * oMdrho; -// mfccb = CUMccb + -// (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + -// 2. * (mfbab * mfbca + mfabb * mfcba)) + -// c1o3 * (mfacb + mfcab) * oMdrho; -// -// // 6. -// mfccc = CUMccc - -// ((-4. * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - -// 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) - -// 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) + -// (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) + -// 2. * (mfcaa * mfaca * mfaac) + 16. * mfbba * mfbab * mfabb) - -// c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho - -// c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - -// c1o27 * oMdrho * oMdrho * (-2. * oMdrho) + -// (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) + -// (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * -// c2o3 * oMdrho) - -// c1o27 * oMdrho; -// -// //////////////////////////////////////////////////////////////////////////////////// -// // 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 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))); -// } -//#endif -// -// mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[dP00]; -// 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; -// !Old Kernel - ///////////////////// P H A S E - F I E L D S O L V E R - //////////////////////////////////////////// - /////CUMULANT PHASE-FIELD - real omegaD =1.0/( 3.0 * mob + 0.5); - { - mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3); - - - //////////////////////////////////////////////////////////////////////////////////// - //! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // fluid component - //LBMReal drhoFluid = - // ((((fccc + faaa) + (faca + fcac)) + ((facc + fcaa) + (faac + fcca))) + - // (((fbac + fbca) + (fbaa + fbcc)) + ((fabc + fcba) + (faba + fcbc)) + ((facb + fcab) + (faab + fccb))) + - // ((fabb + fcbb) + (fbab + fbcb) + (fbba + fbbc))) + fbbb; - - //LBMReal rhoFluid = c1 + drhoFluid; - //LBMReal OOrhoFluid = c1 / rhoFluid; - - - //LBMReal vvx = - // ((((fccc - faaa) + (fcac - faca)) + ((fcaa - facc) + (fcca - faac))) + - // (((fcba - fabc) + (fcbc - faba)) + ((fcab - facb) + (fccb - faab))) + - // (fcbb - fabb)) * OOrhoFluid; - //LBMReal vvy = - // ((((fccc - faaa) + (faca - fcac)) + ((facc - fcaa) + (fcca - faac))) + - // (((fbca - fbac) + (fbcc - fbaa)) + ((facb - fcab) + (fccb - faab))) + - // (fbcb - fbab)) * OOrhoFluid; - //LBMReal vvz = - // ((((fccc - faaa) + (fcac - faca)) + ((facc - fcaa) + (faac - fcca))) + - // (((fbac - fbca) + (fbcc - fbaa)) + ((fabc - fcba) + (fcbc - faba))) + - // (fbbc - fbba)) * OOrhoFluid; - - // LBMReal vvx = ux; - // LBMReal vvy = uy; - // LBMReal vvz = uz; - //////////////////////////////////////////////////////////////////////////////////// - // second component - real concentration = - ((((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; - //////////////////////////////////////////////////////////////////////////////////// - //! - Add half of the acceleration (body force) to the velocity as in Eq. (42) \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - // LBMReal fx = forces[0]; - // LBMReal fy = forces[1]; - // LBMReal fz = -concentration * forces[2]; - // vvx += fx * c1o2; - // vvy += fy * c1o2; - // vvz += fz * c1o2; - //////////////////////////////////////////////////////////////////////////////////// - real oneMinusRho = c1o1 - concentration; - - real cx = - ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)); - real cy = - ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)); - real cz = - ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)); - - //////////////////////////////////////////////////////////////////////////////////// - // calculate the square of velocities for this lattice node - real cx2 = cx * cx; - real cy2 = cy * cy; - real cz2 = cz * cz; - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (6)-(14) in \ref - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho); - forwardChimera(mfaab, mfabb, mfacb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho); - forwardChimera(mfbab, mfbbb, mfbcb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho); - forwardChimera(mfcab, mfcbb, mfccb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho); - forwardChimera(mfaba, mfbba, mfcba, cx, cx2); - forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho); - forwardChimera(mfaab, mfbab, mfcab, cx, cx2); - forwardChimera(mfabb, mfbbb, mfcbb, cx, cx2); - forwardChimera(mfacb, mfbcb, mfccb, cx, cx2); - forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho); - forwardChimera(mfabc, mfbbc, mfcbc, cx, cx2); - forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c3o1, c1o9, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - //! - experimental Cumulant ... to be published ... hopefully - //! - - // linearized orthogonalization of 3rd order central moments - real Mabc = mfabc - mfaba * c1o3; - real Mbca = mfbca - mfbaa * c1o3; - real Macb = mfacb - mfaab * c1o3; - real Mcba = mfcba - mfaba * c1o3; - real Mcab = mfcab - mfaab * c1o3; - real Mbac = mfbac - mfbaa * c1o3; - // linearized orthogonalization of 5th order central moments - real Mcbc = mfcbc - mfaba * c1o9; - real Mbcc = mfbcc - mfbaa * c1o9; - real Mccb = mfccb - mfaab * c1o9; - - // collision of 1st order moments - // LBMReal ccx, ccy, ccz; - - - cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + - normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; - cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + - normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; - cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + - normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; - - //cx = cx * (c1 - omegaD) + omegaD * vvx * concentration + - // normX1 * (c1 - 0.5 * omegaD) * (1.0 - phi[REST]) * (phi[REST])*(phi[REST]+phi2[REST]) * c1o3 * oneOverInterfaceScale; - //cy = cy * (c1 - omegaD) + omegaD * vvy * concentration + - // normX2 * (c1 - 0.5 * omegaD) * (1.0 - phi[REST]) * (phi[REST]) * (phi[REST] + phi2[REST]) * c1o3 * oneOverInterfaceScale; - //cz = cz * (c1 - omegaD) + omegaD * vvz * concentration + - // normX3 * (c1 - 0.5 * omegaD) * (1.0 - phi[REST]) * (phi[REST]) * (phi[REST] + phi2[REST]) * c1o3 * oneOverInterfaceScale; - - //mhx = (ux * phi[REST] + normX1 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhx; - //mhy = (uy * phi[REST] + normX2 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhy; - //mhz = (uz * phi[REST] + normX3 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhz; - - - cx2 = cx * cx; - cy2 = cy * cy; - cz2 = cz * cz; - - // equilibration of 2nd order moments - mfbba = c0o1; - mfbab = c0o1; - mfabb = c0o1; - - mfcaa = c1o3 * concentration; - mfaca = c1o3 * concentration; - mfaac = c1o3 * concentration; - - - //LBMReal omega2 = 1.0f;// omegaD; - //mfbba *= (c1 - omega2); - //mfbab *= (c1 - omega2); - //mfabb *= (c1 - omega2); - - //mfcaa = mfcaa*(c1 - omega2) + omega2*c1o3 * concentration; - //mfaca = mfaca*(c1 - omega2) + omega2*c1o3 * concentration; - //mfaac = mfaac*(c1 - omega2) + omega2*c1o3 * concentration; - - // equilibration of 3rd order moments - Mabc = c0o1; - Mbca = c0o1; - Macb = c0o1; - Mcba = c0o1; - Mcab = c0o1; - Mbac = c0o1; - mfbbb = c0o1; - - // from linearized orthogonalization 3rd order central moments to central moments - mfabc = Mabc + mfaba * c1o3; - mfbca = Mbca + mfbaa * c1o3; - mfacb = Macb + mfaab * c1o3; - mfcba = Mcba + mfaba * c1o3; - mfcab = Mcab + mfaab * c1o3; - mfbac = Mbac + mfbaa * c1o3; - - // equilibration of 4th order moments - mfacc = c1o9 * concentration; - mfcac = c1o9 * concentration; - mfcca = c1o9 * concentration; - - mfcbb = c0o1; - mfbcb = c0o1; - mfbbc = c0o1; - - // equilibration of 5th order moments - Mcbc = c0o1; - Mbcc = c0o1; - Mccb = c0o1; - - // from linearized orthogonalization 5th order central moments to central moments - mfcbc = Mcbc + mfaba * c1o9; - mfbcc = Mbcc + mfbaa * c1o9; - mfccb = Mccb + mfaab * c1o9; - - // equilibration of 6th order moment - mfccc = c1o27 * concentration; - - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (88)-(96) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho); - backwardChimera(mfaba, mfbba, mfcba, cx, cx2); - backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho); - backwardChimera(mfaab, mfbab, mfcab, cx, cx2); - backwardChimera(mfabb, mfbbb, mfcbb, cx, cx2); - backwardChimera(mfacb, mfbcb, mfccb, cx, cx2); - backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho); - backwardChimera(mfabc, mfbbc, mfcbc, cx, cx2); - backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c9o1, c1o9, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho); - backwardChimera(mfaab, mfabb, mfacb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho); - backwardChimera(mfbab, mfbbb, mfbcb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho); - backwardChimera(mfcab, mfcbb, mfccb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho); - - - - (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3) = mfabb; - (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3) = mfbab; - (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3) = mfbba; - (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3) = mfaab; - (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab; - (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3) = mfaba; - (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba; - (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa; - (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca; - (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa; - (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa; - (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca; - (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca; - - (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3 ) = mfcbb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3 ) = mfbcb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3 ) = mfccb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3 ) = mfacb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac; - - (*this->zeroDistributionsH1)(x1,x2,x3) = mfbbb; - } - - ////Phasefield 2: - - { - - normX1 *= -1; - normX2 *= -1; - normX3 *= -1; - - mfcbb = (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3); - mfbcb = (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3); - mfbbc = (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3); - mfccb = (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3); - mfacb = (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3); - mfcbc = (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3); - mfabc = (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3); - mfbcc = (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3); - mfbac = (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3); - mfccc = (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3); - mfacc = (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3); - mfcac = (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3); - mfaac = (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3); - mfabb = (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3); - mfbab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3); - mfbba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p); - mfaab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3); - mfcab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3); - mfaba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p); - mfcba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p); - mfbaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p); - mfbca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p); - mfaaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p); - mfcaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p); - mfaca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p); - mfcca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p); - mfbbb = (*this->zeroDistributionsH2)(x1, x2, x3); - - - //////////////////////////////////////////////////////////////////////////////////// -//! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref -//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> -//! -//////////////////////////////////////////////////////////////////////////////////// -// fluid component - //LBMReal drhoFluid = - // ((((fccc + faaa) + (faca + fcac)) + ((facc + fcaa) + (faac + fcca))) + - // (((fbac + fbca) + (fbaa + fbcc)) + ((fabc + fcba) + (faba + fcbc)) + ((facb + fcab) + (faab + fccb))) + - // ((fabb + fcbb) + (fbab + fbcb) + (fbba + fbbc))) + fbbb; - - //LBMReal rhoFluid = c1 + drhoFluid; - //LBMReal OOrhoFluid = c1 / rhoFluid; - - - //LBMReal vvx = - // ((((fccc - faaa) + (fcac - faca)) + ((fcaa - facc) + (fcca - faac))) + - // (((fcba - fabc) + (fcbc - faba)) + ((fcab - facb) + (fccb - faab))) + - // (fcbb - fabb)) * OOrhoFluid; - //LBMReal vvy = - // ((((fccc - faaa) + (faca - fcac)) + ((facc - fcaa) + (fcca - faac))) + - // (((fbca - fbac) + (fbcc - fbaa)) + ((facb - fcab) + (fccb - faab))) + - // (fbcb - fbab)) * OOrhoFluid; - //LBMReal vvz = - // ((((fccc - faaa) + (fcac - faca)) + ((facc - fcaa) + (faac - fcca))) + - // (((fbac - fbca) + (fbcc - fbaa)) + ((fabc - fcba) + (fcbc - faba))) + - // (fbbc - fbba)) * OOrhoFluid; - - // LBMReal vvx = ux; - // LBMReal vvy = uy; - // LBMReal vvz = uz; - //////////////////////////////////////////////////////////////////////////////////// - // second component - real concentration = - ((((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; - //////////////////////////////////////////////////////////////////////////////////// - //! - Add half of the acceleration (body force) to the velocity as in Eq. (42) \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - // LBMReal fx = forces[0]; - // LBMReal fy = forces[1]; - // LBMReal fz = -concentration * forces[2]; - // vvx += fx * c1o2; - // vvy += fy * c1o2; - // vvz += fz * c1o2; - //////////////////////////////////////////////////////////////////////////////////// - real oneMinusRho = c1o1 - concentration; - - real cx = - ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)); - real cy = - ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)); - real cz = - ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)); - - //////////////////////////////////////////////////////////////////////////////////// - // calculate the square of velocities for this lattice node - real cx2 = cx * cx; - real cy2 = cy * cy; - real cz2 = cz * cz; - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (6)-(14) in \ref - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho); - forwardChimera(mfaab, mfabb, mfacb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho); - forwardChimera(mfbab, mfbbb, mfbcb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho); - forwardChimera(mfcab, mfcbb, mfccb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho); - forwardChimera(mfaba, mfbba, mfcba, cx, cx2); - forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho); - forwardChimera(mfaab, mfbab, mfcab, cx, cx2); - forwardChimera(mfabb, mfbbb, mfcbb, cx, cx2); - forwardChimera(mfacb, mfbcb, mfccb, cx, cx2); - forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho); - forwardChimera(mfabc, mfbbc, mfcbc, cx, cx2); - forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c3o1, c1o9, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - //! - experimental Cumulant ... to be published ... hopefully - //! - - // linearized orthogonalization of 3rd order central moments - real Mabc = mfabc - mfaba * c1o3; - real Mbca = mfbca - mfbaa * c1o3; - real Macb = mfacb - mfaab * c1o3; - real Mcba = mfcba - mfaba * c1o3; - real Mcab = mfcab - mfaab * c1o3; - real Mbac = mfbac - mfbaa * c1o3; - // linearized orthogonalization of 5th order central moments - real Mcbc = mfcbc - mfaba * c1o9; - real Mbcc = mfbcc - mfbaa * c1o9; - real Mccb = mfccb - mfaab * c1o9; - - // collision of 1st order moments - cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + - normX1 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale; - cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + - normX2 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale; - cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + - normX3 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale; - - //mhx = (ux * phi[REST] + normX1 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhx; - //mhy = (uy * phi[REST] + normX2 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhy; -//mhz = (uz * phi[REST] + normX3 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhz; - - - cx2 = cx * cx; - cy2 = cy * cy; - cz2 = cz * cz; - - // equilibration of 2nd order moments - mfbba = c0o1; - mfbab = c0o1; - mfabb = c0o1; - - mfcaa = c1o3 * concentration; - mfaca = c1o3 * concentration; - mfaac = c1o3 * concentration; - - - //LBMReal omega2 = 1.0f;// omegaD; - //mfbba *= (c1 - omega2); - //mfbab *= (c1 - omega2); - //mfabb *= (c1 - omega2); - - //mfcaa = mfcaa*(c1 - omega2) + omega2*c1o3 * concentration; - //mfaca = mfaca*(c1 - omega2) + omega2*c1o3 * concentration; - //mfaac = mfaac*(c1 - omega2) + omega2*c1o3 * concentration; - - // equilibration of 3rd order moments - Mabc = c0o1; - Mbca = c0o1; - Macb = c0o1; - Mcba = c0o1; - Mcab = c0o1; - Mbac = c0o1; - mfbbb = c0o1; - - // from linearized orthogonalization 3rd order central moments to central moments - mfabc = Mabc + mfaba * c1o3; - mfbca = Mbca + mfbaa * c1o3; - mfacb = Macb + mfaab * c1o3; - mfcba = Mcba + mfaba * c1o3; - mfcab = Mcab + mfaab * c1o3; - mfbac = Mbac + mfbaa * c1o3; - - // equilibration of 4th order moments - mfacc = c1o9 * concentration; - mfcac = c1o9 * concentration; - mfcca = c1o9 * concentration; - - mfcbb = c0o1; - mfbcb = c0o1; - mfbbc = c0o1; - - // equilibration of 5th order moments - Mcbc = c0o1; - Mbcc = c0o1; - Mccb = c0o1; - - // from linearized orthogonalization 5th order central moments to central moments - mfcbc = Mcbc + mfaba * c1o9; - mfbcc = Mbcc + mfbaa * c1o9; - mfccb = Mccb + mfaab * c1o9; - - // equilibration of 6th order moment - mfccc = c1o27 * concentration; - - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (88)-(96) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho); - backwardChimera(mfaba, mfbba, mfcba, cx, cx2); - backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho); - backwardChimera(mfaab, mfbab, mfcab, cx, cx2); - backwardChimera(mfabb, mfbbb, mfcbb, cx, cx2); - backwardChimera(mfacb, mfbcb, mfccb, cx, cx2); - backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho); - backwardChimera(mfabc, mfbbc, mfcbc, cx, cx2); - backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c9o1, c1o9, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho); - backwardChimera(mfaab, mfabb, mfacb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho); - backwardChimera(mfbab, mfbbb, mfbcb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho); - backwardChimera(mfcab, mfcbb, mfccb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho); - - - - (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3) = mfabb; - (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3) = mfbab; - (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3) = mfbba; - (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3) = mfaab; - (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab; - (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3) = mfaba; - (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba; - (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa; - (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca; - (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa; - (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa; - (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca; - (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca; - - (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac; - - (*this->zeroDistributionsH2)(x1, x2, x3) = mfbbb; - - } - - - - /////!CUMULANT PHASE-FIELD - - - - ///////////////////// PHASE-FIELD BGK SOLVER /////////////////////////////// - - //h[dP00] = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); - //h[N] = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3); - //h[T] = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3); - //h[NE] = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3); - //h[NW] = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3); - //h[TE] = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3); - //h[TW] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3); - //h[TN] = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3); - //h[TS] = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3); - //h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3); - //h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3); - //h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3); - //h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3); - - //h[W] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3); - //h[S] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3); - //h[B] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p); - //h[SW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3); - //h[SE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3); - //h[BW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p); - //h[BE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p); - //h[BS] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p); - //h[BN] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p); - //h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p); - //h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p); - //h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p); - //h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p); - - //h[REST] = (*this->zeroDistributionsH)(x1, x2, x3); - - //for (int dir = STARTF; dir < (ENDF + 1); dir++) { - // LBMReal velProd = DX1[dir] * ux + DX2[dir] * uy + DX3[dir] * uz; - // LBMReal velSq1 = velProd * velProd; - // LBMReal hEq; //, gEq; - - // if (dir != REST) { - // LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]]) / 2.0; - // LBMReal hSource = (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST]) * (dirGrad_phi) / denom; - // hEq = phi[REST] * WEIGTH[dir] * (1.0 + 3.0 * velProd + 4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2)) + hSource * WEIGTH[dir]; - - // // This corresponds with the collision factor of 1.0 which equals (tauH + 0.5). - // h[dir] = h[dir] - (h[dir] - hEq) / (tauH); - - // } else { - // hEq = phi[REST] * WEIGTH[REST] * (1.0 - 1.5 * (ux2 + uy2 + uz2)); - // h[REST] = h[REST] - (h[REST] - hEq) / (tauH); - // } - //} - - //(*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3) = h[D3Q27System::INV_E]; - //(*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3) = h[D3Q27System::INV_N]; - //(*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3) = h[D3Q27System::INV_T]; - //(*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3) = h[D3Q27System::INV_NE]; - //(*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3) = h[D3Q27System::INV_NW]; - //(*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3) = h[D3Q27System::INV_TE]; - //(*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3) = h[D3Q27System::INV_TW]; - //(*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3) = h[D3Q27System::INV_TN]; - //(*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3) = h[D3Q27System::INV_TS]; - //(*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3) = h[D3Q27System::INV_TNE]; - //(*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3) = h[D3Q27System::INV_TNW]; - //(*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3) = h[D3Q27System::INV_TSE]; - //(*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = h[D3Q27System::INV_TSW]; - - //(*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3) = h[D3Q27System::INV_W]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3) = h[D3Q27System::INV_S]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p) = h[D3Q27System::INV_B]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3) = h[D3Q27System::INV_SW]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3) = h[D3Q27System::INV_SE]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p) = h[D3Q27System::INV_BW]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p) = h[D3Q27System::INV_BE]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p) = h[D3Q27System::INV_BS]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p) = h[D3Q27System::INV_BN]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = h[D3Q27System::INV_BSW]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p) = h[D3Q27System::INV_BSE]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p) = h[D3Q27System::INV_BNW]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p) = h[D3Q27System::INV_BNE]; - - //(*this->zeroDistributionsH)(x1, x2, x3) = h[D3Q27System::REST]; - - ///////////////////// END OF OLD BGK SOLVER /////////////////////////////// - } - } - } - - // dataSet->setPhaseField(divU); - } -} -////////////////////////////////////////////////////////////////////////// - -real MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::gradX1_phi() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP]))) - + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) + - +WEIGTH[d0P0] * (phi[dP00] - phi[dM00])); - //LBMReal sum = 0.0; - //for (int k = FSTARTDIR; k <= FENDDIR; k++) { - // sum += WEIGTH[k] * DX1[k] * phi[k]; - //} - //return 3.0 * sum; -} - -real MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::gradX2_phi() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM]))) - + WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) + - +WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0])); - //LBMReal sum = 0.0; - //for (int k = FSTARTDIR; k <= FENDDIR; k++) { - // sum += WEIGTH[k] * DX2[k] * phi[k]; - //} - //return 3.0 * sum; -} - -real MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::gradX3_phi() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP]))) - + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) + - +WEIGTH[d0P0] * (phi[d00P] - phi[d00M])); - //LBMReal sum = 0.0; - //for (int k = FSTARTDIR; k <= FENDDIR; k++) { - // sum += WEIGTH[k] * DX3[k] * phi[k]; - //} - //return 3.0 * sum; -} - -real MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::gradX1_phi2() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP]))) - + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) + - +WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00])); - //LBMReal sum = 0.0; - //for (int k = FSTARTDIR; k <= FENDDIR; k++) { - // sum += WEIGTH[k] * DX1[k] * phi2[k]; - //} - //return 3.0 * sum; -} - -real MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::gradX2_phi2() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM]))) - + WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) + - +WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0])); - //LBMReal sum = 0.0; - //for (int k = FSTARTDIR; k <= FENDDIR; k++) { - // sum += WEIGTH[k] * DX2[k] * phi2[k]; - //} - //return 3.0 * sum; -} - -real MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::gradX3_phi2() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP]))) - + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) + - +WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M])); - //LBMReal sum = 0.0; - //for (int k = FSTARTDIR; k <= FENDDIR; k++) { - // sum += WEIGTH[k] * DX3[k] * phi2[k]; - //} - //return 3.0 * sum; -} - - - - - -real MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::nabla2_phi() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - real sum = 0.0; - sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000]))) - + (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000])))); - sum += WEIGTH[d0PP] * ( - (((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000]))) - + (((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000]))) - + (((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000]))) - ); - sum += WEIGTH[d00P] * ( - ((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000])) - + ((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000])) - + ((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000])) - ); - //for (int k = FSTARTDIR; k <= FENDDIR; k++) { - // sum += WEIGTH[k] * (phi[k] - phi[REST]); - //} - return 6.0 * sum; -} - -void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::computePhasefield() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - SPtr<DistributionArray3D> distributionsH = dataSet->getHdistributions(); - - 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[dP00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - h[d0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - h[d00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - h[dPP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - h[dMP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - h[dP0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - h[dM0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - h[d0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - h[d0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - - h[dM00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - h[d0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - h[d00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - h[dMM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - h[dPM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - h[dM0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - h[dP0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - h[d0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - h[d0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - - h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3); - } - } - } - } -} - -void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, - int x3) -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - phi[d000] = (*ph)(x1, x2, x3); - - - 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 { - phi[k] = 0.0; - } - } -} - -void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, - int x3) -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - phi2[d000] = (*ph)(x1, x2, x3); - - - for (int k = FSTARTDIR; k <= FENDDIR; k++) { - - if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) { - phi2[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]); - } - else { - phi2[k] = 0.0; - } - } -} - -void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::swapDistributions() -{ - LBMKernel::swapDistributions(); - dataSet->getHdistributions()->swap(); - dataSet->getH2distributions()->swap(); -} - -void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::initForcing() -{ - 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); - - muForcingX1.DefineVar("rho",&muRho); - muForcingX2.DefineVar("rho",&muRho); - muForcingX3.DefineVar("rho",&muRho); - -} diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.h b/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.h deleted file mode 100644 index c486caf0c0fb64c3a9a7366b55bb3150c139468a..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.h +++ /dev/null @@ -1,130 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.h -//! \ingroup LBMKernel -//! \author Hesameddin Safari -//======================================================================================= - -#ifndef MultiphaseTwoPhaseFieldsPressureFilterLBMKernel_H -#define MultiphaseTwoPhaseFieldsPressureFilterLBMKernel_H - -#include "LBMKernel.h" -#include "BCSet.h" -#include "D3Q27System.h" -#include "basics/utilities/UbTiming.h" -#include "basics/container/CbArray4D.h" -#include "basics/container/CbArray3D.h" - -//! \brief 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 MultiphaseTwoPhaseFieldsPressureFilterLBMKernel : public LBMKernel -{ -public: - MultiphaseTwoPhaseFieldsPressureFilterLBMKernel(); - virtual ~MultiphaseTwoPhaseFieldsPressureFilterLBMKernel(void) = default; - void calculate(int step) override; - SPtr<LBMKernel> clone() override; - - - ///refactor - //CbArray3D<LBMReal, IndexerX3X2X1>::CbArray3DPtr pressure; - - - real getCalculationTime() override { return .0; } -protected: - virtual void initDataSet(); - void swapDistributions() override; - - void initForcing(); - - void forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho); - void backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho); - void forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2); - void backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2); - - real f1[D3Q27System::ENDF+1]; - - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF; - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF; - CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr zeroDistributionsF; - - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH1; - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH1; - CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr zeroDistributionsH1; - - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH2; - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH2; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributionsH2; - - //CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr phaseField; - - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressureOld; - - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField2; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr divU; - - real h [D3Q27System::ENDF+1]; - real h2[D3Q27System::ENDF + 1]; - real g [D3Q27System::ENDF+1]; - real phi[D3Q27System::ENDF+1]; - real phi2[D3Q27System::ENDF + 1]; - real pr1[D3Q27System::ENDF+1]; - real phi_cutoff[D3Q27System::ENDF+1]; - - real gradX1_phi(); - real gradX2_phi(); - real gradX3_phi(); - real gradX1_phi2(); - real gradX2_phi2(); - real gradX3_phi2(); - //LBMReal gradX1_pr1(); - //LBMReal gradX2_pr1(); - //LBMReal gradX3_pr1(); - //LBMReal dirgradC_phi(int n, int k); - void computePhasefield(); - void findNeighbors(CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, int x1, int x2, int x3); - void findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, 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*/); - - real nabla2_phi(); - - - mu::value_type muX1,muX2,muX3; - mu::value_type muDeltaT; - mu::value_type muNu; - mu::value_type muRho; - real forcingX1; - real forcingX2; - real forcingX3; -}; - -#endif diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.cpp deleted file mode 100644 index d15714f6f8da63e020a7ee40ea953779e25e46c6..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.cpp +++ /dev/null @@ -1,3516 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.cpp -//! \ingroup LBMKernel -//! \author Hesameddin Safari -//======================================================================================= - -#include "MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.h" -#include "BCArray3D.h" -#include "Block3D.h" -#include "D3Q27EsoTwist3DSplittedVector.h" -#include "D3Q27System.h" -#include "DataSet3D.h" -#include "LBMKernel.h" -#include <cmath> - -#define PROOF_CORRECTNESS - -////////////////////////////////////////////////////////////////////////// -MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel() { this->compressible = false; } -////////////////////////////////////////////////////////////////////////// -void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::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<DistributionArray3D> h2(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)); - pressure= CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 2, nx[1] + 2, nx[2] + 2, 0.0)); - pressureOld = CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr(new CbArray3D<real, IndexerX3X2X1>(nx[0] + 2, nx[1] + 2, nx[2] + 2, 0.0)); - dataSet->setFdistributions(f); - dataSet->setHdistributions(h); // For phase-field - dataSet->setH2distributions(h2); // For phase-field - dataSet->setPhaseField(divU); -} -////////////////////////////////////////////////////////////////////////// -SPtr<LBMKernel> MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::clone() -{ - SPtr<LBMKernel> kernel(new MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel()); - kernel->setNX(nx); - dynamicPointerCast<MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel>(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->setBCSet(bcSet->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 MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) { -// using namespace UbMath; - using namespace vf::basics::constant; - - real m2 = mfa + mfc; - real m1 = mfc - mfa; - real m0 = m2 + mfb; - mfa = m0; - m0 *= Kinverse; - m0 += oneMinusRho; - mfb = (m1 * Kinverse - m0 * vv) * K; - mfc = ((m2 - c2o1 * m1 * vv) * Kinverse + v2 * m0) * K; -} - -//////////////////////////////////////////////////////////////////////////////// - void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho) { -// using namespace UbMath; - using namespace vf::basics::constant; - - real m0 = (((mfc - mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 - vv) * c1o2) * K; - real m1 = (((mfa - mfc) - c2o1 * mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (-v2)) * K; - mfc = (((mfc + mfb) * c1o2 + mfb * vv) * Kinverse + (mfa * Kinverse + oneMinusRho) * (v2 + vv) * c1o2) * K; - mfa = m0; - mfb = m1; -} - - -//////////////////////////////////////////////////////////////////////////////// - void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) { -// using namespace UbMath; - using namespace vf::basics::constant; - - real m1 = (mfa + mfc) + mfb; - real m2 = mfc - mfa; - mfc = (mfc + mfa) + (v2 * m1 - c2o1 * vv * m2); - mfb = m2 - vv * m1; - mfa = m1; -} - - - void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2) { -// using namespace UbMath; - using namespace vf::basics::constant; - - real ma = (mfc + mfa * (v2 - vv)) * c1o2 + mfb * (vv - c1o2); - real mb = ((mfa - mfc) - mfa * v2) - c2o1 * mfb * vv; - mfc = (mfc + mfa * (v2 + vv)) * c1o2 + mfb * (vv + c1o2); - mfb = mb; - mfa = ma; -} - - -void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step) -{ - using namespace D3Q27System; - // using namespace UbMath; - using namespace vf::lbm::dir; - using namespace vf::basics::constant; - - forcingX1 = 0.0; - forcingX2 = 0.0; - forcingX3 = 0.0; - - real oneOverInterfaceScale = 1.0; - ///////////////////////////////////// - - localDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); - nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); - zeroDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); - - localDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getLocalDistributions(); - nonLocalDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getNonLocalDistributions(); - zeroDistributionsH1 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getHdistributions())->getZeroDistributions(); - - localDistributionsH2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getLocalDistributions(); - nonLocalDistributionsH2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getNonLocalDistributions(); - zeroDistributionsH2 = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getH2distributions())->getZeroDistributions(); - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - const int bcArrayMaxX1 = (int)bcArray->getNX1(); - const int bcArrayMaxX2 = (int)bcArray->getNX2(); - const int bcArrayMaxX3 = (int)bcArray->getNX3(); - - int minX1 = ghostLayerWidth; - int minX2 = ghostLayerWidth; - int minX3 = ghostLayerWidth; - int maxX1 = bcArrayMaxX1 - ghostLayerWidth; - int maxX2 = bcArrayMaxX2 - ghostLayerWidth; - int maxX3 = bcArrayMaxX3 - ghostLayerWidth; - - //TODO - //very expensive !!!!! - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField( - new CbArray3D<real, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0)); - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField2( - new CbArray3D<real, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, -999.0)); - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr divU( - new CbArray3D<real, IndexerX3X2X1>(bcArrayMaxX1, bcArrayMaxX2, bcArrayMaxX3, 0.0)); - -#pragma omp parallel for - 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; - - real mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - real mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - - real mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3); - (*phaseField)(x1, x2, x3) = (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca) + (mfcaa + mfacc)) ) + - (((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) + - ((mfbaa + mfbac) + (mfbca + mfbcc))) + ((mfabb + mfcbb) + - (mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb; - - mfcbb = (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3); - mfbcb = (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3); - mfbbc = (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3); - mfccb = (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3); - mfacb = (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3); - mfcbc = (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3); - mfabc = (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3); - mfbcc = (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3); - mfbac = (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3); - mfccc = (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3); - mfacc = (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3); - mfcac = (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3); - mfaac = (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3); - mfabb = (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3); - mfbab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3); - mfbba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p); - mfaab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3); - mfcab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3); - mfaba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p); - mfcba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p); - mfbaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p); - mfbca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p); - mfaaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p); - mfcaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p); - mfaca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p); - mfcca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p); - - mfbbb = (*this->zeroDistributionsH2)(x1, x2, x3); - (*phaseField2)(x1, x2, x3) = - (((mfaaa + mfccc) + (mfaca + mfcac)) + ((mfaac + mfcca) + (mfcaa + mfacc))) + - (((mfaab + mfacb) + (mfcab + mfccb)) + ((mfaba + mfabc) + (mfcba + mfcbc)) + - ((mfbaa + mfbac) + (mfbca + mfbcc))) + - ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc)) + mfbbb; - //(*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; - -////// read F-distributions for velocity formalism - - - 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); - - real rhoH = 1.0; - real rhoL = 1.0 / densityRatio; - - real rhoToPhi = (rhoH - rhoL) / (phiH - phiL); - - real drho = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) - + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) - + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - - real rho = rhoH + rhoToPhi * (phi[d000] - phiH); - (*pressure)(x1, x2, x3) = (*pressure)(x1, x2, x3) + rho * c1o3 * drho; - - ////!!!!!! relplace by pointer swap! - (*pressureOld)(x1, x2, x3) = (*pressure)(x1, x2, x3); - } - } - } - } - - real collFactorM; - //LBMReal forcingTerm[D3Q27System::ENDF + 1]; - - ////filter - - //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)) { - - // LBMReal sum = 0.; - - // //Lapalce pressure - // //sum += WEIGTH[TNE] * (((((*pressure)(x1+1, x2+1, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2-1, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2+1, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2-1, x3+1) - (*pressure)(x1, x2, x3)))) - // // + ((((*pressure)(x1+1, x2-1, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2+1, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2-1, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2+1, x3+1) - (*pressure)(x1, x2, x3))))); - // //sum += WEIGTH[TN] * ( - // // ((((*pressure)(x1+1, x2+1, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2-1, x3) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2-1, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2+1, x3) - (*pressure)(x1, x2, x3)))) - // // + ((((*pressure)(x1+1, x2, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2, x3+1) - (*pressure)(x1, x2, x3)))) - // // + ((((*pressure)(x1, x2+1, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2-1, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1, x2+1, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2-1, x3+1) - (*pressure)(x1, x2, x3)))) - // // ); - // //sum += WEIGTH[T] * ( - // // (((*pressure)(x1+1, x2, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2, x3) - (*pressure)(x1, x2, x3))) - // // + (((*pressure)(x1, x2+1, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2-1, x3) - (*pressure)(x1, x2, x3))) - // // + (((*pressure)(x1, x2, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2, x3-1) - (*pressure)(x1, x2, x3))) - // // ); - - - // //LBMReal pressureFilter = 100; - // //(*pressureOld)(x1, x2, x3) = (*pressure)(x1, x2, x3) + pressureFilter * sum * (sqrt(fabs(sum))); - - // //Situpol Eq. 81 - // sum += WEIGTH[TNE] * (((((*pressure)(x1+1, x2+1, x3+1)) + ((*pressure)(x1-1, x2-1, x3-1) )) + (((*pressure)(x1+1, x2+1, x3-1) ) + ((*pressure)(x1-1, x2-1, x3+1) ))) - // + ((((*pressure)(x1+1, x2-1, x3+1) ) + ((*pressure)(x1-1, x2+1, x3-1) )) + (((*pressure)(x1+1, x2-1, x3-1) ) + ((*pressure)(x1-1, x2+1, x3+1) )))); - // sum += WEIGTH[TN] * ( - // ((((*pressure)(x1+1, x2+1, x3) ) + ((*pressure)(x1-1, x2-1, x3) )) + (((*pressure)(x1+1, x2-1, x3) ) + ((*pressure)(x1-1, x2+1, x3) ))) - // + ((((*pressure)(x1+1, x2, x3+1) ) + ((*pressure)(x1-1, x2, x3-1) )) + (((*pressure)(x1+1, x2, x3-1) ) + ((*pressure)(x1-1, x2, x3+1) ))) - // + ((((*pressure)(x1, x2+1, x3+1) ) + ((*pressure)(x1, x2-1, x3-1) )) + (((*pressure)(x1, x2+1, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2-1, x3+1) ))) - // ); - // sum += WEIGTH[T] * ( - // (((*pressure)(x1+1, x2, x3) ) + ((*pressure)(x1-1, x2, x3) )) - // + (((*pressure)(x1, x2+1, x3) ) + ((*pressure)(x1, x2-1, x3) )) - // + (((*pressure)(x1, x2, x3+1)) + ((*pressure)(x1, x2, x3-1) )) - // ); - // sum += WEIGTH[REST] * (*pressure)(x1, x2, x3); - // (*pressureOld)(x1, x2, x3) = sum; - - - - - // } - // } - // } - //} - - ////Periodic Filter -#pragma omp parallel for - 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)) { - - real sum = 0.; - - - - //Lapalce pressure - //sum += WEIGTH[TNE] * (((((*pressure)(x1+1, x2+1, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2-1, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2+1, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2-1, x3+1) - (*pressure)(x1, x2, x3)))) - // + ((((*pressure)(x1+1, x2-1, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2+1, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2-1, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2+1, x3+1) - (*pressure)(x1, x2, x3))))); - //sum += WEIGTH[TN] * ( - // ((((*pressure)(x1+1, x2+1, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2-1, x3) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2-1, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2+1, x3) - (*pressure)(x1, x2, x3)))) - // + ((((*pressure)(x1+1, x2, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1+1, x2, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2, x3+1) - (*pressure)(x1, x2, x3)))) - // + ((((*pressure)(x1, x2+1, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2-1, x3-1) - (*pressure)(x1, x2, x3))) + (((*pressure)(x1, x2+1, x3-1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2-1, x3+1) - (*pressure)(x1, x2, x3)))) - // ); - //sum += WEIGTH[T] * ( - // (((*pressure)(x1+1, x2, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1-1, x2, x3) - (*pressure)(x1, x2, x3))) - // + (((*pressure)(x1, x2+1, x3) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2-1, x3) - (*pressure)(x1, x2, x3))) - // + (((*pressure)(x1, x2, x3+1) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2, x3-1) - (*pressure)(x1, x2, x3))) - // ); - - - //LBMReal pressureFilter = 100; - //(*pressureOld)(x1, x2, x3) = (*pressure)(x1, x2, x3) + pressureFilter * sum * (sqrt(fabs(sum))); - - //Situpol Eq. 81 - - //int x1p = (x1 < maxX1) ? x1 + 1 : 0; - //int x1m = (x1 > 0) ? x1 - 1 : maxX1; - //int x2p = (x2 < maxX2) ? x2 + 1 : 0; - //int x2m = (x2 > 0) ? x2 - 1 : maxX2; - //int x3p = (x3 < maxX3) ? x3 + 1 : 0; - //int x3m = (x3 > 0) ? x3 - 1 : maxX3; - //sum += WEIGTH[TNE] * (((((*pressure)(x1p, x2p, x3p)) + ((*pressure)(x1m, x2m, x3m))) + (((*pressure)(x1p, x2p, x3m)) + ((*pressure)(x1m, x2m, x3p)))) - // + ((((*pressure)(x1p, x2m, x3p)) + ((*pressure)(x1m, x2p, x3m))) + (((*pressure)(x1p, x2m, x3m)) + ((*pressure)(x1m, x2p, x3p))))); - //sum += WEIGTH[TN] * ( - // ((((*pressure)(x1p, x2p, x3)) + ((*pressure)(x1m, x2m, x3))) + (((*pressure)(x1p, x2m, x3)) + ((*pressure)(x1m, x2p, x3)))) - // + ((((*pressure)(x1p, x2, x3p)) + ((*pressure)(x1m, x2, x3m))) + (((*pressure)(x1p, x2, x3m)) + ((*pressure)(x1m, x2, x3p)))) - // + ((((*pressure)(x1, x2p, x3p)) + ((*pressure)(x1, x2m, x3m))) + (((*pressure)(x1, x2p, x3m) - (*pressure)(x1, x2, x3)) + ((*pressure)(x1, x2m, x3p)))) - // ); - //sum += WEIGTH[T] * ( - // (((*pressure)(x1p, x2, x3)) + ((*pressure)(x1m, x2, x3))) - // + (((*pressure)(x1, x2p, x3)) + ((*pressure)(x1, x2m, x3))) - // + (((*pressure)(x1, x2, x3p)) + ((*pressure)(x1, x2, x3m))) - // ); - //sum += WEIGTH[REST] * (*pressure)(x1, x2, x3); - //(*pressureOld)(x1, x2, x3) = sum; - - ///Version for boundaries - for (int xx = -1; xx <= 1; xx++) { - int xxx = (xx+x1 <= maxX1) ? ((xx + x1 > 0) ? xx + x1 : maxX1) : 0; - - for (int yy = -1; yy <= 1; yy++) { - int yyy = (yy+x2 <= maxX2) ? ((yy + x2 > 0) ? yy + x2 : maxX2) : 0; - - for (int zz = -1; zz <= 1; zz++) { - int zzz = (zz+x3 <= maxX3) ? ((zz + x3 > 0) ? zz + x3 : maxX3 ): 0; - - if (!bcArray->isSolid(xxx, yyy, zzz) && !bcArray->isUndefined(xxx, yyy, zzz)) { - sum+= 64.0/(216.0*(c1o1+c3o1 *abs(xx))* (c1o1 + c3o1 * abs(yy))* (c1o1 + c3o1 * abs(zz)))*(*pressure)(xxx, yyy, zzz); - } - else{ sum+= 64.0 / (216.0 * (c1o1 + c3o1 * abs(xx)) * (c1o1 + c3o1 * abs(yy)) * (c1o1 + c3o1 * abs(zz))) * (*pressure)(x1, x2, x3); - } - - - } - } - } - (*pressureOld)(x1, x2, x3) = sum; - - - - } - } - } - } - -#pragma omp parallel for - 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)) { - ///filter! - - (*pressure)(x1, x2, x3) = (*pressureOld)(x1, x2, x3); - } - } - } - } - ////!filter - - -#pragma omp parallel for - for (int x3 = minX3; x3 < maxX3; x3++) { - for (int x2 = minX2; x2 < maxX2; x2++) { - for (int x1 = minX1; x1 < maxX1; x1++) { - if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { - int x1p = x1 + 1; - int x2p = x2 + 1; - int x3p = x3 + 1; - - - - ////////////////////////////////////////////////////////////////////////// - // Read 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 - - findNeighbors(phaseField, x1, x2, x3); - findNeighbors2(phaseField2, x1, x2, x3); - - real mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3); - real mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p); - - real mfbbb = (*this->zeroDistributionsF)(x1, x2, x3); - - real rhoH = 1.0; - real rhoL = 1.0 / densityRatio; - - real rhoToPhi = (rhoH - rhoL) / (phiH - phiL); - - real dX1_phi = gradX1_phi(); - real dX2_phi = gradX2_phi(); - real dX3_phi = gradX3_phi(); - - //LBMReal dX1_phi2 = gradX1_phi2(); - //LBMReal dX2_phi2 = gradX2_phi2(); - //LBMReal dX3_phi2 = gradX3_phi2(); - - - // LBMReal denom2 = sqrt(dX1_phi * dX1_phi+ dX1_phi2 * dX1_phi2 + dX2_phi * dX2_phi + dX2_phi2 * dX2_phi2 + dX3_phi * dX3_phi+ dX3_phi2 * dX3_phi2) + 1e-9; - // LBMReal normX1 = (dX1_phi-dX1_phi2)/denom2; - //LBMReal normX2 = (dX2_phi-dX2_phi2)/denom2; - //LBMReal normX3 = (dX3_phi-dX3_phi2)/denom2; - - real denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi) + 1e-9; - real normX1 = dX1_phi / denom; - real normX2 = dX2_phi / denom; - real normX3 = dX3_phi / denom; - - - - collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL); - - - real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi(); - - //----------- Calculating Macroscopic Values ------------- - real rho = rhoH + rhoToPhi * (phi[d000] - phiH); - - ////Incompressible Kernal - - //mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) ;// / rho * c3; - //mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) ;// / rho * c3; - //mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) ;// / rho * c3; - //mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) ;// / rho * c3; - //mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) ;// / rho * c3; - //mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) ;// / rho * c3; - //mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) ;// / rho * c3; - //mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) ;// / rho * c3; - //mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) ;// / rho * c3; - //mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) ;// / rho * c3; - //mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) ;// / rho * c3; - //mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) ;// / rho * c3; - //mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) ;// / rho * c3; - //mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) ;// / rho * c3; - //mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) ;// / rho * c3; - //mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) ;// / rho * c3; - //mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) ;// / rho * c3; - //mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) ;// / rho * c3; - //mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) ;// / rho * c3; - //mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) ;// / rho * c3; - //mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) ;// / rho * c3; - //mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) ;// / rho * c3; - //mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) ;// / rho * c3; - //mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) ;// / rho * c3; - //mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) ;// / rho * c3; - //mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) ;// / rho * c3; - - //mfbbb = (*this->zeroDistributionsF)(x1, x2, x3);// / rho * c3; - - - real m0, m1, m2; - real rhoRef=c1o1; - - //LBMReal - // LBMReal drho = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) - // + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) - // + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb))/rhoRef; - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab))/rhoRef; - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba))/rhoRef; - - // (*pressure)(x1, x2, x3) = (*pressureOld)(x1, x2, x3)+rho*c1o3*drho; - - //LBMReal gradPx = c1o2 * ((*pressure)(x1 + 1, x2, x3) - (*pressure)(x1 - 1, x2, x3)); - //LBMReal gradPy = c1o2 * ((*pressure)(x1, x2 + 1, x3) - (*pressure)(x1, x2 - 1, x3)); - //LBMReal gradPz = c1o2 * ((*pressure)(x1, x2, x3 + 1) - (*pressure)(x1, x2, x3 - 1)); - - //LBMReal gradPx = 3.0 * (WEIGTH[TNE] * ( - // (((*pressure)(x1 + 1, x2 + 1, x3 + 1) - (*pressure)(x1 - 1, x2 - 1, x3 - 1)) + ((*pressure)(x1 + 1, x2 - 1, x3 + 1) - (*pressure)(x1 - 1, x2 + 1, x3 - 1))) - // + (((*pressure)(x1 + 1, x2 - 1, x3 - 1) - (*pressure)(x1 - 1, x2 + 1, x3 + 1)) + ((*pressure)(x1 + 1, x2 + 1, x3 - 1) - (*pressure)(x1 - 1, x2 - 1, x3 + 1)))) - // + WEIGTH[NE] * ( - // (((*pressure)(x1 + 1, x2 + 1, x3) - (*pressure)(x1 - 1, x2 - 1, x3)) + ((*pressure)(x1 + 1, x2 - 1, x3) - (*pressure)(x1 - 1, x2 + 1, x3))) - // + (((*pressure)(x1 + 1, x2, x3 - 1) - (*pressure)(x1 - 1, x2, x3 + 1)) + ((*pressure)(x1 + 1, x2, x3 + 1) - (*pressure)(x1 - 1, x2, x3 - 1)))) - // + WEIGTH[dP00] * ((*pressure)(x1 + 1, x2, x3) - (*pressure)(x1 - 1, x2, x3))); - - //LBMReal gradPy = 3.0 * (WEIGTH[TNE] * ( - // (((*pressure)(x1 + 1, x2 + 1, x3 + 1) - (*pressure)(x1 - 1, x2 - 1, x3 - 1)) + ((*pressure)(x1 - 1, x2 + 1, x3 + 1) - (*pressure)(x1 + 1, x2 - 1, x3 - 1))) - // + (((*pressure)(x1 - 1, x2 + 1, x3 - 1) - (*pressure)(x1 + 1, x2 - 1, x3 + 1)) + ((*pressure)(x1 + 1, x2 + 1, x3 - 1) - (*pressure)(x1 - 1, x2 - 1, x3 + 1)))) - // + WEIGTH[NE] * ( - // (((*pressure)(x1 + 1, x2 + 1, x3) - (*pressure)(x1 - 1, x2 - 1, x3)) + ((*pressure)(x1 - 1, x2 + 1, x3) - (*pressure)(x1 + 1, x2 - 1, x3))) - // + (((*pressure)(x1, x2+1, x3 - 1) - (*pressure)(x1, x2-1, x3 + 1)) + ((*pressure)(x1, x2+1, x3 + 1) - (*pressure)(x1, x2-1, x3 - 1)))) - // + WEIGTH[dP00] * ((*pressure)(x1, x2+1, x3) - (*pressure)(x1, x2-1, x3))); - - //LBMReal gradPz = 3.0 * (WEIGTH[TNE] * ( - // (((*pressure)(x1 + 1, x2 + 1, x3 + 1) - (*pressure)(x1 - 1, x2 - 1, x3 - 1)) + ((*pressure)(x1 - 1, x2 + 1, x3 + 1) - (*pressure)(x1 + 1, x2 - 1, x3 - 1))) - // + (((*pressure)(x1 - 1, x2 - 1, x3 + 1) - (*pressure)(x1 + 1, x2 + 1, x3 - 1)) + ((*pressure)(x1 + 1, x2 - 1, x3 + 1) - (*pressure)(x1 - 1, x2 + 1, x3 - 1)))) - // + WEIGTH[NE] * ( - // (((*pressure)(x1 + 1, x2, x3+1) - (*pressure)(x1 - 1, x2, x3-1)) + ((*pressure)(x1 - 1, x2, x3+1) - (*pressure)(x1 + 1, x2, x3-1))) - // + (((*pressure)(x1, x2 - 1, x3 + 1) - (*pressure)(x1, x2 + 1, x3 - 1)) + ((*pressure)(x1, x2 + 1, x3 + 1) - (*pressure)(x1, x2 - 1, x3 - 1)))) - // + WEIGTH[dP00] * ((*pressure)(x1, x2, x3+1) - (*pressure)(x1, x2, x3-1))); - - - real gradPx = 0.0; - real gradPy = 0.0; - real gradPz = 0.0; - for (int dir1 = -1; dir1 <= 1; dir1++) { - for (int dir2 = -1; dir2 <= 1; dir2++) { - int yyy = x2 + dir1; - int zzz = x3 + dir2; - if (!bcArray->isSolid(x1-1, yyy, zzz) && !bcArray->isUndefined(x1-1, yyy, zzz)) { - gradPx -= (*pressure)(x1 - 1, yyy, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - else { - gradPx -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - if (!bcArray->isSolid(x1 + 1, yyy, zzz) && !bcArray->isUndefined(x1 - 1, yyy, zzz)) { - gradPx += (*pressure)(x1 + 1, yyy, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - else { - gradPx += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - - int xxx = x1 + dir1; - if (!bcArray->isSolid(xxx, x2-1, zzz) && !bcArray->isUndefined(xxx, x2-1, zzz)) { - gradPy -= (*pressure)(xxx, x2-1, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - else { - gradPy -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - if (!bcArray->isSolid(xxx, x2+1, zzz) && !bcArray->isUndefined(xxx, x2-1, zzz)) { - gradPy += (*pressure)(xxx, x2+1, zzz) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - else { - gradPy += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - - yyy = x2 + dir2; - if (!bcArray->isSolid(xxx, yyy, x3-1) && !bcArray->isUndefined(xxx, yyy, x3-1)) { - gradPz -= (*pressure)(xxx, yyy, x3-1) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - else { - gradPz -= (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - if (!bcArray->isSolid(xxx, yyy, x3+1) && !bcArray->isUndefined(xxx, yyy, x3+1)) { - gradPz += (*pressure)(xxx, yyy, x3+1) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - else { - gradPz += (*pressure)(x1, x2, x3) * c2o9 / ((c1o1 + c3o1 * abs(dir1)) * (c1o1 + c3o1 * abs(dir2))); - } - - } - } - - //3.0 * ((WEIGTH[TNE] * (((phi2[TNE] - phi2[BSW]) - (phi2[BSE] - phi2[TNW])) + ((phi2[TSE] - phi2[BNW]) - (phi2[BNE] - phi2[TSW]))) - //+WEIGTH[NE] * (((phi2[TE] - phi2[BW]) - (phi2[BE] - phi2[TW])) + ((phi2[TS] - phi2[BN]) + (phi2[TN] - phi2[BS])))) + - //+WEIGTH[N] * (phi2[T] - phi2[B])); - - 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()+c1o3*drho*dX1_phi*rhoToPhi/rho;//-gradPx/rho; - // forcingX2 = muForcingX2.Eval() + c1o3*drho*dX2_phi * rhoToPhi / rho;//-gradPy/rho; - //forcingX3 = muForcingX3.Eval() + c1o3*drho*dX3_phi * rhoToPhi / rho;//-gradPz/rho; - - forcingX1 = muForcingX1.Eval() -gradPx/rho; - forcingX2 = muForcingX2.Eval() -gradPy/rho; - forcingX3 = muForcingX3.Eval() -gradPz/rho; - - //LBMReal rho_m = 1.0 / densityRatio; - //forcingX1 = forcingX1 * (rho - rho_m); - //forcingX2 = forcingX2 * (rho - rho_m); - //forcingX3 = forcingX3 * (rho - rho_m); - vvx += forcingX1 * deltaT * 0.5; // X - vvy += forcingX2 * deltaT * 0.5; // Y - vvz += forcingX3 * deltaT * 0.5; // Z - - } - - - ///surface tension force - vvx += mu * dX1_phi * c1o2; - vvy += mu * dX2_phi * c1o2 ; - vvz += mu * dX3_phi * c1o2; - - //////classic source term - ///----Classic source term 8.4.2021 - - //LBMReal vvxF, vvyF, vvzF; - //vvxF = vvx;//-2*c1o24 * lap_vx;// - //vvyF = vvy;//-2*c1o24 * lap_vy;// - //vvzF = vvz;//-2*c1o24 * lap_vz;// - -// vvxF = 1.2* vvx- 0.2*0.5 * ((*velocityX)(x1 - 1, x2, x3) + (*velocityX)(x1 + 1, x2, x3)); -// vvyF = 1.2 *vvy- 0.2*0.5* ((*velocityY)(x1 , x2-1, x3) + (*velocityY)(x1 , x2+1, x3)); -// vvzF = 1.2 *vvz-0.2*0.5* ((*velocityZ)(x1 , x2, x3-1) + (*velocityZ)(x1 , x2, x3+1)); - //if (vvxF != vvx) { - // vvxF = vvxF; - //} - //LBMReal weightGrad = 1.0;// -denom * denom / (denom * denom + 0.0001 * 0.001); - //LBMReal dX1_phiF = dX1_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[REST]) * (phi[REST]) * normX1; - //LBMReal dX2_phiF = dX2_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[REST]) * (phi[REST]) * normX2; - //LBMReal dX3_phiF = dX3_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[REST]) * (phi[REST]) * normX3; - - //dX1_phiF *= 1.2; - //dX2_phiF *= 1.2; - //dX3_phiF *= 1.2; - - //LBMReal gradFD = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi); - //LBMReal gradPhi = (1.0 - phi[REST]) * (phi[REST]); - //gradPhi = (gradPhi > gradFD) ? gradPhi : gradFD; - //dX1_phiF = gradPhi * normX1; - // dX2_phiF = gradPhi * normX2; - // dX3_phiF = gradPhi * normX3; - - //LBMReal ux2; - //LBMReal uy2; - //LBMReal uz2; - //ux2 = vvxF * vvxF; - //uy2 = vvyF * vvyF; - //uz2 = vvzF * vvzF; - //LBMReal forcingTerm[D3Q27System::ENDF + 1]; - //for (int dir = STARTF; dir <= (FENDDIR); dir++) { - // LBMReal velProd = DX1[dir] * vvxF + DX2[dir] * vvyF + DX3[dir] * vvzF; - // LBMReal velSq1 = velProd * velProd; - // LBMReal gamma = WEIGTH[dir] * (1.0 + 3 * velProd + (4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2))); - - // //LBMReal fac1 = (gamma - WEIGTH[dir]) * c1o3 * rhoToPhi; - - // //forcingTerm[dir] = - // // (-vvxF) * (fac1 * dX1_phiF) + - // // (-vvyF) * (fac1 * dX2_phiF) + - // // (-vvzF) * (fac1 * dX3_phiF) + - // // (DX1[dir]) * (fac1 * dX1_phiF) + - // // (DX2[dir]) * (fac1 * dX2_phiF) + - // // (DX3[dir]) * (fac1 * dX3_phiF); - - - // //LBMReal fac1 = (gamma - WEIGTH[dir]) * c1o3 ; - - // //forcingTerm[dir] = - // // (-vvxF) * (fac1 * (dX1_phiF * rhoH + dX2_phi2 * rhoL)) + - // // (-vvyF) * (fac1 * (dX2_phiF * rhoH + dX2_phi2 * rhoL)) + - // // (-vvzF) * (fac1 * (dX3_phiF * rhoH + dX3_phi2 * rhoL)) + - // // (DX1[dir]) * (fac1 * (dX1_phiF * rhoH + dX2_phi2 * rhoL)) + - // // (DX2[dir]) * (fac1 * (dX2_phiF * rhoH + dX2_phi2 * rhoL)) + - // // (DX3[dir]) * (fac1 * (dX3_phiF * rhoH + dX3_phi2 * rhoL)); - - - - //} - - //LBMReal gamma = WEIGTH[REST] * (1.0 - 1.5 * (ux2 + uy2 + uz2)); - //LBMReal fac1 = (gamma - WEIGTH[REST]) * c1o3 * rhoToPhi; - //forcingTerm[REST] = (-vvxF) * (fac1 * (dX1_phiF * rhoH + dX2_phi2 * rhoL)) + - // (-vvyF) * (fac1 * (dX2_phiF * rhoH + dX2_phi2 * rhoL)) + - // (-vvzF) * (fac1 * (dX3_phiF * rhoH + dX3_phi2 * rhoL)); - - //////// - // LBMReal divAfterSource= - //( mfcbb + 3.0 * (0.5 * forcingTerm[dP00]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF) *(vvyF) +(vvzF) *(vvzF)-1)+ - //( mfbcb + 3.0 * (0.5 * forcingTerm[N]) / rho ) *((vvxF) *(vvxF) +(vvyF-1)*(vvyF-1)+(vvzF) *(vvzF)-1)+ - //( mfbbc + 3.0 * (0.5 * forcingTerm[T]) / rho ) *((vvxF) *(vvxF) +(vvyF) *(vvyF) +(vvzF-1)*(vvzF-1)-1)+ - //( mfccb + 3.0 * (0.5 * forcingTerm[NE]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF) *(vvzF)-1)+ - //( mfacb + 3.0 * (0.5 * forcingTerm[NW]) / rho ) *((vvxF+1)*(vvxF+1)+(vvyF-1)*(vvyF-1)+(vvzF) *(vvzF)-1)+ - //( mfcbc + 3.0 * (0.5 * forcingTerm[TE]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF) *(vvyF) +(vvzF-1)*(vvzF-1)-1)+ - //( mfabc + 3.0 * (0.5 * forcingTerm[TW]) / rho ) *((vvxF+1)*(vvxF+1)+(vvyF) *(vvyF) +(vvzF-1)*(vvzF-1)-1)+ - //( mfbcc + 3.0 * (0.5 * forcingTerm[TN]) / rho ) *((vvxF) *(vvxF) +(vvyF-1)*(vvyF-1)+(vvzF-1)*(vvzF-1)-1)+ - //( mfbac + 3.0 * (0.5 * forcingTerm[TS]) / rho ) *((vvxF) *(vvxF) +(vvyF+1)*(vvyF+1)+(vvzF-1)*(vvzF-1)-1)+ - //( mfccc + 3.0 * (0.5 * forcingTerm[TNE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF-1)*(vvzF-1)-1)+ - //( mfacc + 3.0 * (0.5 * forcingTerm[TNW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF-1)*(vvyF-1)+(vvzF-1)*(vvzF-1)-1)+ - //( mfcac + 3.0 * (0.5 * forcingTerm[TSE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF+1)*(vvyF+1)+(vvzF-1)*(vvzF-1)-1)+ - //( mfaac + 3.0 * (0.5 * forcingTerm[TSW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF+1)*(vvyF+1)+(vvzF-1)*(vvzF-1)-1)+ - //( mfabb + 3.0 * (0.5 * forcingTerm[W]) / rho ) *((vvxF+1)*(vvxF+1)+(vvyF) *(vvyF) +(vvzF) *(vvzF)-1)+ - //( mfbab + 3.0 * (0.5 * forcingTerm[S]) / rho ) *((vvxF) *(vvxF) +(vvyF+1)*(vvyF+1)+(vvzF) *(vvzF)-1)+ - //( mfbba + 3.0 * (0.5 * forcingTerm[B]) / rho ) *((vvxF) *(vvxF) +(vvyF) *(vvyF) +(vvzF+1)*(vvzF+1)-1)+ - //( mfaab + 3.0 * (0.5 * forcingTerm[SW]) / rho ) *((vvxF+1)*(vvxF+1)+(vvyF+1)*(vvyF+1)+(vvzF) *(vvzF)-1)+ - //( mfcab + 3.0 * (0.5 * forcingTerm[SE]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF+1)*(vvyF+1)+(vvzF) *(vvzF)-1)+ - //( mfaba + 3.0 * (0.5 * forcingTerm[BW]) / rho ) *((vvxF+1)*(vvxF+1)+(vvyF) *(vvyF) +(vvzF+1)*(vvzF+1)-1)+ - //( mfcba + 3.0 * (0.5 * forcingTerm[BE]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF) *(vvyF) +(vvzF+1)*(vvzF+1)-1)+ - //( mfbaa + 3.0 * (0.5 * forcingTerm[BS]) / rho ) *((vvxF) *(vvxF) +(vvyF+1)*(vvyF+1)+(vvzF+1)*(vvzF+1)-1)+ - //( mfbca + 3.0 * (0.5 * forcingTerm[BN]) / rho ) *((vvxF) *(vvxF) +(vvyF-1)*(vvyF-1)+(vvzF+1)*(vvzF+1)-1)+ - //( mfaaa + 3.0 * (0.5 * forcingTerm[BSW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF+1)*(vvyF+1)+(vvzF+1)*(vvzF+1)-1)+ - //( mfcaa + 3.0 * (0.5 * forcingTerm[BSE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF+1)*(vvyF+1)+(vvzF+1)*(vvzF+1)-1)+ - //( mfaca + 3.0 * (0.5 * forcingTerm[BNW]) / rho) *((vvxF+1)*(vvxF+1)+(vvyF-1)*(vvyF-1)+(vvzF+1)*(vvzF+1)-1)+ - //( mfcca + 3.0 * (0.5 * forcingTerm[BNE]) / rho) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF+1)*(vvzF+1)-1)+ - //( mfbbb + 3.0 * (0.5 * forcingTerm[REST]) / rho)*((vvxF)*(vvxF)+(vvyF)*(vvyF)+(vvzF)*(vvzF)-1); - - // LBMReal divBeforeSource = - // (mfcbb) * ((vvxF - 1) * (vvxF - 1) + (vvyF) * (vvyF)+(vvzF) * (vvzF)-1) + - // (mfbcb) * ((vvxF) * (vvxF)+(vvyF - 1) * (vvyF - 1) + (vvzF) * (vvzF)-1) + - // (mfbbc) * ((vvxF) * (vvxF)+(vvyF) * (vvyF)+(vvzF - 1) * (vvzF - 1)-1) + - // (mfccb) * ((vvxF - 1) * (vvxF - 1) + (vvyF - 1) * (vvyF - 1) + (vvzF) * (vvzF)-1) + - // (mfacb) * ((vvxF + 1) * (vvxF + 1) + (vvyF - 1) * (vvyF - 1) + (vvzF) * (vvzF)-1) + - // (mfcbc) * ((vvxF - 1) * (vvxF - 1) + (vvyF) * (vvyF)+(vvzF - 1) * (vvzF - 1)-1) + - // (mfabc) * ((vvxF + 1) * (vvxF + 1) + (vvyF) * (vvyF)+(vvzF - 1) * (vvzF - 1)-1) + - // (mfbcc) * ((vvxF) * (vvxF)+(vvyF - 1) * (vvyF - 1) + (vvzF - 1) * (vvzF - 1)-1) + - // (mfbac) * ((vvxF) * (vvxF)+(vvyF + 1) * (vvyF + 1) + (vvzF - 1) * (vvzF - 1)-1) + - // (mfccc) * ((vvxF - 1) * (vvxF - 1) + (vvyF - 1) * (vvyF - 1) + (vvzF - 1) * (vvzF - 1)-1) + - // (mfacc) * ((vvxF + 1) * (vvxF + 1) + (vvyF - 1) * (vvyF - 1) + (vvzF - 1) * (vvzF - 1)-1) + - // (mfcac) * ((vvxF - 1) * (vvxF - 1) + (vvyF + 1) * (vvyF + 1) + (vvzF - 1) * (vvzF - 1)-1) + - // (mfaac) * ((vvxF + 1) * (vvxF + 1) + (vvyF + 1) * (vvyF + 1) + (vvzF - 1) * (vvzF - 1)-1) + - // (mfabb) * ((vvxF + 1) * (vvxF + 1) + (vvyF) * (vvyF)+(vvzF) * (vvzF)-1) + - // (mfbab) * ((vvxF) * (vvxF)+(vvyF + 1) * (vvyF + 1) + (vvzF) * (vvzF)-1) + - // (mfbba) * ((vvxF) * (vvxF)+(vvyF) * (vvyF)+(vvzF + 1) * (vvzF + 1)-1) + - // (mfaab) * ((vvxF + 1) * (vvxF + 1) + (vvyF + 1) * (vvyF + 1) + (vvzF) * (vvzF)-1) + - // (mfcab) * ((vvxF - 1) * (vvxF - 1) + (vvyF + 1) * (vvyF + 1) + (vvzF) * (vvzF)-1) + - // (mfaba) * ((vvxF + 1) * (vvxF + 1) + (vvyF) * (vvyF)+(vvzF + 1) * (vvzF + 1)-1) + - // (mfcba) * ((vvxF - 1) * (vvxF - 1) + (vvyF) * (vvyF)+(vvzF + 1) * (vvzF + 1)-1) + - // (mfbaa) * ((vvxF) * (vvxF)+(vvyF + 1) * (vvyF + 1) + (vvzF + 1) * (vvzF + 1)-1) + - // (mfbca) * ((vvxF) * (vvxF)+(vvyF - 1) * (vvyF - 1) + (vvzF + 1) * (vvzF + 1)-1) + - // (mfaaa) * ((vvxF + 1) * (vvxF + 1) + (vvyF + 1) * (vvyF + 1) + (vvzF + 1) * (vvzF + 1)-1) + - // (mfcaa) * ((vvxF - 1) * (vvxF - 1) + (vvyF + 1) * (vvyF + 1) + (vvzF + 1) * (vvzF + 1)-1) + - // (mfaca) * ((vvxF + 1) * (vvxF + 1) + (vvyF - 1) * (vvyF - 1) + (vvzF + 1) * (vvzF + 1)-1) + - // (mfcca) * ((vvxF - 1) * (vvxF - 1) + (vvyF - 1) * (vvyF - 1) + (vvzF + 1) * (vvzF + 1)-1) + - // (mfbbb) * ((vvxF) * (vvxF)+(vvyF) * (vvyF)+(vvzF) * (vvzF)-1); - //if (divAfterSource - divBeforeSource != 0 && phi[REST]>0.0001 && phi[REST]<0.999) { - // std::cout << phi[REST]<<" "<< divAfterSource << " " << divBeforeSource <<" "<< divAfterSource/ divBeforeSource << std::endl; - //} - - //if (fabs(divAfterSource - divBeforeSource)/(fabs(divAfterSource) + fabs(divBeforeSource)+1e-10) > 1e-5) { - // LBMReal scaleDiv =0.95+(1-0.95)* (divBeforeSource) / (divBeforeSource - divAfterSource); - - // forcingTerm[dP00] *=scaleDiv; - // forcingTerm[N] *=scaleDiv; - // forcingTerm[T] *=scaleDiv; - // forcingTerm[NE] *=scaleDiv; - // forcingTerm[NW] *=scaleDiv; - // forcingTerm[TE] *=scaleDiv; - // forcingTerm[TW] *=scaleDiv; - // forcingTerm[TN] *=scaleDiv; - // forcingTerm[TS] *=scaleDiv; - // forcingTerm[TNE] *=scaleDiv; - // forcingTerm[TNW] *=scaleDiv; - // forcingTerm[TSE] *=scaleDiv; - // forcingTerm[TSW] *=scaleDiv; - // forcingTerm[W] *=scaleDiv; - // forcingTerm[S] *=scaleDiv; - // forcingTerm[B] *=scaleDiv; - // forcingTerm[SW] *=scaleDiv; - // forcingTerm[SE] *=scaleDiv; - // forcingTerm[BW] *=scaleDiv; - // forcingTerm[BE] *=scaleDiv; - // forcingTerm[BS] *=scaleDiv; - // forcingTerm[BN] *=scaleDiv; - // forcingTerm[BSW] *=scaleDiv; - // forcingTerm[BSE] *=scaleDiv; - // forcingTerm[BNW] *=scaleDiv; - // forcingTerm[BNE] *=scaleDiv; - // forcingTerm[REST] *=scaleDiv; - //} - //////// - - - //mfcbb += 3.0 * (0.5 * forcingTerm[dP00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; - //mfbcb += 3.0 * (0.5 * forcingTerm[N]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; - //mfbbc += 3.0 * (0.5 * forcingTerm[T]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; - //mfccb += 3.0 * (0.5 * forcingTerm[NE]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; - //mfacb += 3.0 * (0.5 * forcingTerm[NW]) / rho; //-(3.0*p1 - rho)*WEIGTH[NW ]; - //mfcbc += 3.0 * (0.5 * forcingTerm[TE]) / rho; //-(3.0*p1 - rho)*WEIGTH[TE ]; - //mfabc += 3.0 * (0.5 * forcingTerm[TW]) / rho; //-(3.0*p1 - rho)*WEIGTH[TW ]; - //mfbcc += 3.0 * (0.5 * forcingTerm[TN]) / rho; //-(3.0*p1 - rho)*WEIGTH[TN ]; - //mfbac += 3.0 * (0.5 * forcingTerm[TS]) / rho; //-(3.0*p1 - rho)*WEIGTH[TS ]; - //mfccc += 3.0 * (0.5 * forcingTerm[TNE]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNE]; - //mfacc += 3.0 * (0.5 * forcingTerm[TNW]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNW]; - //mfcac += 3.0 * (0.5 * forcingTerm[TSE]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSE]; - //mfaac += 3.0 * (0.5 * forcingTerm[TSW]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSW]; - //mfabb += 3.0 * (0.5 * forcingTerm[W]) / rho; //-(3.0*p1 - rho)*WEIGTH[W ]; - //mfbab += 3.0 * (0.5 * forcingTerm[S]) / rho; //-(3.0*p1 - rho)*WEIGTH[S ]; - //mfbba += 3.0 * (0.5 * forcingTerm[B]) / rho; //-(3.0*p1 - rho)*WEIGTH[B ]; - //mfaab += 3.0 * (0.5 * forcingTerm[SW]) / rho; //-(3.0*p1 - rho)*WEIGTH[SW ]; - //mfcab += 3.0 * (0.5 * forcingTerm[SE]) / rho; //-(3.0*p1 - rho)*WEIGTH[SE ]; - //mfaba += 3.0 * (0.5 * forcingTerm[BW]) / rho; //-(3.0*p1 - rho)*WEIGTH[BW ]; - //mfcba += 3.0 * (0.5 * forcingTerm[BE]) / rho; //-(3.0*p1 - rho)*WEIGTH[BE ]; - //mfbaa += 3.0 * (0.5 * forcingTerm[BS]) / rho; //-(3.0*p1 - rho)*WEIGTH[BS ]; - //mfbca += 3.0 * (0.5 * forcingTerm[BN]) / rho; //-(3.0*p1 - rho)*WEIGTH[BN ]; - //mfaaa += 3.0 * (0.5 * forcingTerm[BSW]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSW]; - //mfcaa += 3.0 * (0.5 * forcingTerm[BSE]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSE]; - //mfaca += 3.0 * (0.5 * forcingTerm[BNW]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNW]; - //mfcca += 3.0 * (0.5 * forcingTerm[BNE]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNE]; - //mfbbb += 3.0 * (0.5 * forcingTerm[REST]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST] - - //-------------------------------------------------------- - - - - - - //////end classic source term - - - - - //forcing - /////////////////////////////////////////////////////////////////////////////////////////// - if (withForcing) - { - muX1 = static_cast<real>(x1 - 1 + ix1 * maxX1); - muX2 = static_cast<real>(x2 - 1 + ix2 * maxX2); - muX3 = static_cast<real>(x3 - 1 + ix3 * maxX3); - - //forcingX1 = muForcingX1.Eval(); - //forcingX2 = muForcingX2.Eval(); - //forcingX3 = muForcingX3.Eval(); - - //vvx += forcingX1 * deltaT * 0.5; // X - //vvy += forcingX2 * deltaT * 0.5; // Y - //vvz += forcingX3 * deltaT * 0.5; // Z - } - - real vx2; - real vy2; - real vz2; - vx2 = vvx * vvx; - vy2 = vvy * vvy; - vz2 = vvz * vvz; - /////////////////////////////////////////////////////////////////////////////////////////// - real oMdrho; - - - oMdrho = mfccc + mfaaa; - m0 = mfaca + mfcac; - m1 = mfacc + mfcaa; - m2 = mfaac + mfcca; - oMdrho += m0; - m1 += m2; - oMdrho += m1; - m0 = mfbac + mfbca; - m1 = mfbaa + mfbcc; - m0 += m1; - m1 = mfabc + mfcba; - m2 = mfaba + mfcbc; - m1 += m2; - m0 += m1; - m1 = mfacb + mfcab; - m2 = mfaab + mfccb; - m1 += m2; - m0 += m1; - oMdrho += m0; - m0 = mfabb + mfcbb; - m1 = mfbab + mfbcb; - m2 = mfbba + mfbbc; - m0 += m1 + m2; - m0 += mfbbb; //hat gefehlt - oMdrho = (rhoRef - (oMdrho + m0))/rhoRef;// 12.03.21 check derivation!!!! - - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimit = 0.01; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += 1. * oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - - - // mfaaa = 0.0; - real OxxPyyPzz = 1.; //omega2 or bulk viscosity - // LBMReal OxyyPxzz = 1.;//-s9;//2+s9;// - // LBMReal OxyyMxzz = 1.;//2+s9;// - real O4 = 1.; - real O5 = 1.; - real O6 = 1.; - - - - /////fourth order parameters; here only for test. Move out of loop! - - real OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0))); - real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM); - // real Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0)); - real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - //FIXME: warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::d00M' ) - real BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - - - //Cum 4. - //LBMReal CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015 - //LBMReal CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015 - //LBMReal CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015 - - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab); - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); - - real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho); - - //Cum 5. - real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho; - real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho; - real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho; - - //Cum 6. - real 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 - real mxxPyyPzz = mfcaa + mfaca + mfaac; - - // LBMReal mfaaaS = (mfaaa * (-4 - 3 * OxxPyyPzz * (-1 + rho)) + 6 * mxxPyyPzz * OxxPyyPzz * (-1 + rho)) / (-4 + 3 * OxxPyyPzz * (-1 + rho)); - mxxPyyPzz -= mfaaa ;//12.03.21 shifted by mfaaa - //mxxPyyPzz-=(mfaaa+mfaaaS)*c1o2;//12.03.21 shifted by mfaaa - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - //applying phase field gradients first part: - // mxxPyyPzz += c2o3 * rhoToPhi * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz); - // 17.03.2021 attempt for statililization by assymptotically vanishing bias - //LBMReal correctionScaling = - // rhoToPhi / rho; // +0.5;// (vx2 + vy2 + vz2) * 100;// +0.5;//(vx2 + vy2 + vz2)*1000; - //mxxPyyPzz += (1.0 / 6.0) * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * - // correctionScaling; // As in Hesam's code - //mxxMyy += c1o3 * (dX1_phi * vvx - dX2_phi * vvy) * correctionScaling; - //mxxMzz += c1o3 * (dX1_phi * vvx - dX3_phi * vvz) * correctionScaling; - //mfabb += c1o6 * (dX2_phi * vvz + dX3_phi * vvy) * correctionScaling; - //mfbab += c1o6 * (dX1_phi * vvz + dX3_phi * vvx) * correctionScaling; - //mfbba += c1o6 * (dX1_phi * vvy + dX2_phi * vvx) * correctionScaling; - - real dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz); - real dyuy = dxux + collFactorM * c3o2 * mxxMyy; - real dzuz = dxux + collFactorM * c3o2 * mxxMzz; - - real Dxy = -c3o1 * collFactorM * mfbba; - real Dxz = -c3o1 * collFactorM * mfbab; - real Dyz = -c3o1 * collFactorM * mfabb; - - - //relax - mxxPyyPzz += OxxPyyPzz * (/*mfaaa*/ - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - mxxMyy += collFactorM * (-mxxMyy) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += collFactorM * (-mxxMzz) - 3. * (1. - c1o2 * collFactorM) * (vx2 * dxux - vz2 * dzuz); - - mfabb += collFactorM * (-mfabb); - mfbab += collFactorM * (-mfbab); - mfbba += collFactorM * (-mfbba); - - //applying phase field gradients second part: - //mxxPyyPzz += c2o3 * rhoToPhi * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz); - //mxxPyyPzz += (1.0 / 6.0) * (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * - // correctionScaling; // As in Hesam's code - //mxxMyy += c1o3 * (dX1_phi * vvx - dX2_phi * vvy) * correctionScaling; - //mxxMzz += c1o3 * (dX1_phi * vvx - dX3_phi * vvz) * correctionScaling; - //mfabb += c1o6 * (dX2_phi * vvz + dX3_phi * vvy) * correctionScaling; - //mfbab += c1o6 * (dX1_phi * vvz + dX3_phi * vvx) * correctionScaling; - //mfbba += c1o6 * (dX1_phi * vvy + dX2_phi * vvx) * correctionScaling; - - ////updated pressure - //mfaaa += (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling; - mfaaa = 0.0; // Pressure elimination as in standard velocity model - // mfaaa += (rho - c1) * (dxux + dyuy + dzuz); - - mxxPyyPzz += mfaaa; // 12.03.21 shifted by mfaaa - - // mxxPyyPzz += (mfaaa + mfaaaS) * c1o2; - //mfaaa = mfaaaS; - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - wadjust = OxyyMxzz + (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); - CUMacc = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc); - CUMcac = -O4 * (c1o1 / collFactorM - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac); - CUMcca = -O4 * (c1o1 / collFactorM - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca); - CUMbbc = -O4 * (c1o1 / collFactorM - c1o2) * Dxy * c1o3 * BB + (c1o1 - O4) * (CUMbbc); - CUMbcb = -O4 * (c1o1 / collFactorM - c1o2) * Dxz * c1o3 * BB + (c1o1 - O4) * (CUMbcb); - CUMcbb = -O4 * (c1o1 / collFactorM - c1o2) * Dyz * c1o3 * BB + (c1o1 - O4) * (CUMcbb); - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - //back cumulants to central moments - //4. - //mfcbb = CUMcbb + ((mfcaa + c1o3 * 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 - c1o1) * oMdrho; - mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - c1o1) * oMdrho; - mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - c1o1) * 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 * (vvz - c1o2) + (mfaaa + 1. * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - 2. * mfaab * vvz + mfaaa * (1. - vz2) - 1. * oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + 1. * oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - 2. * mfabb * vvz + mfaba * (1. - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - 2. * mfacb * vvz + mfaca * (1. - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - 2. * mfbab * vvz + mfbaa * (1. - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - 2. * mfbbb * vvz + mfbba * (1. - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - 2. * mfbcb * vvz + mfbca * (1. - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - 2. * mfcab * vvz + mfcaa * (1. - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - 2. * mfcbb * vvz + mfcba * (1. - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - 2. * mfccb * vvz + mfcca * (1. - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - 2. * mfaba * vvy + mfaaa * (1. - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - 2. * mfabb * vvy + mfaab * (1. - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - 2. * mfabc * vvy + mfaac * (1. - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - 2. * mfbba * vvy + mfbaa * (1. - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - 2. * mfbbb * vvy + mfbab * (1. - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - 2. * mfbbc * vvy + mfbac * (1. - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - 2. * mfcba * vvy + mfcaa * (1. - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - 2. * mfcbb * vvy + mfcab * (1. - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - 2. * mfcbc * vvy + mfcac * (1. - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - 2. * mfbaa * vvx + mfaaa * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - 2. * mfbba * vvx + mfaba * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - 2. * mfbca * vvx + mfaca * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - 2. * mfbab * vvx + mfaab * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - 2. * mfbbb * vvx + mfabb * (1. - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - 2. * mfbcb * vvx + mfacb * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - 2. * mfbac * vvx + mfaac * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - 2. * mfbbc * vvx + mfabc * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - 2. * mfbcc * vvx + mfacc * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - - /////classical source term 8.4.2021 - - //mfcbb += 3.0 * (0.5 * forcingTerm[dP00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; - //mfbcb += 3.0 * (0.5 * forcingTerm[N]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; - //mfbbc += 3.0 * (0.5 * forcingTerm[T]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; - //mfccb += 3.0 * (0.5 * forcingTerm[NE]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; - //mfacb += 3.0 * (0.5 * forcingTerm[NW]) / rho; //-(3.0*p1 - rho)*WEIGTH[NW ]; - //mfcbc += 3.0 * (0.5 * forcingTerm[TE]) / rho; //-(3.0*p1 - rho)*WEIGTH[TE ]; - //mfabc += 3.0 * (0.5 * forcingTerm[TW]) / rho; //-(3.0*p1 - rho)*WEIGTH[TW ]; - //mfbcc += 3.0 * (0.5 * forcingTerm[TN]) / rho; //-(3.0*p1 - rho)*WEIGTH[TN ]; - //mfbac += 3.0 * (0.5 * forcingTerm[TS]) / rho; //-(3.0*p1 - rho)*WEIGTH[TS ]; - //mfccc += 3.0 * (0.5 * forcingTerm[TNE]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNE]; - //mfacc += 3.0 * (0.5 * forcingTerm[TNW]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNW]; - //mfcac += 3.0 * (0.5 * forcingTerm[TSE]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSE]; - //mfaac += 3.0 * (0.5 * forcingTerm[TSW]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSW]; - //mfabb += 3.0 * (0.5 * forcingTerm[W]) / rho; //-(3.0*p1 - rho)*WEIGTH[W ]; - //mfbab += 3.0 * (0.5 * forcingTerm[S]) / rho; //-(3.0*p1 - rho)*WEIGTH[S ]; - //mfbba += 3.0 * (0.5 * forcingTerm[B]) / rho; //-(3.0*p1 - rho)*WEIGTH[B ]; - //mfaab += 3.0 * (0.5 * forcingTerm[SW]) / rho; //-(3.0*p1 - rho)*WEIGTH[SW ]; - //mfcab += 3.0 * (0.5 * forcingTerm[SE]) / rho; //-(3.0*p1 - rho)*WEIGTH[SE ]; - //mfaba += 3.0 * (0.5 * forcingTerm[BW]) / rho; //-(3.0*p1 - rho)*WEIGTH[BW ]; - //mfcba += 3.0 * (0.5 * forcingTerm[BE]) / rho; //-(3.0*p1 - rho)*WEIGTH[BE ]; - //mfbaa += 3.0 * (0.5 * forcingTerm[BS]) / rho; //-(3.0*p1 - rho)*WEIGTH[BS ]; - //mfbca += 3.0 * (0.5 * forcingTerm[BN]) / rho; //-(3.0*p1 - rho)*WEIGTH[BN ]; - //mfaaa += 3.0 * (0.5 * forcingTerm[BSW]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSW]; - //mfcaa += 3.0 * (0.5 * forcingTerm[BSE]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSE]; - //mfaca += 3.0 * (0.5 * forcingTerm[BNW]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNW]; - //mfcca += 3.0 * (0.5 * forcingTerm[BNE]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNE]; - //mfbbb += 3.0 * (0.5 * forcingTerm[REST]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST] - - - - ////////////////////////////////////////////////////////////////////////// - //proof correctness - ////////////////////////////////////////////////////////////////////////// -//#ifdef PROOF_CORRECTNESS -// LBMReal rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) -// + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) -// + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; -// //LBMReal dif = fabs(drho - rho_post); -// LBMReal dif = drho + (dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz) * correctionScaling - rho_post; -//#ifdef SINGLEPRECISION -// if (dif > 10.0E-7 || dif < -10.0E-7) -//#else -// if (dif > 10.0E-15 || dif < -10.0E-15) -//#endif -// { -// UB_THROW(UbException(UB_EXARGS, "drho=" + UbSystem::toString(drho) + ", rho_post=" + UbSystem::toString(rho_post) -// + " dif=" + UbSystem::toString(dif) -// + " drho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3))); -// //UBLOG(logERROR,"LBMKernelETD3Q27CCLB::collideAll(): drho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3)); -// //exit(EXIT_FAILURE); -// } -//#endif - ////////////////////////////////////////////////////////////////////////// - //write distribution - ////////////////////////////////////////////////////////////////////////// - (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = mfaab ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = mfaba ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca ;//* rho * c1o3; - (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac ;//* rho * c1o3; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac ;//* rho * c1o3; - - (*this->zeroDistributionsF)(x1, x2, x3) = mfbbb;// *rho* c1o3; - ////////////////////////////////////////////////////////////////////////// - - ////!Incompressible Kernal - - -// ///////Old Kernel \|/ -// // 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 ux2 = ux * ux; -// LBMReal uy2 = uy * uy; -// LBMReal uz2 = uz * uz; -// -// //----------- Calculating Forcing Terms * ------------- -// 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 fac1 = (gamma - WEIGTH[dir]) * c1o3 * rhoToPhi; -// -// 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)); -// 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)); -// -// //-------------------------------------------------------- -// -// mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[dP00]) / 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; -// -// -// 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) * mfabb + 2. * mfbba * mfbab); -// LBMReal CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); -// LBMReal CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); -// -// LBMReal CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + -// c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho); -// LBMReal CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + -// c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho); -// LBMReal CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + -// c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho); -// -// // Cum 5. -// LBMReal CUMbcc = mfbcc - -// (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + -// 2. * (mfbab * mfacb + mfbba * mfabc)) - -// c1o3 * (mfbca + mfbac) * oMdrho; -// LBMReal CUMcbc = mfcbc - -// (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + -// 2. * (mfabb * mfcab + mfbba * mfbac)) - -// c1o3 * (mfcba + mfabc) * oMdrho; -// LBMReal CUMccb = mfccb - -// (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + -// 2. * (mfbab * mfbca + mfabb * mfcba)) - -// c1o3 * (mfacb + mfcab) * oMdrho; -// -// // Cum 6. -// LBMReal CUMccc = -// mfccc + -// ((-4. * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - -// 4. * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - -// 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) + -// (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) + -// 2. * (mfcaa * mfaca * mfaac) + 16. * mfbba * mfbab * mfabb) - -// c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho - -// c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - -// c1o27 * oMdrho * oMdrho * (-2. * oMdrho) + -// (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) + -// (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * -// c2o3 * oMdrho) + -// c1o27 * oMdrho; -// -// // 2. -// // linear combinations -// LBMReal mxxPyyPzz = mfcaa + mfaca + mfaac; -// LBMReal mxxMyy = mfcaa - mfaca; -// LBMReal mxxMzz = mfcaa - mfaac; -// -// LBMReal dxux = -c1o2 * collFactorM * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); -// LBMReal dyuy = dxux + collFactorM * c3o2 * mxxMyy; -// LBMReal dzuz = dxux + collFactorM * c3o2 * mxxMzz; -// -// (*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) * mfabb + 2. * mfbba * mfbab); -// mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); -// mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); -// -// mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + -// c1o9 * (oMdrho - 1) * oMdrho; -// mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + -// c1o9 * (oMdrho - 1) * oMdrho; -// mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + -// c1o9 * (oMdrho - 1) * oMdrho; -// -// // 5. -// mfbcc = CUMbcc + -// (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + -// 2. * (mfbab * mfacb + mfbba * mfabc)) + -// c1o3 * (mfbca + mfbac) * oMdrho; -// mfcbc = CUMcbc + -// (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + -// 2. * (mfabb * mfcab + mfbba * mfbac)) + -// c1o3 * (mfcba + mfabc) * oMdrho; -// mfccb = CUMccb + -// (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + -// 2. * (mfbab * mfbca + mfabb * mfcba)) + -// c1o3 * (mfacb + mfcab) * oMdrho; -// -// // 6. -// mfccc = CUMccc - -// ((-4. * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - -// 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) - -// 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) + -// (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) + -// 2. * (mfcaa * mfaca * mfaac) + 16. * mfbba * mfbab * mfabb) - -// c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho - -// c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - -// c1o27 * oMdrho * oMdrho * (-2. * oMdrho) + -// (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) + -// (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * -// c2o3 * oMdrho) - -// c1o27 * oMdrho; -// -// //////////////////////////////////////////////////////////////////////////////////// -// // 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 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))); -// } -//#endif -// -// mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[dP00]; -// 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; -// !Old Kernel - ///////////////////// P H A S E - F I E L D S O L V E R - //////////////////////////////////////////// - /////CUMULANT PHASE-FIELD - real omegaD =1.0/( 3.0 * mob + 0.5); - { - mfcbb = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - mfbcb = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - mfbbc = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - mfccb = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - mfacb = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - mfcbc = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - mfabc = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - mfbcc = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - mfbac = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - mfccc = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - mfacc = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - mfcac = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - mfaac = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - mfabb = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - mfbab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - mfbba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - mfaab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - mfcab = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - mfaba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - mfcba = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - mfbaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - mfbca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - mfaaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - mfcaa = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - mfaca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - mfcca = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - mfbbb = (*this->zeroDistributionsH1)(x1, x2, x3); - - - //////////////////////////////////////////////////////////////////////////////////// - //! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // fluid component - //LBMReal drhoFluid = - // ((((fccc + faaa) + (faca + fcac)) + ((facc + fcaa) + (faac + fcca))) + - // (((fbac + fbca) + (fbaa + fbcc)) + ((fabc + fcba) + (faba + fcbc)) + ((facb + fcab) + (faab + fccb))) + - // ((fabb + fcbb) + (fbab + fbcb) + (fbba + fbbc))) + fbbb; - - //LBMReal rhoFluid = c1 + drhoFluid; - //LBMReal OOrhoFluid = c1 / rhoFluid; - - - //LBMReal vvx = - // ((((fccc - faaa) + (fcac - faca)) + ((fcaa - facc) + (fcca - faac))) + - // (((fcba - fabc) + (fcbc - faba)) + ((fcab - facb) + (fccb - faab))) + - // (fcbb - fabb)) * OOrhoFluid; - //LBMReal vvy = - // ((((fccc - faaa) + (faca - fcac)) + ((facc - fcaa) + (fcca - faac))) + - // (((fbca - fbac) + (fbcc - fbaa)) + ((facb - fcab) + (fccb - faab))) + - // (fbcb - fbab)) * OOrhoFluid; - //LBMReal vvz = - // ((((fccc - faaa) + (fcac - faca)) + ((facc - fcaa) + (faac - fcca))) + - // (((fbac - fbca) + (fbcc - fbaa)) + ((fabc - fcba) + (fcbc - faba))) + - // (fbbc - fbba)) * OOrhoFluid; - - // LBMReal vvx = ux; - // LBMReal vvy = uy; - // LBMReal vvz = uz; - //////////////////////////////////////////////////////////////////////////////////// - // second component - real concentration = - ((((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; - //////////////////////////////////////////////////////////////////////////////////// - //! - Add half of the acceleration (body force) to the velocity as in Eq. (42) \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - // LBMReal fx = forces[0]; - // LBMReal fy = forces[1]; - // LBMReal fz = -concentration * forces[2]; - // vvx += fx * c1o2; - // vvy += fy * c1o2; - // vvz += fz * c1o2; - //////////////////////////////////////////////////////////////////////////////////// - real oneMinusRho = c1o1 - concentration; - - real cx = - ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)); - real cy = - ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)); - real cz = - ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)); - - //////////////////////////////////////////////////////////////////////////////////// - // calculate the square of velocities for this lattice node - real cx2 = cx * cx; - real cy2 = cy * cy; - real cz2 = cz * cz; - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (6)-(14) in \ref - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho); - forwardChimera(mfaab, mfabb, mfacb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho); - forwardChimera(mfbab, mfbbb, mfbcb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho); - forwardChimera(mfcab, mfcbb, mfccb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho); - forwardChimera(mfaba, mfbba, mfcba, cx, cx2); - forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho); - forwardChimera(mfaab, mfbab, mfcab, cx, cx2); - forwardChimera(mfabb, mfbbb, mfcbb, cx, cx2); - forwardChimera(mfacb, mfbcb, mfccb, cx, cx2); - forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho); - forwardChimera(mfabc, mfbbc, mfcbc, cx, cx2); - forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c3o1, c1o9, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - //! - experimental Cumulant ... to be published ... hopefully - //! - - // linearized orthogonalization of 3rd order central moments - real Mabc = mfabc - mfaba * c1o3; - real Mbca = mfbca - mfbaa * c1o3; - real Macb = mfacb - mfaab * c1o3; - real Mcba = mfcba - mfaba * c1o3; - real Mcab = mfcab - mfaab * c1o3; - real Mbac = mfbac - mfbaa * c1o3; - // linearized orthogonalization of 5th order central moments - real Mcbc = mfcbc - mfaba * c1o9; - real Mbcc = mfbcc - mfbaa * c1o9; - real Mccb = mfccb - mfaab * c1o9; - - // collision of 1st order moments - // LBMReal ccx, ccy, ccz; - - - cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + - normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; - cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + - normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; - cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + - normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; - - //mhx = (ux * phi[REST] + normX1 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhx; - //mhy = (uy * phi[REST] + normX2 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhy; - //mhz = (uz * phi[REST] + normX3 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhz; - - - cx2 = cx * cx; - cy2 = cy * cy; - cz2 = cz * cz; - - // equilibration of 2nd order moments - mfbba = c0o1; - mfbab = c0o1; - mfabb = c0o1; - - mfcaa = c1o3 * concentration; - mfaca = c1o3 * concentration; - mfaac = c1o3 * concentration; - - - //LBMReal omega2 = 1.0f;// omegaD; - //mfbba *= (c1 - omega2); - //mfbab *= (c1 - omega2); - //mfabb *= (c1 - omega2); - - //mfcaa = mfcaa*(c1 - omega2) + omega2*c1o3 * concentration; - //mfaca = mfaca*(c1 - omega2) + omega2*c1o3 * concentration; - //mfaac = mfaac*(c1 - omega2) + omega2*c1o3 * concentration; - - // equilibration of 3rd order moments - Mabc = c0o1; - Mbca = c0o1; - Macb = c0o1; - Mcba = c0o1; - Mcab = c0o1; - Mbac = c0o1; - mfbbb = c0o1; - - // from linearized orthogonalization 3rd order central moments to central moments - mfabc = Mabc + mfaba * c1o3; - mfbca = Mbca + mfbaa * c1o3; - mfacb = Macb + mfaab * c1o3; - mfcba = Mcba + mfaba * c1o3; - mfcab = Mcab + mfaab * c1o3; - mfbac = Mbac + mfbaa * c1o3; - - // equilibration of 4th order moments - mfacc = c1o9 * concentration; - mfcac = c1o9 * concentration; - mfcca = c1o9 * concentration; - - mfcbb = c0o1; - mfbcb = c0o1; - mfbbc = c0o1; - - // equilibration of 5th order moments - Mcbc = c0o1; - Mbcc = c0o1; - Mccb = c0o1; - - // from linearized orthogonalization 5th order central moments to central moments - mfcbc = Mcbc + mfaba * c1o9; - mfbcc = Mbcc + mfbaa * c1o9; - mfccb = Mccb + mfaab * c1o9; - - // equilibration of 6th order moment - mfccc = c1o27 * concentration; - - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (88)-(96) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho); - backwardChimera(mfaba, mfbba, mfcba, cx, cx2); - backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho); - backwardChimera(mfaab, mfbab, mfcab, cx, cx2); - backwardChimera(mfabb, mfbbb, mfcbb, cx, cx2); - backwardChimera(mfacb, mfbcb, mfccb, cx, cx2); - backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho); - backwardChimera(mfabc, mfbbc, mfcbc, cx, cx2); - backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c9o1, c1o9, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho); - backwardChimera(mfaab, mfabb, mfacb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho); - backwardChimera(mfbab, mfbbb, mfbcb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho); - backwardChimera(mfcab, mfcbb, mfccb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho); - - - - (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3) = mfabb; - (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3) = mfbab; - (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3) = mfbba; - (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3) = mfaab; - (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab; - (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3) = mfaba; - (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba; - (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa; - (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca; - (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa; - (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa; - (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca; - (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca; - - (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3 ) = mfcbb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3 ) = mfbcb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3 ) = mfccb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3 ) = mfacb; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac; - (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac; - - (*this->zeroDistributionsH1)(x1,x2,x3) = mfbbb; - } - - ////Phasefield 2: - - { - - normX1 *= -1; - normX2 *= -1; - normX3 *= -1; - - mfcbb = (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3); - mfbcb = (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3); - mfbbc = (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3); - mfccb = (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3); - mfacb = (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3); - mfcbc = (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3); - mfabc = (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3); - mfbcc = (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3); - mfbac = (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3); - mfccc = (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3); - mfacc = (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3); - mfcac = (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3); - mfaac = (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3); - mfabb = (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3); - mfbab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3); - mfbba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p); - mfaab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3); - mfcab = (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3); - mfaba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p); - mfcba = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p); - mfbaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p); - mfbca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p); - mfaaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p); - mfcaa = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p); - mfaca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p); - mfcca = (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p); - mfbbb = (*this->zeroDistributionsH2)(x1, x2, x3); - - - //////////////////////////////////////////////////////////////////////////////////// -//! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref -//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> -//! -//////////////////////////////////////////////////////////////////////////////////// -// fluid component - //LBMReal drhoFluid = - // ((((fccc + faaa) + (faca + fcac)) + ((facc + fcaa) + (faac + fcca))) + - // (((fbac + fbca) + (fbaa + fbcc)) + ((fabc + fcba) + (faba + fcbc)) + ((facb + fcab) + (faab + fccb))) + - // ((fabb + fcbb) + (fbab + fbcb) + (fbba + fbbc))) + fbbb; - - //LBMReal rhoFluid = c1 + drhoFluid; - //LBMReal OOrhoFluid = c1 / rhoFluid; - - - //LBMReal vvx = - // ((((fccc - faaa) + (fcac - faca)) + ((fcaa - facc) + (fcca - faac))) + - // (((fcba - fabc) + (fcbc - faba)) + ((fcab - facb) + (fccb - faab))) + - // (fcbb - fabb)) * OOrhoFluid; - //LBMReal vvy = - // ((((fccc - faaa) + (faca - fcac)) + ((facc - fcaa) + (fcca - faac))) + - // (((fbca - fbac) + (fbcc - fbaa)) + ((facb - fcab) + (fccb - faab))) + - // (fbcb - fbab)) * OOrhoFluid; - //LBMReal vvz = - // ((((fccc - faaa) + (fcac - faca)) + ((facc - fcaa) + (faac - fcca))) + - // (((fbac - fbca) + (fbcc - fbaa)) + ((fabc - fcba) + (fcbc - faba))) + - // (fbbc - fbba)) * OOrhoFluid; - - // LBMReal vvx = ux; - // LBMReal vvy = uy; - // LBMReal vvz = uz; - //////////////////////////////////////////////////////////////////////////////////// - // second component - real concentration = - ((((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; - //////////////////////////////////////////////////////////////////////////////////// - //! - Add half of the acceleration (body force) to the velocity as in Eq. (42) \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - // LBMReal fx = forces[0]; - // LBMReal fy = forces[1]; - // LBMReal fz = -concentration * forces[2]; - // vvx += fx * c1o2; - // vvy += fy * c1o2; - // vvz += fz * c1o2; - //////////////////////////////////////////////////////////////////////////////////// - real oneMinusRho = c1o1 - concentration; - - real cx = - ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)); - real cy = - ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)); - real cz = - ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)); - - //////////////////////////////////////////////////////////////////////////////////// - // calculate the square of velocities for this lattice node - real cx2 = cx * cx; - real cy2 = cy * cy; - real cz2 = cz * cz; - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (6)-(14) in \ref - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho); - forwardChimera(mfaab, mfabb, mfacb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho); - forwardChimera(mfbab, mfbbb, mfbcb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho); - forwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho); - forwardChimera(mfcab, mfcbb, mfccb, cy, cy2); - forwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - forwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho); - forwardChimera(mfaba, mfbba, mfcba, cx, cx2); - forwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho); - forwardChimera(mfaab, mfbab, mfcab, cx, cx2); - forwardChimera(mfabb, mfbbb, mfcbb, cx, cx2); - forwardChimera(mfacb, mfbcb, mfccb, cx, cx2); - forwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho); - forwardChimera(mfabc, mfbbc, mfcbc, cx, cx2); - forwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c3o1, c1o9, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - //! - experimental Cumulant ... to be published ... hopefully - //! - - // linearized orthogonalization of 3rd order central moments - real Mabc = mfabc - mfaba * c1o3; - real Mbca = mfbca - mfbaa * c1o3; - real Macb = mfacb - mfaab * c1o3; - real Mcba = mfcba - mfaba * c1o3; - real Mcab = mfcab - mfaab * c1o3; - real Mbac = mfbac - mfbaa * c1o3; - // linearized orthogonalization of 5th order central moments - real Mcbc = mfcbc - mfaba * c1o9; - real Mbcc = mfbcc - mfbaa * c1o9; - real Mccb = mfccb - mfaab * c1o9; - - // collision of 1st order moments - cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + - normX1 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale; - cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + - normX2 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale; - cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + - normX3 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale; - - //mhx = (ux * phi[REST] + normX1 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhx; - //mhy = (uy * phi[REST] + normX2 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhy; -//mhz = (uz * phi[REST] + normX3 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhz; - - - cx2 = cx * cx; - cy2 = cy * cy; - cz2 = cz * cz; - - // equilibration of 2nd order moments - mfbba = c0o1; - mfbab = c0o1; - mfabb = c0o1; - - mfcaa = c1o3 * concentration; - mfaca = c1o3 * concentration; - mfaac = c1o3 * concentration; - - - //LBMReal omega2 = 1.0f;// omegaD; - //mfbba *= (c1 - omega2); - //mfbab *= (c1 - omega2); - //mfabb *= (c1 - omega2); - - //mfcaa = mfcaa*(c1 - omega2) + omega2*c1o3 * concentration; - //mfaca = mfaca*(c1 - omega2) + omega2*c1o3 * concentration; - //mfaac = mfaac*(c1 - omega2) + omega2*c1o3 * concentration; - - // equilibration of 3rd order moments - Mabc = c0o1; - Mbca = c0o1; - Macb = c0o1; - Mcba = c0o1; - Mcab = c0o1; - Mbac = c0o1; - mfbbb = c0o1; - - // from linearized orthogonalization 3rd order central moments to central moments - mfabc = Mabc + mfaba * c1o3; - mfbca = Mbca + mfbaa * c1o3; - mfacb = Macb + mfaab * c1o3; - mfcba = Mcba + mfaba * c1o3; - mfcab = Mcab + mfaab * c1o3; - mfbac = Mbac + mfbaa * c1o3; - - // equilibration of 4th order moments - mfacc = c1o9 * concentration; - mfcac = c1o9 * concentration; - mfcca = c1o9 * concentration; - - mfcbb = c0o1; - mfbcb = c0o1; - mfbbc = c0o1; - - // equilibration of 5th order moments - Mcbc = c0o1; - Mbcc = c0o1; - Mccb = c0o1; - - // from linearized orthogonalization 5th order central moments to central moments - mfcbc = Mcbc + mfaba * c1o9; - mfbcc = Mbcc + mfbaa * c1o9; - mfccb = Mccb + mfaab * c1o9; - - // equilibration of 6th order moment - mfccc = c1o27 * concentration; - - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! see also Eq. (88)-(96) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfbaa, mfcaa, cx, cx2, c1o1, c1o1, oneMinusRho); - backwardChimera(mfaba, mfbba, mfcba, cx, cx2); - backwardInverseChimeraWithKincompressible(mfaca, mfbca, mfcca, cx, cx2, c3o1, c1o3, oneMinusRho); - backwardChimera(mfaab, mfbab, mfcab, cx, cx2); - backwardChimera(mfabb, mfbbb, mfcbb, cx, cx2); - backwardChimera(mfacb, mfbcb, mfccb, cx, cx2); - backwardInverseChimeraWithKincompressible(mfaac, mfbac, mfcac, cx, cx2, c3o1, c1o3, oneMinusRho); - backwardChimera(mfabc, mfbbc, mfcbc, cx, cx2); - backwardInverseChimeraWithKincompressible(mfacc, mfbcc, mfccc, cx, cx2, c9o1, c1o9, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaba, mfaca, cy, cy2, c6o1, c1o6, oneMinusRho); - backwardChimera(mfaab, mfabb, mfacb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfaac, mfabc, mfacc, cy, cy2, c18o1, c1o18, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbba, mfbca, cy, cy2, c3o2, c2o3, oneMinusRho); - backwardChimera(mfbab, mfbbb, mfbcb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfbac, mfbbc, mfbcc, cy, cy2, c9o2, c2o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcba, mfcca, cy, cy2, c6o1, c1o6, oneMinusRho); - backwardChimera(mfcab, mfcbb, mfccb, cy, cy2); - backwardInverseChimeraWithKincompressible(mfcac, mfcbc, mfccc, cy, cy2, c18o1, c1o18, oneMinusRho); - - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - backwardInverseChimeraWithKincompressible(mfaaa, mfaab, mfaac, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfaba, mfabb, mfabc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfaca, mfacb, mfacc, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbaa, mfbab, mfbac, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbba, mfbbb, mfbbc, cz, cz2, c9o4, c4o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfbca, mfbcb, mfbcc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcaa, mfcab, mfcac, cz, cz2, c36o1, c1o36, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcba, mfcbb, mfcbc, cz, cz2, c9o1, c1o9, oneMinusRho); - backwardInverseChimeraWithKincompressible(mfcca, mfccb, mfccc, cz, cz2, c36o1, c1o36, oneMinusRho); - - - - (*this->localDistributionsH2)(D3Q27System::ET_E, x1, x2, x3) = mfabb; - (*this->localDistributionsH2)(D3Q27System::ET_N, x1, x2, x3) = mfbab; - (*this->localDistributionsH2)(D3Q27System::ET_T, x1, x2, x3) = mfbba; - (*this->localDistributionsH2)(D3Q27System::ET_NE, x1, x2, x3) = mfaab; - (*this->localDistributionsH2)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab; - (*this->localDistributionsH2)(D3Q27System::ET_TE, x1, x2, x3) = mfaba; - (*this->localDistributionsH2)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba; - (*this->localDistributionsH2)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa; - (*this->localDistributionsH2)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca; - (*this->localDistributionsH2)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa; - (*this->localDistributionsH2)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa; - (*this->localDistributionsH2)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca; - (*this->localDistributionsH2)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca; - - (*this->nonLocalDistributionsH2)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac; - (*this->nonLocalDistributionsH2)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac; - - (*this->zeroDistributionsH2)(x1, x2, x3) = mfbbb; - - } - - - - /////!CUMULANT PHASE-FIELD - - - - ///////////////////// PHASE-FIELD BGK SOLVER /////////////////////////////// - - //h[dP00] = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); - //h[N] = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3); - //h[T] = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3); - //h[NE] = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3); - //h[NW] = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3); - //h[TE] = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3); - //h[TW] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3); - //h[TN] = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3); - //h[TS] = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3); - //h[TNE] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3); - //h[TNW] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3); - //h[TSE] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3); - //h[TSW] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3); - - //h[W] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3); - //h[S] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3); - //h[B] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p); - //h[SW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3); - //h[SE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3); - //h[BW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p); - //h[BE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p); - //h[BS] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p); - //h[BN] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p); - //h[BSW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p); - //h[BSE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p); - //h[BNW] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p); - //h[BNE] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p); - - //h[REST] = (*this->zeroDistributionsH)(x1, x2, x3); - - //for (int dir = STARTF; dir < (ENDF + 1); dir++) { - // LBMReal velProd = DX1[dir] * ux + DX2[dir] * uy + DX3[dir] * uz; - // LBMReal velSq1 = velProd * velProd; - // LBMReal hEq; //, gEq; - - // if (dir != REST) { - // LBMReal dirGrad_phi = (phi[dir] - phi[INVDIR[dir]]) / 2.0; - // LBMReal hSource = (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST]) * (dirGrad_phi) / denom; - // hEq = phi[REST] * WEIGTH[dir] * (1.0 + 3.0 * velProd + 4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2)) + hSource * WEIGTH[dir]; - - // // This corresponds with the collision factor of 1.0 which equals (tauH + 0.5). - // h[dir] = h[dir] - (h[dir] - hEq) / (tauH); - - // } else { - // hEq = phi[REST] * WEIGTH[REST] * (1.0 - 1.5 * (ux2 + uy2 + uz2)); - // h[REST] = h[REST] - (h[REST] - hEq) / (tauH); - // } - //} - - //(*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3) = h[D3Q27System::INV_E]; - //(*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3) = h[D3Q27System::INV_N]; - //(*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3) = h[D3Q27System::INV_T]; - //(*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3) = h[D3Q27System::INV_NE]; - //(*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3) = h[D3Q27System::INV_NW]; - //(*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3) = h[D3Q27System::INV_TE]; - //(*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3) = h[D3Q27System::INV_TW]; - //(*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3) = h[D3Q27System::INV_TN]; - //(*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3) = h[D3Q27System::INV_TS]; - //(*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3) = h[D3Q27System::INV_TNE]; - //(*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3) = h[D3Q27System::INV_TNW]; - //(*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3) = h[D3Q27System::INV_TSE]; - //(*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = h[D3Q27System::INV_TSW]; - - //(*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3) = h[D3Q27System::INV_W]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3) = h[D3Q27System::INV_S]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p) = h[D3Q27System::INV_B]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3) = h[D3Q27System::INV_SW]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3) = h[D3Q27System::INV_SE]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p) = h[D3Q27System::INV_BW]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p) = h[D3Q27System::INV_BE]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p) = h[D3Q27System::INV_BS]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p) = h[D3Q27System::INV_BN]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = h[D3Q27System::INV_BSW]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p) = h[D3Q27System::INV_BSE]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p) = h[D3Q27System::INV_BNW]; - //(*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p) = h[D3Q27System::INV_BNE]; - - //(*this->zeroDistributionsH)(x1, x2, x3) = h[D3Q27System::REST]; - - ///////////////////// END OF OLD BGK SOLVER /////////////////////////////// - } - } - } - - // dataSet->setPhaseField(divU); - } -} -////////////////////////////////////////////////////////////////////////// - -real MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::gradX1_phi() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP]))) - + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) + - +WEIGTH[d0P0] * (phi[dP00] - phi[dM00])); - //LBMReal sum = 0.0; - //for (int k = FSTARTDIR; k <= FENDDIR; k++) { - // sum += WEIGTH[k] * DX1[k] * phi[k]; - //} - //return 3.0 * sum; -} - -real MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::gradX2_phi() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM]))) - + WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) + - +WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0])); - //LBMReal sum = 0.0; - //for (int k = FSTARTDIR; k <= FENDDIR; k++) { - // sum += WEIGTH[k] * DX2[k] * phi[k]; - //} - //return 3.0 * sum; -} - -real MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::gradX3_phi() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP]))) - + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) + - +WEIGTH[d0P0] * (phi[d00P] - phi[d00M])); - //LBMReal sum = 0.0; - //for (int k = FSTARTDIR; k <= FENDDIR; k++) { - // sum += WEIGTH[k] * DX3[k] * phi[k]; - //} - //return 3.0 * sum; -} - -real MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::gradX1_phi2() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP]))) - + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) + - +WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00])); - //LBMReal sum = 0.0; - //for (int k = FSTARTDIR; k <= FENDDIR; k++) { - // sum += WEIGTH[k] * DX1[k] * phi2[k]; - //} - //return 3.0 * sum; -} - -real MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::gradX2_phi2() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM]))) - + WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) + - +WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0])); - //LBMReal sum = 0.0; - //for (int k = FSTARTDIR; k <= FENDDIR; k++) { - // sum += WEIGTH[k] * DX2[k] * phi2[k]; - //} - //return 3.0 * sum; -} - -real MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::gradX3_phi2() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP]))) - + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) + - +WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M])); - //LBMReal sum = 0.0; - //for (int k = FSTARTDIR; k <= FENDDIR; k++) { - // sum += WEIGTH[k] * DX3[k] * phi2[k]; - //} - //return 3.0 * sum; -} - - - - - -real MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::nabla2_phi() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - real sum = 0.0; - sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000]))) - + (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000])))); - sum += WEIGTH[d0PP] * ( - (((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000]))) - + (((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000]))) - + (((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000]))) - ); - sum += WEIGTH[d00P] * ( - ((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000])) - + ((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000])) - + ((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000])) - ); - //for (int k = FSTARTDIR; k <= FENDDIR; k++) { - // sum += WEIGTH[k] * (phi[k] - phi[REST]); - //} - return 6.0 * sum; -} - -void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::computePhasefield() -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - SPtr<DistributionArray3D> distributionsH = dataSet->getHdistributions(); - - 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[dP00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - h[d0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - h[d00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - h[dPP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - h[dMP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - h[dP0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - h[dM0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - h[d0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - h[d0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - - h[dM00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - h[d0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - h[d00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - h[dMM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - h[dPM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - h[dM0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - h[dP0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - h[d0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - h[d0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - - h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3); - } - } - } - } -} - -void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, - int x3) -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - phi[d000] = (*ph)(x1, x2, x3); - - - 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 { - phi[k] = 0.0; - } - } -} - -void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, int x1, int x2, - int x3) -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - phi2[d000] = (*ph)(x1, x2, x3); - - - for (int k = FSTARTDIR; k <= FENDDIR; k++) { - - if (!bcArray->isSolid(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k])) { - phi2[k] = (*ph)(x1 + DX1[k], x2 + DX2[k], x3 + DX3[k]); - } - else { - phi2[k] = 0.0; - } - } -} - -void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::swapDistributions() -{ - LBMKernel::swapDistributions(); - dataSet->getHdistributions()->swap(); - dataSet->getH2distributions()->swap(); -} \ No newline at end of file diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.h b/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.h deleted file mode 100644 index 34c0f5b8db234c27a2f55f7c8dee4a7c33bdc949..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.h +++ /dev/null @@ -1,119 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.h -//! \ingroup LBMKernel -//! \author Hesameddin Safari -//======================================================================================= - -#ifndef MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel_H -#define MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel_H - -#include "LBMKernel.h" -#include "BCSet.h" -#include "D3Q27System.h" -#include "basics/utilities/UbTiming.h" -#include "basics/container/CbArray4D.h" -#include "basics/container/CbArray3D.h" - -//! \brief 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 MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel : public LBMKernel -{ -public: - MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel(); - virtual ~MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel(void) = default; - void calculate(int step) override; - SPtr<LBMKernel> clone() override; - void forwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho); - void backwardInverseChimeraWithKincompressible(real& mfa, real& mfb, real& mfc, real vv, real v2, real Kinverse, real K, real oneMinusRho); - void forwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2); - void backwardChimera(real& mfa, real& mfb, real& mfc, real vv, real v2); - - ///refactor - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressure; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr pressureOld; - - real getCalculationTime() override { return .0; } -protected: - virtual void initDataSet(); - void swapDistributions() override; - real f1[D3Q27System::ENDF+1]; - - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF; - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF; - CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr zeroDistributionsF; - - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH1; - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH1; - CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr zeroDistributionsH1; - - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH2; - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH2; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributionsH2; - - //CbArray3D<LBMReal,IndexerX3X2X1>::CbArray3DPtr phaseField; - - - real h [D3Q27System::ENDF+1]; - real h2[D3Q27System::ENDF + 1]; - real g [D3Q27System::ENDF+1]; - real phi[D3Q27System::ENDF+1]; - real phi2[D3Q27System::ENDF + 1]; - real pr1[D3Q27System::ENDF+1]; - real phi_cutoff[D3Q27System::ENDF+1]; - - real gradX1_phi(); - real gradX2_phi(); - real gradX3_phi(); - real gradX1_phi2(); - real gradX2_phi2(); - real gradX3_phi2(); - //LBMReal gradX1_pr1(); - //LBMReal gradX2_pr1(); - //LBMReal gradX3_pr1(); - //LBMReal dirgradC_phi(int n, int k); - void computePhasefield(); - void findNeighbors(CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr ph /*Phase-Field*/, int x1, int x2, int x3); - void findNeighbors2(CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr ph, 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*/); - - real nabla2_phi(); - - - mu::value_type muX1,muX2,muX3; - mu::value_type muDeltaT; - mu::value_type muNu; - real forcingX1; - real forcingX2; - real forcingX3; -}; - -#endif diff --git a/src/cpu/MultiphaseFlow/MultiphaseFlow.h b/src/cpu/MultiphaseFlow/MultiphaseFlow.h deleted file mode 100644 index c7cceb2236bae9db5024dd7f4ea7e59e2c8fca0b..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/MultiphaseFlow.h +++ /dev/null @@ -1,64 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseFlow.h -//! \ingroup MultiphaseFlow -//! \author Konstantin Kutscher -//======================================================================================= - -#ifndef MultiphaseFlow_h -#define MultiphaseFlow_h - -#include "MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.h" -#include "MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.h" -#include "MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBC.h" -#include "MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.h" -#include "MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.h" -#include "MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.h" -#include "MultiphaseFlow/BoundaryConditions/MultiphaseBCStrategy.h" - -#include "MultiphaseFlow/LBM/MultiphaseCumulantLBMKernel.h" -#include "MultiphaseFlow/LBM/MultiphasePressureFilterCompressibleAirLBMKernel.h" -#include "MultiphaseFlow/LBM/MultiphasePressureFilterLBMKernel.h" -#include "MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.h" -#include "MultiphaseFlow/LBM/MultiphaseScratchCumulantLBMKernel.h" -#include "MultiphaseFlow/LBM/MultiphaseSharpInterfaceLBMKernel.h" -#include "MultiphaseFlow/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.h" -#include "MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsCumulantLBMKernel.h" -#include "MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.h" -#include "MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.h" - -#include "MultiphaseFlow/SimulationObservers/WriteMultiphaseQuantitiesSimulationObserver.h" -#include "MultiphaseFlow/SimulationObservers/WriteSharpInterfaceQuantitiesSimulationObserver.h" - -#include "MultiphaseFlow/Visitors/MultiphaseSetKernelBlockVisitor.h" -#include "MultiphaseFlow/Visitors/MultiphaseBoundaryConditionsBlockVisitor.h" -#include "MultiphaseFlow/Visitors/MultiphaseInitDistributionsBlockVisitor.h" -#include "MultiphaseFlow/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.h" - -#endif \ No newline at end of file diff --git a/src/cpu/MultiphaseFlow/SimulationObservers/WriteMultiphaseQuantitiesSimulationObserver.cpp b/src/cpu/MultiphaseFlow/SimulationObservers/WriteMultiphaseQuantitiesSimulationObserver.cpp deleted file mode 100644 index 2bf1ac28d3dc1dad3520d023e7bd96f6b6a2372b..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/SimulationObservers/WriteMultiphaseQuantitiesSimulationObserver.cpp +++ /dev/null @@ -1,516 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file WriteMultiphaseQuantitiesSimulationObserver.cpp -//! \ingroup SimulationObservers -//! \author Konstantin Kutscher -//======================================================================================= - -#include "WriteMultiphaseQuantitiesSimulationObserver.h" -#include "BCSet.h" -#include "LBMKernel.h" -#include <string> -#include <vector> - -#include "BCArray3D.h" -#include "Block3D.h" -#include <parallel/Communicator.h> -#include "DataSet3D.h" -#include "Grid3D.h" -#include "LBMUnitConverter.h" -#include "UbScheduler.h" -#include "basics/writer/WbWriterVtkXmlASCII.h" -#include <logger/Logger.h> - -WriteMultiphaseQuantitiesSimulationObserver::WriteMultiphaseQuantitiesSimulationObserver() = default; -////////////////////////////////////////////////////////////////////////// -WriteMultiphaseQuantitiesSimulationObserver::WriteMultiphaseQuantitiesSimulationObserver(SPtr<Grid3D> grid, SPtr<UbScheduler> s, - const std::string &path, - WbWriter *const writer, - SPtr<LBMUnitConverter> conv, - std::shared_ptr<vf::parallel::Communicator> comm) - : SimulationObserver(grid, s), path(path), writer(writer), conv(conv), comm(comm) -{ - gridRank = comm->getProcessID(); - minInitLevel = this->grid->getCoarsestInitializedLevel(); - maxInitLevel = this->grid->getFinestInitializedLevel(); - - blockVector.resize(maxInitLevel + 1); - - for (int level = minInitLevel; level <= maxInitLevel; level++) - { - grid->getBlocks(level, gridRank, true, blockVector[level]); - } -} - -////////////////////////////////////////////////////////////////////////// -void WriteMultiphaseQuantitiesSimulationObserver::init() -{} - -////////////////////////////////////////////////////////////////////////// -void WriteMultiphaseQuantitiesSimulationObserver::update(real step) -{ - if (scheduler->isDue(step)) - collectData(step); - - //UBLOG(logDEBUG3, "WriteMultiphaseQuantitiesSimulationObserver::update:" << step); - VF_LOG_DEBUG("WriteMultiphaseQuantitiesSimulationObserver::update:: {}", step); -} - -////////////////////////////////////////////////////////////////////////// -void WriteMultiphaseQuantitiesSimulationObserver::collectData(real step) -{ - int istep = static_cast<int>(step); - - for (int level = minInitLevel; level <= maxInitLevel; level++) - { - for (SPtr<Block3D> block : blockVector[level]) - { - if (block) - { - addDataMQ(block); - } - } - } - - std::string pfilePath, partPath, subfolder, cfilePath; - - subfolder = "mq" + UbSystem::toString(istep); - pfilePath = path + "/mq/" + subfolder; - cfilePath = path + "/mq/mq_collection"; - partPath = pfilePath + "/mq" + UbSystem::toString(gridRank) + "_" + UbSystem::toString(istep); - - std::string partName = writer->writeOctsWithNodeData(partPath, nodes, cells, datanames, data); - size_t found = partName.find_last_of("/"); - std::string piece = partName.substr(found + 1); - piece = subfolder + "/" + piece; - - std::vector<std::string> cellDataNames; - std::vector<std::string> pieces = comm->gather(piece); - if (comm->getProcessID() == comm->getRoot()) { - std::string pname = - WbWriterVtkXmlASCII::getInstance()->writeParallelFile(pfilePath, pieces, datanames, cellDataNames); - found = pname.find_last_of("/"); - piece = pname.substr(found + 1); - - std::vector<std::string> filenames; - filenames.push_back(piece); - if (step == SimulationObserver::scheduler->getMinBegin()) - { - WbWriterVtkXmlASCII::getInstance()->writeCollection(cfilePath, filenames, istep, false); - } else - { - WbWriterVtkXmlASCII::getInstance()->addFilesToCollection(cfilePath, filenames, istep, false); - } - //UBLOG(logINFO, "WriteMultiphaseQuantitiesSimulationObserver step: " << istep); - VF_LOG_INFO("WriteMultiphaseQuantitiesSimulationObserver step: {}", istep); - } - - clearData(); -} - -////////////////////////////////////////////////////////////////////////// -void WriteMultiphaseQuantitiesSimulationObserver::clearData() -{ - nodes.clear(); - cells.clear(); - datanames.clear(); - data.clear(); -} - -////////////////////////////////////////////////////////////////////////// -void WriteMultiphaseQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> block) -{ - using namespace D3Q27System; - // using namespace UbMath; - using namespace vf::lbm::dir; - using namespace vf::basics::constant; - - SPtr<LBMKernel> kernel = dynamicPointerCast<LBMKernel>(block->getKernel()); - //double level = (double)block->getLevel(); - - // Diese Daten werden geschrieben: - datanames.resize(0); - datanames.push_back("Phi"); - datanames.push_back("Vx"); - datanames.push_back("Vy"); - datanames.push_back("Vz"); - datanames.push_back("P1"); - datanames.push_back("Phi2"); - if (kernel->getDataSet()->getPressureField()) datanames.push_back("Pressure"); - - data.resize(datanames.size()); - - - SPtr<BCArray3D> bcArray = kernel->getBCSet()->getBCArray(); - SPtr<DistributionArray3D> distributionsF = kernel->getDataSet()->getFdistributions(); - SPtr<DistributionArray3D> distributionsH = kernel->getDataSet()->getHdistributions(); - SPtr<DistributionArray3D> distributionsH2 = kernel->getDataSet()->getH2distributions(); - SPtr<PhaseFieldArray3D> divU = kernel->getDataSet()->getPhaseField(); - - SPtr<PressureFieldArray3D> pressure; - if (kernel->getDataSet()->getPressureField()) pressure = kernel->getDataSet()->getPressureField(); - - real f[D3Q27System::ENDF + 1]; - real phi[D3Q27System::ENDF + 1]; - real phi2[D3Q27System::ENDF + 1]; - real vx1, vx2, vx3, rho, p1, beta, kappa; - real densityRatio = kernel->getDensityRatio(); - - kernel->getMultiphaseModelParameters(beta, kappa); - real phiL = kernel->getPhiL(); - real phiH = kernel->getPhiH(); - - // knotennummerierung faengt immer bei 0 an! - int SWB, SEB, NEB, NWB, SWT, SET, NET, NWT; - - if (block->getKernel()->getCompressible()) { - calcMacros = &D3Q27System::calcCompMacroscopicValues; - } else { - calcMacros = &D3Q27System::calcIncompMacroscopicValues; - } - - // int minX1 = 0; - // int minX2 = 0; - // int minX3 = 0; - - int maxX1 = (int)(distributionsF->getNX1()); - int maxX2 = (int)(distributionsF->getNX2()); - int maxX3 = (int)(distributionsF->getNX3()); - - int minX1 = 0; - int minX2 = 0; - int minX3 = 0; - - if (kernel->getGhostLayerWidth() == 2) - { - minX1 = 1; - minX2 = 1; - minX3 = 1; - } - - // int maxX1 = (int)(distributions->getNX1()); - // int maxX2 = (int)(distributions->getNX2()); - // int maxX3 = (int)(distributions->getNX3()); - - // nummern vergeben und node vector erstellen + daten sammeln - CbArray3D<int> nodeNumbers((int)maxX1, (int)maxX2, (int)maxX3, -1); - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField( - new CbArray3D<real, IndexerX3X2X1>(maxX1, maxX2, maxX3, -999.0)); - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField2( - new CbArray3D<real, IndexerX3X2X1>(maxX1, maxX2, maxX3, -999.0)); - - for (int ix3 = minX3; ix3 < maxX3; ix3++) { - for (int ix2 = minX2; ix2 < maxX2; ix2++) { - for (int ix1 = minX1; ix1 < maxX1; ix1++) { - if (!bcArray->isUndefined(ix1, ix2, ix3) && !bcArray->isSolid(ix1, ix2, ix3)) { - distributionsH->getPreCollisionDistribution(f, ix1, ix2, ix3); - (*phaseField)(ix1, ix2, ix3) = - ((f[dPPP] + f[dMMM]) + (f[dPMP] + f[dMPM])) + ((f[dPMM] + f[dMPP]) + (f[dMMP] + f[dPPM])) + - (((f[dPP0] + f[dMM0]) + (f[dPM0] + f[dMP0])) + ((f[dP0P] + f[dM0M]) + (f[dP0M] + f[dM0P])) + - ((f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM]))) + - ((f[dP00] + f[dM00]) + (f[d0P0] + f[d0M0]) + (f[d00P] + f[d00M])) + f[d000]; - if (distributionsH2) { - distributionsH2->getPreCollisionDistribution(f, ix1, ix2, ix3); - (*phaseField2)(ix1, ix2, ix3) = - ((f[dPPP] + f[dMMM]) + (f[dPMP] + f[dMPM])) + ((f[dPMM] + f[dMPP]) + (f[dMMP] + f[dPPM])) + - (((f[dPP0] + f[dMM0]) + (f[dPM0] + f[dMP0])) + ((f[dP0P] + f[dM0M]) + (f[dP0M] + f[dM0P])) + - ((f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM]))) + - ((f[dP00] + f[dM00]) + (f[d0P0] + f[d0M0]) + (f[d00P] + f[d00M])) + f[d000]; - } - else { (*phaseField2)(ix1, ix2, ix3) = 999.0; } - - } - } - } - } - - if (kernel->getGhostLayerWidth() == 1) - { - maxX1 -= 2; - maxX2 -= 2; - maxX3 -= 2; - } - else if (kernel->getGhostLayerWidth() == 2) - { - maxX1 -= 3; - maxX2 -= 3; - maxX3 -= 3; - } - - int nr = (int)nodes.size(); - real dX1_phi; - real dX2_phi; - real dX3_phi; - real mu; - - for (int ix3 = minX3; ix3 <= maxX3; ix3++) { - for (int ix2 = minX2; ix2 <= maxX2; ix2++) { - for (int ix1 = minX1; ix1 <= maxX1; ix1++) { - if (!bcArray->isUndefined(ix1, ix2, ix3) && !bcArray->isSolid(ix1, ix2, ix3)) { - int index = 0; - nodeNumbers(ix1, ix2, ix3) = nr++; - Vector3D worldCoordinates = grid->getNodeCoordinates(block, ix1, ix2, ix3); - nodes.push_back(UbTupleFloat3(float(worldCoordinates[0]), float(worldCoordinates[1]), - float(worldCoordinates[2]))); - - phi[d000] = (*phaseField)(ix1, ix2, ix3); - phi2[d000] = (*phaseField2)(ix1, ix2, ix3); - - if ((ix1 == 0) || (ix2 == 0) || (ix3 == 0)) { - dX1_phi = 0.0; - dX2_phi = 0.0; - dX3_phi = 0.0; - mu = 0.0; - // vx1 = 0.0; - // vx2 = 0.0; - // vx3 = 0.0; - } else { - phi[dP00] = (*phaseField)(ix1 + DX1[dP00], ix2 + DX2[dP00], ix3 + DX3[dP00]); - phi[d0P0] = (*phaseField)(ix1 + DX1[d0P0], ix2 + DX2[d0P0], ix3 + DX3[d0P0]); - phi[d00P] = (*phaseField)(ix1 + DX1[d00P], ix2 + DX2[d00P], ix3 + DX3[d00P]); - phi[dM00] = (*phaseField)(ix1 + DX1[dM00], ix2 + DX2[dM00], ix3 + DX3[dM00]); - phi[d0M0] = (*phaseField)(ix1 + DX1[d0M0], ix2 + DX2[d0M0], ix3 + DX3[d0M0]); - phi[d00M] = (*phaseField)(ix1 + DX1[d00M], ix2 + DX2[d00M], ix3 + DX3[d00M]); - phi[dPP0] = (*phaseField)(ix1 + DX1[dPP0], ix2 + DX2[dPP0], ix3 + DX3[dPP0]); - phi[dMP0] = (*phaseField)(ix1 + DX1[dMP0], ix2 + DX2[dMP0], ix3 + DX3[dMP0]); - phi[dP0P] = (*phaseField)(ix1 + DX1[dP0P], ix2 + DX2[dP0P], ix3 + DX3[dP0P]); - phi[dM0P] = (*phaseField)(ix1 + DX1[dM0P], ix2 + DX2[dM0P], ix3 + DX3[dM0P]); - phi[d0PP] = (*phaseField)(ix1 + DX1[d0PP], ix2 + DX2[d0PP], ix3 + DX3[d0PP]); - phi[d0MP] = (*phaseField)(ix1 + DX1[d0MP], ix2 + DX2[d0MP], ix3 + DX3[d0MP]); - phi[dMM0] = (*phaseField)(ix1 + DX1[dMM0], ix2 + DX2[dMM0], ix3 + DX3[dMM0]); - phi[dPM0] = (*phaseField)(ix1 + DX1[dPM0], ix2 + DX2[dPM0], ix3 + DX3[dPM0]); - phi[dM0M] = (*phaseField)(ix1 + DX1[dM0M], ix2 + DX2[dM0M], ix3 + DX3[dM0M]); - phi[dP0M] = (*phaseField)(ix1 + DX1[dP0M], ix2 + DX2[dP0M], ix3 + DX3[dP0M]); - phi[d0MM] = (*phaseField)(ix1 + DX1[d0MM], ix2 + DX2[d0MM], ix3 + DX3[d0MM]); - phi[d0PM] = (*phaseField)(ix1 + DX1[d0PM], ix2 + DX2[d0PM], ix3 + DX3[d0PM]); - phi[dMMM] = (*phaseField)(ix1 + DX1[dMMM], ix2 + DX2[dMMM], ix3 + DX3[dMMM]); - phi[dPMM] = (*phaseField)(ix1 + DX1[dPMM], ix2 + DX2[dPMM], ix3 + DX3[dPMM]); - phi[dMPM] = (*phaseField)(ix1 + DX1[dMPM], ix2 + DX2[dMPM], ix3 + DX3[dMPM]); - phi[dPPM] = (*phaseField)(ix1 + DX1[dPPM], ix2 + DX2[dPPM], ix3 + DX3[dPPM]); - phi[dPPP] = (*phaseField)(ix1 + DX1[dPPP], ix2 + DX2[dPPP], ix3 + DX3[dPPP]); - phi[dMPP] = (*phaseField)(ix1 + DX1[dMPP], ix2 + DX2[dMPP], ix3 + DX3[dMPP]); - phi[dPMP] = (*phaseField)(ix1 + DX1[dPMP], ix2 + DX2[dPMP], ix3 + DX3[dPMP]); - phi[dMMP] = (*phaseField)(ix1 + DX1[dMMP], ix2 + DX2[dMMP], ix3 + DX3[dMMP]); - dX1_phi = 0.0 * gradX1_phi(phi); - dX2_phi = 0.0 * gradX2_phi(phi); - dX3_phi = 0.0 * gradX3_phi(phi); - mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi(phi); - - //phi2[dP00] = (*phaseField2)(ix1 + DX1[dP00], ix2 + DX2[dP00], ix3 + DX3[dP00]); - //phi2[N] = (*phaseField2)(ix1 + DX1[N], ix2 + DX2[N], ix3 + DX3[N]); - //phi2[T] = (*phaseField2)(ix1 + DX1[T], ix2 + DX2[T], ix3 + DX3[T]); - //phi2[W] = (*phaseField2)(ix1 + DX1[W], ix2 + DX2[W], ix3 + DX3[W]); - //phi2[S] = (*phaseField2)(ix1 + DX1[S], ix2 + DX2[S], ix3 + DX3[S]); - //phi2[B] = (*phaseField2)(ix1 + DX1[B], ix2 + DX2[B], ix3 + DX3[B]); - //phi2[NE] = (*phaseField2)(ix1 + DX1[NE], ix2 + DX2[NE], ix3 + DX3[NE]); - //phi2[NW] = (*phaseField2)(ix1 + DX1[NW], ix2 + DX2[NW], ix3 + DX3[NW]); - //phi2[TE] = (*phaseField2)(ix1 + DX1[TE], ix2 + DX2[TE], ix3 + DX3[TE]); - //phi2[TW] = (*phaseField2)(ix1 + DX1[TW], ix2 + DX2[TW], ix3 + DX3[TW]); - //phi2[TN] = (*phaseField2)(ix1 + DX1[TN], ix2 + DX2[TN], ix3 + DX3[TN]); - //phi2[TS] = (*phaseField2)(ix1 + DX1[TS], ix2 + DX2[TS], ix3 + DX3[TS]); - //phi2[SW] = (*phaseField2)(ix1 + DX1[SW], ix2 + DX2[SW], ix3 + DX3[SW]); - //phi2[SE] = (*phaseField2)(ix1 + DX1[SE], ix2 + DX2[SE], ix3 + DX3[SE]); - //phi2[BW] = (*phaseField2)(ix1 + DX1[BW], ix2 + DX2[BW], ix3 + DX3[BW]); - //phi2[BE] = (*phaseField2)(ix1 + DX1[BE], ix2 + DX2[BE], ix3 + DX3[BE]); - //phi2[BS] = (*phaseField2)(ix1 + DX1[BS], ix2 + DX2[BS], ix3 + DX3[BS]); - //phi2[BN] = (*phaseField2)(ix1 + DX1[BN], ix2 + DX2[BN], ix3 + DX3[BN]); - //phi2[BSW] = (*phaseField2)(ix1 + DX1[BSW], ix2 + DX2[BSW], ix3 + DX3[BSW]); - //phi2[BSE] = (*phaseField2)(ix1 + DX1[BSE], ix2 + DX2[BSE], ix3 + DX3[BSE]); - //phi2[BNW] = (*phaseField2)(ix1 + DX1[BNW], ix2 + DX2[BNW], ix3 + DX3[BNW]); - //phi2[BNE] = (*phaseField2)(ix1 + DX1[BNE], ix2 + DX2[BNE], ix3 + DX3[BNE]); - //phi2[TNE] = (*phaseField2)(ix1 + DX1[TNE], ix2 + DX2[TNE], ix3 + DX3[TNE]); - //phi2[TNW] = (*phaseField2)(ix1 + DX1[TNW], ix2 + DX2[TNW], ix3 + DX3[TNW]); - //phi2[TSE] = (*phaseField2)(ix1 + DX1[TSE], ix2 + DX2[TSE], ix3 + DX3[TSE]); - //phi2[TSW] = (*phaseField2)(ix1 + DX1[TSW], ix2 + DX2[TSW], ix3 + DX3[TSW]); - - // mu = 2 * beta * phi[REST] * (phi[REST] - 1) * (2 * phi[REST] - 1) - kappa * nabla2_phi(phi); - - - - } - - distributionsF->getPreCollisionDistribution(f, ix1, ix2, ix3); - //real dU = (*divU)(ix1, ix2, ix3); - - real rhoH = 1.0; - real rhoL = 1.0 / densityRatio; - // LBMReal rhoToPhi = (1.0 - 1.0/densityRatio); - real rhoToPhi = (rhoH - rhoL) / (phiH - phiL); - - // rho = phi[ZERO] + (1.0 - phi[ZERO])*1.0/densityRatio; - rho = rhoH + rhoToPhi * (phi[d000] - phiH); - - if (pressure) { - vx1 = - ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dPMM] - f[dMPP]) + (f[dPPM] - f[dMMP]))) + - (((f[dP0M] - f[dM0P]) + (f[dP0P] - f[dM0M])) + ((f[dPM0] - f[dMP0]) + (f[dPP0] - f[dMM0]))) + (f[dP00] - f[dM00])) ; - - vx2 = - ((((f[dPPP] - f[dMMM]) + (f[dMPM] - f[dPMP])) + ((f[dMPP] - f[dPMM]) + (f[dPPM] - f[dMMP]))) + - (((f[d0PM] - f[d0MP]) + (f[d0PP] - f[d0MM])) + ((f[dMP0] - f[dPM0]) + (f[dPP0] - f[dMM0]))) + (f[d0P0] - f[d0M0])) ; - - vx3 = - ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dMPP] - f[dPMM]) + (f[dMMP] - f[dPPM]))) + - (((f[d0MP] - f[d0PM]) + (f[d0PP] - f[d0MM])) + ((f[dM0P] - f[dP0M]) + (f[dP0P] - f[dM0M]))) + (f[d00P] - f[d00M])); - - } - else { - vx1 = - ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dPMM] - f[dMPP]) + (f[dPPM] - f[dMMP]))) + - (((f[dP0M] - f[dM0P]) + (f[dP0P] - f[dM0M])) + ((f[dPM0] - f[dMP0]) + (f[dPP0] - f[dMM0]))) + (f[dP00] - f[dM00])) / - (rho * c1o3) + - mu * dX1_phi / (2 * rho); - - vx2 = - ((((f[dPPP] - f[dMMM]) + (f[dMPM] - f[dPMP])) + ((f[dMPP] - f[dPMM]) + (f[dPPM] - f[dMMP]))) + - (((f[d0PM] - f[d0MP]) + (f[d0PP] - f[d0MM])) + ((f[dMP0] - f[dPM0]) + (f[dPP0] - f[dMM0]))) + (f[d0P0] - f[d0M0])) / - (rho * c1o3) + - mu * dX2_phi / (2 * rho); - - vx3 = - ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dMPP] - f[dPMM]) + (f[dMMP] - f[dPPM]))) + - (((f[d0MP] - f[d0PM]) + (f[d0PP] - f[d0MM])) + ((f[dM0P] - f[dP0M]) + (f[dP0P] - f[dM0M]))) + (f[d00P] - f[d00M])) / - (rho * c1o3) + - mu * dX3_phi / (2 * rho); - - } - - p1 = (((f[dPPP] + f[dMMM]) + (f[dPMP] + f[dMPM])) + ((f[dPMM] + f[dMPP]) + (f[dMMP] + f[dPPM])) + - (((f[dPP0] + f[dMM0]) + (f[dPM0] + f[dMP0])) + ((f[dP0P] + f[dM0M]) + (f[dP0M] + f[dM0P])) + - ((f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM]))) + - ((f[dP00] + f[dM00]) + (f[d0P0] + f[d0M0]) + (f[d00P] + f[d00M])) + f[d000]) + - (vx1 * rhoToPhi * dX1_phi * c1o3 + vx2 * rhoToPhi * dX2_phi * c1o3 + - vx3 * rhoToPhi * dX3_phi * c1o3) / - 2.0; - p1 = rho * p1 * c1o3; - - // calcMacros(f,rho,vx1,vx2,vx3); - // tempfield(ix1,ix2,ix3)= ; Added by HS - // double press = D3Q27System::calcPress(f,rho,vx1,vx2,vx3); - - if (UbMath::isNaN(vx1) || UbMath::isInfinity(vx1)) - UB_THROW(UbException( - UB_EXARGS, "vx1 is not a number (nan or -1.#IND) or infinity number -1.#INF in block=" + - block->toString() + ", node=" + UbSystem::toString(ix1) + "," + - UbSystem::toString(ix2) + "," + UbSystem::toString(ix3))); - // vx1=999.0; - if (UbMath::isNaN(vx2) || UbMath::isInfinity(vx2)) - UB_THROW(UbException( - UB_EXARGS, "vx2 is not a number (nan or -1.#IND) or infinity number -1.#INF in block=" + - block->toString() + ", node=" + UbSystem::toString(ix1) + "," + - UbSystem::toString(ix2) + "," + UbSystem::toString(ix3))); - // vx2=999.0; - if (UbMath::isNaN(vx3) || UbMath::isInfinity(vx3)) - UB_THROW(UbException( - UB_EXARGS, "vx3 is not a number (nan or -1.#IND) or infinity number -1.#INF in block=" + - block->toString() + ", node=" + UbSystem::toString(ix1) + "," + - UbSystem::toString(ix2) + "," + UbSystem::toString(ix3))); - - if (UbMath::isNaN(phi[d000]) || UbMath::isInfinity(phi[d000])) - UB_THROW(UbException( - UB_EXARGS, "phi is not a number (nan or -1.#IND) or infinity number -1.#INF in block=" + - block->toString() + ", node=" + UbSystem::toString(ix1) + "," + - UbSystem::toString(ix2) + "," + UbSystem::toString(ix3))); - - if (UbMath::isNaN(p1) || UbMath::isInfinity(p1)) - UB_THROW( UbException(UB_EXARGS,"p1 is not a number (nan or -1.#IND) or infinity number -1.#INF in block="+block->toString()+ - ", node="+UbSystem::toString(ix1)+","+UbSystem::toString(ix2)+","+UbSystem::toString(ix3))); - - data[index++].push_back(phi[d000]); - data[index++].push_back(vx1); - data[index++].push_back(vx2); - data[index++].push_back(vx3); - data[index++].push_back(p1); - data[index++].push_back(phi2[d000]); - if (pressure) data[index++].push_back((*pressure)(ix1, ix2, ix3)); - } - } - } - } - maxX1 -= 1; - maxX2 -= 1; - maxX3 -= 1; - // cell vector erstellen - for (int ix3 = minX3; ix3 <= maxX3; ix3++) { - for (int ix2 = minX2; ix2 <= maxX2; ix2++) { - for (int ix1 = minX1; ix1 <= maxX1; ix1++) { - if ((SWB = nodeNumbers(ix1, ix2, ix3)) >= 0 && (SEB = nodeNumbers(ix1 + 1, ix2, ix3)) >= 0 && - (NEB = nodeNumbers(ix1 + 1, ix2 + 1, ix3)) >= 0 && (NWB = nodeNumbers(ix1, ix2 + 1, ix3)) >= 0 && - (SWT = nodeNumbers(ix1, ix2, ix3 + 1)) >= 0 && (SET = nodeNumbers(ix1 + 1, ix2, ix3 + 1)) >= 0 && - (NET = nodeNumbers(ix1 + 1, ix2 + 1, ix3 + 1)) >= 0 && - (NWT = nodeNumbers(ix1, ix2 + 1, ix3 + 1)) >= 0) { - cells.push_back(makeUbTuple((unsigned int)SWB, (unsigned int)SEB, (unsigned int)NEB, - (unsigned int)NWB, (unsigned int)SWT, (unsigned int)SET, - (unsigned int)NET, (unsigned int)NWT)); - } - } - } - } -} - -real WriteMultiphaseQuantitiesSimulationObserver::gradX1_phi(const real *const &h) -{ - using namespace D3Q27System; - real sum = 0.0; - for (int k = FSTARTDIR; k <= FENDDIR; k++) { - sum += WEIGTH[k] * DX1[k] * h[k]; - } - return 3.0 * sum; -} -real WriteMultiphaseQuantitiesSimulationObserver::gradX2_phi(const real *const &h) -{ - using namespace D3Q27System; - real sum = 0.0; - for (int k = FSTARTDIR; k <= FENDDIR; k++) { - sum += WEIGTH[k] * DX2[k] * h[k]; - } - return 3.0 * sum; -} - -real WriteMultiphaseQuantitiesSimulationObserver::gradX3_phi(const real *const &h) -{ - using namespace D3Q27System; - real sum = 0.0; - for (int k = FSTARTDIR; k <= FENDDIR; k++) { - sum += WEIGTH[k] * DX3[k] * h[k]; - } - return 3.0 * sum; -} - -real WriteMultiphaseQuantitiesSimulationObserver::nabla2_phi(const real *const &h) -{ - using namespace vf::lbm::dir; - - using namespace D3Q27System; - real sum = 0.0; - for (int k = FSTARTDIR; k <= FENDDIR; k++) { - sum += WEIGTH[k] * (h[k] - h[d000]); - } - return 6.0 * sum; -} \ No newline at end of file diff --git a/src/cpu/MultiphaseFlow/SimulationObservers/WriteMultiphaseQuantitiesSimulationObserver.h b/src/cpu/MultiphaseFlow/SimulationObservers/WriteMultiphaseQuantitiesSimulationObserver.h deleted file mode 100644 index e5ba399ad57155c332cc2cd8520c51c8e86c441c..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/SimulationObservers/WriteMultiphaseQuantitiesSimulationObserver.h +++ /dev/null @@ -1,104 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file WriteMultiphaseQuantitiesSimulationObserver.h -//! \ingroup SimulationObservers -//! \author Konstantin Kutscher -//======================================================================================= - -#ifndef WriteMultiphaseQuantitiesSimulationObserver_H -#define WriteMultiphaseQuantitiesSimulationObserver_H - -#include <PointerDefinitions.h> -#include <string> -#include <vector> - -#include "SimulationObserver.h" -#include "LBMSystem.h" -#include "UbTuple.h" - -namespace vf::parallel {class Communicator;} -class Grid3D; -class UbScheduler; -class LBMUnitConverter; -class WbWriter; -class Block3D; - -//! \brief A class writes macroscopic quantities information to a VTK-file -class WriteMultiphaseQuantitiesSimulationObserver : public SimulationObserver -{ -public: - WriteMultiphaseQuantitiesSimulationObserver(); - //! \brief Construct WriteMultiphaseQuantitiesSimulationObserver object - //! \pre The Grid3D and UbScheduler objects must exist - //! \param grid is observable Grid3D object - //! \param s is UbScheduler object for scheduling of observer - //! \param path is path of folder for output - //! \param writer is WbWriter object - //! \param conv is LBMUnitConverter object - //! \param comm is Communicator object - WriteMultiphaseQuantitiesSimulationObserver(SPtr<Grid3D> grid, SPtr<UbScheduler> s, const std::string &path, - WbWriter *const writer, SPtr<LBMUnitConverter> conv, std::shared_ptr<vf::parallel::Communicator> comm); - ~WriteMultiphaseQuantitiesSimulationObserver() override = default; - - void update(real step) override; - -protected: - //! Collect data for VTK-file - //! \param step is a time step - void collectData(real step); - //! Collect data for VTK-file - //! \param block is a time step - void addDataMQ(SPtr<Block3D> block); - void clearData(); - -private: - void init(); - std::vector<UbTupleFloat3> nodes; - std::vector<UbTupleUInt8> cells; - std::vector<std::string> datanames; - std::vector<std::vector<real>> data; - std::string path; - WbWriter *writer; - SPtr<LBMUnitConverter> conv; - std::vector<std::vector<SPtr<Block3D>>> blockVector; - int minInitLevel; - int maxInitLevel; - int gridRank; - std::shared_ptr<vf::parallel::Communicator> comm; - - real gradX1_phi(const real *const &); - real gradX2_phi(const real *const &); - real gradX3_phi(const real *const &); - real nabla2_phi(const real *const &); - - using CalcMacrosFct = void (*)(const real *const &, real &, real &, real &, real &); - CalcMacrosFct calcMacros; -}; - -#endif diff --git a/src/cpu/MultiphaseFlow/SimulationObservers/WriteSharpInterfaceQuantitiesSimulationObserver.cpp b/src/cpu/MultiphaseFlow/SimulationObservers/WriteSharpInterfaceQuantitiesSimulationObserver.cpp deleted file mode 100644 index 9e2fd5433c3f30649abd46ef00ffa8a92d0b20ba..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/SimulationObservers/WriteSharpInterfaceQuantitiesSimulationObserver.cpp +++ /dev/null @@ -1,416 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file WriteSharpInterfaceQuantitiesSimulationObserver.cpp -//! \ingroup SimulationObservers -//! \author Konstantin Kutscher -//======================================================================================= - -#include "WriteSharpInterfaceQuantitiesSimulationObserver.h" -#include "BCSet.h" -#include "LBMKernel.h" -#include <string> -#include <vector> - -#include "BCArray3D.h" -#include "Block3D.h" -#include <parallel/Communicator.h> -#include "DataSet3D.h" -#include "Grid3D.h" -#include "LBMUnitConverter.h" -#include "UbScheduler.h" -#include "basics/writer/WbWriterVtkXmlASCII.h" - -WriteSharpInterfaceQuantitiesSimulationObserver::WriteSharpInterfaceQuantitiesSimulationObserver() = default; -////////////////////////////////////////////////////////////////////////// -WriteSharpInterfaceQuantitiesSimulationObserver::WriteSharpInterfaceQuantitiesSimulationObserver(SPtr<Grid3D> grid, SPtr<UbScheduler> s, - const std::string &path, - WbWriter *const writer, - SPtr<LBMUnitConverter> conv, - std::shared_ptr<vf::parallel::Communicator> comm) - : SimulationObserver(grid, s), path(path), writer(writer), conv(conv), comm(comm) -{ - gridRank = comm->getProcessID(); - minInitLevel = this->grid->getCoarsestInitializedLevel(); - maxInitLevel = this->grid->getFinestInitializedLevel(); - - blockVector.resize(maxInitLevel + 1); - - for (int level = minInitLevel; level <= maxInitLevel; level++) - { - grid->getBlocks(level, gridRank, true, blockVector[level]); - } -} - -////////////////////////////////////////////////////////////////////////// -void WriteSharpInterfaceQuantitiesSimulationObserver::init() -{} - -////////////////////////////////////////////////////////////////////////// -void WriteSharpInterfaceQuantitiesSimulationObserver::update(double step) -{ - if (scheduler->isDue(step)) - collectData(step); - - UBLOG(logDEBUG3, "WriteSharpInterfaceQuantitiesSimulationObserver::update:" << step); -} - -////////////////////////////////////////////////////////////////////////// -void WriteSharpInterfaceQuantitiesSimulationObserver::collectData(double step) -{ - int istep = static_cast<int>(step); - - for (int level = minInitLevel; level <= maxInitLevel; level++) - { - for (SPtr<Block3D> block : blockVector[level]) - { - if (block) - { - addDataMQ(block); - } - } - } - - std::string pfilePath, partPath, subfolder, cfilePath; - - subfolder = "mq" + UbSystem::toString(istep); - pfilePath = path + "/mq/" + subfolder; - cfilePath = path + "/mq/mq_collection"; - partPath = pfilePath + "/mq" + UbSystem::toString(gridRank) + "_" + UbSystem::toString(istep); - - std::string partName = writer->writeOctsWithNodeData(partPath, nodes, cells, datanames, data); - size_t found = partName.find_last_of("/"); - std::string piece = partName.substr(found + 1); - piece = subfolder + "/" + piece; - - std::vector<std::string> cellDataNames; - std::vector<std::string> pieces = comm->gather(piece); - if (comm->getProcessID() == comm->getRoot()) { - std::string pname = - WbWriterVtkXmlASCII::getInstance()->writeParallelFile(pfilePath, pieces, datanames, cellDataNames); - found = pname.find_last_of("/"); - piece = pname.substr(found + 1); - - std::vector<std::string> filenames; - filenames.push_back(piece); - if (step == SimulationObserver::scheduler->getMinBegin()) - { - WbWriterVtkXmlASCII::getInstance()->writeCollection(cfilePath, filenames, istep, false); - } else - { - WbWriterVtkXmlASCII::getInstance()->addFilesToCollection(cfilePath, filenames, istep, false); - } - UBLOG(logINFO, "WriteSharpInterfaceQuantitiesSimulationObserver step: " << istep); - } - - clearData(); -} - -////////////////////////////////////////////////////////////////////////// -void WriteSharpInterfaceQuantitiesSimulationObserver::clearData() -{ - nodes.clear(); - cells.clear(); - datanames.clear(); - data.clear(); -} - -////////////////////////////////////////////////////////////////////////// -void WriteSharpInterfaceQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> block) -{ - using namespace D3Q27System; - //using namespace UbMath; - using namespace vf::lbm::dir; - using namespace vf::basics::constant; - SPtr<LBMKernel> kernel = dynamicPointerCast<LBMKernel>(block->getKernel()); - //double level = (double)block->getLevel(); - kernel->swapDistributions(); - // Diese Daten werden geschrieben: - datanames.resize(0); - datanames.push_back("Phi"); - datanames.push_back("Vx"); - datanames.push_back("Vy"); - datanames.push_back("Vz"); - datanames.push_back("Pressure"); - - data.resize(datanames.size()); - - - SPtr<BCArray3D> bcArray = kernel->getBCSet()->getBCArray(); - SPtr<DistributionArray3D> distributionsF = kernel->getDataSet()->getFdistributions(); - SPtr<DistributionArray3D> distributionsH = kernel->getDataSet()->getHdistributions(); - SPtr<DistributionArray3D> distributionsH2 = kernel->getDataSet()->getH2distributions(); - SPtr<PhaseFieldArray3D> divU = kernel->getDataSet()->getPhaseField(); - - real pressure; - - real f[D3Q27System::ENDF + 1]; - real phi; - real vx1, vx2, vx3, rho; - real densityRatio = kernel->getDensityRatio(); - //real phiL = kernel->getPhiL(); - //real phiH = kernel->getPhiH(); - - // knotennummerierung faengt immer bei 0 an! - int SWB, SEB, NEB, NWB, SWT, SET, NET, NWT; - - if (block->getKernel()->getCompressible()) { - calcMacros = &D3Q27System::calcCompMacroscopicValues; - } else { - calcMacros = &D3Q27System::calcIncompMacroscopicValues; - } - - // int minX1 = 0; - // int minX2 = 0; - // int minX3 = 0; - - int maxX1 = (int)(distributionsF->getNX1()); - int maxX2 = (int)(distributionsF->getNX2()); - int maxX3 = (int)(distributionsF->getNX3()); - - int minX1 = 0; - int minX2 = 0; - int minX3 = 0; - - if (kernel->getGhostLayerWidth() == 2) - { - minX1 = 1; - minX2 = 1; - minX3 = 1; - } - - // int maxX1 = (int)(distributions->getNX1()); - // int maxX2 = (int)(distributions->getNX2()); - // int maxX3 = (int)(distributions->getNX3()); - - // nummern vergeben und node vector erstellen + daten sammeln - CbArray3D<int> nodeNumbers((int)maxX1, (int)maxX2, (int)maxX3, -1); - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr phaseField( - new CbArray3D<real, IndexerX3X2X1>(maxX1, maxX2, maxX3, -999.0)); - - - for (int ix3 = minX3; ix3 < maxX3; ix3++) { - for (int ix2 = minX2; ix2 < maxX2; ix2++) { - for (int ix1 = minX1; ix1 < maxX1; ix1++) { - if (!bcArray->isUndefined(ix1, ix2, ix3) && !bcArray->isSolid(ix1, ix2, ix3)) { - distributionsH->getPostCollisionDistribution(f, ix1, ix2, ix3); - (*phaseField)(ix1, ix2, ix3) = - ((f[dPPP] + f[dMMM]) + (f[dPMP] + f[dMPM])) + ((f[dPMM] + f[dMPP]) + (f[dMMP] + f[dPPM])) + - (((f[dPP0] + f[dMM0]) + (f[dPM0] + f[dMP0])) + ((f[dP0P] + f[dM0M]) + (f[dP0M] + f[dM0P])) + - ((f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM]))) + - ((f[dP00] + f[dM00]) + (f[d0P0] + f[d0M0]) + (f[d00P] + f[d00M])) + f[d000]; - } - } - } - } - - if (kernel->getGhostLayerWidth() == 1) - { - maxX1 -= 2; - maxX2 -= 2; - maxX3 -= 2; - } - else if (kernel->getGhostLayerWidth() == 2) - { - maxX1 -= 3; - maxX2 -= 3; - maxX3 -= 3; - } - - int nr = (int)nodes.size(); - //real dX1_phi; - //real dX2_phi; - //real dX3_phi; - //real mu; - - for (int ix3 = minX3; ix3 <= maxX3; ix3++) { - for (int ix2 = minX2; ix2 <= maxX2; ix2++) { - for (int ix1 = minX1; ix1 <= maxX1; ix1++) { - if (!bcArray->isUndefined(ix1, ix2, ix3) && !bcArray->isSolid(ix1, ix2, ix3)) { - int index = 0; - nodeNumbers(ix1, ix2, ix3) = nr++; - Vector3D worldCoordinates = grid->getNodeCoordinates(block, ix1, ix2, ix3); - nodes.push_back(UbTupleFloat3(float(worldCoordinates[0]), float(worldCoordinates[1]), - float(worldCoordinates[2]))); - - phi = (*phaseField)(ix1, ix2, ix3); - - - distributionsF->getPostCollisionDistribution(f, ix1, ix2, ix3); - //real dU = (*divU)(ix1, ix2, ix3); - - real rhoH = 1.0; - real rhoL = 1.0 / densityRatio; - // real rhoToPhi = (1.0 - 1.0/densityRatio); - //real rhoToPhi = (rhoH - rhoL) / (phiH - phiL); - - // rho = phi[ZERO] + (1.0 - phi[ZERO])*1.0/densityRatio; - - - rho = (phi>c1o2) ? rhoH : rhoL; // rhoH + rhoToPhi * (phi - phiH); - - vx1 = - ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dPMM] - f[dMPP]) + (f[dPPM] - f[dMMP]))) + - (((f[dP0M] - f[dM0P]) + (f[dP0P] - f[dM0M])) + ((f[dPM0] - f[dMP0]) + (f[dPP0] - f[dMM0]))) + (f[dP00] - f[dM00])) ; - - vx2 = - ((((f[dPPP] - f[dMMM]) + (f[dMPM] - f[dPMP])) + ((f[dMPP] - f[dPMM]) + (f[dPPM] - f[dMMP]))) + - (((f[d0PM] - f[d0MP]) + (f[d0PP] - f[d0MM])) + ((f[dMP0] - f[dPM0]) + (f[dPP0] - f[dMM0]))) + (f[d0P0] - f[d0M0])) ; - - vx3 = - ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dMPP] - f[dPMM]) + (f[dMMP] - f[dPPM]))) + - (((f[d0MP] - f[d0PM]) + (f[d0PP] - f[d0MM])) + ((f[dM0P] - f[dP0M]) + (f[dP0P] - f[dM0M]))) + (f[d00P] - f[d00M])); - - - - pressure = (((f[dPPP] + f[dMMM]) + (f[dPMP] + f[dMPM])) + ((f[dPMM] + f[dMPP]) + (f[dMMP] + f[dPPM])) + - (((f[dPP0] + f[dMM0]) + (f[dPM0] + f[dMP0])) + ((f[dP0P] + f[dM0M]) + (f[dP0M] + f[dM0P])) + - ((f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM]))) + - ((f[dP00] + f[dM00]) + (f[d0P0] + f[d0M0]) + (f[d00P] + f[d00M])) + f[d000])*c1o3*rho; - - if (UbMath::isNaN(vx1) || UbMath::isInfinity(vx1)) - UB_THROW(UbException( - UB_EXARGS, "vx1 is not a number (nan or -1.#IND) or infinity number -1.#INF in block=" + - block->toString() + ", node=" + UbSystem::toString(ix1) + "," + - UbSystem::toString(ix2) + "," + UbSystem::toString(ix3))); - // vx1=999.0; - if (UbMath::isNaN(vx2) || UbMath::isInfinity(vx2)) - UB_THROW(UbException( - UB_EXARGS, "vx2 is not a number (nan or -1.#IND) or infinity number -1.#INF in block=" + - block->toString() + ", node=" + UbSystem::toString(ix1) + "," + - UbSystem::toString(ix2) + "," + UbSystem::toString(ix3))); - // vx2=999.0; - if (UbMath::isNaN(vx3) || UbMath::isInfinity(vx3)) - UB_THROW(UbException( - UB_EXARGS, "vx3 is not a number (nan or -1.#IND) or infinity number -1.#INF in block=" + - block->toString() + ", node=" + UbSystem::toString(ix1) + "," + - UbSystem::toString(ix2) + "," + UbSystem::toString(ix3))); - - if (UbMath::isNaN(phi) || UbMath::isInfinity(phi)) - UB_THROW(UbException( - UB_EXARGS, "phi is not a number (nan or -1.#IND) or infinity number -1.#INF in block=" + - block->toString() + ", node=" + UbSystem::toString(ix1) + "," + - UbSystem::toString(ix2) + "," + UbSystem::toString(ix3))); - - if (UbMath::isNaN(pressure) || UbMath::isInfinity(pressure)) - UB_THROW( UbException(UB_EXARGS,"pressure is not a number (nan or -1.#IND) or infinity number -1.#INF in block="+block->toString()+ - ", node="+UbSystem::toString(ix1)+","+UbSystem::toString(ix2)+","+UbSystem::toString(ix3))); - - //if (UbMath::isNaN(p1) || UbMath::isInfinity(p1)) - // UB_THROW( UbException(UB_EXARGS,"p1 is not a number (nan or -1.#IND) or infinity number -1.#INF in block="+block->toString()+ - // ", node="+UbSystem::toString(ix1)+","+UbSystem::toString(ix2)+","+UbSystem::toString(ix3))); - - //if (UbMath::isNaN(mp) || UbMath::isInfinity(mp)) - // UB_THROW(UbException(UB_EXARGS, "mp is not a number (nan or -1.#IND) or infinity number -1.#INF in block=" + block->toString() + - // ", node=" + UbSystem::toString(ix1) + "," + UbSystem::toString(ix2) + "," + UbSystem::toString(ix3))); - - //if (UbMath::isNaN(delmp) || UbMath::isInfinity(delmp)) - // UB_THROW(UbException(UB_EXARGS, "delmp is not a number (nan or -1.#IND) or infinity number -1.#INF in block=" + block->toString() + - // ", node=" + UbSystem::toString(ix1) + "," + UbSystem::toString(ix2) + "," + UbSystem::toString(ix3))); - - data[index++].push_back(phi); - data[index++].push_back(vx1); - data[index++].push_back(vx2); - data[index++].push_back(vx3); - //data[index++].push_back(p1); - //data[index++].push_back(phi2[d000]); - //data[index++].push_back(mp); - //data[index++].push_back(delmp); - data[index++].push_back(pressure); - } - } - } - } - maxX1 -= 1; - maxX2 -= 1; - maxX3 -= 1; - // cell vector erstellen - for (int ix3 = minX3; ix3 <= maxX3; ix3++) { - for (int ix2 = minX2; ix2 <= maxX2; ix2++) { - for (int ix1 = minX1; ix1 <= maxX1; ix1++) { - if ((SWB = nodeNumbers(ix1, ix2, ix3)) >= 0 && (SEB = nodeNumbers(ix1 + 1, ix2, ix3)) >= 0 && - (NEB = nodeNumbers(ix1 + 1, ix2 + 1, ix3)) >= 0 && (NWB = nodeNumbers(ix1, ix2 + 1, ix3)) >= 0 && - (SWT = nodeNumbers(ix1, ix2, ix3 + 1)) >= 0 && (SET = nodeNumbers(ix1 + 1, ix2, ix3 + 1)) >= 0 && - (NET = nodeNumbers(ix1 + 1, ix2 + 1, ix3 + 1)) >= 0 && - (NWT = nodeNumbers(ix1, ix2 + 1, ix3 + 1)) >= 0) { - cells.push_back(makeUbTuple((unsigned int)SWB, (unsigned int)SEB, (unsigned int)NEB, - (unsigned int)NWB, (unsigned int)SWT, (unsigned int)SET, - (unsigned int)NET, (unsigned int)NWT)); - } - } - } - } - kernel->swapDistributions(); -} - -real WriteSharpInterfaceQuantitiesSimulationObserver::gradX1_phi(const real *const &h) -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - using namespace vf::basics::constant; - real sum = c0o1; - for (int k = FSTARTDIR; k <= FENDDIR; k++) { - sum += WEIGTH[k] * DX1[k] * h[k]; - } - return 3.0 * sum; -} -real WriteSharpInterfaceQuantitiesSimulationObserver::gradX2_phi(const real *const &h) -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - using namespace vf::basics::constant; - real sum = c0o1; - for (int k = FSTARTDIR; k <= FENDDIR; k++) { - sum += WEIGTH[k] * DX2[k] * h[k]; - } - return 3.0 * sum; -} - -real WriteSharpInterfaceQuantitiesSimulationObserver::gradX3_phi(const real *const &h) -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - using namespace vf::basics::constant; - real sum = c0o1; - for (int k = FSTARTDIR; k <= FENDDIR; k++) { - sum += WEIGTH[k] * DX3[k] * h[k]; - } - return 3.0 * sum; -} - -real WriteSharpInterfaceQuantitiesSimulationObserver::nabla2_phi(const real *const &h) -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - using namespace vf::basics::constant; - real sum = c0o1; - for (int k = FSTARTDIR; k <= FENDDIR; k++) { - sum += WEIGTH[k] * (h[k] - h[d000]); - } - return 6.0 * sum; -} \ No newline at end of file diff --git a/src/cpu/MultiphaseFlow/SimulationObservers/WriteSharpInterfaceQuantitiesSimulationObserver.h b/src/cpu/MultiphaseFlow/SimulationObservers/WriteSharpInterfaceQuantitiesSimulationObserver.h deleted file mode 100644 index bf42cbfa46b8c6b080da16b1732bd242674e48c5..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/SimulationObservers/WriteSharpInterfaceQuantitiesSimulationObserver.h +++ /dev/null @@ -1,104 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file WriteSharpInterfaceQuantitiesSimulationObserver.h -//! \ingroup SimulationObservers -//! \author Konstantin Kutscher -//======================================================================================= - -#ifndef WriteSharpInterfaceQuantitiesSimulationObserver_H -#define WriteSharpInterfaceQuantitiesSimulationObserver_H - -#include <PointerDefinitions.h> -#include <string> -#include <vector> - -#include "SimulationObserver.h" -#include "LBMSystem.h" -#include "UbTuple.h" - -namespace vf::parallel {class Communicator;} -class Grid3D; -class UbScheduler; -class LBMUnitConverter; -class WbWriter; -class Block3D; - -//! \brief A class writes macroscopic quantities information to a VTK-file -class WriteSharpInterfaceQuantitiesSimulationObserver : public SimulationObserver -{ -public: - WriteSharpInterfaceQuantitiesSimulationObserver(); - //! \brief Construct WriteSharpInterfaceQuantitiesSimulationObserver object - //! \pre The Grid3D and UbScheduler objects must exist - //! \param grid is observable Grid3D object - //! \param s is UbScheduler object for scheduling of observer - //! \param path is path of folder for output - //! \param writer is WbWriter object - //! \param conv is LBMUnitConverter object - //! \param comm is Communicator object - WriteSharpInterfaceQuantitiesSimulationObserver(SPtr<Grid3D> grid, SPtr<UbScheduler> s, const std::string &path, - WbWriter *const writer, SPtr<LBMUnitConverter> conv, std::shared_ptr<vf::parallel::Communicator> comm); - ~WriteSharpInterfaceQuantitiesSimulationObserver() override = default; - - void update(double step) override; - -protected: - //! Collect data for VTK-file - //! \param step is a time step - void collectData(double step); - //! Collect data for VTK-file - //! \param block is a time step - void addDataMQ(SPtr<Block3D> block); - void clearData(); - -private: - void init(); - std::vector<UbTupleFloat3> nodes; - std::vector<UbTupleUInt8> cells; - std::vector<std::string> datanames; - std::vector<std::vector<double>> data; - std::string path; - WbWriter *writer; - SPtr<LBMUnitConverter> conv; - std::vector<std::vector<SPtr<Block3D>>> blockVector; - int minInitLevel; - int maxInitLevel; - int gridRank; - std::shared_ptr<vf::parallel::Communicator> comm; - - real gradX1_phi(const real *const &); - real gradX2_phi(const real *const &); - real gradX3_phi(const real *const &); - real nabla2_phi(const real *const &); - - using CalcMacrosFct = void (*)(const real *const &, real &, real &, real &, real &); - CalcMacrosFct calcMacros; -}; - -#endif diff --git a/src/cpu/MultiphaseFlow/Visitors/MultiphaseBoundaryConditionsBlockVisitor.cpp b/src/cpu/MultiphaseFlow/Visitors/MultiphaseBoundaryConditionsBlockVisitor.cpp deleted file mode 100644 index 5c0b5a02d61e742fb100040ef8c1daf219b3012b..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/Visitors/MultiphaseBoundaryConditionsBlockVisitor.cpp +++ /dev/null @@ -1,133 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseBoundaryConditionsBlockVisitor.cpp -//! \ingroup Visitors -//! \author Hesameddin Safari -//======================================================================================= - -#include "MultiphaseBoundaryConditionsBlockVisitor.h" -#include "BC.h" -#include "BCArray3D.h" -#include "BCSet.h" -#include "Block3D.h" -#include "D3Q27EsoTwist3DSplittedVector.h" -#include "DataSet3D.h" -#include "Grid3D.h" -#include "D3Q27System.h" -#include "BC.h" -#include "Block3D.h" -#include "BCArray3D.h" -#include "LBMKernel.h" -#include "MultiphaseFlow/BoundaryConditions/MultiphaseBCStrategy.h" - -MultiphaseBoundaryConditionsBlockVisitor::MultiphaseBoundaryConditionsBlockVisitor() : -Block3DVisitor(0, D3Q27System::MAXLEVEL) -{ - -} -////////////////////////////////////////////////////////////////////////// -MultiphaseBoundaryConditionsBlockVisitor::~MultiphaseBoundaryConditionsBlockVisitor() -{ - -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseBoundaryConditionsBlockVisitor::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<BCSet> bcSet = kernel->getBCSet(); - - if (!bcSet) - { - throw UbException(UB_EXARGS,"Boundary Conditions Processor is not exist!" ); - } - - SPtr<BCArray3D> bcArray = bcSet->getBCArray(); - - bool compressible = kernel->getCompressible(); - - 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; - - bcSet->clearBC(); - - SPtr<DistributionArray3D> distributions = kernel->getDataSet()->getFdistributions(); - SPtr<DistributionArray3D> distributionsH = kernel->getDataSet()->getHdistributions(); - SPtr<DistributionArray3D> distributionsH2 = kernel->getDataSet()->getH2distributions(); - - 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 bcStrategy = bcPtr->getBCStrategyKey(); - SPtr<BCStrategy> bca = BCStrategyRegistry::getInstance()->getBCStrategy(bcStrategy); - - if (bca) - { - bca = bca->clone(); - bca->setNodeIndex(x1, x2, x3); - bca->setBcPointer(bcPtr); - bca->addDistributions(distributions); - if (distributionsH) - dynamicPointerCast<MultiphaseBCStrategy>(bca)->addDistributionsH(distributionsH); - if (distributionsH2) - dynamicPointerCast<MultiphaseBCStrategy>(bca)->addDistributionsH2(distributionsH2); - bca->setCompressible(compressible); - bca->setBcArray(bcArray); - bcSet->addBC(bca); - } - } - } - } - } - } - } -} - - - - diff --git a/src/cpu/MultiphaseFlow/Visitors/MultiphaseBoundaryConditionsBlockVisitor.h b/src/cpu/MultiphaseFlow/Visitors/MultiphaseBoundaryConditionsBlockVisitor.h deleted file mode 100644 index 22878fb732bc5f4d57e34dc4e4245e1afd55dad6..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/Visitors/MultiphaseBoundaryConditionsBlockVisitor.h +++ /dev/null @@ -1,47 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseBoundaryConditionsBlockVisitor.h -//! \ingroup Visitors -//! \author Hesameddin Safari -//======================================================================================= - -#ifndef MultiphaseBoundaryConditionsBlockVisitor_h__ -#define MultiphaseBoundaryConditionsBlockVisitor_h__ - -#include "Block3DVisitor.h" - -class MultiphaseBoundaryConditionsBlockVisitor : public Block3DVisitor -{ -public: - MultiphaseBoundaryConditionsBlockVisitor(); - virtual ~MultiphaseBoundaryConditionsBlockVisitor(); - - void visit(SPtr<Grid3D> grid, SPtr<Block3D> block); -}; -#endif // MultiphaseBoundaryConditionsBlockVisitor_h__ diff --git a/src/cpu/MultiphaseFlow/Visitors/MultiphaseInitDistributionsBlockVisitor.cpp b/src/cpu/MultiphaseFlow/Visitors/MultiphaseInitDistributionsBlockVisitor.cpp deleted file mode 100644 index 54ee28571ebf76ca96d3d79cbb49417654517a8c..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/Visitors/MultiphaseInitDistributionsBlockVisitor.cpp +++ /dev/null @@ -1,360 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseInitDistributionsBlockVisitor.cpp -//! \ingroup Visitors -//! \author Hesameddin Safari -//======================================================================================= - -#include "MultiphaseInitDistributionsBlockVisitor.h" -#include "BCArray3D.h" -#include "BCSet.h" -#include "Block3D.h" -#include "DataSet3D.h" -#include "EsoTwist3D.h" -#include "Grid3D.h" -#include "D3Q27System.h" -#include "LBMKernel.h" - -MultiphaseInitDistributionsBlockVisitor::MultiphaseInitDistributionsBlockVisitor() - : Block3DVisitor(0, D3Q27System::MAXLEVEL) -{ - this->setVx1(0.0); - this->setVx2(0.0); - this->setVx3(0.0); - this->setRho(0.0); -} -////////////////////////////////////////////////////////////////////////// -MultiphaseInitDistributionsBlockVisitor::MultiphaseInitDistributionsBlockVisitor( real densityRatio, real vx1, real vx2, real vx3, real rho) - : Block3DVisitor(0, D3Q27System::MAXLEVEL), densityRatio(densityRatio) -{ - this->setVx1(vx1); - this->setVx2(vx2); - this->setVx3(vx3); - this->setRho(rho);} -////////////////////////////////////////////////////////////////////////// -void MultiphaseInitDistributionsBlockVisitor::setVx1( const mu::Parser& parser) -{ - this->checkFunction(parser); - this->muVx1 = parser; -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseInitDistributionsBlockVisitor::setVx2( const mu::Parser& parser) -{ - this->checkFunction(parser); - this->muVx2 = parser; -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseInitDistributionsBlockVisitor::setVx3( const mu::Parser& parser) -{ - this->checkFunction(parser); - this->muVx3 = parser; -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseInitDistributionsBlockVisitor::setRho( const mu::Parser& parser) -{ - this->checkFunction(parser); - this->muRho = parser; -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseInitDistributionsBlockVisitor::setPhi( const mu::Parser& parser) -{ - this->checkFunction(parser); - this->muPhi = parser; -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseInitDistributionsBlockVisitor::setVx1( const std::string& muParserString) -{ - this->muVx1.SetExpr(muParserString); - this->checkFunction(muVx1); -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseInitDistributionsBlockVisitor::setVx2( const std::string& muParserString) -{ - this->muVx2.SetExpr(muParserString); - this->checkFunction(muVx2); -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseInitDistributionsBlockVisitor::setVx3( const std::string& muParserString) -{ - this->muVx3.SetExpr(muParserString); - this->checkFunction(muVx3); -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseInitDistributionsBlockVisitor::setRho( const std::string& muParserString) -{ - this->muRho.SetExpr(muParserString); - this->checkFunction(muRho); -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseInitDistributionsBlockVisitor::setPhi( const std::string& muParserString) -{ - this->muPhi.SetExpr(muParserString); - this->checkFunction(muPhi); -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseInitDistributionsBlockVisitor::setVx1( real vx1 ) -{ - this->muVx1.SetExpr( UbSystem::toString(vx1,D3Q27RealLim::digits10) ); - this->checkFunction(muVx1); -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseInitDistributionsBlockVisitor::setVx2( real vx2 ) -{ - this->muVx2.SetExpr( UbSystem::toString(vx2,D3Q27RealLim::digits10) ); - this->checkFunction(muVx2); -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseInitDistributionsBlockVisitor::setVx3( real vx3 ) -{ - this->muVx3.SetExpr( UbSystem::toString(vx3,D3Q27RealLim::digits10) ); - this->checkFunction(muVx3); -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseInitDistributionsBlockVisitor::setRho( real rho ) -{ - this->muRho.SetExpr( UbSystem::toString(rho,D3Q27RealLim::digits10) ); - this->checkFunction(muRho); -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseInitDistributionsBlockVisitor::setPhi( real phi ) -{ - this->muPhi.SetExpr( UbSystem::toString(phi,D3Q27RealLim::digits10) ); - this->checkFunction(muPhi); -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseInitDistributionsBlockVisitor::visit(const SPtr<Grid3D> grid, SPtr<Block3D> block) -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - if(!block) UB_THROW( UbException(UB_EXARGS,"block is not exist") ); - - //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); - - real 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()); - - SPtr<BCArray3D> bcArray = kernel->getBCSet()->getBCArray(); - SPtr<EsoTwist3D> distributionsF = dynamicPointerCast<EsoTwist3D>(kernel->getDataSet()->getFdistributions()); - SPtr<EsoTwist3D> distributionsH = dynamicPointerCast<EsoTwist3D>(kernel->getDataSet()->getHdistributions()); - SPtr<EsoTwist3D> distributionsH2 = dynamicPointerCast<EsoTwist3D>(kernel->getDataSet()->getH2distributions()); - - real phiL = kernel->getPhiL(); - real phiH = kernel->getPhiH(); - - real f[D3Q27System::ENDF+1]; - - for(int ix3=0; ix3<(int)bcArray->getNX3(); ix3++) - for (int ix2 = 0; ix2 < (int)bcArray->getNX2(); ix2++) - for (int ix1 = 0; ix1 < (int)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; - real rhoH = 1.0; - real rhoL = 1.0/densityRatio; - rho = rhoH + (rhoH - rhoL)*(phi - phiH)/(phiH - phiL); - - - real feq[27]; - real geq[27]; - - //calcFeqsFct(feq,rho,vx1,vx2,vx3); - real vx1Sq = vx1*vx1; - real vx2Sq = vx2*vx2; - real vx3Sq = vx3*vx3; - for (int dir = STARTF; dir < (ENDF+1); dir++) - { - real velProd = DX1[dir]*vx1 + DX2[dir]*vx2 + DX3[dir]*vx3; - real velSq1 = velProd*velProd; - real 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*WEIGTH[dir] + gamma; - //geq[dir] = p1*WEIGTH[dir]/(rho*vf::basics::constant::c1o3) + gamma*rho; - //geq[dir] = (p1*WEIGTH[dir]/(rho*vf::basics::constant::c1o3) + gamma*rho)*vf::basics::constant::c1o3; - geq[dir] = (gamma*rho)* vf::basics::constant::c1o3; - } - - - f[dP00] = geq[dP00] ; - f[dM00] = geq[dM00] ; - f[d0P0] = geq[d0P0] ; - f[d0M0] = geq[d0M0] ; - f[d00P] = geq[d00P] ; - f[d00M] = geq[d00M] ; - f[dPP0] = geq[dPP0] ; - f[dMM0] = geq[dMM0] ; - f[dPM0] = geq[dPM0] ; - f[dMP0] = geq[dMP0] ; - f[dP0P] = geq[dP0P] ; - f[dM0M] = geq[dM0M] ; - f[dP0M] = geq[dP0M] ; - f[dM0P] = geq[dM0P] ; - f[d0PP] = geq[d0PP] ; - f[d0MM] = geq[d0MM] ; - f[d0PM] = geq[d0PM] ; - f[d0MP] = geq[d0MP] ; - f[dPPP] = geq[dPPP] ; - f[dMPP] = geq[dMPP] ; - f[dPMP] = geq[dPMP] ; - f[dMMP] = geq[dMMP] ; - f[dPPM] = geq[dPPM] ; - f[dMPM] = geq[dMPM] ; - f[dPMM] = geq[dPMM] ; - f[dMMM] = geq[dMMM] ; - f[d000] = geq[d000] ; - - distributionsF->setPostCollisionDistribution(f, ix1, ix2, ix3); - distributionsF->setPreCollisionDistribution(f, ix1, ix2, ix3); - - f[dP00] = phi * feq[dP00] / rho; - f[dM00] = phi * feq[dM00] / rho; - f[d0P0] = phi * feq[d0P0] / rho; - f[d0M0] = phi * feq[d0M0] / rho; - f[d00P] = phi * feq[d00P] / rho; - f[d00M] = phi * feq[d00M] / rho; - f[dPP0] = phi * feq[dPP0] / rho; - f[dMM0] = phi * feq[dMM0] / rho; - f[dPM0] = phi * feq[dPM0] / rho; - f[dMP0] = phi * feq[dMP0] / rho; - f[dP0P] = phi * feq[dP0P] / rho; - f[dM0M] = phi * feq[dM0M] / rho; - f[dP0M] = phi * feq[dP0M] / rho; - f[dM0P] = phi * feq[dM0P] / rho; - f[d0PP] = phi * feq[d0PP] / rho; - f[d0MM] = phi * feq[d0MM] / rho; - f[d0PM] = phi * feq[d0PM] / rho; - f[d0MP] = phi * feq[d0MP] / rho; - f[dPPP] = phi * feq[dPPP] / rho; - f[dMPP] = phi * feq[dMPP] / rho; - f[dPMP] = phi * feq[dPMP] / rho; - f[dMMP] = phi * feq[dMMP] / rho; - f[dPPM] = phi * feq[dPPM] / rho; - f[dMPM] = phi * feq[dMPM] / rho; - f[dPMM] = phi * feq[dPMM] / rho; - f[dMMM] = phi * feq[dMMM] / rho; - f[d000] = phi * feq[d000] / rho; - - distributionsH->setPostCollisionDistribution(f, ix1, ix2, ix3); - distributionsH->setPreCollisionDistribution(f, ix1, ix2, ix3); - - if (distributionsH2) { - - f[dP00] = (1.-phi) * feq[dP00] / rho; - f[dM00] = (1.-phi) * feq[dM00] / rho; - f[d0P0] = (1.-phi) * feq[d0P0] / rho; - f[d0M0] = (1.-phi) * feq[d0M0] / rho; - f[d00P] = (1.-phi) * feq[d00P] / rho; - f[d00M] = (1.-phi) * feq[d00M] / rho; - f[dPP0] = (1.-phi) * feq[dPP0] / rho; - f[dMM0] = (1.-phi) * feq[dMM0] / rho; - f[dPM0] = (1.-phi) * feq[dPM0] / rho; - f[dMP0] = (1.-phi) * feq[dMP0] / rho; - f[dP0P] = (1.-phi) * feq[dP0P] / rho; - f[dM0M] = (1.-phi) * feq[dM0M] / rho; - f[dP0M] = (1.-phi) * feq[dP0M] / rho; - f[dM0P] = (1.-phi) * feq[dM0P] / rho; - f[d0PP] = (1.-phi) * feq[d0PP] / rho; - f[d0MM] = (1.-phi) * feq[d0MM] / rho; - f[d0PM] = (1.-phi) * feq[d0PM] / rho; - f[d0MP] = (1.-phi) * feq[d0MP] / rho; - f[dPPP] = (1.-phi) * feq[dPPP] / rho; - f[dMPP] = (1.-phi) * feq[dMPP] / rho; - f[dPMP] = (1.-phi) * feq[dPMP] / rho; - f[dMMP] = (1.-phi) * feq[dMMP] / rho; - f[dPPM] = (1.-phi) * feq[dPPM] / rho; - f[dMPM] = (1.-phi) * feq[dMPM] / rho; - f[dPMM] = (1.-phi) * feq[dPMM] / rho; - f[dMMM] = (1.-phi) * feq[dMMM] / rho; - f[d000] = (1.-phi) * feq[d000] / rho; - - distributionsH2->setPostCollisionDistribution(f, ix1, ix2, ix3); - distributionsH2->setPreCollisionDistribution(f, ix1, ix2, ix3); - } - } - } - - //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 MultiphaseInitDistributionsBlockVisitor::checkFunction(mu::Parser fct) -{ - real 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 MultiphaseInitDistributionsBlockVisitor::setNu( real nu ) -{ - this->nu = nu; -} - diff --git a/src/cpu/MultiphaseFlow/Visitors/MultiphaseInitDistributionsBlockVisitor.h b/src/cpu/MultiphaseFlow/Visitors/MultiphaseInitDistributionsBlockVisitor.h deleted file mode 100644 index 6077a1294582ea423dd3c5fcb446dd841e65491a..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/Visitors/MultiphaseInitDistributionsBlockVisitor.h +++ /dev/null @@ -1,100 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseInitDistributionsBlockVisitor.h -//! \ingroup Visitors -//! \author Hesameddin Safari -//======================================================================================= - -#ifndef MultiphaseInitDistributionsBlockVisitor_H -#define MultiphaseInitDistributionsBlockVisitor_H - -#include "Block3DVisitor.h" -#include "D3Q27System.h" -#include "Block3D.h" - -#include <muParser.h> - - - -class MultiphaseInitDistributionsBlockVisitor : public Block3DVisitor -{ -public: - typedef std::numeric_limits<real> D3Q27RealLim; - -public: - MultiphaseInitDistributionsBlockVisitor(); - //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 - MultiphaseInitDistributionsBlockVisitor( real densityRatio, real vx1=0.0, real vx2=0.0, real vx3=0.0, real rho=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( real vx1 ); - void setVx2( real vx2 ); - void setVx3( real vx3 ); - void setRho( real rho ); - void setPhi( real rho ); - void setNu( real 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; - - real nu; - real densityRatio; -}; - -#endif //D3Q27INITDISTRIBUTIONSPATCHVISITOR_H diff --git a/src/cpu/MultiphaseFlow/Visitors/MultiphaseSetKernelBlockVisitor.cpp b/src/cpu/MultiphaseFlow/Visitors/MultiphaseSetKernelBlockVisitor.cpp deleted file mode 100644 index 71e1aa1f7b25ba996d9b812f24e8958fa2f56b55..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/Visitors/MultiphaseSetKernelBlockVisitor.cpp +++ /dev/null @@ -1,101 +0,0 @@ -#include "MultiphaseSetKernelBlockVisitor.h" -#include "D3Q27System.h" -#include "LBMSystem.h" -#include "Block3D.h" -#include "Grid3D.h" - -//SetKernelBlockVisitor::SetKernelBlockVisitor(LBMKernel3DPtr kernel, LBMReal nue) : -// Block3DVisitor(0, D3Q27System::MAXLEVEL), kernel(kernel), nue(nue) -//{ -// -//} -////////////////////////////////////////////////////////////////////////// -//SetKernelBlockVisitor::SetKernelBlockVisitor( LBMKernel3DPtr kernel, LBMReal nue, double availMem, double needMem ) : -// Block3DVisitor(0, D3Q27System::MAXLEVEL), kernel(kernel), nue(nue) -//{ -// if (needMem > availMem) -// { -// throw UbException(UB_EXARGS,"SetKernelBlockVisitor: Not enough memory!!!"); -// } -//} -////////////////////////////////////////////////////////////////////////// -MultiphaseSetKernelBlockVisitor::MultiphaseSetKernelBlockVisitor(SPtr<LBMKernel> kernel, real nuL, real nuG, real availMem, real needMem, MultiphaseSetKernelBlockVisitor::Action action /*= SetKernelBlockVisitor::New*/) : - Block3DVisitor(0, D3Q27System::MAXLEVEL), kernel(kernel), nuL(nuL), nuG(nuG), action(action), dataSetFlag(true) -{ - if (needMem > availMem) - { - throw UbException(UB_EXARGS, "SetKernelBlockVisitor: Not enough memory!!!"); - } -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseSetKernelBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block) -{ - if(kernel && (block->getRank() == grid->getRank())) - { - real collFactorL = LBMSystem::calcCollisionFactor(nuL, block->getLevel()); - real collFactorG = LBMSystem::calcCollisionFactor(nuG, block->getLevel()); - kernel->setCollisionFactorMultiphase(collFactorL, collFactorG); - - 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 MultiphaseSetKernelBlockVisitor::NewKernel: - block->setKernel(newKernel); - break; - case MultiphaseSetKernelBlockVisitor::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<BCSet> bcProc = block->getKernel()->getBCSet(); - if (!bcProc) - { - UB_THROW(UbException(UB_EXARGS, "It is not possible to change a BCSet in kernel! Old BCSet is not exist!")); - } - newKernel->setBCSet(bcProc); - block->setKernel(newKernel); - } - break; - - case MultiphaseSetKernelBlockVisitor::ChangeKernelWithData: - { - SPtr<BCSet> bcProc = block->getKernel()->getBCSet(); - if (!bcProc) - { - UB_THROW(UbException(UB_EXARGS, "It is not possible to change a BCSet in kernel! Old BCSet is not exist!")); - } - newKernel->setBCSet(bcProc); - block->setKernel(newKernel); - } - break; - case MultiphaseSetKernelBlockVisitor::AddKernel: - { - if (!block->getKernel()) - { - block->setKernel(newKernel); - } - //else - // std::cout << "block: " << block->getX1() << "," << block->getX2() << ","<< block->getX3() << std::endl; - } - break; - } - - } -} - -void MultiphaseSetKernelBlockVisitor::setNoDataSetFlag(bool flag) -{ - dataSetFlag = flag; -} - diff --git a/src/cpu/MultiphaseFlow/Visitors/MultiphaseSetKernelBlockVisitor.h b/src/cpu/MultiphaseFlow/Visitors/MultiphaseSetKernelBlockVisitor.h deleted file mode 100644 index cac0b61c8eff491e79129ce2111d2590fb6c1e96..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/Visitors/MultiphaseSetKernelBlockVisitor.h +++ /dev/null @@ -1,62 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseSetKernelBlockVisitor.cpp -//! \ingroup Visitors -//! \author Hesameddin Safari -//======================================================================================= -#ifndef MultiphaseSetKernelBlockVisitor_h -#define MultiphaseSetKernelBlockVisitor_h - -#include "Block3DVisitor.h" -#include "LBMKernel.h" - - -class MultiphaseSetKernelBlockVisitor : public Block3DVisitor -{ -public: - enum Action { NewKernel, ChangeKernel, ChangeKernelWithData, AddKernel}; -public: - MultiphaseSetKernelBlockVisitor(SPtr<LBMKernel> kernel, real nuL, real nuG, real availMem, real needMem, - MultiphaseSetKernelBlockVisitor::Action action = MultiphaseSetKernelBlockVisitor::NewKernel); - - virtual ~MultiphaseSetKernelBlockVisitor() {} - - virtual void visit(SPtr<Grid3D> grid, SPtr<Block3D> block); - - void setNoDataSetFlag(bool flag); - -private: - SPtr<LBMKernel> kernel; - real nuL; - real nuG; - Action action; - bool dataSetFlag; -}; - -#endif \ No newline at end of file diff --git a/src/cpu/MultiphaseFlow/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.cpp b/src/cpu/MultiphaseFlow/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.cpp deleted file mode 100644 index a51bdc0234734282d3c9504fd2d52d7b11355414..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.cpp +++ /dev/null @@ -1,380 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseVelocityFormInitDistributionsBlockVisitor.cpp -//! \ingroup Visitors -//! \author Hesameddin Safari -//======================================================================================= - -#include "MultiphaseVelocityFormInitDistributionsBlockVisitor.h" -#include "BCArray3D.h" -#include "BCSet.h" -#include "Block3D.h" -#include "DataSet3D.h" -#include "EsoTwist3D.h" -#include "Grid3D.h" -#include "D3Q27System.h" -#include "LBMKernel.h" - -MultiphaseVelocityFormInitDistributionsBlockVisitor::MultiphaseVelocityFormInitDistributionsBlockVisitor() - : Block3DVisitor(0, D3Q27System::MAXLEVEL) -{ - this->setVx1(0.0); - this->setVx2(0.0); - this->setVx3(0.0); - this->setRho(0.0); - this->setPhi(0.0); - this->setPressure(0.0); -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseVelocityFormInitDistributionsBlockVisitor::setVx1( const mu::Parser& parser) -{ - this->checkFunction(parser); - this->muVx1 = parser; -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseVelocityFormInitDistributionsBlockVisitor::setVx2( const mu::Parser& parser) -{ - this->checkFunction(parser); - this->muVx2 = parser; -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseVelocityFormInitDistributionsBlockVisitor::setVx3( const mu::Parser& parser) -{ - this->checkFunction(parser); - this->muVx3 = parser; -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseVelocityFormInitDistributionsBlockVisitor::setRho( const mu::Parser& parser) -{ - this->checkFunction(parser); - this->muRho = parser; -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseVelocityFormInitDistributionsBlockVisitor::setPhi( const mu::Parser& parser) -{ - this->checkFunction(parser); - this->muPhi = parser; -} -void MultiphaseVelocityFormInitDistributionsBlockVisitor::setPressure(const mu::Parser& parser) -{ - this->checkFunction(parser); - this->muPressure = parser; -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseVelocityFormInitDistributionsBlockVisitor::setVx1( const std::string& muParserString) -{ - this->muVx1.SetExpr(muParserString); - this->checkFunction(muVx1); -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseVelocityFormInitDistributionsBlockVisitor::setVx2( const std::string& muParserString) -{ - this->muVx2.SetExpr(muParserString); - this->checkFunction(muVx2); -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseVelocityFormInitDistributionsBlockVisitor::setVx3( const std::string& muParserString) -{ - this->muVx3.SetExpr(muParserString); - this->checkFunction(muVx3); -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseVelocityFormInitDistributionsBlockVisitor::setRho( const std::string& muParserString) -{ - this->muRho.SetExpr(muParserString); - this->checkFunction(muRho); -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseVelocityFormInitDistributionsBlockVisitor::setPhi( const std::string& muParserString) -{ - this->muPhi.SetExpr(muParserString); - this->checkFunction(muPhi); -} -void MultiphaseVelocityFormInitDistributionsBlockVisitor::setPressure(const std::string& muParserString) -{ - this->muPressure.SetExpr(muParserString); - this->checkFunction(muPressure); -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseVelocityFormInitDistributionsBlockVisitor::setVx1( real vx1 ) -{ - this->muVx1.SetExpr( UbSystem::toString(vx1,D3Q27RealLim::digits10) ); - this->checkFunction(muVx1); -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseVelocityFormInitDistributionsBlockVisitor::setVx2( real vx2 ) -{ - this->muVx2.SetExpr( UbSystem::toString(vx2,D3Q27RealLim::digits10) ); - this->checkFunction(muVx2); -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseVelocityFormInitDistributionsBlockVisitor::setVx3( real vx3 ) -{ - this->muVx3.SetExpr( UbSystem::toString(vx3,D3Q27RealLim::digits10) ); - this->checkFunction(muVx3); -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseVelocityFormInitDistributionsBlockVisitor::setRho( real rho ) -{ - this->muRho.SetExpr( UbSystem::toString(rho,D3Q27RealLim::digits10) ); - this->checkFunction(muRho); -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseVelocityFormInitDistributionsBlockVisitor::setPhi( real phi ) -{ - this->muPhi.SetExpr( UbSystem::toString(phi,D3Q27RealLim::digits10) ); - this->checkFunction(muPhi); -} -////////////////////////////////////////////////////////////////////////// -void MultiphaseVelocityFormInitDistributionsBlockVisitor::visit(const SPtr<Grid3D> grid, SPtr<Block3D> block) -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - if(!block) UB_THROW( UbException(UB_EXARGS,"block is not exist") ); - - //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); - this->muPressure.DefineVar("x1", &x1); this->muPressure.DefineVar("x2", &x2); this->muPressure.DefineVar("x3", &x3); - - - - 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()); - - SPtr<BCArray3D> bcArray = kernel->getBCSet()->getBCArray(); - SPtr<EsoTwist3D> distributionsF = dynamicPointerCast<EsoTwist3D>(kernel->getDataSet()->getFdistributions()); - SPtr<EsoTwist3D> distributionsH = dynamicPointerCast<EsoTwist3D>(kernel->getDataSet()->getHdistributions()); - SPtr<EsoTwist3D> distributionsH2 = dynamicPointerCast<EsoTwist3D>(kernel->getDataSet()->getH2distributions()); - SPtr<PhaseFieldArray3D> pressure = dynamicPointerCast<PhaseFieldArray3D>(kernel->getDataSet()->getPressureField()); - - - //LBMReal phiL = kernel->getPhiL(); - //LBMReal phiH = kernel->getPhiH(); - - real f[D3Q27System::ENDF+1]; - - for(int ix3=0; ix3<(int)bcArray->getNX3(); ix3++) - for (int ix2 = 0; ix2 < (int)bcArray->getNX2(); ix2++) - for (int ix1 = 0; ix1 < (int)bcArray->getNX1(); ix1++) - { - Vector3D coords = grid->getNodeCoordinates(block, ix1, ix2, ix3); - x1 = coords[0]; - x2 = coords[1]; - x3 = coords[2]; - - real vx1 = 0, vx2 = 0, vx3 = 0, p1 = 0, phi = 0,pres=0; - //p1 = 0.0; - p1 = muRho.Eval(); - vx1 = muVx1.Eval(); - vx2 = muVx2.Eval(); - vx3 = muVx3.Eval(); - phi = muPhi.Eval(); - pres = muPressure.Eval(); - if (pressure) - (*pressure)(ix1, ix2, ix3) = pres; - - - //rho = phi*1.0 + (1.0-phi)/densityRatio; - //LBMReal rhoH = 1.0; - //LBMReal rhoL = 1.0/densityRatio; - //LBMReal rho = rhoH + (rhoH - rhoL)*(phi - phiH)/(phiH - phiL); - - - real feq[27]; - real geq[27]; - - //calcFeqsFct(feq,rho,vx1,vx2,vx3); - real vx1Sq = vx1*vx1; - real vx2Sq = vx2*vx2; - real vx3Sq = vx3*vx3; - for (int dir = STARTF; dir <= ENDF; dir++) - { - real velProd = DX1[dir]*vx1 + DX2[dir]*vx2 + DX3[dir]*vx3; - real velSq1 = velProd*velProd; - real 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)); - feq[dir] = 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*vf::basics::constant::c1o3) + gamma*rho; - geq[dir] = p1 * WEIGTH[dir] / (vf::basics::constant::c1o3) + gamma ; - } - - f[d000] = geq[d000]; - f[dP00] = geq[dP00]; - f[dM00] = geq[dM00]; - f[d0P0] = geq[d0P0]; - f[d0M0] = geq[d0M0]; - f[d00P] = geq[d00P]; - f[d00M] = geq[d00M]; - f[dPP0] = geq[dPP0]; - f[dMM0] = geq[dMM0]; - f[dPM0] = geq[dPM0]; - f[dMP0] = geq[dMP0]; - f[dP0P] = geq[dP0P]; - f[dM0M] = geq[dM0M]; - f[dP0M] = geq[dP0M]; - f[dM0P] = geq[dM0P]; - f[d0PP] = geq[d0PP]; - f[d0MM] = geq[d0MM]; - f[d0PM] = geq[d0PM]; - f[d0MP] = geq[d0MP]; - f[dPPP] = geq[dPPP]; - f[dMPP] = geq[dMPP]; - f[dPMP] = geq[dPMP]; - f[dMMP] = geq[dMMP]; - f[dPPM] = geq[dPPM]; - f[dMPM] = geq[dMPM]; - f[dPMM] = geq[dPMM]; - f[dMMM] = geq[dMMM]; - - - distributionsF->setPostCollisionDistribution(f, ix1, ix2, ix3); - distributionsF->setPreCollisionDistribution(f, ix1, ix2, ix3); - - f[d000] = phi * feq[d000];// / rho; - f[dP00] = phi * feq[dP00];// / rho; - f[dM00] = phi * feq[dM00];// / rho; - f[d0P0] = phi * feq[d0P0];// / rho; - f[d0M0] = phi * feq[d0M0];// / rho; - f[d00P] = phi * feq[d00P];// / rho; - f[d00M] = phi * feq[d00M];// / rho; - f[dPP0] = phi * feq[dPP0];// / rho; - f[dMM0] = phi * feq[dMM0];// / rho; - f[dPM0] = phi * feq[dPM0];// / rho; - f[dMP0] = phi * feq[dMP0];// / rho; - f[dP0P] = phi * feq[dP0P];// / rho; - f[dM0M] = phi * feq[dM0M];// / rho; - f[dP0M] = phi * feq[dP0M];// / rho; - f[dM0P] = phi * feq[dM0P];// / rho; - f[d0PP] = phi * feq[d0PP];// / rho; - f[d0MM] = phi * feq[d0MM];// / rho; - f[d0PM] = phi * feq[d0PM];// / rho; - f[d0MP] = phi * feq[d0MP];// / rho; - f[dPPP] = phi * feq[dPPP];// / rho; - f[dMPP] = phi * feq[dMPP];// / rho; - f[dPMP] = phi * feq[dPMP];// / rho; - f[dMMP] = phi * feq[dMMP];// / rho; - f[dPPM] = phi * feq[dPPM];// / rho; - f[dMPM] = phi * feq[dMPM];// / rho; - f[dPMM] = phi * feq[dPMM];// / rho; - f[dMMM] = phi * feq[dMMM];// / rho; - - - distributionsH->setPostCollisionDistribution(f, ix1, ix2, ix3); - distributionsH->setPreCollisionDistribution(f, ix1, ix2, ix3); - - if (distributionsH2) { - - f[d000] = 0;//(1. - phi) * feq[d000]; // / rho; - f[dP00] = 0;//(1.-phi) * feq[dP00] ;// / rho; - f[dM00] = 0;//(1.-phi) * feq[dM00] ;// / rho; - f[d0P0] = 0;//(1.-phi) * feq[d0P0] ;// / rho; - f[d0M0] = 0;//(1.-phi) * feq[d0M0] ;// / rho; - f[d00P] = 0;//(1.-phi) * feq[d00P] ;// / rho; - f[d00M] = 0;//(1.-phi) * feq[d00M] ;// / rho; - f[dPP0] = 0;//(1.-phi) * feq[dPP0] ;// / rho; - f[dMM0] = 0;//(1.-phi) * feq[dMM0] ;// / rho; - f[dPM0] = 0;//(1.-phi) * feq[dPM0] ;// / rho; - f[dMP0] = 0;//(1.-phi) * feq[dMP0] ;// / rho; - f[dP0P] = 0;//(1.-phi) * feq[dP0P] ;// / rho; - f[dM0M] = 0;//(1.-phi) * feq[dM0M] ;// / rho; - f[dP0M] = 0;//(1.-phi) * feq[dP0M] ;// / rho; - f[dM0P] = 0;//(1.-phi) * feq[dM0P] ;// / rho; - f[d0PP] = 0;//(1.-phi) * feq[d0PP] ;// / rho; - f[d0MM] = 0;//(1.-phi) * feq[d0MM] ;// / rho; - f[d0PM] = 0;//(1.-phi) * feq[d0PM] ;// / rho; - f[d0MP] = 0;//(1.-phi) * feq[d0MP] ;// / rho; - f[dPPP] = 0;//(1.-phi) * feq[dPPP] ;// / rho; - f[dMPP] = 0;//(1.-phi) * feq[dMPP] ;// / rho; - f[dPMP] = 0;//(1.-phi) * feq[dPMP] ;// / rho; - f[dMMP] = 0;//(1.-phi) * feq[dMMP] ;// / rho; - f[dPPM] = 0;//(1.-phi) * feq[dPPM] ;// / rho; - f[dMPM] = 0;//(1.-phi) * feq[dMPM] ;// / rho; - f[dPMM] = 0;//(1.-phi) * feq[dPMM] ;// / rho; - f[dMMM] = 0;//(1.-phi) * feq[dMMM] ;// / rho; - - - distributionsH2->setPostCollisionDistribution(f, ix1, ix2, ix3); - distributionsH2->setPreCollisionDistribution(f, ix1, ix2, ix3); - } - } - } - - //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 MultiphaseVelocityFormInitDistributionsBlockVisitor::checkFunction(mu::Parser fct) -{ - real 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 MultiphaseVelocityFormInitDistributionsBlockVisitor::setNu( real nu ) -{ - this->nu = nu; -} - -void MultiphaseVelocityFormInitDistributionsBlockVisitor::setPressure(real pres) -{ - this->muPressure.SetExpr(UbSystem::toString(pres, D3Q27RealLim::digits10)); - this->checkFunction(muPressure); - -} - diff --git a/src/cpu/MultiphaseFlow/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.h b/src/cpu/MultiphaseFlow/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.h deleted file mode 100644 index 92ab5eff9af4559bf22893c9a8506362604606c3..0000000000000000000000000000000000000000 --- a/src/cpu/MultiphaseFlow/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.h +++ /dev/null @@ -1,102 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file MultiphaseVelocityFormInitDistributionsBlockVisitor.h -//! \ingroup Visitors -//! \author Hesameddin Safari, Martin Geier, Konstantin Kutscher -//======================================================================================= - -#ifndef MultiphaseVelocityFormInitDistributionsBlockVisitor_H -#define MultiphaseVelocityFormInitDistributionsBlockVisitor_H - -#include "Block3DVisitor.h" -#include "D3Q27System.h" -#include "Block3D.h" - -#include <muParser.h> - - - -class MultiphaseVelocityFormInitDistributionsBlockVisitor : public Block3DVisitor -{ -public: - typedef std::numeric_limits<real> D3Q27RealLim; - -public: - MultiphaseVelocityFormInitDistributionsBlockVisitor(); - //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 - ////////////////////////////////////////////////////////////////////////// - //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 setPressure(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 setPressure(const std::string& muParserString); - - ////////////////////////////////////////////////////////////////////////// - void setVx1( real vx1 ); - void setVx2( real vx2 ); - void setVx3( real vx3 ); - void setRho( real rho ); - void setPhi( real rho ); - void setNu( real nu ); - void setPressure(real pres); - - 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; - mu::Parser muPressure; - - real nu; -}; - -#endif //D3Q27INITDISTRIBUTIONSPATCHVISITOR_H diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/NonNewtonianBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/NonNewtonianBCStrategy.h deleted file mode 100644 index 0797ee70cb93adf2f8de66fda979cbc785daea1d..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/NonNewtonianBCStrategy.h +++ /dev/null @@ -1,56 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file NonNewtonianBCStrategy.h -//! \ingroup BoundaryConditions -//! \author Konstantin Kutscher -//======================================================================================= - -#ifndef NonNewtonianBCStrategy_H -#define NonNewtonianBCStrategy_H - -#include "BCStrategy.h" - -class DistributionArray3D; - -class NonNewtonianBCStrategy : public BCStrategy -{ -public: - NonNewtonianBCStrategy() = default; - virtual ~NonNewtonianBCStrategy() = default; - - virtual void addDistributionsH(SPtr<DistributionArray3D> distributionsH) {} - virtual void addDistributionsH2(SPtr<DistributionArray3D> distributionsH2) {} - -protected: - SPtr<DistributionArray3D> distributionsH; - SPtr<DistributionArray3D> distributionsH2; -}; - - -#endif \ No newline at end of file diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyBinghamModelNoSlipBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyBinghamModelNoSlipBCStrategy.h deleted file mode 100644 index 7707c12d92b69fbceacee99509bd2ca34140c9f9..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyBinghamModelNoSlipBCStrategy.h +++ /dev/null @@ -1,59 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file RheologyBinghamModelNoSlipBCStrategy.h -//! \ingroup BoundarConditions -//! \author Konstantin Kutscher -//======================================================================================= - -#ifndef RheologyBinghamModelNoSlipBCStrategy_h__ -#define RheologyBinghamModelNoSlipBCStrategy_h__ - -#include "RheologyNoSlipBCStrategy.h" -#include "cpu/NonNewtonianFluids/LBM/Rheology.h" - -class RheologyBinghamModelNoSlipBCStrategy : public RheologyNoSlipBCStrategy -{ -public: - RheologyBinghamModelNoSlipBCStrategy() - { - BCStrategy::preCollision = true; - } - ~RheologyBinghamModelNoSlipBCStrategy() {} - SPtr<BCStrategy> clone() override - { - SPtr<BCStrategy> bc(new RheologyBinghamModelNoSlipBCStrategy()); - return bc; - } -protected: - real getRheologyCollFactor(real omegaInf, real shearRate, real drho) const override - { - return Rheology::getBinghamCollFactor(omegaInf, shearRate, drho); - } -}; -#endif // BinghamModelNoSlipBCStrategy_h__ diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyBinghamModelVelocityBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyBinghamModelVelocityBCStrategy.h deleted file mode 100644 index f175cc6fb4cb42881809442a8b285cd20a8192c4..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyBinghamModelVelocityBCStrategy.h +++ /dev/null @@ -1,59 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file RheologyBinghamModelVelocityBCStrategy.h -//! \ingroup BoundarConditions -//! \author Konstantin Kutscher -//======================================================================================= - -#ifndef BinghamModelVelocityBCStrategy_h__ -#define BinghamModelVelocityBCStrategy_h__ - -#include "RheologyVelocityBCStrategy.h" -#include "cpu/NonNewtonianFluids/LBM/Rheology.h" - -class RheologyBinghamModelVelocityBCStrategy : public RheologyVelocityBCStrategy -{ -public: - RheologyBinghamModelVelocityBCStrategy() - { - BCStrategy::preCollision = true; - } - ~RheologyBinghamModelVelocityBCStrategy() {} - SPtr<BCStrategy> clone() override - { - SPtr<BCStrategy> bc(new RheologyBinghamModelVelocityBCStrategy()); - return bc; - } -protected: - real getRheologyCollFactor(real omegaInf, real shearRate, real drho) const override - { - return Rheology::getBinghamCollFactor(omegaInf, shearRate, drho); - } -}; -#endif // BinghamModelVelocityBCStrategy_h__ diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyHerschelBulkleyModelNoSlipBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyHerschelBulkleyModelNoSlipBCStrategy.h deleted file mode 100644 index 45a9abc16aa53aca3738d6d5f449d3a17c780562..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyHerschelBulkleyModelNoSlipBCStrategy.h +++ /dev/null @@ -1,58 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file RheologyHerschelBulkleyModelNoSlipBCStrategy.h -//! \ingroup BoundarConditions -//! \author Konstantin Kutscher -//======================================================================================= -#ifndef RheologyHerschelBulkleyModelNoSlipBCStrategy_h__ -#define RheologyHerschelBulkleyModelNoSlipBCStrategy_h__ - -#include "RheologyNoSlipBCStrategy.h" -#include "cpu/NonNewtonianFluids/LBM/Rheology.h" - -class RheologyHerschelBulkleyModelNoSlipBCStrategy : public RheologyNoSlipBCStrategy -{ -public: - RheologyHerschelBulkleyModelNoSlipBCStrategy() - { - BCStrategy::preCollision = true; - } - ~RheologyHerschelBulkleyModelNoSlipBCStrategy() {} - SPtr<BCStrategy> clone() override - { - SPtr<BCStrategy> bc(new RheologyHerschelBulkleyModelNoSlipBCStrategy()); - return bc; - } -protected: - real getRheologyCollFactor(real omegaInf, real shearRate, real drho) const override - { - return Rheology::getHerschelBulkleyCollFactor(omegaInf, shearRate, drho); - } -}; -#endif // RheologyHerschelBulkleyModelNoSlipBCStrategy_h__ \ No newline at end of file diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyNoSlipBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyNoSlipBCStrategy.cpp deleted file mode 100644 index f66ec5059ddd3ad0110ac263ffdff2370cc944bc..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyNoSlipBCStrategy.cpp +++ /dev/null @@ -1,66 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file RheologyNoSlipBCStrategy.cpp -//! \ingroup BoundarConditions -//! \author Konstantin Kutscher -//======================================================================================= -#include "RheologyNoSlipBCStrategy.h" -#include "DistributionArray3D.h" -#include "BoundaryConditions.h" - -////////////////////////////////////////////////////////////////////////// -void RheologyNoSlipBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions) -{ - this->distributions = distributions; -} -////////////////////////////////////////////////////////////////////////// -void RheologyNoSlipBCStrategy::applyBC() -{ - real f[D3Q27System::ENDF + 1]; - real feq[D3Q27System::ENDF + 1]; - distributions->getPreCollisionDistribution(f, x1, x2, x3); - real rho, vx1, vx2, vx3; - calcMacrosFct(f, rho, vx1, vx2, vx3); - calcFeqFct(feq, rho, vx1, vx2, vx3); - - real shearRate = D3Q27System::getShearRate(f, collFactor); - real collFactorF = getRheologyCollFactor(collFactor, shearRate, rho); - - for (int fDir = D3Q27System::FSTARTDIR; fDir <= D3Q27System::FENDDIR; fDir++) - { - if (bcPtr->hasNoSlipBoundaryFlag(fDir)) - { - //quadratic bounce back - const int invDir = D3Q27System::INVDIR[fDir]; - real q = bcPtr->getQ(invDir); - real fReturn =(f[invDir] + q * f[fDir] + q * collFactorF * (feq[invDir] - f[invDir] + feq[fDir] - f[fDir])) / (vf::basics::constant::c1o1 + q); - distributions->setPreCollisionDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], invDir); - } - } -} \ No newline at end of file diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyNoSlipBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyNoSlipBCStrategy.h deleted file mode 100644 index ec2aef786d2404a8a885a887a58756446ffcfe2a..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyNoSlipBCStrategy.h +++ /dev/null @@ -1,52 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file RheologyNoSlipBCStrategy.h -//! \ingroup BoundarConditions -//! \author Konstantin Kutscher -//======================================================================================= -#ifndef RheologyNoSlipBCStrategy_h__ -#define RheologyNoSlipBCStrategy_h__ - -#include "NonNewtonianBCStrategy.h" -#include <PointerDefinitions.h> - -class DistributionArray3D; - -class RheologyNoSlipBCStrategy : public NonNewtonianBCStrategy -{ -public: - RheologyNoSlipBCStrategy() = default; - ~RheologyNoSlipBCStrategy() = default; - virtual SPtr<BCStrategy> clone() override { UB_THROW(UbException("real clone() - belongs in the derived class")); } - void addDistributions(SPtr<DistributionArray3D> distributions) override; - void applyBC() override; -protected: - virtual real getRheologyCollFactor(real omegaInf, real shearRate, real drho) const = 0; // { UB_THROW(UbException("real getRheologyCollFactor() - belongs in the derived class")); } -}; -#endif // RheologyNoSlipBCStrategy_h__ diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyPowellEyringModelNoSlipBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyPowellEyringModelNoSlipBCStrategy.h deleted file mode 100644 index 09a2e906fc7a3a44f35d012d27554b1a08aa37ca..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyPowellEyringModelNoSlipBCStrategy.h +++ /dev/null @@ -1,58 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file RheologyPowellEyringModelNoSlipBCStrategy.h -//! \ingroup BoundarConditions -//! \author Konstantin Kutscher -//======================================================================================= -#ifndef RheologyPowellEyringModelNoSlipBCStrategy_h__ -#define RheologyPowellEyringModelNoSlipBCStrategy_h__ - -#include "RheologyNoSlipBCStrategy.h" -#include "cpu/NonNewtonianFluids/LBM/Rheology.h" - -class RheologyPowellEyringModelNoSlipBCStrategy : public RheologyNoSlipBCStrategy -{ -public: - RheologyPowellEyringModelNoSlipBCStrategy() - { - BCStrategy::preCollision = true; - } - ~RheologyPowellEyringModelNoSlipBCStrategy() {} - SPtr<BCStrategy> clone() override - { - SPtr<BCStrategy> bc(new RheologyPowellEyringModelNoSlipBCStrategy()); - return bc; - } -protected: - real getRheologyCollFactor(real omegaInf, real shearRate, real drho) const override - { - return Rheology::getHerschelBulkleyCollFactor(omegaInf, shearRate, drho); - } -}; -#endif // RheologyPowellEyringModelNoSlipBCStrategy_h__ \ No newline at end of file diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyVelocityBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyVelocityBCStrategy.cpp deleted file mode 100644 index 24e1f4c14c9d7ac0339ab4214cf7a325b1319f02..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyVelocityBCStrategy.cpp +++ /dev/null @@ -1,83 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file RheologyVelocityBCStrategy.cpp -//! \ingroup BoundarConditions -//! \author Konstantin Kutscher -//======================================================================================= -#include "RheologyVelocityBCStrategy.h" -#include "DistributionArray3D.h" -#include "BoundaryConditions.h" - -RheologyVelocityBCStrategy::RheologyVelocityBCStrategy() -{ - //BCStrategy::type = BCStrategy::RheologyVelocityBCStrategy; - //BCStrategy::preCollision = false; -} -////////////////////////////////////////////////////////////////////////// -RheologyVelocityBCStrategy::~RheologyVelocityBCStrategy() -{ -} -////////////////////////////////////////////////////////////////////////// -void RheologyVelocityBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions) -{ - this->distributions = distributions; -} -////////////////////////////////////////////////////////////////////////// -void RheologyVelocityBCStrategy::applyBC() -{ - using namespace vf::basics::constant; - - real f[D3Q27System::ENDF+1]; - real feq[D3Q27System::ENDF+1]; - distributions->getPreCollisionDistribution(f, x1, x2, x3); - real rho, vx1, vx2, vx3, drho; - calcMacrosFct(f, drho, vx1, vx2, vx3); - calcFeqFct(feq, drho, vx1, vx2, vx3); - - real shearRate = D3Q27System::getShearRate(f, collFactor); - // getShearRate(f, collFactor) takes pre collision state but is given post collision state. Requires rescaling - real collFactorF = getRheologyCollFactor(collFactor, shearRate, drho); - - - rho = 1.0+drho*compressibleFactor; - - for (int fdir = D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++) - { - if (bcPtr->hasVelocityBoundaryFlag(fdir)) - { - const int invDir = D3Q27System::INVDIR[fdir]; - real q = bcPtr->getQ(invDir); - real velocity = bcPtr->getBoundaryVelocity(invDir); - real fReturn = ((c1o1 - q) / (c1o1 + q)) * ((f[invDir])) + ((q * (f[invDir] + f[fdir] - collFactorF * (f[invDir] - feq[invDir] + f[fdir] - feq[fdir])) - velocity * rho) / (c1o1 + q)); - distributions->setPostCollisionDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); - } - } - -} - diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyVelocityBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyVelocityBCStrategy.h deleted file mode 100644 index bb2846871f9f7c12a2d7d2c4a730dd1a5f0ae34a..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyVelocityBCStrategy.h +++ /dev/null @@ -1,54 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file RheologyVelocityBCStrategy.h -//! \ingroup BoundarConditions -//! \author Konstantin Kutscher -//======================================================================================= -#ifndef RheologyVelocityBCStrategy_h__ -#define RheologyVelocityBCStrategy_h__ - -#include "NonNewtonianBCStrategy.h" -#include <PointerDefinitions.h> - -class DistributionArray3D; - -class RheologyVelocityBCStrategy : public NonNewtonianBCStrategy -{ -public: - RheologyVelocityBCStrategy(); - ~RheologyVelocityBCStrategy(); - virtual SPtr<BCStrategy> clone() override { UB_THROW(UbException("real clone() - belongs in the derived class")); } - void addDistributions(SPtr<DistributionArray3D> distributions) override; - void applyBC() override; -protected: - virtual real getRheologyCollFactor(real omegaInf, real shearRate, real drho) const = 0; // { UB_THROW(UbException("real getRheologyCollFactor() - belongs in the derived class")); } -}; - -#endif // RheologyVelocityBCStrategy_h__ - diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.cpp deleted file mode 100644 index 65a730182931f6ddaa63f66b7eeb32375f49c5cc..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.cpp +++ /dev/null @@ -1,120 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file ThixotropyDensityBCStrategy.cpp -//! \ingroup BoundarConditions -//! \author Konstantin Kutscher -//======================================================================================= - -#include "ThixotropyDensityBCStrategy.h" -#include "DistributionArray3D.h" -#include "BoundaryConditions.h" - -ThixotropyDensityBCStrategy::ThixotropyDensityBCStrategy() -{ - BCStrategy::preCollision = false; - lambdaBC = 0.0; -} -////////////////////////////////////////////////////////////////////////// -ThixotropyDensityBCStrategy::~ThixotropyDensityBCStrategy() -{ - -} -////////////////////////////////////////////////////////////////////////// -SPtr<BCStrategy> ThixotropyDensityBCStrategy::clone() -{ - SPtr<BCStrategy> bc(new ThixotropyDensityBCStrategy()); - dynamicPointerCast<ThixotropyDensityBCStrategy>(bc)->setLambdaBC(lambdaBC); - return bc; -} -////////////////////////////////////////////////////////////////////////// -void ThixotropyDensityBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions) -{ - this->distributions = distributions; -} -////////////////////////////////////////////////////////////////////////// -//void ThixotropyDensityBCStrategy::addDistributionsF(DistributionArray3DPtr distributions) -//{ -// this->distributionsf = distributions; -//} -////////////////////////////////////////////////////////////////////////// -void ThixotropyDensityBCStrategy::addDistributionsH(SPtr<DistributionArray3D> distributions) -{ - this->distributionsH = distributions; -} -////////////////////////////////////////////////////////////////////////// -void ThixotropyDensityBCStrategy::applyBC() -{ - using namespace vf::lbm::dir; - using namespace D3Q27System; - - real f[D3Q27System::ENDF + 1]; - real feq[D3Q27System::ENDF + 1]; - real h[D3Q27System::ENDF + 1]; - real heq[D3Q27System::ENDF + 1]; - distributions->getPostCollisionDistribution(f, x1, x2, x3); - distributionsH->getPostCollisionDistribution(h, x1, x2, x3); - - real rho, vx1, vx2, vx3; - - calcMacrosFct(f, rho, vx1, vx2, vx3); - calcFeqFct(feq, rho, vx1, vx2, vx3); - - real lambda = D3Q27System::getDensity(h); - D3Q27System::calcCompFeq(heq, lambda, vx1, vx2, vx3); - - - int nx1 = x1; - int nx2 = x2; - int nx3 = x3; - - //flag points in direction of fluid - if (bcPtr->hasDensityBoundaryFlag(dP00)) { nx1 -= 1; } - else if (bcPtr->hasDensityBoundaryFlag(dM00)) { nx1 += 1; } - else if (bcPtr->hasDensityBoundaryFlag(d0P0)) { nx2 -= 1; } - else if (bcPtr->hasDensityBoundaryFlag(d0M0)) { nx2 += 1; } - else if (bcPtr->hasDensityBoundaryFlag(d00P)) { nx3 -= 1; } - else if (bcPtr->hasDensityBoundaryFlag(d00M)) { nx3 += 1; } - else UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary...")); - - real rhoBC = bcPtr->getBoundaryDensity(); - - for (int fdir = D3Q27System::STARTF; fdir <= D3Q27System::ENDF; fdir++) - { - if (bcPtr->hasDensityBoundaryFlag(fdir)) - { - real ftemp = calcFeqsForDirFct(fdir, rho, vx1, vx2, vx3); - ftemp = calcFeqsForDirFct(fdir, rhoBC, vx1, vx2, vx3) + f[fdir] - ftemp; - distributions->setPostCollisionDistributionForDirection(ftemp, nx1, nx2, nx3, fdir); - - real htemp = D3Q27System::getCompFeqForDirection(fdir, lambda, vx1, vx2, vx3); - htemp = D3Q27System::getCompFeqForDirection(fdir,lambdaBC, vx1, vx2, vx3) + h[fdir] - htemp; - distributionsH->setPostCollisionDistributionForDirection(htemp, nx1, nx2, nx3, fdir); - } - } -} diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.h deleted file mode 100644 index 5dddbefc6b97c27a62eaf53e6d6836a16ae66904..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.h +++ /dev/null @@ -1,58 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file ThixotropyDensityBCStrategy.h -//! \ingroup BoundarConditions -//! \author Konstantin Kutscher -//======================================================================================= - -#ifndef ThixotropyDensityBCStrategy_h__ -#define ThixotropyDensityBCStrategy_h__ - -#include "NonNewtonianBCStrategy.h" - - -class ThixotropyDensityBCStrategy : public NonNewtonianBCStrategy -{ -public: - ThixotropyDensityBCStrategy(); - virtual ~ThixotropyDensityBCStrategy(); - SPtr<BCStrategy> clone(); - void addDistributions(SPtr<DistributionArray3D> distributions); - //void addDistributionsF(SPtr<DistributionArray3D> distributions); - void addDistributionsH(SPtr<DistributionArray3D> distributions); - void applyBC(); - void setLambdaBC(real lambda) { this->lambdaBC = lambda; } - real getLambdaBC() { return this->lambdaBC; } -protected: - SPtr<DistributionArray3D> distributionsH; -private: - real lambdaBC; -}; -#endif // ThixotropyDensityBCStrategy_h__ - diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.cpp deleted file mode 100644 index f54096ad23a985d152fb282677d9012c6ee478bd..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.cpp +++ /dev/null @@ -1,99 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file ThixotropyNoSlipBCStrategy.cpp -//! \ingroup BoundarConditions -//! \author Konstantin Kutscher -//======================================================================================= -#include "ThixotropyNoSlipBCStrategy.h" -#include "DistributionArray3D.h" -#include "BoundaryConditions.h" - -ThixotropyNoSlipBCStrategy::ThixotropyNoSlipBCStrategy() -{ - BCStrategy::preCollision = false; -} -////////////////////////////////////////////////////////////////////////// -ThixotropyNoSlipBCStrategy::~ThixotropyNoSlipBCStrategy() -{ - -} -////////////////////////////////////////////////////////////////////////// -SPtr<BCStrategy> ThixotropyNoSlipBCStrategy::clone() -{ - SPtr<BCStrategy> bc(new ThixotropyNoSlipBCStrategy()); - return bc; -} -////////////////////////////////////////////////////////////////////////// -void ThixotropyNoSlipBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions) -{ - this->distributions = distributions; -} -////////////////////////////////////////////////////////////////////////// -//void ThixotropyNoSlipBCStrategy::addDistributionsF(SPtr<DistributionArray3D> distributions) -//{ -// this->distributionsf = distributions; -//} -////////////////////////////////////////////////////////////////////////// -void ThixotropyNoSlipBCStrategy::addDistributionsH(SPtr<DistributionArray3D> distributions) -{ - this->distributionsH = distributions; -} -////////////////////////////////////////////////////////////////////////// -void ThixotropyNoSlipBCStrategy::applyBC() -{ - real f[D3Q27System::ENDF + 1]; - real feq[D3Q27System::ENDF + 1]; - real h[D3Q27System::ENDF + 1]; - real heq[D3Q27System::ENDF + 1]; - distributions->getPostCollisionDistribution(f, x1, x2, x3); - distributionsH->getPostCollisionDistribution(h, x1, x2, x3); - real rho, vx1, vx2, vx3;//, concentration, fl1, fl2, fl3, m100; - calcMacrosFct(f, rho, vx1, vx2, vx3); - calcFeqFct(feq, rho, vx1, vx2, vx3); - - //calcDiffusionMacrosFctPost(h, concentration, fl1, fl2, fl3, m100, collFactor); - real lambda = D3Q27System::getDensity(h); - D3Q27System::calcCompFeq(heq, lambda, 0., 0., 0.); - - for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) - { - if (bcPtr->hasNoSlipBoundaryFlag(fdir)) - { - //quadratic bounce back - const int invDir = D3Q27System::INVDIR[fdir]; - real q = bcPtr->getQ(invDir); - real fReturnf = ((vf::basics::constant::c1o1 - q) / (vf::basics::constant::c1o1 + q))*((f[invDir] - feq[invDir]) / (vf::basics::constant::c1o1 - collFactor) + feq[invDir]) + ((q / (vf::basics::constant::c1o1 + q))*(f[invDir] + f[fdir])); - real fReturnh = ((vf::basics::constant::c1o1 - q) / (vf::basics::constant::c1o1 + q))*((h[invDir] - heq[invDir]) / (vf::basics::constant::c1o1 - collFactor) + heq[invDir]) + ((q / (vf::basics::constant::c1o1 + q))*(h[invDir] + h[fdir])); - - distributions->setPostCollisionDistributionForDirection(fReturnf, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir); - distributionsH->setPostCollisionDistributionForDirection(fReturnh, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir); - - } - } -} diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.h deleted file mode 100644 index f406bad385766660f67c4dd7527fc22e6f8a2c9d..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.h +++ /dev/null @@ -1,54 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file ThixotropyNoSlipBCStrategy.h -//! \ingroup BoundarConditions -//! \author Konstantin Kutscher -//======================================================================================= -#ifndef ThixotropyNoSlipBCStrategy_h__ -#define ThixotropyNoSlipBCStrategy_h__ - -#include "NonNewtonianBCStrategy.h" - -class ThixotropyNoSlipBCStrategy : public NonNewtonianBCStrategy -{ -public: - ThixotropyNoSlipBCStrategy(); - virtual ~ThixotropyNoSlipBCStrategy(); - SPtr<BCStrategy> clone(); - void addDistributions(SPtr<DistributionArray3D> distributions); - //void addDistributionsF(DistributionArray3DPtr distributions); - void addDistributionsH(SPtr<DistributionArray3D> distributions); - void applyBC(); -protected: - SPtr<DistributionArray3D> distributionsH; -private: - -}; -#endif // ThixotropyNoSlipBCStrategy_h__ - diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.cpp deleted file mode 100644 index a0189f09ab712f29dc400b947178824f9bf467e4..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.cpp +++ /dev/null @@ -1,372 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file ThixotropyNonReflectingOutflowBCStrategy.cpp -//! \ingroup BoundarConditions -//! \author Konstantin Kutscher -//======================================================================================= -#include "ThixotropyNonReflectingOutflowBCStrategy.h" -#include "DistributionArray3D.h" -#include "BoundaryConditions.h" - -ThixotropyNonReflectingOutflowBCStrategy::ThixotropyNonReflectingOutflowBCStrategy() -{ - BCStrategy::preCollision = true; -} -////////////////////////////////////////////////////////////////////////// -ThixotropyNonReflectingOutflowBCStrategy::~ThixotropyNonReflectingOutflowBCStrategy() -{ - -} -////////////////////////////////////////////////////////////////////////// -SPtr<BCStrategy> ThixotropyNonReflectingOutflowBCStrategy::clone() -{ - SPtr<BCStrategy> bc(new ThixotropyNonReflectingOutflowBCStrategy()); - return bc; -} -////////////////////////////////////////////////////////////////////////// -void ThixotropyNonReflectingOutflowBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions) -{ - this->distributions = distributions; -} -////////////////////////////////////////////////////////////////////////// -//void ThixotropyNonReflectingOutflowBCStrategy::addDistributionsF(DistributionArray3DPtr distributions) -//{ -// this->distributionsf = distributions; -//} -////////////////////////////////////////////////////////////////////////// -void ThixotropyNonReflectingOutflowBCStrategy::addDistributionsH(SPtr<DistributionArray3D> distributions) -{ - this->distributionsH = distributions; -} -////////////////////////////////////////////////////////////////////////// -void ThixotropyNonReflectingOutflowBCStrategy::applyBC() -{ - using namespace vf::lbm::dir; - using namespace D3Q27System; - using namespace vf::basics::constant; - - real f[ENDF + 1]; - real ftemp[ENDF + 1]; - - int nx1 = x1; - int nx2 = x2; - int nx3 = x3; - int direction = -1; - - //flag points in direction of fluid - if (bcPtr->hasDensityBoundaryFlag(dP00)) { nx1 += 1; direction = dP00; } - else if (bcPtr->hasDensityBoundaryFlag(dM00)) { nx1 -= 1; direction = dM00; } - else if (bcPtr->hasDensityBoundaryFlag(d0P0)) { nx2 += 1; direction = d0P0; } - else if (bcPtr->hasDensityBoundaryFlag(d0M0)) { nx2 -= 1; direction = d0M0; } - else if (bcPtr->hasDensityBoundaryFlag(d00P)) { nx3 += 1; direction = d00P; } - else if (bcPtr->hasDensityBoundaryFlag(d00M)) { nx3 -= 1; direction = d00M; } - else UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary...")); - - distributions->getPreCollisionDistribution(f, x1, x2, x3); - distributions->getPreCollisionDistribution(ftemp, nx1, nx2, nx3); - - real rho, vx1, vx2, vx3; - calcMacrosFct(f, rho, vx1, vx2, vx3); - - switch (direction) - { - case dP00: - f[dP00] = ftemp[dP00] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP00]; - f[dPP0] = ftemp[dPP0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPP0]; - f[dPM0] = ftemp[dPM0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPM0]; - f[dP0P] = ftemp[dP0P] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP0P]; - f[dP0M] = ftemp[dP0M] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP0M]; - f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPPP]; - f[dPMP] = ftemp[dPMP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPMP]; - f[dPPM] = ftemp[dPPM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPPM]; - f[dPMM] = ftemp[dPMM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPMM]; - - distributions->setPreCollisionDistributionForDirection(f[dP00], x1 + DX1[dM00], x2 + DX2[dM00], x3 + DX3[dM00], dM00); - distributions->setPreCollisionDistributionForDirection(f[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0); - distributions->setPreCollisionDistributionForDirection(f[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0); - distributions->setPreCollisionDistributionForDirection(f[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M); - distributions->setPreCollisionDistributionForDirection(f[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P); - distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); - distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); - distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); - distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); - break; - case dM00: - f[dM00] = ftemp[dM00] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM00]; - f[dMP0] = ftemp[dMP0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMP0]; - f[dMM0] = ftemp[dMM0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMM0]; - f[dM0P] = ftemp[dM0P] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM0P]; - f[dM0M] = ftemp[dM0M] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM0M]; - f[dMPP] = ftemp[dMPP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMPP]; - f[dMMP] = ftemp[dMMP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMMP]; - f[dMPM] = ftemp[dMPM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMPM]; - f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMMM]; - - distributions->setPreCollisionDistributionForDirection(f[dM00], x1 + DX1[dP00], x2 + DX2[dP00], x3 + DX3[dP00], dP00); - distributions->setPreCollisionDistributionForDirection(f[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0); - distributions->setPreCollisionDistributionForDirection(f[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0); - distributions->setPreCollisionDistributionForDirection(f[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M); - distributions->setPreCollisionDistributionForDirection(f[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P); - distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); - distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); - distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); - distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); - break; - case d0P0: - f[d0P0] = ftemp[d0P0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0P0]; - f[dPP0] = ftemp[dPP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPP0]; - f[dMP0] = ftemp[dMP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMP0]; - f[d0PP] = ftemp[d0PP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0PP]; - f[d0PM] = ftemp[d0PM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0PM]; - f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPPP]; - f[dMPP] = ftemp[dMPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMPP]; - f[dPPM] = ftemp[dPPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPPM]; - f[dMPM] = ftemp[dMPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMPM]; - - distributions->setPreCollisionDistributionForDirection(f[d0P0], x1 + DX1[d0M0], x2 + DX2[d0M0], x3 + DX3[d0M0], d0M0); - distributions->setPreCollisionDistributionForDirection(f[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0); - distributions->setPreCollisionDistributionForDirection(f[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0); - distributions->setPreCollisionDistributionForDirection(f[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM); - distributions->setPreCollisionDistributionForDirection(f[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP); - distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); - distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); - distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); - distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); - break; - case d0M0: - f[d0M0] = ftemp[d0M0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0M0]; - f[dPM0] = ftemp[dPM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPM0]; - f[dMM0] = ftemp[dMM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMM0]; - f[d0MP] = ftemp[d0MP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0MP]; - f[d0MM] = ftemp[d0MM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0MM]; - f[dPMP] = ftemp[dPMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPMP]; - f[dMMP] = ftemp[dMMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMMP]; - f[dPMM] = ftemp[dPMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPMM]; - f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMMM]; - - distributions->setPreCollisionDistributionForDirection(f[d0M0], x1 + DX1[d0P0], x2 + DX2[d0P0], x3 + DX3[d0P0], d0P0); - distributions->setPreCollisionDistributionForDirection(f[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0); - distributions->setPreCollisionDistributionForDirection(f[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0); - distributions->setPreCollisionDistributionForDirection(f[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM); - distributions->setPreCollisionDistributionForDirection(f[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP); - distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); - distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); - distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); - distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); - break; - case d00P: - f[d00P] = ftemp[d00P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d00P]; - f[dP0P] = ftemp[dP0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dP0P]; - f[dM0P] = ftemp[dM0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dM0P]; - f[d0PP] = ftemp[d0PP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d0PP]; - f[d0MP] = ftemp[d0MP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d0MP]; - f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dPPP]; - f[dMPP] = ftemp[dMPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dMPP]; - f[dPMP] = ftemp[dPMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dPMP]; - f[dMMP] = ftemp[dMMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dMMP]; - - distributions->setPreCollisionDistributionForDirection(f[d00P], x1 + DX1[d00M], x2 + DX2[d00M], x3 + DX3[d00M], d00M); - distributions->setPreCollisionDistributionForDirection(f[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M); - distributions->setPreCollisionDistributionForDirection(f[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M); - distributions->setPreCollisionDistributionForDirection(f[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM); - distributions->setPreCollisionDistributionForDirection(f[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM); - distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); - distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); - distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); - distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); - break; - case d00M: - f[d00M] = ftemp[d00M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d00M]; - f[dP0M] = ftemp[dP0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dP0M]; - f[dM0M] = ftemp[dM0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dM0M]; - f[d0PM] = ftemp[d0PM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d0PM]; - f[d0MM] = ftemp[d0MM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d0MM]; - f[dPPM] = ftemp[dPPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dPPM]; - f[dMPM] = ftemp[dMPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dMPM]; - f[dPMM] = ftemp[dPMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dPMM]; - f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dMMM]; - - distributions->setPreCollisionDistributionForDirection(f[d00M], x1 + DX1[d00P], x2 + DX2[d00P], x3 + DX3[d00P], d00P); - distributions->setPreCollisionDistributionForDirection(f[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P); - distributions->setPreCollisionDistributionForDirection(f[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P); - distributions->setPreCollisionDistributionForDirection(f[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP); - distributions->setPreCollisionDistributionForDirection(f[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP); - distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); - distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); - distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); - distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); - break; - default: - UB_THROW(UbException(UB_EXARGS, "It isn't implemented non reflecting density boundary for this direction!")); - } - real h[D3Q27System::ENDF + 1]; - real htemp[ENDF + 1]; - - distributionsH->getPreCollisionDistribution(h, x1, x2, x3); - distributionsH->getPreCollisionDistribution(htemp, nx1, nx2, nx3); - - vx1 = 0.0; - vx2 = 0.0; - vx3 = 0.0; - - //LBMReal rho, vx1, vx2, vx3; - //calcMacrosFct(f, rho, vx1, vx2, vx3); - - switch (direction) - { - case dP00: - h[dP00] = htemp[dP00] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dP00]; - h[dPP0] = htemp[dPP0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPP0]; - h[dPM0] = htemp[dPM0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPM0]; - h[dP0P] = htemp[dP0P] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dP0P]; - h[dP0M] = htemp[dP0M] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dP0M]; - h[dPPP] = htemp[dPPP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPPP]; - h[dPMP] = htemp[dPMP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPMP]; - h[dPPM] = htemp[dPPM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPPM]; - h[dPMM] = htemp[dPMM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPMM]; - - distributionsH->setPreCollisionDistributionForDirection(h[dP00], x1 + DX1[dM00], x2 + DX2[dM00], x3 + DX3[dM00], dM00); - distributionsH->setPreCollisionDistributionForDirection(h[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0); - distributionsH->setPreCollisionDistributionForDirection(h[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0); - distributionsH->setPreCollisionDistributionForDirection(h[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M); - distributionsH->setPreCollisionDistributionForDirection(h[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P); - distributionsH->setPreCollisionDistributionForDirection(h[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); - distributionsH->setPreCollisionDistributionForDirection(h[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); - distributionsH->setPreCollisionDistributionForDirection(h[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); - distributionsH->setPreCollisionDistributionForDirection(h[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); - break; - case dM00: - h[dM00] = htemp[dM00] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dM00]; - h[dMP0] = htemp[dMP0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMP0]; - h[dMM0] = htemp[dMM0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMM0]; - h[dM0P] = htemp[dM0P] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dM0P]; - h[dM0M] = htemp[dM0M] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dM0M]; - h[dMPP] = htemp[dMPP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMPP]; - h[dMMP] = htemp[dMMP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMMP]; - h[dMPM] = htemp[dMPM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMPM]; - h[dMMM] = htemp[dMMM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMMM]; - - distributionsH->setPreCollisionDistributionForDirection(h[dM00], x1 + DX1[dP00], x2 + DX2[dP00], x3 + DX3[dP00], dP00); - distributionsH->setPreCollisionDistributionForDirection(h[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0); - distributionsH->setPreCollisionDistributionForDirection(h[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0); - distributionsH->setPreCollisionDistributionForDirection(h[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M); - distributionsH->setPreCollisionDistributionForDirection(h[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P); - distributionsH->setPreCollisionDistributionForDirection(h[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); - distributionsH->setPreCollisionDistributionForDirection(h[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); - distributionsH->setPreCollisionDistributionForDirection(h[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); - distributionsH->setPreCollisionDistributionForDirection(h[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); - break; - case d0P0: - h[d0P0] = htemp[d0P0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[d0P0]; - h[dPP0] = htemp[dPP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dPP0]; - h[dMP0] = htemp[dMP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dMP0]; - h[d0PP] = htemp[d0PP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[d0PP]; - h[d0PM] = htemp[d0PM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[d0PM]; - h[dPPP] = htemp[dPPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dPPP]; - h[dMPP] = htemp[dMPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dMPP]; - h[dPPM] = htemp[dPPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dPPM]; - h[dMPM] = htemp[dMPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dMPM]; - - distributionsH->setPreCollisionDistributionForDirection(h[d0P0], x1 + DX1[d0M0], x2 + DX2[d0M0], x3 + DX3[d0M0], d0M0); - distributionsH->setPreCollisionDistributionForDirection(h[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0); - distributionsH->setPreCollisionDistributionForDirection(h[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0); - distributionsH->setPreCollisionDistributionForDirection(h[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM); - distributionsH->setPreCollisionDistributionForDirection(h[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP); - distributionsH->setPreCollisionDistributionForDirection(h[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); - distributionsH->setPreCollisionDistributionForDirection(h[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); - distributionsH->setPreCollisionDistributionForDirection(h[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); - distributionsH->setPreCollisionDistributionForDirection(h[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); - break; - case d0M0: - h[d0M0] = htemp[d0M0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[d0M0]; - h[dPM0] = htemp[dPM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dPM0]; - h[dMM0] = htemp[dMM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dMM0]; - h[d0MP] = htemp[d0MP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[d0MP]; - h[d0MM] = htemp[d0MM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[d0MM]; - h[dPMP] = htemp[dPMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dPMP]; - h[dMMP] = htemp[dMMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dMMP]; - h[dPMM] = htemp[dPMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dPMM]; - h[dMMM] = htemp[dMMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dMMM]; - - distributionsH->setPreCollisionDistributionForDirection(h[d0M0], x1 + DX1[d0P0], x2 + DX2[d0P0], x3 + DX3[d0P0], d0P0); - distributionsH->setPreCollisionDistributionForDirection(h[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0); - distributionsH->setPreCollisionDistributionForDirection(h[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0); - distributionsH->setPreCollisionDistributionForDirection(h[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM); - distributionsH->setPreCollisionDistributionForDirection(h[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP); - distributionsH->setPreCollisionDistributionForDirection(h[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); - distributionsH->setPreCollisionDistributionForDirection(h[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); - distributionsH->setPreCollisionDistributionForDirection(h[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); - distributionsH->setPreCollisionDistributionForDirection(h[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); - break; - case d00P: - h[d00P] = htemp[d00P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[d00P]; - h[dP0P] = htemp[dP0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dP0P]; - h[dM0P] = htemp[dM0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dM0P]; - h[d0PP] = htemp[d0PP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[d0PP]; - h[d0MP] = htemp[d0MP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[d0MP]; - h[dPPP] = htemp[dPPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dPPP]; - h[dMPP] = htemp[dMPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dMPP]; - h[dPMP] = htemp[dPMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dPMP]; - h[dMMP] = htemp[dMMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dMMP]; - - distributionsH->setPreCollisionDistributionForDirection(h[d00P], x1 + DX1[d00M], x2 + DX2[d00M], x3 + DX3[d00M], d00M); - distributionsH->setPreCollisionDistributionForDirection(h[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M); - distributionsH->setPreCollisionDistributionForDirection(h[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M); - distributionsH->setPreCollisionDistributionForDirection(h[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM); - distributionsH->setPreCollisionDistributionForDirection(h[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM); - distributionsH->setPreCollisionDistributionForDirection(h[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); - distributionsH->setPreCollisionDistributionForDirection(h[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); - distributionsH->setPreCollisionDistributionForDirection(h[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); - distributionsH->setPreCollisionDistributionForDirection(h[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); - break; - case d00M: - h[d00M] = htemp[d00M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[d00M]; - h[dP0M] = htemp[dP0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dP0M]; - h[dM0M] = htemp[dM0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dM0M]; - h[d0PM] = htemp[d0PM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[d0PM]; - h[d0MM] = htemp[d0MM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[d0MM]; - h[dPPM] = htemp[dPPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dPPM]; - h[dMPM] = htemp[dMPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dMPM]; - h[dPMM] = htemp[dPMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dPMM]; - h[dMMM] = htemp[dMMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dMMM]; - - distributionsH->setPreCollisionDistributionForDirection(h[d00M], x1 + DX1[d00P], x2 + DX2[d00P], x3 + DX3[d00P], d00P); - distributionsH->setPreCollisionDistributionForDirection(h[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P); - distributionsH->setPreCollisionDistributionForDirection(h[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P); - distributionsH->setPreCollisionDistributionForDirection(h[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP); - distributionsH->setPreCollisionDistributionForDirection(h[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP); - distributionsH->setPreCollisionDistributionForDirection(h[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); - distributionsH->setPreCollisionDistributionForDirection(h[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); - distributionsH->setPreCollisionDistributionForDirection(h[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); - distributionsH->setPreCollisionDistributionForDirection(h[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); - break; - default: - UB_THROW(UbException(UB_EXARGS, "It isn't implemented non reflecting density boundary for this direction!")); - } -} diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.h deleted file mode 100644 index 5e466a5a55b809390f56c0be779460f2d0dab9b7..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.h +++ /dev/null @@ -1,57 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file ThixotropyNonReflectingOutflowBCStrategy.h -//! \ingroup BoundarConditions -//! \author Konstantin Kutscher -//======================================================================================= -#ifndef ThixotropyNonReflectingOutflowBCStrategy_h__ -#define ThixotropyNonReflectingOutflowBCStrategy_h__ - -#include "NonNewtonianBCStrategy.h" - - -class ThixotropyNonReflectingOutflowBCStrategy : public NonNewtonianBCStrategy -{ -public: - ThixotropyNonReflectingOutflowBCStrategy(); - virtual ~ThixotropyNonReflectingOutflowBCStrategy(); - SPtr<BCStrategy> clone(); - void addDistributions(SPtr<DistributionArray3D> distributions); - //void addDistributionsF(SPtr<DistributionArray3D> distributions); - void addDistributionsH(SPtr<DistributionArray3D> distributions); - void applyBC(); - //void setLambdaBC(LBMReal lambda) { this->lambdaBC = lambda; } - //LBMReal getLambdaBC() { return this->lambdaBC; } -protected: - SPtr<DistributionArray3D> distributionsH; -private: - //LBMReal lambdaBC; -}; -#endif // ThixotropyNonReflectingOutflowBCStrategy_h__ - diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.cpp deleted file mode 100644 index cef42e07f366157ead553f19c938b7d6ce5e4bf2..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.cpp +++ /dev/null @@ -1,136 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file ThixotropyVelocityBCStrategy.cpp -//! \ingroup BoundarConditions -//! \author Konstantin Kutscher -//======================================================================================= -#include "ThixotropyVelocityBCStrategy.h" -#include "DistributionArray3D.h" -#include "BoundaryConditions.h" - -ThixotropyVelocityBCStrategy::ThixotropyVelocityBCStrategy() -{ - BCStrategy::preCollision = false; - lambdaBC = vf::basics::constant::c0o1; -} -////////////////////////////////////////////////////////////////////////// -ThixotropyVelocityBCStrategy::~ThixotropyVelocityBCStrategy() -{ - -} -////////////////////////////////////////////////////////////////////////// -SPtr<BCStrategy> ThixotropyVelocityBCStrategy::clone() -{ - SPtr<BCStrategy> bc(new ThixotropyVelocityBCStrategy()); - dynamicPointerCast<ThixotropyVelocityBCStrategy>(bc)->setLambdaBC(lambdaBC); - return bc; -} -////////////////////////////////////////////////////////////////////////// -void ThixotropyVelocityBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions) -{ - this->distributions = distributions; -} -////////////////////////////////////////////////////////////////////////// -//void ThixotropyVelocityBCStrategy::addDistributionsF(DistributionArray3DPtr distributions) -//{ -// this->distributionsf = distributions; -//} -////////////////////////////////////////////////////////////////////////// -void ThixotropyVelocityBCStrategy::addDistributionsH(SPtr<DistributionArray3D> distributions) -{ - this->distributionsH = distributions; -} -////////////////////////////////////////////////////////////////////////// -void ThixotropyVelocityBCStrategy::applyBC() -{ - using namespace vf::lbm::dir; - - real f[D3Q27System::ENDF + 1]; - real feq[D3Q27System::ENDF + 1]; - real h[D3Q27System::ENDF + 1]; - - distributions->getPostCollisionDistribution(f, x1, x2, x3); - distributionsH->getPostCollisionDistribution(h, x1, x2, x3); - - real rho, vx1, vx2, vx3, drho; - calcMacrosFct(f, drho, vx1, vx2, vx3); - calcFeqFct(feq, drho, vx1, vx2, vx3); - - rho = vf::basics::constant::c1o1 + drho * compressibleFactor; - - //calcDiffusionMacrosFctPost(h, concentration, fl1, fl2, fl3, m100, collFactor); - real lambda = D3Q27System::getDensity(h); - - int nx1 = x1; - int nx2 = x2; - int nx3 = x3; - - //flag points in direction of fluid - if (bcPtr->hasVelocityBoundaryFlag(dP00)) { nx1 -= 1; } - else if (bcPtr->hasVelocityBoundaryFlag(dM00)) { nx1 += 1; } - else if (bcPtr->hasVelocityBoundaryFlag(d0P0)) { nx2 -= 1; } - else if (bcPtr->hasVelocityBoundaryFlag(d0M0)) { nx2 += 1; } - else if (bcPtr->hasVelocityBoundaryFlag(d00P)) { nx3 -= 1; } - else if (bcPtr->hasVelocityBoundaryFlag(d00M)) { nx3 += 1; } - else UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on velocity boundary...")); - - //lambdaBC = bcPtr->getBoundaryThixotropy(); - - //LBMReal rhoBC = bcPtr->getBoundaryDensity(); - - //for (int fdir = D3Q27System::STARTF; fdir <= D3Q27System::ENDF; fdir++) - //{ - // if (bcPtr->hasDensityBoundaryFlag(fdir)) - // { - // LBMReal ftemp = calcFeqsForDirFct(fdir, rho, vx1, vx2, vx3); - // ftemp = calcFeqsForDirFct(fdir, rhoBC, vx1, vx2, vx3) + f[fdir] - ftemp; - // distributions->setPostCollisionDistributionForDirection(ftemp, nx1, nx2, nx3, fdir); - - // LBMReal htemp = D3Q27System::getCompFeqForDirection(fdir, lambda, vx1, vx2, vx3); - // htemp = D3Q27System::getCompFeqForDirection(fdir,lambdaBC, vx1, vx2, vx3) + h[fdir] - htemp; - // distributionsH->setPostCollisionDistributionForDirection(htemp, nx1, nx2, nx3, fdir); - // } - //} - - for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) - { - if (bcPtr->hasVelocityBoundaryFlag(fdir)) - { - const int invDir = D3Q27System::INVDIR[fdir]; - real q = bcPtr->getQ(invDir);// m+m q=0 stabiler - real velocity = bcPtr->getBoundaryVelocity(invDir); - real fReturn = ((vf::basics::constant::c1o1 - q) / (vf::basics::constant::c1o1 + q)) * ((f[invDir] - feq[invDir]) / (vf::basics::constant::c1o1 - collFactor) + feq[invDir]) + ((q * (f[invDir] + f[fdir]) - velocity * rho) / (vf::basics::constant::c1o1 + q)); - distributions->setPostCollisionDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir); - - real htemp = D3Q27System::getCompFeqForDirection(fdir, lambda, vx1, vx2, vx3); - htemp = D3Q27System::getCompFeqForDirection(fdir, lambdaBC, vx1, vx2, vx3) + h[fdir] - htemp; - distributionsH->setPostCollisionDistributionForDirection(htemp, nx1, nx2, nx3, fdir); - } - } -} diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.h deleted file mode 100644 index aa08f4716079defc80256f57bb005c029af024b4..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.h +++ /dev/null @@ -1,56 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file ThixotropyVelocityBCStrategy.h -//! \ingroup BoundarConditions -//! \author Konstantin Kutscher -//======================================================================================= -#ifndef ThixotropyVelocityBCStrategy_h__ -#define ThixotropyVelocityBCStrategy_h__ - -#include "NonNewtonianBCStrategy.h" - - -class ThixotropyVelocityBCStrategy : public NonNewtonianBCStrategy -{ -public: - ThixotropyVelocityBCStrategy(); - virtual ~ThixotropyVelocityBCStrategy(); - SPtr<BCStrategy> clone(); - void addDistributions(SPtr<DistributionArray3D> distributions); - void addDistributionsH(SPtr<DistributionArray3D> distributions); - void applyBC(); - void setLambdaBC(real lambda) { this->lambdaBC = lambda; } - real getLambdaBC() { return this->lambdaBC; } -protected: - SPtr<DistributionArray3D> distributionsH; -private: - real lambdaBC; -}; -#endif // ThixotropyVelocityBCStrategy_h__ - diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.cpp deleted file mode 100644 index c87e4f57bae5438c02f55fd2507b62e331698de2..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.cpp +++ /dev/null @@ -1,130 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file ThixotropyVelocityWithDensityBCStrategy.cpp -//! \ingroup BoundarConditions -//! \author Konstantin Kutscher -//======================================================================================= -#include "ThixotropyVelocityWithDensityBCStrategy.h" -#include "DistributionArray3D.h" -#include "BCArray3D.h" - -ThixotropyVelocityWithDensityBCStrategy::ThixotropyVelocityWithDensityBCStrategy() -{ - BCStrategy::preCollision = false; -} -////////////////////////////////////////////////////////////////////////// -ThixotropyVelocityWithDensityBCStrategy::~ThixotropyVelocityWithDensityBCStrategy() -{ - -} -////////////////////////////////////////////////////////////////////////// -SPtr<BCStrategy> ThixotropyVelocityWithDensityBCStrategy::clone() -{ - SPtr<BCStrategy> bc(new ThixotropyVelocityWithDensityBCStrategy()); - dynamicPointerCast<ThixotropyVelocityWithDensityBCStrategy>(bc)->setLambdaBC(lambdaBC); - return bc; -} -////////////////////////////////////////////////////////////////////////// -void ThixotropyVelocityWithDensityBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions) -{ - this->distributions = distributions; -} -////////////////////////////////////////////////////////////////////////// -void ThixotropyVelocityWithDensityBCStrategy::addDistributionsH(SPtr<DistributionArray3D> distributions) -{ - this->distributionsH = distributions; -} -////////////////////////////////////////////////////////////////////////// -void ThixotropyVelocityWithDensityBCStrategy::applyBC() -{ - using namespace vf::lbm::dir; - - //velocity bc for non reflecting pressure bc - real f[D3Q27System::ENDF+1]; - distributions->getPostCollisionDistribution(f, x1, x2, x3); - - real h[D3Q27System::ENDF + 1]; - distributionsH->getPostCollisionDistribution(h, x1, x2, x3); - - real rho, vx1, vx2, vx3, drho; - calcMacrosFct(f, drho, vx1, vx2, vx3); - - rho = vf::basics::constant::c1o1+drho*compressibleFactor; - - /////////////////////////////////////////////////////////////////// - // Rheology - real lambda = D3Q27System::getDensity(h); - - int nx1 = x1; - int nx2 = x2; - int nx3 = x3; - - //flag points in direction of fluid - if (bcPtr->hasVelocityBoundaryFlag(dP00)) { nx1 -= 1; } - else if (bcPtr->hasVelocityBoundaryFlag(dM00)) { nx1 += 1; } - else if (bcPtr->hasVelocityBoundaryFlag(d0P0)) { nx2 -= 1; } - else if (bcPtr->hasVelocityBoundaryFlag(d0M0)) { nx2 += 1; } - else if (bcPtr->hasVelocityBoundaryFlag(d00P)) { nx3 -= 1; } - else if (bcPtr->hasVelocityBoundaryFlag(d00M)) { nx3 += 1; } - else UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on velocity boundary...")); - - for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) - { - int nX1 = x1 + D3Q27System::DX1[fdir]; - int nX2 = x2 + D3Q27System::DX2[fdir]; - int nX3 = x3 + D3Q27System::DX3[fdir]; - - int minX1 = 0; - int minX2 = 0; - int minX3 = 0; - - int maxX1 = (int)bcArray->getNX1(); - int maxX2 = (int)bcArray->getNX2(); - int maxX3 = (int)bcArray->getNX3(); - - if (minX1 <= nX1 && maxX1 > nX1 && minX2 <= nX2 && maxX2 > nX2 && minX3 <= nX3 && maxX3 > nX3) - { - if (bcArray->isSolid(nX1,nX2,nX3)) - { - const int invDir = D3Q27System::INVDIR[fdir]; - real velocity = bcPtr->getBoundaryVelocity(fdir); - - real fReturn = (f[fdir] + f[invDir] - velocity*rho) / vf::basics::constant::c2o1 - drho*D3Q27System::WEIGTH[invDir]; - distributions->setPostCollisionDistributionForDirection(fReturn, nX1, nX2, nX3, invDir); - } - } - - if (bcPtr->hasVelocityBoundaryFlag(fdir)) - { - real htemp = D3Q27System::getCompFeqForDirection(fdir, lambda, vx1, vx2, vx3); - htemp = D3Q27System::getCompFeqForDirection(fdir, lambdaBC, vx1, vx2, vx3) + h[fdir] - htemp; - distributionsH->setPostCollisionDistributionForDirection(htemp, nx1, nx2, nx3, fdir); - } - } -} diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.h b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.h deleted file mode 100644 index f590c9cffa62caebed9a7fc2ea5fa00c8b9a20ea..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.h +++ /dev/null @@ -1,60 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file ThixotropyVelocityWithDensityBCStrategy.h -//! \ingroup BoundarConditions -//! \author Konstantin Kutscher -//======================================================================================= - -#ifndef ThixotropyVelocityWithDensityBCStrategy_h__ -#define ThixotropyVelocityWithDensityBCStrategy_h__ - -#include "NonNewtonianBCStrategy.h" -#include <PointerDefinitions.h> - -class DistributionArray3D; - -//! \brief Class implements Dirichlet boundary condition for velocity. Set density in system. It is used together with non reflecting outflow. - -class ThixotropyVelocityWithDensityBCStrategy : public NonNewtonianBCStrategy -{ -public: - ThixotropyVelocityWithDensityBCStrategy(); - ~ThixotropyVelocityWithDensityBCStrategy(); - SPtr<BCStrategy> clone(); - void addDistributions(SPtr<DistributionArray3D> distributions); - void addDistributionsH(SPtr<DistributionArray3D> distributions); - void applyBC(); - void setLambdaBC(real lambda) { this->lambdaBC = lambda; } - real getLambdaBC() { return this->lambdaBC; } -protected: - SPtr<DistributionArray3D> distributionsH; -private: - real lambdaBC; -}; -#endif // ThixotropyVelocityWithDensityBCStrategy_h__ diff --git a/src/cpu/NonNewtonianFluids/CMakeLists.txt b/src/cpu/NonNewtonianFluids/CMakeLists.txt deleted file mode 100644 index 261919282ce830bfcf1e364443c439338b642d88..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/CMakeLists.txt +++ /dev/null @@ -1 +0,0 @@ -vf_add_library(PUBLIC_LINK cpu_core) \ No newline at end of file diff --git a/src/cpu/NonNewtonianFluids/LBM/Rheology.cpp b/src/cpu/NonNewtonianFluids/LBM/Rheology.cpp deleted file mode 100644 index 79d2c26cc865ac08549a5b85bc996c0c4e9df51d..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/LBM/Rheology.cpp +++ /dev/null @@ -1,118 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file Rheology.cpp -//! \ingroup LBM -//! \author Konstantin Kutscher, Martin Geier -//======================================================================================= -#include "Rheology.h" - -SPtr<Rheology> Rheology::instance = SPtr<Rheology>(); -real Rheology::tau0 = 0; -real Rheology::k = 0; -real Rheology::n = 1; -real Rheology::omegaMin = 0; -real Rheology::beta = 0; -real Rheology::c = 0; -real Rheology::mu0 = 0; - -////////////////////////////////////////////////////////////////////////// -SPtr<Rheology> Rheology::getInstance() -{ - if (!instance) - instance = SPtr<Rheology>(new Rheology()); - return instance; -} - -void Rheology::setYieldStress(real yieldStress) -{ - tau0 = yieldStress; -} -real Rheology::getYieldStress() const -{ - return tau0; -} -void Rheology::setViscosityParameter(real kParameter) -{ - k = kParameter; -} -real Rheology::getViscosityParameter() const -{ - return k; -} -void Rheology::setPowerIndex(real index) -{ - n = index; -} -real Rheology::getPowerIndex() const -{ - return n; -} - -void Rheology::setOmegaMin(real omega) -{ - omegaMin = omega; -} -real Rheology::getOmegaMin() const -{ - return omegaMin; -} - -void Rheology::setBeta(real PowellEyringBeta) -{ - beta = PowellEyringBeta; -} - -real Rheology::getBeta() const -{ - return beta; -} - -void Rheology::setC(real PowellEyringC) -{ - c = PowellEyringC; -} - -real Rheology::getC() const -{ - return c; -} - -void Rheology::setMu0(real mu) -{ - mu0 = mu; -} - -real Rheology::getMu0() const -{ - return mu0; -} - -Rheology::Rheology() -{ -} \ No newline at end of file diff --git a/src/cpu/NonNewtonianFluids/LBM/Rheology.h b/src/cpu/NonNewtonianFluids/LBM/Rheology.h deleted file mode 100644 index 54e375de60951129af1e37a9fb1569e2fd4bab4c..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/LBM/Rheology.h +++ /dev/null @@ -1,199 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file Rheology.h -//! \ingroup LBM -//! \author Konstantin Kutscher, Martin Geier -//======================================================================================= - -#ifndef Rheology_H -#define Rheology_H - -#include <PointerDefinitions.h> -#include <LBMSystem.h> -#include <UbMath.h> -#include <math.h> -#include "basics/constants/NumericConstants.h" - -class Rheology -{ -public: - Rheology(Rheology const&) = delete; - Rheology& operator=(Rheology const&) = delete; - static SPtr<Rheology> getInstance(); - void setYieldStress(real tau0); - real getYieldStress() const; - - void setViscosityParameter(real k); - real getViscosityParameter() const; - - void setPowerIndex(real n); - real getPowerIndex() const; - - void setOmegaMin(real omegaMin); - real getOmegaMin() const; - - void setBeta(real PowellEyringBeta); - real getBeta() const; - - void setC(real PowellEyringC); - real getC() const; - - void setMu0(real mu); - real getMu0() const; - - static real getBinghamCollFactorOld(real omegaInf, real shearRate, real drho); - static real getBinghamCollFactor(real omegaInf, real shearRate, real drho); - static real getHerschelBulkleyCollFactor(real omegaInf, real shearRate, real drho); - static real getHerschelBulkleyCollFactorBackward(real shearRate, real drho); - static real getPowellEyringCollFactor(real omegaInf, real shearRate, real drho); -private: - Rheology(); - - static SPtr<Rheology> instance; - - static real tau0; - static real k; - static real n; - static real omegaMin; - static real beta; - static real c; - static real mu0; -}; - -////////////////////////////////////////////////////////////////////////// -inline real Rheology::getBinghamCollFactor(real omegaInf, real shearRate, real drho) -{ - real cs2 = vf::basics::constant::c1oSqrt3 * vf::basics::constant::c1oSqrt3; - real rho = vf::basics::constant::c1o1 + drho; - //analytical solution - real omega = omegaInf * (vf::basics::constant::c1o1 - (omegaInf * tau0) / (shearRate * cs2 * rho + UbMath::Epsilon<real>::val())); - - //LBMReal omega = cs2 * cs2 * shearRate * shearRate * omegaInf * rho * rho / (cs2 * cs2 * shearRate * shearRate * rho * rho + cs2 * shearRate * omegaInf * rho * tau0+omegaInf*omegaInf*tau0*tau0); - - // LBMReal a = omegaInf * tau0 / (cs2 * shearRate * rho); - //10 iterations - //LBMReal omega = omegaInf / (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a)))))))))); - - //20 iterations - ////LBMReal omega = omegaInf / (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a * (1 + a)))))))))))))))))))); - // - //LBMReal omega = omegaInf*cs2 * shearRate * rho / (cs2 * shearRate * rho + omegaInf * tau0); - //LBMReal shearRateNew = shearRate * (omega / omegaInf); - - //for (int i = 0; i < 20; i++) - //{ - // omega = omegaInf * cs2 * shearRateNew * rho / (cs2 * shearRateNew * rho + omegaInf * tau0); - // shearRateNew = shearRate * (omega / omegaInf); - //} - //omega = omegaInf * cs2 * shearRateNew * rho / (cs2 * shearRateNew * rho + omegaInf * tau0); - // - ////if (omega < 0.2) - //// omega = 0.2; - return omega; -} - -inline real Rheology::getBinghamCollFactorOld(real omegaInf, real shearRate, real drho) -{ - const real cs2 = vf::basics::constant::c1o3; // UbMath::c1oSqrt3* UbMath::c1oSqrt3; - real rho = vf::basics::constant::c1o1 + drho; - - if (rho * cs2 * (vf::basics::constant::c1o1 / omegaInf - vf::basics::constant::c1o2) * shearRate < tau0) - return 0.0; - else - return omegaInf; -} -////////////////////////////////////////////////////////////////////////// -inline real Rheology::getHerschelBulkleyCollFactor(real omegaInf, real shearRate, real drho) -{ - real cs2 = vf::basics::constant::c1oSqrt3 * vf::basics::constant::c1oSqrt3; - real rho = vf::basics::constant::c1o1 + drho; - real gammaDot = shearRate; - real omega = omegaInf; - real epsilon = 1; - real gammaDotPowN = std::pow(gammaDot, n); - - while (epsilon > 1e-10) - { - real omegaOld = omega; - real omegaByOmegaInfPowN = std::pow(omega / omegaInf, n);/* - LBMReal gammaDotPowOneMinusN = std::pow(gammaDot,1- n); - LBMReal omegaByOmegaInfPowOneMinusN = std::pow(omega / omegaInf, 1-n); - LBMReal numeratorA = (2.0* k * omegaInf + cs2 * gammaDotPowOneMinusN * omegaByOmegaInfPowOneMinusN *omegaInf* rho ); - LBMReal numeratorB = ( cs2 * gammaDot * ( - 2.0) * rho + 2.0 * omegaInf * tau0); - LBMReal denominatorA = (2.0 * k * n * omegaInf + cs2 * gammaDot * rho * omegaInf* gammaDotPowOneMinusN * omegaByOmegaInfPowOneMinusN) + UbMath::Epsilon<LBMReal>::val(); - LBMReal denominatorB = (2.0 * k * n * gammaDotPowN * omegaByOmegaInfPowN * omegaInf + cs2 * gammaDot * rho * omega) + UbMath::Epsilon<LBMReal>::val(); - omega = omega - omega *( numeratorA / denominatorA+ numeratorB / denominatorB);*/ - real numerator = (2.0 * gammaDotPowN * k * omegaByOmegaInfPowN * omegaInf + cs2 * gammaDot * (omega - 2.0) * rho + 2.0 * omegaInf * tau0); - real denominator = (2.0 * k * n * gammaDotPowN * omegaByOmegaInfPowN * omegaInf + cs2 * gammaDot * rho * omega) + UbMath::Epsilon<real>::val(); - omega = omega - omega * numerator / denominator; - omega = (omega < vf::basics::constant::c0o1) ? vf::basics::constant::c1o2 * omegaOld : omega; - //omega = (omega < omegaMin) ? UbMath::c1o2 * (omegaOld-omegaMin)+omegaMin : omega; - epsilon = std::abs(omega - omegaOld); - } - - return omega; -} -////////////////////////////////////////////////////////////////////////// -inline real Rheology::getHerschelBulkleyCollFactorBackward(real shearRate, real drho) -{ - real rho = vf::basics::constant::c1o1 + drho; - real gamma = shearRate + UbMath::Epsilon<real>::val(); - real cs2 = vf::basics::constant::c1oSqrt3 * vf::basics::constant::c1oSqrt3; - - return 1.0 / ((tau0 + k * std::pow(gamma, n)) / (cs2 * rho * gamma) + vf::basics::constant::c1o2); -} -////////////////////////////////////////////////////////////////////////// -inline real Rheology::getPowellEyringCollFactor(real omegaInf, real shearRate, real drho) -{ -// using namespace UbMath; - using namespace vf::basics::constant; - - real cs2 = c1o3; // UbMath::c1oSqrt3* UbMath::c1oSqrt3; - real rho = c1o1 + drho; - real gammaDot = shearRate; - real omega = omegaInf; - real epsilon = 1; - - while (epsilon > 1e-10) - { - real omegaOld = omega; - epsilon = std::abs(omega - omegaOld); - - real numerator = c*sqrt(c1o1+(gammaDot*gammaDot*omega*omega)/(c*c*omegaInf*omegaInf))*(beta*(c2o1*gammaDot*mu0*omega+cs2*gammaDot*(omega-c2o1)*rho+c2o1*omegaInf*tau0)+c2o1*omegaInf*(asinh((gammaDot*omega)/(c*omegaInf)))); - - real denominator = gammaDot*(c2o1+beta*c*sqrt(c1o1+(gammaDot*gammaDot*omega*omega)/(c*c*omegaInf*omegaInf))*(c2o1*mu0+cs2*rho)) + UbMath::Epsilon<real>::val(); - - omega = omega - numerator / denominator; - - omega = (omega < c0o1) ? c1o2 * omegaOld : omega; - } - - return omega; -} -#endif diff --git a/src/cpu/NonNewtonianFluids/LBM/RheologyBinghamModelLBMKernel.h b/src/cpu/NonNewtonianFluids/LBM/RheologyBinghamModelLBMKernel.h deleted file mode 100644 index 61ff8c86d65db9d36b0a6919927704ffc2618716..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/LBM/RheologyBinghamModelLBMKernel.h +++ /dev/null @@ -1,71 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file RheologyBinghamModelLBMKernel.h -//! \ingroup LBM -//! \author Konstantin Kutscher -//======================================================================================= - -#ifndef RheologyBinghamModelLBMKernel_H -#define RheologyBinghamModelLBMKernel_H - -#include "RheologyK17LBMKernel.h" -#include "Rheology.h" - -//! \brief Cumulant LBM kernel + Bingham plastic model - -class RheologyBinghamModelLBMKernel : public RheologyK17LBMKernel -{ -public: - RheologyBinghamModelLBMKernel() {}; - ~RheologyBinghamModelLBMKernel() {}; - SPtr<LBMKernel> clone() override - { - SPtr<LBMKernel> kernel(new RheologyBinghamModelLBMKernel()); - kernel->setNX(nx); - kernel->setCollisionFactor(collFactor); - dynamicPointerCast<RheologyBinghamModelLBMKernel>(kernel)->initDataSet(); - kernel->setBCSet(bcSet->clone(kernel)); - kernel->setWithForcing(withForcing); - kernel->setForcingX1(muForcingX1); - kernel->setForcingX2(muForcingX2); - kernel->setForcingX3(muForcingX3); - kernel->setIndex(ix1, ix2, ix3); - kernel->setDeltaT(deltaT); - - return kernel; - } -protected: - real getRheologyCollFactor(real omegaInf, real shearRate, real drho) const override - { - return Rheology::getBinghamCollFactor(omegaInf, shearRate, drho); - } -}; - - -#endif diff --git a/src/cpu/NonNewtonianFluids/LBM/RheologyHerschelBulkleyModelLBMKernel.h b/src/cpu/NonNewtonianFluids/LBM/RheologyHerschelBulkleyModelLBMKernel.h deleted file mode 100644 index 55435e1b4c1243aaefd5f7f141ec2da84c594116..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/LBM/RheologyHerschelBulkleyModelLBMKernel.h +++ /dev/null @@ -1,70 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file RheologyHerschelBulkleyModelLBMKernel.h -//! \ingroup LBM -//! \author Konstantin Kutscher -//======================================================================================= -#ifndef RheologyHerschelBulkleyModelLBMKernel_H -#define RheologyHerschelBulkleyModelLBMKernel_H - -#include "RheologyK17LBMKernel.h" -#include "Rheology.h" - -//! \brief Cumulant LBM kernel + Herschel-Bulkley plastic model - -class RheologyHerschelBulkleyModelLBMKernel : public RheologyK17LBMKernel -{ -public: - RheologyHerschelBulkleyModelLBMKernel() {}; - ~RheologyHerschelBulkleyModelLBMKernel() {}; - SPtr<LBMKernel> clone() override - { - SPtr<LBMKernel> kernel(new RheologyHerschelBulkleyModelLBMKernel()); - kernel->setNX(nx); - kernel->setCollisionFactor(collFactor); - dynamicPointerCast<RheologyHerschelBulkleyModelLBMKernel>(kernel)->initDataSet(); - kernel->setBCSet(bcSet->clone(kernel)); - kernel->setWithForcing(withForcing); - kernel->setForcingX1(muForcingX1); - kernel->setForcingX2(muForcingX2); - kernel->setForcingX3(muForcingX3); - kernel->setIndex(ix1, ix2, ix3); - kernel->setDeltaT(deltaT); - - return kernel; - } -protected: - real getRheologyCollFactor(real omegaInf, real shearRate, real drho) const override - { - return Rheology::getHerschelBulkleyCollFactor(omegaInf, shearRate, drho); - } -}; - - -#endif \ No newline at end of file diff --git a/src/cpu/NonNewtonianFluids/LBM/RheologyInterpolator.cpp b/src/cpu/NonNewtonianFluids/LBM/RheologyInterpolator.cpp deleted file mode 100644 index d33bbef61f8731302b8c7b8ba0ce8b17a7bd9703..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/LBM/RheologyInterpolator.cpp +++ /dev/null @@ -1,677 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file RheologyInterpolator.cpp -//! \ingroup LBM -//! \author Konstantin Kutscher -//======================================================================================= - -#include "RheologyInterpolator.h" -#include "D3Q27System.h" -#include "Rheology.h" - - -RheologyInterpolator::RheologyInterpolator() - : omegaC(0.0), omegaF(0.0), omegaMin(0.0) -{ - -} -////////////////////////////////////////////////////////////////////////// -RheologyInterpolator::RheologyInterpolator(real omegaC, real omegaF, real omegaMin) - : omegaC(omegaC), omegaF(omegaF), omegaMin(omegaMin) -{ - -} -////////////////////////////////////////////////////////////////////////// -InterpolationProcessorPtr RheologyInterpolator::clone() -{ - InterpolationProcessorPtr iproc = std::make_shared<RheologyInterpolator>(this->omegaC, this->omegaF, this->omegaMin); - return iproc; -} -////////////////////////////////////////////////////////////////////////// -void RheologyInterpolator::setOmegas( real omegaC, real omegaF ) -{ - this->omegaC = omegaC; - this->omegaF = omegaF; -} -////////////////////////////////////////////////////////////////////////// -void RheologyInterpolator::setOmegaMin( real omegaMin ) -{ - this->omegaMin = omegaMin; -} -////////////////////////////////////////////////////////////////////////// -void RheologyInterpolator::setOffsets(real xoff, real yoff, real zoff) -{ - this->xoff = xoff; - this->yoff = yoff; - this->zoff = zoff; - this->xoff_sq = xoff * xoff; - this->yoff_sq = yoff * yoff; - this->zoff_sq = zoff * zoff; -} -////////////////////////////////////////////////////////////////////////// -void RheologyInterpolator::interpolateCoarseToFine(D3Q27ICell& icellC, D3Q27ICell& icellF, real xoff, real yoff, real zoff) -{ - setOffsets(xoff, yoff, zoff); - calcInterpolatedCoefficiets_intern(icellC, omegaC, 0.5, 0.25, -0.25, -0.25, -1, -1, -1); - calcInterpolatedNode(icellF.BSW, /*omegaF,*/ -0.25, -0.25, -0.25, calcPressBSW(), -1, -1, -1); - calcInterpolatedCoefficiets_intern(icellC, omegaC, 0.5, 0.25, 0.25, -0.25, 1, 1, -1); - calcInterpolatedNode(icellF.BNE, /*omegaF,*/ 0.25, 0.25, -0.25, calcPressBNE(), 1, 1, -1); - calcInterpolatedCoefficiets_intern(icellC, omegaC, 0.5, -0.25, 0.25, 0.25, -1, 1, 1); - calcInterpolatedNode(icellF.TNW, /*omegaF,*/ -0.25, 0.25, 0.25, calcPressTNW(), -1, 1, 1); - calcInterpolatedCoefficiets_intern(icellC, omegaC, 0.5, 0.25, -0.25, 0.25, 1, -1, 1); - calcInterpolatedNode(icellF.TSE, /*omegaF,*/ 0.25, -0.25, 0.25, calcPressTSE(), 1, -1, 1); - calcInterpolatedCoefficiets_intern(icellC, omegaC, 0.5, -0.25, 0.25, -0.25, -1, 1, -1); - calcInterpolatedNode(icellF.BNW, /*omegaF,*/ -0.25, 0.25, -0.25, calcPressBNW(), -1, 1, -1); - calcInterpolatedCoefficiets_intern(icellC, omegaC, 0.5, 0.25, -0.25, -0.25, 1, -1, -1); - calcInterpolatedNode(icellF.BSE, /*omegaF,*/ 0.25, -0.25, -0.25, calcPressBSE(), 1, -1, -1); - calcInterpolatedCoefficiets_intern(icellC, omegaC, 0.5, -0.25, -0.25, 0.25, -1, -1, 1); - calcInterpolatedNode(icellF.TSW, /*omegaF,*/ -0.25, -0.25, 0.25, calcPressTSW(), -1, -1, 1); - calcInterpolatedCoefficiets_intern(icellC, omegaC, 0.5, 0.25, 0.25, 0.25, 1, 1, 1); - calcInterpolatedNode(icellF.TNE, /*omegaF,*/ 0.25, 0.25, 0.25, calcPressTNE(), 1, 1, 1); -} -////////////////////////////////////////////////////////////////////////// -void RheologyInterpolator::interpolateFineToCoarse(D3Q27ICell& icellF, real* icellC, real xoff, real yoff, real zoff) -{ - setOffsets(xoff, yoff, zoff); - calcInterpolatedCoefficiets_intern(icellF, omegaF, 2.0, 0, 0, 0, 0, 0, 0); - calcInterpolatedNodeFC(icellC, omegaC); -} -////////////////////////////////////////////////////////////////////////// -void RheologyInterpolator::calcMoments(const real* const f, real omegaInf, real& press, real& vx1, real& vx2, real& vx3, real& kxy, real& kyz, real& kxz, real& kxxMyy, real& kxxMzz) -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - rho = 0.0; - D3Q27System::calcIncompMacroscopicValues(f,rho,vx1,vx2,vx3); - - shearRate = D3Q27System::getShearRate(f, omegaInf); - - real omega = Rheology::getHerschelBulkleyCollFactor(omegaInf, shearRate, rho); - - press = rho; //interpolate rho! - - kxy = -3.*omega*((((f[dMMP]+f[dPPM])-(f[dMPP]+f[dPMM]))+((f[dMMM]+f[dPPP])-(f[dMPM]+f[dPMP])))+((f[dMM0]+f[dPP0])-(f[dMP0]+f[dPM0]))-(vx1*vx2));// might not be optimal MG 25.2.13 - kyz = -3.*omega*((((f[dMMM]+f[dPPP])-(f[dPMP]+f[dMPM]))+((f[dPMM]+f[dMPP])-(f[dMMP]+f[dPPM])))+((f[d0MM]+f[d0PP])-(f[d0MP]+f[d0PM]))-(vx2*vx3)); - kxz = -3.*omega*((((f[dMPM]+f[dPMP])-(f[dMMP]+f[dPPM]))+((f[dMMM]+f[dPPP])-(f[dPMM]+f[dMPP])))+((f[dM0M]+f[dP0P])-(f[dM0P]+f[dP0M]))-(vx1*vx3)); - kxxMyy = -3./2.*omega*((((f[dM0M]+f[dP0P])-(f[d0MM]+f[d0PP]))+((f[dM0P]+f[dP0M])-(f[d0MP]+f[d0PM])))+((f[dM00]+f[dP00])-(f[d0M0]+f[d0P0]))-(vx1*vx1-vx2*vx2)); - kxxMzz = -3./2.*omega*((((f[dMP0]+f[dPM0])-(f[d0MM]+f[d0PP]))+((f[dMM0]+f[dPP0])-(f[d0MP]+f[d0PM])))+((f[dM00]+f[dP00])-(f[d00M]+f[d00P]))-(vx1*vx1-vx3*vx3)); -} -////////////////////////////////////////////////////////////////////////// -void RheologyInterpolator::calcInterpolatedCoefficiets_intern(const D3Q27ICell& icell, - real omega, - real eps_new, - real x, - real y, - real z, - real xs, - real ys, - real zs) -{ - real vx1_SWT,vx2_SWT,vx3_SWT; - real vx1_NWT,vx2_NWT,vx3_NWT; - real vx1_NET,vx2_NET,vx3_NET; - real vx1_SET,vx2_SET,vx3_SET; - real vx1_SWB,vx2_SWB,vx3_SWB; - real vx1_NWB,vx2_NWB,vx3_NWB; - real vx1_NEB,vx2_NEB,vx3_NEB; - real vx1_SEB,vx2_SEB,vx3_SEB; - - real kxyFromfcNEQ_SWT, kyzFromfcNEQ_SWT, kxzFromfcNEQ_SWT, kxxMyyFromfcNEQ_SWT, kxxMzzFromfcNEQ_SWT; - real kxyFromfcNEQ_NWT, kyzFromfcNEQ_NWT, kxzFromfcNEQ_NWT, kxxMyyFromfcNEQ_NWT, kxxMzzFromfcNEQ_NWT; - real kxyFromfcNEQ_NET, kyzFromfcNEQ_NET, kxzFromfcNEQ_NET, kxxMyyFromfcNEQ_NET, kxxMzzFromfcNEQ_NET; - real kxyFromfcNEQ_SET, kyzFromfcNEQ_SET, kxzFromfcNEQ_SET, kxxMyyFromfcNEQ_SET, kxxMzzFromfcNEQ_SET; - real kxyFromfcNEQ_SWB, kyzFromfcNEQ_SWB, kxzFromfcNEQ_SWB, kxxMyyFromfcNEQ_SWB, kxxMzzFromfcNEQ_SWB; - real kxyFromfcNEQ_NWB, kyzFromfcNEQ_NWB, kxzFromfcNEQ_NWB, kxxMyyFromfcNEQ_NWB, kxxMzzFromfcNEQ_NWB; - real kxyFromfcNEQ_NEB, kyzFromfcNEQ_NEB, kxzFromfcNEQ_NEB, kxxMyyFromfcNEQ_NEB, kxxMzzFromfcNEQ_NEB; - real kxyFromfcNEQ_SEB, kyzFromfcNEQ_SEB, kxzFromfcNEQ_SEB, kxxMyyFromfcNEQ_SEB, kxxMzzFromfcNEQ_SEB; - - calcMoments(icell.TSW,omega,press_SWT,vx1_SWT,vx2_SWT,vx3_SWT, kxyFromfcNEQ_SWT, kyzFromfcNEQ_SWT, kxzFromfcNEQ_SWT, kxxMyyFromfcNEQ_SWT, kxxMzzFromfcNEQ_SWT); - calcMoments(icell.TNW,omega,press_NWT,vx1_NWT,vx2_NWT,vx3_NWT, kxyFromfcNEQ_NWT, kyzFromfcNEQ_NWT, kxzFromfcNEQ_NWT, kxxMyyFromfcNEQ_NWT, kxxMzzFromfcNEQ_NWT); - calcMoments(icell.TNE,omega,press_NET,vx1_NET,vx2_NET,vx3_NET, kxyFromfcNEQ_NET, kyzFromfcNEQ_NET, kxzFromfcNEQ_NET, kxxMyyFromfcNEQ_NET, kxxMzzFromfcNEQ_NET); - calcMoments(icell.TSE,omega,press_SET,vx1_SET,vx2_SET,vx3_SET, kxyFromfcNEQ_SET, kyzFromfcNEQ_SET, kxzFromfcNEQ_SET, kxxMyyFromfcNEQ_SET, kxxMzzFromfcNEQ_SET); - calcMoments(icell.BSW,omega,press_SWB,vx1_SWB,vx2_SWB,vx3_SWB, kxyFromfcNEQ_SWB, kyzFromfcNEQ_SWB, kxzFromfcNEQ_SWB, kxxMyyFromfcNEQ_SWB, kxxMzzFromfcNEQ_SWB); - calcMoments(icell.BNW,omega,press_NWB,vx1_NWB,vx2_NWB,vx3_NWB, kxyFromfcNEQ_NWB, kyzFromfcNEQ_NWB, kxzFromfcNEQ_NWB, kxxMyyFromfcNEQ_NWB, kxxMzzFromfcNEQ_NWB); - calcMoments(icell.BNE,omega,press_NEB,vx1_NEB,vx2_NEB,vx3_NEB, kxyFromfcNEQ_NEB, kyzFromfcNEQ_NEB, kxzFromfcNEQ_NEB, kxxMyyFromfcNEQ_NEB, kxxMzzFromfcNEQ_NEB); - calcMoments(icell.BSE,omega,press_SEB,vx1_SEB,vx2_SEB,vx3_SEB, kxyFromfcNEQ_SEB, kyzFromfcNEQ_SEB, kxzFromfcNEQ_SEB, kxxMyyFromfcNEQ_SEB, kxxMzzFromfcNEQ_SEB); - - a0 = (-kxxMyyFromfcNEQ_NEB - kxxMyyFromfcNEQ_NET + kxxMyyFromfcNEQ_NWB + kxxMyyFromfcNEQ_NWT - - kxxMyyFromfcNEQ_SEB - kxxMyyFromfcNEQ_SET + kxxMyyFromfcNEQ_SWB + kxxMyyFromfcNEQ_SWT - - kxxMzzFromfcNEQ_NEB - kxxMzzFromfcNEQ_NET + kxxMzzFromfcNEQ_NWB + kxxMzzFromfcNEQ_NWT - - kxxMzzFromfcNEQ_SEB - kxxMzzFromfcNEQ_SET + kxxMzzFromfcNEQ_SWB + kxxMzzFromfcNEQ_SWT - - 2.*kxyFromfcNEQ_NEB - 2.*kxyFromfcNEQ_NET - 2.*kxyFromfcNEQ_NWB - 2.*kxyFromfcNEQ_NWT + - 2.*kxyFromfcNEQ_SEB + 2.*kxyFromfcNEQ_SET + 2.*kxyFromfcNEQ_SWB + 2.*kxyFromfcNEQ_SWT + - 2.*kxzFromfcNEQ_NEB - 2.*kxzFromfcNEQ_NET + 2.*kxzFromfcNEQ_NWB - 2.*kxzFromfcNEQ_NWT + - 2.*kxzFromfcNEQ_SEB - 2.*kxzFromfcNEQ_SET + 2.*kxzFromfcNEQ_SWB - 2.*kxzFromfcNEQ_SWT + - 8.*vx1_NEB + 8.*vx1_NET + 8.*vx1_NWB + 8.*vx1_NWT + 8.*vx1_SEB + - 8.*vx1_SET + 8.*vx1_SWB + 8.*vx1_SWT + 2.*vx2_NEB + 2.*vx2_NET - - 2.*vx2_NWB - 2.*vx2_NWT - 2.*vx2_SEB - 2.*vx2_SET + 2.*vx2_SWB + - 2.*vx2_SWT - 2.*vx3_NEB + 2.*vx3_NET + 2.*vx3_NWB - 2.*vx3_NWT - - 2.*vx3_SEB + 2.*vx3_SET + 2.*vx3_SWB - 2.*vx3_SWT)/64.; - b0 = (2.*kxxMyyFromfcNEQ_NEB + 2.*kxxMyyFromfcNEQ_NET + 2.*kxxMyyFromfcNEQ_NWB + 2.*kxxMyyFromfcNEQ_NWT - - 2.*kxxMyyFromfcNEQ_SEB - 2.*kxxMyyFromfcNEQ_SET - 2.*kxxMyyFromfcNEQ_SWB - 2.*kxxMyyFromfcNEQ_SWT - - kxxMzzFromfcNEQ_NEB - kxxMzzFromfcNEQ_NET - kxxMzzFromfcNEQ_NWB - kxxMzzFromfcNEQ_NWT + - kxxMzzFromfcNEQ_SEB + kxxMzzFromfcNEQ_SET + kxxMzzFromfcNEQ_SWB + kxxMzzFromfcNEQ_SWT - - 2.*kxyFromfcNEQ_NEB - 2.*kxyFromfcNEQ_NET + 2.*kxyFromfcNEQ_NWB + 2.*kxyFromfcNEQ_NWT - - 2.*kxyFromfcNEQ_SEB - 2.*kxyFromfcNEQ_SET + 2.*kxyFromfcNEQ_SWB + 2.*kxyFromfcNEQ_SWT + - 2.*kyzFromfcNEQ_NEB - 2.*kyzFromfcNEQ_NET + 2.*kyzFromfcNEQ_NWB - 2.*kyzFromfcNEQ_NWT + - 2.*kyzFromfcNEQ_SEB - 2.*kyzFromfcNEQ_SET + 2.*kyzFromfcNEQ_SWB - 2.*kyzFromfcNEQ_SWT + - 2.*vx1_NEB + 2.*vx1_NET - 2.*vx1_NWB - 2.*vx1_NWT - - 2.*vx1_SEB - 2.*vx1_SET + 2.*vx1_SWB + 2.*vx1_SWT + - 8.*vx2_NEB + 8.*vx2_NET + 8.*vx2_NWB + 8.*vx2_NWT + - 8.*vx2_SEB + 8.*vx2_SET + 8.*vx2_SWB + 8.*vx2_SWT - - 2.*vx3_NEB + 2.*vx3_NET - 2.*vx3_NWB + 2.*vx3_NWT + - 2.*vx3_SEB - 2.*vx3_SET + 2.*vx3_SWB - 2.*vx3_SWT)/64.; - c0 = (kxxMyyFromfcNEQ_NEB - kxxMyyFromfcNEQ_NET + kxxMyyFromfcNEQ_NWB - kxxMyyFromfcNEQ_NWT + - kxxMyyFromfcNEQ_SEB - kxxMyyFromfcNEQ_SET + kxxMyyFromfcNEQ_SWB - kxxMyyFromfcNEQ_SWT - - 2.*kxxMzzFromfcNEQ_NEB + 2.*kxxMzzFromfcNEQ_NET - 2.*kxxMzzFromfcNEQ_NWB + 2.*kxxMzzFromfcNEQ_NWT - - 2.*kxxMzzFromfcNEQ_SEB + 2.*kxxMzzFromfcNEQ_SET - 2.*kxxMzzFromfcNEQ_SWB + 2.*kxxMzzFromfcNEQ_SWT - - 2.*kxzFromfcNEQ_NEB - 2.*kxzFromfcNEQ_NET + 2.*kxzFromfcNEQ_NWB + 2.*kxzFromfcNEQ_NWT - - 2.*kxzFromfcNEQ_SEB - 2.*kxzFromfcNEQ_SET + 2.*kxzFromfcNEQ_SWB + 2.*kxzFromfcNEQ_SWT - - 2.*kyzFromfcNEQ_NEB - 2.*kyzFromfcNEQ_NET - 2.*kyzFromfcNEQ_NWB - 2.*kyzFromfcNEQ_NWT + - 2.*kyzFromfcNEQ_SEB + 2.*kyzFromfcNEQ_SET + 2.*kyzFromfcNEQ_SWB + 2.*kyzFromfcNEQ_SWT - - 2.*vx1_NEB + 2.*vx1_NET + 2.*vx1_NWB - 2.*vx1_NWT - - 2.*vx1_SEB + 2.*vx1_SET + 2.*vx1_SWB - 2.*vx1_SWT - - 2.*vx2_NEB + 2.*vx2_NET - 2.*vx2_NWB + 2.*vx2_NWT + - 2.*vx2_SEB - 2.*vx2_SET + 2.*vx2_SWB - 2.*vx2_SWT + - 8.*vx3_NEB + 8.*vx3_NET + 8.*vx3_NWB + 8.*vx3_NWT + - 8.*vx3_SEB + 8.*vx3_SET + 8.*vx3_SWB + 8.*vx3_SWT)/64.; - ax = (vx1_NEB + vx1_NET - vx1_NWB - vx1_NWT + vx1_SEB + vx1_SET - vx1_SWB - vx1_SWT)/4.; - bx = (vx2_NEB + vx2_NET - vx2_NWB - vx2_NWT + vx2_SEB + vx2_SET - vx2_SWB - vx2_SWT)/4.; - cx = (vx3_NEB + vx3_NET - vx3_NWB - vx3_NWT + vx3_SEB + vx3_SET - vx3_SWB - vx3_SWT)/4.; - axx= (kxxMyyFromfcNEQ_NEB + kxxMyyFromfcNEQ_NET - kxxMyyFromfcNEQ_NWB - kxxMyyFromfcNEQ_NWT + - kxxMyyFromfcNEQ_SEB + kxxMyyFromfcNEQ_SET - kxxMyyFromfcNEQ_SWB - kxxMyyFromfcNEQ_SWT + - kxxMzzFromfcNEQ_NEB + kxxMzzFromfcNEQ_NET - kxxMzzFromfcNEQ_NWB - kxxMzzFromfcNEQ_NWT + - kxxMzzFromfcNEQ_SEB + kxxMzzFromfcNEQ_SET - kxxMzzFromfcNEQ_SWB - kxxMzzFromfcNEQ_SWT + - 2.*vx2_NEB + 2.*vx2_NET - 2.*vx2_NWB - 2.*vx2_NWT - - 2.*vx2_SEB - 2.*vx2_SET + 2.*vx2_SWB + 2.*vx2_SWT - - 2.*vx3_NEB + 2.*vx3_NET + 2.*vx3_NWB - 2.*vx3_NWT - - 2.*vx3_SEB + 2.*vx3_SET + 2.*vx3_SWB - 2.*vx3_SWT)/16.; - bxx= (kxyFromfcNEQ_NEB + kxyFromfcNEQ_NET - kxyFromfcNEQ_NWB - kxyFromfcNEQ_NWT + - kxyFromfcNEQ_SEB + kxyFromfcNEQ_SET - kxyFromfcNEQ_SWB - kxyFromfcNEQ_SWT - - 2.*vx1_NEB - 2.*vx1_NET + 2.*vx1_NWB + 2.*vx1_NWT + - 2.*vx1_SEB + 2.*vx1_SET - 2.*vx1_SWB - 2.*vx1_SWT)/8.; - cxx= (kxzFromfcNEQ_NEB + kxzFromfcNEQ_NET - kxzFromfcNEQ_NWB - kxzFromfcNEQ_NWT + - kxzFromfcNEQ_SEB + kxzFromfcNEQ_SET - kxzFromfcNEQ_SWB - kxzFromfcNEQ_SWT + - 2.*vx1_NEB - 2.*vx1_NET - 2.*vx1_NWB + 2.*vx1_NWT + - 2.*vx1_SEB - 2.*vx1_SET - 2.*vx1_SWB + 2.*vx1_SWT)/8.; - ay = (vx1_NEB + vx1_NET + vx1_NWB + vx1_NWT - vx1_SEB - vx1_SET - vx1_SWB - vx1_SWT)/4.; - by = (vx2_NEB + vx2_NET + vx2_NWB + vx2_NWT - vx2_SEB - vx2_SET - vx2_SWB - vx2_SWT)/4.; - cy = (vx3_NEB + vx3_NET + vx3_NWB + vx3_NWT - vx3_SEB - vx3_SET - vx3_SWB - vx3_SWT)/4.; - ayy= (kxyFromfcNEQ_NEB + kxyFromfcNEQ_NET + kxyFromfcNEQ_NWB + kxyFromfcNEQ_NWT - - kxyFromfcNEQ_SEB - kxyFromfcNEQ_SET - kxyFromfcNEQ_SWB - kxyFromfcNEQ_SWT - - 2.*vx2_NEB - 2.*vx2_NET + 2.*vx2_NWB + 2.*vx2_NWT + - 2.*vx2_SEB + 2.*vx2_SET - 2.*vx2_SWB - 2.*vx2_SWT)/8.; - byy= (-2.*kxxMyyFromfcNEQ_NEB - 2.*kxxMyyFromfcNEQ_NET - 2.*kxxMyyFromfcNEQ_NWB - 2.*kxxMyyFromfcNEQ_NWT + - 2.*kxxMyyFromfcNEQ_SEB + 2.*kxxMyyFromfcNEQ_SET + 2.*kxxMyyFromfcNEQ_SWB + 2.*kxxMyyFromfcNEQ_SWT + - kxxMzzFromfcNEQ_NEB + kxxMzzFromfcNEQ_NET + kxxMzzFromfcNEQ_NWB + kxxMzzFromfcNEQ_NWT - - kxxMzzFromfcNEQ_SEB - kxxMzzFromfcNEQ_SET - kxxMzzFromfcNEQ_SWB - kxxMzzFromfcNEQ_SWT + - 2.*vx1_NEB + 2.*vx1_NET - 2.*vx1_NWB - 2.*vx1_NWT - - 2.*vx1_SEB - 2.*vx1_SET + 2.*vx1_SWB + 2.*vx1_SWT - - 2.*vx3_NEB + 2.*vx3_NET - 2.*vx3_NWB + 2.*vx3_NWT + - 2.*vx3_SEB - 2.*vx3_SET + 2.*vx3_SWB - 2.*vx3_SWT)/16.; - cyy= (kyzFromfcNEQ_NEB + kyzFromfcNEQ_NET + kyzFromfcNEQ_NWB + kyzFromfcNEQ_NWT - - kyzFromfcNEQ_SEB - kyzFromfcNEQ_SET - kyzFromfcNEQ_SWB - kyzFromfcNEQ_SWT + - 2.*vx2_NEB - 2.*vx2_NET + 2.*vx2_NWB - 2.*vx2_NWT - - 2.*vx2_SEB + 2.*vx2_SET - 2.*vx2_SWB + 2.*vx2_SWT)/8.; - az = (-vx1_NEB + vx1_NET - vx1_NWB + vx1_NWT - vx1_SEB + vx1_SET - vx1_SWB + vx1_SWT)/4.; - bz = (-vx2_NEB + vx2_NET - vx2_NWB + vx2_NWT - vx2_SEB + vx2_SET - vx2_SWB + vx2_SWT)/4.; - cz = (-vx3_NEB + vx3_NET - vx3_NWB + vx3_NWT - vx3_SEB + vx3_SET - vx3_SWB + vx3_SWT)/4.; - azz= (-kxzFromfcNEQ_NEB + kxzFromfcNEQ_NET - kxzFromfcNEQ_NWB + kxzFromfcNEQ_NWT - - kxzFromfcNEQ_SEB + kxzFromfcNEQ_SET - kxzFromfcNEQ_SWB + kxzFromfcNEQ_SWT + - 2.*vx3_NEB - 2.*vx3_NET - 2.*vx3_NWB + 2.*vx3_NWT + - 2.*vx3_SEB - 2.*vx3_SET - 2.*vx3_SWB + 2.*vx3_SWT)/8.; - bzz= (-kyzFromfcNEQ_NEB + kyzFromfcNEQ_NET - kyzFromfcNEQ_NWB + kyzFromfcNEQ_NWT - - kyzFromfcNEQ_SEB + kyzFromfcNEQ_SET - kyzFromfcNEQ_SWB + kyzFromfcNEQ_SWT + - 2.*vx3_NEB - 2.*vx3_NET + 2.*vx3_NWB - 2.*vx3_NWT - - 2.*vx3_SEB + 2.*vx3_SET - 2.*vx3_SWB + 2.*vx3_SWT)/8.; - czz= (-kxxMyyFromfcNEQ_NEB + kxxMyyFromfcNEQ_NET - kxxMyyFromfcNEQ_NWB + kxxMyyFromfcNEQ_NWT - - kxxMyyFromfcNEQ_SEB + kxxMyyFromfcNEQ_SET - kxxMyyFromfcNEQ_SWB + kxxMyyFromfcNEQ_SWT + - 2.*kxxMzzFromfcNEQ_NEB - 2.*kxxMzzFromfcNEQ_NET + 2.*kxxMzzFromfcNEQ_NWB - 2.*kxxMzzFromfcNEQ_NWT + - 2.*kxxMzzFromfcNEQ_SEB - 2.*kxxMzzFromfcNEQ_SET + 2.*kxxMzzFromfcNEQ_SWB - 2.*kxxMzzFromfcNEQ_SWT - - 2.*vx1_NEB + 2.*vx1_NET + 2.*vx1_NWB - 2.*vx1_NWT - - 2.*vx1_SEB + 2.*vx1_SET + 2.*vx1_SWB - 2.*vx1_SWT - - 2.*vx2_NEB + 2.*vx2_NET - 2.*vx2_NWB + 2.*vx2_NWT + - 2.*vx2_SEB - 2.*vx2_SET + 2.*vx2_SWB - 2.*vx2_SWT)/16.; - axy= (vx1_NEB + vx1_NET - vx1_NWB - vx1_NWT - vx1_SEB - vx1_SET + vx1_SWB + vx1_SWT)/2.; - bxy= (vx2_NEB + vx2_NET - vx2_NWB - vx2_NWT - vx2_SEB - vx2_SET + vx2_SWB + vx2_SWT)/2.; - cxy= (vx3_NEB + vx3_NET - vx3_NWB - vx3_NWT - vx3_SEB - vx3_SET + vx3_SWB + vx3_SWT)/2.; - axz= (-vx1_NEB + vx1_NET + vx1_NWB - vx1_NWT - vx1_SEB + vx1_SET + vx1_SWB - vx1_SWT)/2.; - bxz= (-vx2_NEB + vx2_NET + vx2_NWB - vx2_NWT - vx2_SEB + vx2_SET + vx2_SWB - vx2_SWT)/2.; - cxz= (-vx3_NEB + vx3_NET + vx3_NWB - vx3_NWT - vx3_SEB + vx3_SET + vx3_SWB - vx3_SWT)/2.; - ayz= (-vx1_NEB + vx1_NET - vx1_NWB + vx1_NWT + vx1_SEB - vx1_SET + vx1_SWB - vx1_SWT)/2.; - byz= (-vx2_NEB + vx2_NET - vx2_NWB + vx2_NWT + vx2_SEB - vx2_SET + vx2_SWB - vx2_SWT)/2.; - cyz= (-vx3_NEB + vx3_NET - vx3_NWB + vx3_NWT + vx3_SEB - vx3_SET + vx3_SWB - vx3_SWT)/2.; - axyz=-vx1_NEB + vx1_NET + vx1_NWB - vx1_NWT + vx1_SEB - vx1_SET - vx1_SWB + vx1_SWT; - bxyz=-vx2_NEB + vx2_NET + vx2_NWB - vx2_NWT + vx2_SEB - vx2_SET - vx2_SWB + vx2_SWT; - cxyz=-vx3_NEB + vx3_NET + vx3_NWB - vx3_NWT + vx3_SEB - vx3_SET - vx3_SWB + vx3_SWT; - - kxyAverage =0; - kyzAverage =0; - kxzAverage =0; - kxxMyyAverage =0; - kxxMzzAverage =0; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // - // Bernd das Brot - // - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - a0 = a0 + xoff * ax + yoff * ay + zoff * az + xoff_sq * axx + yoff_sq * ayy + zoff_sq * azz + xoff*yoff*axy + xoff*zoff*axz + yoff*zoff*ayz + xoff*yoff*zoff*axyz ; - ax = ax + 2. * xoff * axx + yoff * axy + zoff * axz + yoff*zoff*axyz; - ay = ay + 2. * yoff * ayy + xoff * axy + zoff * ayz + xoff*zoff*axyz; - az = az + 2. * zoff * azz + xoff * axz + yoff * ayz + xoff*yoff*axyz; - b0 = b0 + xoff * bx + yoff * by + zoff * bz + xoff_sq * bxx + yoff_sq * byy + zoff_sq * bzz + xoff*yoff*bxy + xoff*zoff*bxz + yoff*zoff*byz + xoff*yoff*zoff*bxyz; - bx = bx + 2. * xoff * bxx + yoff * bxy + zoff * bxz + yoff*zoff*bxyz; - by = by + 2. * yoff * byy + xoff * bxy + zoff * byz + xoff*zoff*bxyz; - bz = bz + 2. * zoff * bzz + xoff * bxz + yoff * byz + xoff*yoff*bxyz; - c0 = c0 + xoff * cx + yoff * cy + zoff * cz + xoff_sq * cxx + yoff_sq * cyy + zoff_sq * czz + xoff*yoff*cxy + xoff*zoff*cxz + yoff*zoff*cyz + xoff*yoff*zoff*cxyz; - cx = cx + 2. * xoff * cxx + yoff * cxy + zoff * cxz + yoff*zoff*cxyz; - cy = cy + 2. * yoff * cyy + xoff * cxy + zoff * cyz + xoff*zoff*cxyz; - cz = cz + 2. * zoff * czz + xoff * cxz + yoff * cyz + xoff*yoff*cxyz; - axy= axy + zoff*axyz; - axz= axz + yoff*axyz; - ayz= ayz + xoff*axyz; - bxy= bxy + zoff*bxyz; - bxz= bxz + yoff*bxyz; - byz= byz + xoff*bxyz; - cxy= cxy + zoff*cxyz; - cxz= cxz + yoff*cxyz; - cyz= cyz + xoff*cxyz; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - real dxux = ax + 0.5*axx*xs+ 0.25*(axy*ys+axz*zs)+0.0625*axyz*ys*zs; - real dyuy = by + 0.5 * byy * ys + 0.25 * (bxy * xs + byz * zs) + 0.0625 * bxyz * xs * zs; - real dzuz = cz + 0.5 * czz * zs + 0.25 * (cxz * xs + cyz * ys) + 0.0625 * cxyz * xs * ys; - - real Dxy = bx + 0.5 * bxx * xs + 0.25 * (bxy * ys + bxz * zs) + 0.0625 * bxyz * ys * zs + ay + 0.5 * ayy * ys + 0.25 * (axy * xs + ayz * zs) + 0.0625 * axyz * xs * zs; - real Dxz = cx + 0.5 * cxx * xs + 0.25 * (cxy * ys + cxz * zs) + 0.0625 * cxyz * ys * zs + az + 0.5 * azz * zs + 0.25 * (axz * xs + ayz * ys) + 0.0625 * axyz * xs * ys; - real Dyz = cy + 0.5 * cyy * ys + 0.25 * (cxy * xs + cyz * zs) + 0.0625 * cxyz * xs * zs + bz + 0.5 * bzz * zs + 0.25 * (bxz * xs + byz * ys) + 0.0625 * bxyz * xs * ys; - - shearRate = sqrt(dxux * dxux + dyuy * dyuy + dzuz * dzuz + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz); - - - real o = Rheology::getHerschelBulkleyCollFactorBackward(shearRate, rho); //omega; - - if (o < omegaMin) - o = omegaMin; - - f_E = eps_new*((2*(-2*ax + by + cz-kxxMzzAverage-kxxMyyAverage))/(27.*o)); - f_N = eps_new*((2*(ax - 2*by + cz+2*kxxMyyAverage-kxxMzzAverage))/(27.*o)); - f_T = eps_new*((2*(ax + by - 2*cz-kxxMyyAverage+2*kxxMzzAverage))/(27.*o)); - f_NE = eps_new*(-(ax + 3*ay + 3*bx + by - 2*cz+2*kxxMyyAverage-kxxMyyAverage+3*kxyAverage)/(54.*o)); - f_SE = eps_new*(-(ax - 3*ay - 3*bx + by - 2*cz+2*kxxMyyAverage-kxxMyyAverage-3*kxyAverage)/(54.*o)); - f_TE = eps_new*(-(ax + 3*az - 2*by + 3*cx + cz+2*kxxMyyAverage-kxxMzzAverage+3*kxzAverage)/(54.*o)); - f_BE = eps_new*(-(ax - 3*az - 2*by - 3*cx + cz+2*kxxMyyAverage-kxxMzzAverage-3*kxzAverage)/(54.*o)); - f_TN = eps_new*(-(-2*ax + by + 3*bz + 3*cy + cz-kxxMyyAverage-kxxMzzAverage+3*kyzAverage)/(54.*o)); - f_BN = eps_new*(-(-2*ax + by - 3*bz - 3*cy + cz-kxxMyyAverage-kxxMzzAverage-3*kyzAverage)/(54.*o)); - f_ZERO = 0.; - f_TNE = eps_new*(-(ay + az + bx + bz + cx + cy+kxyAverage+kxzAverage+kyzAverage)/(72.*o)); - f_TSW = eps_new*((-ay + az - bx + bz + cx + cy-kxyAverage+kxzAverage+kyzAverage)/(72.*o)); - f_TSE = eps_new*((ay - az + bx + bz - cx + cy+kxyAverage-kxzAverage+kyzAverage)/(72.*o)); - f_TNW = eps_new*((ay + az + bx - bz + cx - cy+kxyAverage+kxzAverage-kyzAverage)/(72.*o)); - - x_E = 0.25*eps_new*((2*(-4*axx + bxy + cxz))/(27.*o)); - x_N = 0.25*eps_new*((2*(2*axx - 2*bxy + cxz))/(27.*o)); - x_T = 0.25*eps_new*((2*(2*axx + bxy - 2*cxz))/(27.*o)); - x_NE = 0.25*eps_new*(-((2*axx + 3*axy + 6*bxx + bxy - 2*cxz))/(54.*o)); - x_SE = 0.25*eps_new*(-((2*axx - 3*axy - 6*bxx + bxy - 2*cxz))/(54.*o)); - x_TE = 0.25*eps_new*(-((2*axx + 3*axz - 2*bxy + 6*cxx + cxz))/(54.*o)); - x_BE = 0.25*eps_new*(-((2*axx - 3*axz - 2*bxy - 6*cxx + cxz))/(54.*o)); - x_TN = 0.25*eps_new*(-((-4*axx + bxy + 3*bxz + 3*cxy + cxz))/(54.*o)); - x_BN = 0.25*eps_new*(-((-4*axx + bxy - 3*bxz - 3*cxy + cxz))/(54.*o)); - x_ZERO = 0.; - x_TNE = 0.25*eps_new*(-((axy + axz + 2*bxx + bxz + 2*cxx + cxy))/(72.*o)); - x_TSW = 0.25*eps_new*(((-axy + axz - 2*bxx + bxz + 2*cxx + cxy))/(72.*o)); - x_TSE = 0.25*eps_new*(((axy - axz + 2*bxx + bxz - 2*cxx + cxy))/(72.*o)); - x_TNW = 0.25*eps_new*(((axy + axz + 2*bxx - bxz + 2*cxx - cxy))/(72.*o)); - - y_E = 0.25*eps_new*(2*(-2*axy + 2*byy + cyz))/(27.*o); - y_N = 0.25*eps_new*(2*(axy - 4*byy + cyz))/(27.*o); - y_T = 0.25*eps_new*(2*(axy + 2*byy - 2*cyz))/(27.*o); - y_NE = 0.25*eps_new*(-((axy + 6*ayy + 3*bxy + 2*byy - 2*cyz))/(54.*o)); - y_SE = 0.25*eps_new*(-((axy - 6*ayy - 3*bxy + 2*byy - 2*cyz))/(54.*o)); - y_TE = 0.25*eps_new*(-((axy + 3*ayz - 4*byy + 3*cxy + cyz))/(54.*o)); - y_BE = 0.25*eps_new*(-((axy - 3*ayz - 4*byy - 3*cxy + cyz))/(54.*o)); - y_TN = 0.25*eps_new*(-((-2*axy + 2*byy + 3*byz + 6*cyy + cyz))/(54.*o)); - y_BN = 0.25*eps_new*(-((-2*axy + 2*byy - 3*byz - 6*cyy + cyz))/(54.*o)); - y_ZERO = 0.; - y_TNE = 0.25*eps_new*(-((2*ayy + ayz + bxy + byz + cxy + 2*cyy))/(72.*o)); - y_TSW = 0.25*eps_new*(((-2*ayy + ayz - bxy + byz + cxy + 2*cyy))/(72.*o)); - y_TSE = 0.25*eps_new*(((2*ayy - ayz + bxy + byz - cxy + 2*cyy))/(72.*o)); - y_TNW = 0.25*eps_new*(((2*ayy + ayz + bxy - byz + cxy - 2*cyy))/(72.*o)); - - z_E = 0.25*eps_new*((2*(-2*axz + byz + 2*czz))/(27.*o)); - z_N = 0.25*eps_new*((2*(axz - 2*byz + 2*czz))/(27.*o)); - z_T = 0.25*eps_new*((2*(axz + byz - 4*czz))/(27.*o)); - z_NE = 0.25*eps_new*(-((axz + 3*ayz + 3*bxz + byz - 4*czz))/(54.*o)); - z_SE = 0.25*eps_new*(-((axz - 3*ayz - 3*bxz + byz - 4*czz))/(54.*o)); - z_TE = 0.25*eps_new*(-((axz + 6*azz - 2*byz + 3*cxz + 2*czz))/(54.*o)); - z_BE = 0.25*eps_new*(-((axz - 6*azz - 2*byz - 3*cxz + 2*czz))/(54.*o)); - z_TN = 0.25*eps_new*(-((-2*axz + byz + 6*bzz + 3*cyz + 2*czz))/(54.*o)); - z_BN = 0.25*eps_new*(-((-2*axz + byz - 6*bzz - 3*cyz + 2*czz))/(54.*o)); - z_ZERO = 0.; - z_TNE = 0.25*eps_new*(-((ayz + 2*azz + bxz + 2*bzz + cxz + cyz))/(72.*o)); - z_TSW = 0.25*eps_new*(((-ayz + 2*azz - bxz + 2*bzz + cxz + cyz))/(72.*o)); - z_TSE = 0.25*eps_new*(((ayz - 2*azz + bxz + 2*bzz - cxz + cyz))/(72.*o)); - z_TNW = 0.25*eps_new*(((ayz + 2*azz + bxz - 2*bzz + cxz - cyz))/(72.*o)); - - xy_E = 0.0625*eps_new *(( 2.*cxyz)/(27.*o)); - xy_N = 0.0625*eps_new *(( 2.*cxyz)/(27.*o)); - xy_T = -(0.0625*eps_new *(( 4.*cxyz)/(27.*o))); - xy_NE = 0.0625*eps_new *( cxyz /(27.*o)); - xy_SE = 0.0625*eps_new *( cxyz /(27.*o)); - xy_TE = -(0.0625*eps_new *(( 3.*axyz + cxyz)/(54.*o))); - xy_BE = -(0.0625*eps_new *((-3.*axyz + cxyz)/(54.*o))); - xy_TN = -(0.0625*eps_new *(( 3.*bxyz + cxyz)/(54.*o))); - xy_BN = -(0.0625*eps_new *(( - 3.*bxyz + cxyz)/(54.*o))); - - xy_TNE = -(0.0625*eps_new *(( axyz + bxyz )/(72.*o))); - xy_TSW = 0.0625*eps_new *(( axyz + bxyz )/(72.*o)); - xy_TSE = 0.0625*eps_new *((- axyz + bxyz )/(72.*o)); - xy_TNW = 0.0625*eps_new *(( axyz - bxyz )/(72.*o)); - - xz_E = 0.0625*eps_new *(( 2.*bxyz )/(27.*o)); - xz_N = -(0.0625*eps_new *(( 4.*bxyz )/(27.*o))); - xz_T = 0.0625*eps_new *(( 2.*bxyz )/(27.*o)); - xz_NE = -(0.0625*eps_new *(( 3.*axyz + bxyz )/(54.*o))); - xz_SE = -(0.0625*eps_new *((-3.*axyz + bxyz )/(54.*o))); - xz_TE = 0.0625*eps_new *(( bxyz )/(27.*o)); - xz_BE = 0.0625*eps_new *(( bxyz )/(27.*o)); - xz_TN = -(0.0625*eps_new *(( bxyz + 3.*cxyz)/(54.*o))); - xz_BN = -(0.0625*eps_new *(( bxyz - 3.*cxyz)/(54.*o))); - - xz_TNE = -(0.0625*eps_new *(( axyz + cxyz)/(72.*o))); - xz_TSW = 0.0625*eps_new *((- axyz + cxyz)/(72.*o)); - xz_TSE = 0.0625*eps_new *(( axyz + cxyz)/(72.*o)); - xz_TNW = 0.0625*eps_new *(( axyz - cxyz)/(72.*o)); - - yz_E = -(0.0625*eps_new *(( 4.*axyz )/(27.*o))); - yz_N = 0.0625*eps_new *(( 2.*axyz )/(27.*o)); - yz_T = 0.0625*eps_new *(( 2.*axyz )/(27.*o)); - yz_NE = -(0.0625*eps_new *(( axyz + 3.*bxyz )/(54.*o))); - yz_SE = -(0.0625*eps_new *(( axyz - 3.*bxyz )/(54.*o))); - yz_TE = -(0.0625*eps_new *(( axyz + 3.*cxyz)/(54.*o))); - yz_BE = -(0.0625*eps_new *(( axyz - 3.*cxyz)/(54.*o))); - yz_TN = 0.0625*eps_new *(( axyz )/(27.*o)); - yz_BN = 0.0625*eps_new *(( axyz )/(27.*o)); - - yz_TNE = -(0.0625*eps_new *(( bxyz + cxyz)/(72.*o))); - yz_TSW = 0.0625*eps_new *(( - bxyz + cxyz)/(72.*o)); - yz_TSE = 0.0625*eps_new *(( bxyz - cxyz)/(72.*o)); - yz_TNW = 0.0625*eps_new *(( bxyz + cxyz)/(72.*o)); -} -////////////////////////////////////////////////////////////////////////// -void RheologyInterpolator::calcInterpolatedNode(real* f, /*real omega,*/ real x, real y, real z, real press, real xs, real ys, real zs) -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - real rho = press ; - real vx1 = a0 + 0.25*( xs*ax + ys*ay + zs*az) + 0.0625*(axx + xs*ys*axy + xs*zs*axz + ayy + ys*zs*ayz + azz) + 0.015625*(xs*ys*zs*axyz); - real vx2 = b0 + 0.25*( xs*bx + ys*by + zs*bz) + 0.0625*(bxx + xs*ys*bxy + xs*zs*bxz + byy + ys*zs*byz + bzz) + 0.015625*(xs*ys*zs*bxyz); - real vx3 = c0 + 0.25*( xs*cx + ys*cy + zs*cz) + 0.0625*(cxx + xs*ys*cxy + xs*zs*cxz + cyy + ys*zs*cyz + czz) + 0.015625*(xs*ys*zs*cxyz); - - real feq[ENDF+1]; - D3Q27System::calcIncompFeq(feq,rho,vx1,vx2,vx3); - - f[dP00] = f_E + xs*x_E + ys*y_E + zs*z_E + xs*ys*xy_E + xs*zs*xz_E + ys*zs*yz_E + feq[dP00]; - f[dM00] = f_E + xs*x_E + ys*y_E + zs*z_E + xs*ys*xy_E + xs*zs*xz_E + ys*zs*yz_E + feq[dM00]; - f[d0P0] = f_N + xs*x_N + ys*y_N + zs*z_N + xs*ys*xy_N + xs*zs*xz_N + ys*zs*yz_N + feq[d0P0]; - f[d0M0] = f_N + xs*x_N + ys*y_N + zs*z_N + xs*ys*xy_N + xs*zs*xz_N + ys*zs*yz_N + feq[d0M0]; - f[d00P] = f_T + xs*x_T + ys*y_T + zs*z_T + xs*ys*xy_T + xs*zs*xz_T + ys*zs*yz_T + feq[d00P]; - f[d00M] = f_T + xs*x_T + ys*y_T + zs*z_T + xs*ys*xy_T + xs*zs*xz_T + ys*zs*yz_T + feq[d00M]; - f[dPP0] = f_NE + xs*x_NE + ys*y_NE + zs*z_NE + xs*ys*xy_NE + xs*zs*xz_NE + ys*zs*yz_NE + feq[dPP0]; - f[dMM0] = f_NE + xs*x_NE + ys*y_NE + zs*z_NE + xs*ys*xy_NE + xs*zs*xz_NE + ys*zs*yz_NE + feq[dMM0]; - f[dPM0] = f_SE + xs*x_SE + ys*y_SE + zs*z_SE + xs*ys*xy_SE + xs*zs*xz_SE + ys*zs*yz_SE + feq[dPM0]; - f[dMP0] = f_SE + xs*x_SE + ys*y_SE + zs*z_SE + xs*ys*xy_SE + xs*zs*xz_SE + ys*zs*yz_SE + feq[dMP0]; - f[dP0P] = f_TE + xs*x_TE + ys*y_TE + zs*z_TE + xs*ys*xy_TE + xs*zs*xz_TE + ys*zs*yz_TE + feq[dP0P]; - f[dM0M] = f_TE + xs*x_TE + ys*y_TE + zs*z_TE + xs*ys*xy_TE + xs*zs*xz_TE + ys*zs*yz_TE + feq[dM0M]; - f[dP0M] = f_BE + xs*x_BE + ys*y_BE + zs*z_BE + xs*ys*xy_BE + xs*zs*xz_BE + ys*zs*yz_BE + feq[dP0M]; - f[dM0P] = f_BE + xs*x_BE + ys*y_BE + zs*z_BE + xs*ys*xy_BE + xs*zs*xz_BE + ys*zs*yz_BE + feq[dM0P]; - f[d0PP] = f_TN + xs*x_TN + ys*y_TN + zs*z_TN + xs*ys*xy_TN + xs*zs*xz_TN + ys*zs*yz_TN + feq[d0PP]; - f[d0MM] = f_TN + xs*x_TN + ys*y_TN + zs*z_TN + xs*ys*xy_TN + xs*zs*xz_TN + ys*zs*yz_TN + feq[d0MM]; - f[d0PM] = f_BN + xs*x_BN + ys*y_BN + zs*z_BN + xs*ys*xy_BN + xs*zs*xz_BN + ys*zs*yz_BN + feq[d0PM]; - f[d0MP] = f_BN + xs*x_BN + ys*y_BN + zs*z_BN + xs*ys*xy_BN + xs*zs*xz_BN + ys*zs*yz_BN + feq[d0MP]; - f[dPPP] = f_TNE + xs*x_TNE + ys*y_TNE + zs*z_TNE + xs*ys*xy_TNE + xs*zs*xz_TNE + ys*zs*yz_TNE + feq[dPPP]; - f[dMMP] = f_TSW + xs*x_TSW + ys*y_TSW + zs*z_TSW + xs*ys*xy_TSW + xs*zs*xz_TSW + ys*zs*yz_TSW + feq[dMMP]; - f[dPMP] = f_TSE + xs*x_TSE + ys*y_TSE + zs*z_TSE + xs*ys*xy_TSE + xs*zs*xz_TSE + ys*zs*yz_TSE + feq[dPMP]; - f[dMPP] = f_TNW + xs*x_TNW + ys*y_TNW + zs*z_TNW + xs*ys*xy_TNW + xs*zs*xz_TNW + ys*zs*yz_TNW + feq[dMPP]; - f[dPPM] = f_TSW + xs*x_TSW + ys*y_TSW + zs*z_TSW + xs*ys*xy_TSW + xs*zs*xz_TSW + ys*zs*yz_TSW + feq[dPPM]; - f[dMMM] = f_TNE + xs*x_TNE + ys*y_TNE + zs*z_TNE + xs*ys*xy_TNE + xs*zs*xz_TNE + ys*zs*yz_TNE + feq[dMMM]; - f[dPMM] = f_TNW + xs*x_TNW + ys*y_TNW + zs*z_TNW + xs*ys*xy_TNW + xs*zs*xz_TNW + ys*zs*yz_TNW + feq[dPMM]; - f[dMPM] = f_TSE + xs*x_TSE + ys*y_TSE + zs*z_TSE + xs*ys*xy_TSE + xs*zs*xz_TSE + ys*zs*yz_TSE + feq[dMPM]; - f[d000] = f_ZERO + xs*x_ZERO + ys*y_ZERO + zs*z_ZERO + feq[d000]; -} -////////////////////////////////////////////////////////////////////////// -//Position SWB -0.25, -0.25, -0.25 -real RheologyInterpolator::calcPressBSW() -{ - return press_SWT * (0.140625 + 0.1875 * xoff + 0.1875 * yoff - 0.5625 * zoff) + - press_NWT * (0.046875 + 0.0625 * xoff - 0.1875 * yoff - 0.1875 * zoff) + - press_SET * (0.046875 - 0.1875 * xoff + 0.0625 * yoff - 0.1875 * zoff) + - press_NET * (0.015625 - 0.0625 * xoff - 0.0625 * yoff - 0.0625 * zoff) + - press_NEB * (0.046875 - 0.1875 * xoff - 0.1875 * yoff + 0.0625 * zoff) + - press_NWB * (0.140625 + 0.1875 * xoff - 0.5625 * yoff + 0.1875 * zoff) + - press_SEB * (0.140625 - 0.5625 * xoff + 0.1875 * yoff + 0.1875 * zoff) + - press_SWB * (0.421875 + 0.5625 * xoff + 0.5625 * yoff + 0.5625 * zoff); -} -////////////////////////////////////////////////////////////////////////// -//Position SWT -0.25, -0.25, 0.25 -real RheologyInterpolator::calcPressTSW() -{ - return press_SWT * (0.421875 + 0.5625 * xoff + 0.5625 * yoff - 0.5625 * zoff) + - press_NWT * (0.140625 + 0.1875 * xoff - 0.5625 * yoff - 0.1875 * zoff) + - press_SET * (0.140625 - 0.5625 * xoff + 0.1875 * yoff - 0.1875 * zoff) + - press_NET * (0.046875 - 0.1875 * xoff - 0.1875 * yoff - 0.0625 * zoff) + - press_NEB * (0.015625 - 0.0625 * xoff - 0.0625 * yoff + 0.0625 * zoff) + - press_NWB * (0.046875 + 0.0625 * xoff - 0.1875 * yoff + 0.1875 * zoff) + - press_SEB * (0.046875 - 0.1875 * xoff + 0.0625 * yoff + 0.1875 * zoff) + - press_SWB * (0.140625 + 0.1875 * xoff + 0.1875 * yoff + 0.5625 * zoff); -} -////////////////////////////////////////////////////////////////////////// -//Position SET 0.25, -0.25, 0.25 -real RheologyInterpolator::calcPressTSE() -{ - return press_SET * (0.421875 - 0.5625 * xoff + 0.5625 * yoff - 0.5625 * zoff) + - press_NET * (0.140625 - 0.1875 * xoff - 0.5625 * yoff - 0.1875 * zoff) + - press_SWT * (0.140625 + 0.5625 * xoff + 0.1875 * yoff - 0.1875 * zoff) + - press_NWT * (0.046875 + 0.1875 * xoff - 0.1875 * yoff - 0.0625 * zoff) + - press_NWB * (0.015625 + 0.0625 * xoff - 0.0625 * yoff + 0.0625 * zoff) + - press_NEB * (0.046875 - 0.0625 * xoff - 0.1875 * yoff + 0.1875 * zoff) + - press_SWB * (0.046875 + 0.1875 * xoff + 0.0625 * yoff + 0.1875 * zoff) + - press_SEB * (0.140625 - 0.1875 * xoff + 0.1875 * yoff + 0.5625 * zoff); -} -////////////////////////////////////////////////////////////////////////// -//Position SEB 0.25, -0.25, -0.25 -real RheologyInterpolator::calcPressBSE() -{ - return press_SET * (0.140625 - 0.1875 * xoff + 0.1875 * yoff - 0.5625 * zoff) + - press_NET * (0.046875 - 0.0625 * xoff - 0.1875 * yoff - 0.1875 * zoff) + - press_SWT * (0.046875 + 0.1875 * xoff + 0.0625 * yoff - 0.1875 * zoff) + - press_NWT * (0.015625 + 0.0625 * xoff - 0.0625 * yoff - 0.0625 * zoff) + - press_NWB * (0.046875 + 0.1875 * xoff - 0.1875 * yoff + 0.0625 * zoff) + - press_NEB * (0.140625 - 0.1875 * xoff - 0.5625 * yoff + 0.1875 * zoff) + - press_SWB * (0.140625 + 0.5625 * xoff + 0.1875 * yoff + 0.1875 * zoff) + - press_SEB * (0.421875 - 0.5625 * xoff + 0.5625 * yoff + 0.5625 * zoff); -} -////////////////////////////////////////////////////////////////////////// -//Position NWB -0.25, 0.25, -0.25 -real RheologyInterpolator::calcPressBNW() -{ - return press_NWT * (0.140625 + 0.1875 * xoff - 0.1875 * yoff - 0.5625 * zoff) + - press_NET * (0.046875 - 0.1875 * xoff - 0.0625 * yoff - 0.1875 * zoff) + - press_SWT * (0.046875 + 0.0625 * xoff + 0.1875 * yoff - 0.1875 * zoff) + - press_SET * (0.015625 - 0.0625 * xoff + 0.0625 * yoff - 0.0625 * zoff) + - press_SEB * (0.046875 - 0.1875 * xoff + 0.1875 * yoff + 0.0625 * zoff) + - press_NEB * (0.140625 - 0.5625 * xoff - 0.1875 * yoff + 0.1875 * zoff) + - press_SWB * (0.140625 + 0.1875 * xoff + 0.5625 * yoff + 0.1875 * zoff) + - press_NWB * (0.421875 + 0.5625 * xoff - 0.5625 * yoff + 0.5625 * zoff); -} -////////////////////////////////////////////////////////////////////////// -//Position NWT -0.25, 0.25, 0.25 -real RheologyInterpolator::calcPressTNW() -{ - return press_NWT * (0.421875 + 0.5625 * xoff - 0.5625 * yoff - 0.5625 * zoff) + - press_NET * (0.140625 - 0.5625 * xoff - 0.1875 * yoff - 0.1875 * zoff) + - press_SWT * (0.140625 + 0.1875 * xoff + 0.5625 * yoff - 0.1875 * zoff) + - press_SET * (0.046875 - 0.1875 * xoff + 0.1875 * yoff - 0.0625 * zoff) + - press_SEB * (0.015625 - 0.0625 * xoff + 0.0625 * yoff + 0.0625 * zoff) + - press_NEB * (0.046875 - 0.1875 * xoff - 0.0625 * yoff + 0.1875 * zoff) + - press_SWB * (0.046875 + 0.0625 * xoff + 0.1875 * yoff + 0.1875 * zoff) + - press_NWB * (0.140625 + 0.1875 * xoff - 0.1875 * yoff + 0.5625 * zoff); -} -////////////////////////////////////////////////////////////////////////// -//Position NET 0.25, 0.25, 0.25 -real RheologyInterpolator::calcPressTNE() -{ - return press_NET * (0.421875 - 0.5625 * xoff - 0.5625 * yoff - 0.5625 * zoff) + - press_NWT * (0.140625 + 0.5625 * xoff - 0.1875 * yoff - 0.1875 * zoff) + - press_SET * (0.140625 - 0.1875 * xoff + 0.5625 * yoff - 0.1875 * zoff) + - press_SWT * (0.046875 + 0.1875 * xoff + 0.1875 * yoff - 0.0625 * zoff) + - press_SWB * (0.015625 + 0.0625 * xoff + 0.0625 * yoff + 0.0625 * zoff) + - press_NWB * (0.046875 + 0.1875 * xoff - 0.0625 * yoff + 0.1875 * zoff) + - press_SEB * (0.046875 - 0.0625 * xoff + 0.1875 * yoff + 0.1875 * zoff) + - press_NEB * (0.140625 - 0.1875 * xoff - 0.1875 * yoff + 0.5625 * zoff); -} -////////////////////////////////////////////////////////////////////////// -//Position NEB 0.25, 0.25, -0.25 -real RheologyInterpolator::calcPressBNE() -{ - return press_NET * (0.140625 - 0.1875 * xoff - 0.1875 * yoff - 0.5625 * zoff) + - press_NWT * (0.046875 + 0.1875 * xoff - 0.0625 * yoff - 0.1875 * zoff) + - press_SET * (0.046875 - 0.0625 * xoff + 0.1875 * yoff - 0.1875 * zoff) + - press_SWT * (0.015625 + 0.0625 * xoff + 0.0625 * yoff - 0.0625 * zoff) + - press_SWB * (0.046875 + 0.1875 * xoff + 0.1875 * yoff + 0.0625 * zoff) + - press_NWB * (0.140625 + 0.5625 * xoff - 0.1875 * yoff + 0.1875 * zoff) + - press_SEB * (0.140625 - 0.1875 * xoff + 0.5625 * yoff + 0.1875 * zoff) + - press_NEB * (0.421875 - 0.5625 * xoff - 0.5625 * yoff + 0.5625 * zoff); -} -////////////////////////////////////////////////////////////////////////// -//Position C 0.0, 0.0, 0.0 -void RheologyInterpolator::calcInterpolatedNodeFC(real* f, real omega) -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - real press = press_NET * (0.125 - 0.25 * xoff - 0.25 * yoff - 0.25 * zoff) + - press_NWT * (0.125 + 0.25 * xoff - 0.25 * yoff - 0.25 * zoff) + - press_SET * (0.125 - 0.25 * xoff + 0.25 * yoff - 0.25 * zoff) + - press_SWT * (0.125 + 0.25 * xoff + 0.25 * yoff - 0.25 * zoff) + - press_NEB * (0.125 - 0.25 * xoff - 0.25 * yoff + 0.25 * zoff) + - press_NWB * (0.125 + 0.25 * xoff - 0.25 * yoff + 0.25 * zoff) + - press_SEB * (0.125 - 0.25 * xoff + 0.25 * yoff + 0.25 * zoff) + - press_SWB * (0.125 + 0.25 * xoff + 0.25 * yoff + 0.25 * zoff); - real vx1 = a0; - real vx2 = b0; - real vx3 = c0; - - real rho = press ; - - real feq[ENDF+1]; - D3Q27System::calcIncompFeq(feq,rho,vx1,vx2,vx3); - - real eps_new = 2.; - - - real dxux = ax; - real dyuy = by; - real dzuz = cz; - - real Dxy = bx + ay; - real Dxz = cx + az; - real Dyz = cy + bz; - - shearRate = sqrt(dxux * dxux + dyuy * dyuy + dzuz * dzuz + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz); - - - real o = Rheology::getHerschelBulkleyCollFactorBackward(shearRate, rho); //omega; - - if (o < omegaMin) - o = omegaMin; - - f_E = eps_new*((2*(-2*ax + by + cz-kxxMzzAverage-kxxMyyAverage))/(27.*o)); - f_N = eps_new*((2*(ax - 2*by + cz+2*kxxMyyAverage-kxxMzzAverage))/(27.*o)); - f_T = eps_new*((2*(ax + by - 2*cz-kxxMyyAverage+2*kxxMzzAverage))/(27.*o)); - f_NE = eps_new*(-(ax + 3*ay + 3*bx + by - 2*cz+2*kxxMyyAverage-kxxMyyAverage+3*kxyAverage)/(54.*o)); - f_SE = eps_new*(-(ax - 3*ay - 3*bx + by - 2*cz+2*kxxMyyAverage-kxxMyyAverage-3*kxyAverage)/(54.*o)); - f_TE = eps_new*(-(ax + 3*az - 2*by + 3*cx + cz+2*kxxMyyAverage-kxxMzzAverage+3*kxzAverage)/(54.*o)); - f_BE = eps_new*(-(ax - 3*az - 2*by - 3*cx + cz+2*kxxMyyAverage-kxxMzzAverage-3*kxzAverage)/(54.*o)); - f_TN = eps_new*(-(-2*ax + by + 3*bz + 3*cy + cz-kxxMyyAverage-kxxMzzAverage+3*kyzAverage)/(54.*o)); - f_BN = eps_new*(-(-2*ax + by - 3*bz - 3*cy + cz-kxxMyyAverage-kxxMzzAverage-3*kyzAverage)/(54.*o)); - f_ZERO = 0.; - f_TNE = eps_new*(-(ay + az + bx + bz + cx + cy+kxyAverage+kxzAverage+kyzAverage)/(72.*o)); - f_TSW = eps_new*((-ay + az - bx + bz + cx + cy-kxyAverage+kxzAverage+kyzAverage)/(72.*o)); - f_TSE = eps_new*((ay - az + bx + bz - cx + cy+kxyAverage-kxzAverage+kyzAverage)/(72.*o)); - f_TNW = eps_new*((ay + az + bx - bz + cx - cy+kxyAverage+kxzAverage-kyzAverage)/(72.*o)); - - f[dP00] = f_E + feq[dP00]; - f[dM00] = f_E + feq[dM00]; - f[d0P0] = f_N + feq[d0P0]; - f[d0M0] = f_N + feq[d0M0]; - f[d00P] = f_T + feq[d00P]; - f[d00M] = f_T + feq[d00M]; - f[dPP0] = f_NE + feq[dPP0]; - f[dMM0] = f_NE + feq[dMM0]; - f[dPM0] = f_SE + feq[dPM0]; - f[dMP0] = f_SE + feq[dMP0]; - f[dP0P] = f_TE + feq[dP0P]; - f[dM0M] = f_TE + feq[dM0M]; - f[dP0M] = f_BE + feq[dP0M]; - f[dM0P] = f_BE + feq[dM0P]; - f[d0PP] = f_TN + feq[d0PP]; - f[d0MM] = f_TN + feq[d0MM]; - f[d0PM] = f_BN + feq[d0PM]; - f[d0MP] = f_BN + feq[d0MP]; - f[dPPP] = f_TNE + feq[dPPP]; - f[dMPP] = f_TNW + feq[dMPP]; - f[dPMP] = f_TSE + feq[dPMP]; - f[dMMP] = f_TSW + feq[dMMP]; - f[dPPM] = f_TSW + feq[dPPM]; - f[dMPM] = f_TSE + feq[dMPM]; - f[dPMM] = f_TNW + feq[dPMM]; - f[dMMM] = f_TNE + feq[dMMM]; - f[d000] = f_ZERO + feq[d000]; -} -////////////////////////////////////////////////////////////////////////// -void RheologyInterpolator::calcInterpolatedVelocity(real x, real y, real z, real& vx1, real& vx2, real& vx3) -{ - vx1 = a0 + ax*x + ay*y + az*z + axx*x*x + ayy*y*y + azz*z*z + axy*x*y + axz*x*z + ayz*y*z+axyz*x*y*z; - vx2 = b0 + bx*x + by*y + bz*z + bxx*x*x + byy*y*y + bzz*z*z + bxy*x*y + bxz*x*z + byz*y*z+bxyz*x*y*z; - vx3 = c0 + cx*x + cy*y + cz*z + cxx*x*x + cyy*y*y + czz*z*z + cxy*x*y + cxz*x*z + cyz*y*z+cxyz*x*y*z; -} -////////////////////////////////////////////////////////////////////////// -void RheologyInterpolator::calcInterpolatedShearStress(real x, real y, real z,real& tauxx, real& tauyy, real& tauzz,real& tauxy, real& tauxz, real& tauyz) -{ - tauxx=ax+2*axx*x+axy*y+axz*z+axyz*y*z; - tauyy=by+2*byy*y+bxy*x+byz*z+bxyz*x*z; - tauzz=cz+2*czz*z+cxz*x+cyz*y+cxyz*x*y; - tauxy=0.5*((ay+2.0*ayy*y+axy*x+ayz*z+axyz*x*z)+(bx+2.0*bxx*x+bxy*y+bxz*z+bxyz*y*z)); - tauxz=0.5*((az+2.0*azz*z+axz*x+ayz*y+axyz*x*y)+(cx+2.0*cxx*x+cxy*y+cxz*z+cxyz*y*z)); - tauyz=0.5*((bz+2.0*bzz*z+bxz*x+byz*y+bxyz*x*y)+(cy+2.0*cyy*y+cxy*x+cyz*z+cxyz*x*z)); -} diff --git a/src/cpu/NonNewtonianFluids/LBM/RheologyInterpolator.h b/src/cpu/NonNewtonianFluids/LBM/RheologyInterpolator.h deleted file mode 100644 index 4b9391df278dc3e69a08df8a1400e3871ca7f067..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/LBM/RheologyInterpolator.h +++ /dev/null @@ -1,106 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file RheologyInterpolator.h -//! \ingroup LBM -//! \author Konstantin Kutscher -//======================================================================================= -#ifndef RheologyInterpolator_H_ -#define RheologyInterpolator_H_ - -#include "Interpolation/Interpolator.h" -#include "D3Q27System.h" - -//! \brief A class implements an interpolation function of grid refinement for thixotropic fluid. - -class RheologyInterpolator : public Interpolator -{ -public: - RheologyInterpolator(); - RheologyInterpolator(real omegaC, real omegaF, real omegaMin); - InterpolationProcessorPtr clone(); - void setOmegas(real omegaC, real omegaF); - void setOmegaMin(real omegaMin); - void interpolateCoarseToFine(D3Q27ICell& icellC, D3Q27ICell& icellF); - void interpolateCoarseToFine(D3Q27ICell& icellC, D3Q27ICell& icellF, real xoff, real yoff, real zoff); - void interpolateFineToCoarse(D3Q27ICell& icellF, real* icellC); - void interpolateFineToCoarse(D3Q27ICell& icellF, real* icellC, real xoff, real yoff, real zoff); - //real forcingC, forcingF; -protected: -private: - real omegaC, omegaF; - real a0, ax, ay, az, axx, ayy, azz, axy, axz, ayz, b0, bx, by, bz, bxx, byy, bzz, bxy, bxz, byz, c0, cx, cy, cz, cxx, cyy, czz, cxy, cxz, cyz, axyz, bxyz, cxyz; - real xoff, yoff, zoff; - real xoff_sq, yoff_sq, zoff_sq; - real press_SWT, press_NWT, press_NET, press_SET, press_SWB, press_NWB, press_NEB, press_SEB; - - real f_E, f_N, f_T, f_NE, f_SE, f_BE, f_TE, f_TN, f_BN, f_TNE, f_TNW, f_TSE, f_TSW, f_ZERO; - real x_E, x_N, x_T, x_NE, x_SE, x_BE, x_TE, x_TN, x_BN, x_TNE, x_TNW, x_TSE, x_TSW, x_ZERO; - real y_E, y_N, y_T, y_NE, y_SE, y_BE, y_TE, y_TN, y_BN, y_TNE, y_TNW, y_TSE, y_TSW, y_ZERO; - real z_E, z_N, z_T, z_NE, z_SE, z_BE, z_TE, z_TN, z_BN, z_TNE, z_TNW, z_TSE, z_TSW, z_ZERO; - real xy_E, xy_N, xy_T, xy_NE, xy_SE, xy_BE, xy_TE, xy_TN, xy_BN, xy_TNE, xy_TNW, xy_TSE, xy_TSW/*, xy_ZERO*/; - real xz_E, xz_N, xz_T, xz_NE, xz_SE, xz_BE, xz_TE, xz_TN, xz_BN, xz_TNE, xz_TNW, xz_TSE, xz_TSW/*, xz_ZERO*/; - real yz_E, yz_N, yz_T, yz_NE, yz_SE, yz_BE, yz_TE, yz_TN, yz_BN, yz_TNE, yz_TNW, yz_TSE, yz_TSW/*, yz_ZERO*/; - - real kxyAverage, kyzAverage, kxzAverage, kxxMyyAverage, kxxMzzAverage; - - real rho; - real shearRate; - - real omegaMin; - - void setOffsets(real xoff, real yoff, real zoff); - void calcMoments(const real* const f, real omegaInf, real& rho, real& vx1, real& vx2, real& vx3, - real& kxy, real& kyz, real& kxz, real& kxxMyy, real& kxxMzz); - void calcInterpolatedCoefficiets_intern(const D3Q27ICell& icell, real omega, real eps_new, real x, real y, real z, real xs, real ys, real zs); - void calcInterpolatedNode(real* f, /*real omega,*/ real x, real y, real z, real press, real xs, real ys, real zs); - real calcPressBSW(); - real calcPressTSW(); - real calcPressTSE(); - real calcPressBSE(); - real calcPressBNW(); - real calcPressTNW(); - real calcPressTNE(); - real calcPressBNE(); - void calcInterpolatedNodeFC(real* f, real omega); - void calcInterpolatedVelocity(real x, real y, real z,real& vx1, real& vx2, real& vx3); - void calcInterpolatedShearStress(real x, real y, real z,real& tauxx, real& tauyy, real& tauzz,real& tauxy, real& tauxz, real& tauyz); -}; - -////////////////////////////////////////////////////////////////////////// -inline void RheologyInterpolator::interpolateCoarseToFine(D3Q27ICell& icellC, D3Q27ICell& icellF) -{ - this->interpolateCoarseToFine(icellC, icellF, 0.0, 0.0, 0.0); -} -////////////////////////////////////////////////////////////////////////// -inline void RheologyInterpolator::interpolateFineToCoarse(D3Q27ICell& icellF, real* icellC) -{ - this->interpolateFineToCoarse(icellF, icellC, 0.0, 0.0, 0.0); -} - -#endif diff --git a/src/cpu/NonNewtonianFluids/LBM/RheologyK17LBMKernel.cpp b/src/cpu/NonNewtonianFluids/LBM/RheologyK17LBMKernel.cpp deleted file mode 100644 index 2981156c4a5f6acc0df336d9d66cc9a9e97d8c1a..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/LBM/RheologyK17LBMKernel.cpp +++ /dev/null @@ -1,1155 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file RheologyK17LBMKernel.cpp -//! \ingroup LBM -//! \author Konstantin Kutscher -//======================================================================================= - -#include "RheologyK17LBMKernel.h" -#include "D3Q27System.h" -#include "Interpolator.h" -#include "D3Q27EsoTwist3DSplittedVector.h" -#include <math.h> -#include "DataSet3D.h" -#include "LBMKernel.h" -#include "Block3D.h" -#include "Rheology.h" - -#define PROOF_CORRECTNESS - -//using namespace UbMath; -using namespace vf::basics::constant; - -////////////////////////////////////////////////////////////////////////// -RheologyK17LBMKernel::RheologyK17LBMKernel() -{ - this->compressible = true; - this->bulkViscosity = 0; - this->OxxPyyPzz = 1.0; -} -////////////////////////////////////////////////////////////////////////// -RheologyK17LBMKernel::~RheologyK17LBMKernel(void) -{ - -} -////////////////////////////////////////////////////////////////////////// -void RheologyK17LBMKernel::initDataSet() -{ - SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0]+2, nx[1]+2, nx[2]+2, -999.9)); - dataSet->setFdistributions(d); -} -////////////////////////////////////////////////////////////////////////// -SPtr<LBMKernel> RheologyK17LBMKernel::clone() -{ - SPtr<LBMKernel> kernel(new RheologyK17LBMKernel()); - kernel->setNX(nx); - dynamicPointerCast<RheologyK17LBMKernel>(kernel)->initDataSet(); - kernel->setCollisionFactor(this->collFactor); - kernel->setBCSet(bcSet->clone(kernel)); - kernel->setWithForcing(withForcing); - kernel->setForcingX1(muForcingX1); - kernel->setForcingX2(muForcingX2); - kernel->setForcingX3(muForcingX3); - kernel->setIndex(ix1, ix2, ix3); - kernel->setDeltaT(deltaT); - kernel->setBlock(block.lock()); - - if (bulkViscosity != 0) - { - OxxPyyPzz = LBMSystem::calcOmega2(bulkViscosity, block.lock()->getLevel()); - } - else - { - OxxPyyPzz = c1o1; - } - - dynamicPointerCast<RheologyK17LBMKernel>(kernel)->OxxPyyPzz = this->OxxPyyPzz; - - return kernel; -} -////////////////////////////////////////////////////////////////////////// -void RheologyK17LBMKernel::calculate(int step) -{ - using namespace D3Q27System; - using namespace std; - - //timer.resetAndStart(); - - //initializing of forcing stuff - if (withForcing) - { - muForcingX1.DefineVar("x1", &muX1); muForcingX1.DefineVar("x2", &muX2); muForcingX1.DefineVar("x3", &muX3); - muForcingX2.DefineVar("x1", &muX1); muForcingX2.DefineVar("x2", &muX2); muForcingX2.DefineVar("x3", &muX3); - muForcingX3.DefineVar("x1", &muX1); muForcingX3.DefineVar("x2", &muX2); muForcingX3.DefineVar("x3", &muX3); - - muDeltaT = deltaT; - - muForcingX1.DefineVar("dt", &muDeltaT); - muForcingX2.DefineVar("dt", &muDeltaT); - muForcingX3.DefineVar("dt", &muDeltaT); - - muNu = (1.0/3.0)*(1.0/collFactor - 1.0/2.0); - - muForcingX1.DefineVar("nu", &muNu); - muForcingX2.DefineVar("nu", &muNu); - muForcingX3.DefineVar("nu", &muNu); - } - ///////////////////////////////////// - - localDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); - nonLocalDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); - zeroDistributions = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - const int bcArrayMaxX1 = (int)bcArray->getNX1(); - const int bcArrayMaxX2 = (int)bcArray->getNX2(); - const int bcArrayMaxX3 = (int)bcArray->getNX3(); - - int minX1 = ghostLayerWidth; - int minX2 = ghostLayerWidth; - int minX3 = ghostLayerWidth; - int maxX1 = bcArrayMaxX1-ghostLayerWidth; - int maxX2 = bcArrayMaxX2-ghostLayerWidth; - int maxX3 = bcArrayMaxX3-ghostLayerWidth; - - //LBMReal omega = collFactor; - - ////magic parameter for rheology - //LBMReal a = 10; - //OxxPyyPzz = c1 / (a * ((c1 / omega) - c1o2) + c1o2); - //OxxPyyPzz = (OxxPyyPzz > c1) ? c1 : OxxPyyPzz; - - ////LBMReal OxyyPxzz = eight*(-two+omega)*(one+two*omega)/(-eight-fourteen*omega+seven*omega*omega);//one; - ////LBMReal OxyyMxzz = eight*(-two+omega)*(-seven+four*omega)/(fiftysix-fifty*omega+nine*omega*omega);//one; - ////LBMReal Oxyz = twentyfour*(-two+omega)*(-two-seven*omega+three*omega*omega)/(fourtyeight+c152*omega-c130*omega*omega+twentynine*omega*omega*omega); - //LBMReal OxyyPxzz = 8.0*(omega-2.0)*(OxxPyyPzz*(3.0*omega-1.0)-5.0*omega)/(8.0*(5.0-2.0*omega)*omega+OxxPyyPzz*(8.0+omega*(9.0*omega-26.0))); - //LBMReal OxyyMxzz = 8.0*(omega-2.0)*(omega+OxxPyyPzz*(3.0*omega-7.0))/(OxxPyyPzz*(56.0-42.0*omega+9.0*omega*omega)-8.0*omega); - //LBMReal Oxyz = 24.0*(omega-2.0)*(4.0*omega*omega+omega*OxxPyyPzz*(18.0-13.0*omega)+OxxPyyPzz*OxxPyyPzz*(2.0+omega*(6.0*omega-11.0)))/(16.0*omega*omega*(omega-6.0)-2.0*omega*OxxPyyPzz*(216.0+5.0*omega*(9.0*omega-46.0))+OxxPyyPzz*OxxPyyPzz*(omega*(3.0*omega-10.0)*(15.0*omega-28.0)-48.0)); - - ////LBMReal A = (four + two*omega - three*omega*omega) / (two - seven*omega + five*omega*omega); - ////LBMReal B = (four + twentyeight*omega - fourteen*omega*omega) / (six - twentyone*omega + fiveteen*omega*omega); - - //LBMReal A = (4.0*omega*omega+2.0*omega*OxxPyyPzz*(omega-6.0)+OxxPyyPzz*OxxPyyPzz*(omega*(10.0-3.0*omega)-4.0))/((omega-OxxPyyPzz)*(OxxPyyPzz*(2.0+3.0*omega)-8.0*omega)); - //LBMReal B = (4.0*omega*OxxPyyPzz*(9.0*omega-16.0)-4.0*omega*omega-2.0*OxxPyyPzz*OxxPyyPzz*(2.0+9.0*omega*(omega-2.0)))/(3.0*(omega-OxxPyyPzz)*(OxxPyyPzz*(2.0+3.0*omega)-8.0*omega)); - - for (int x3 = minX3; x3 < maxX3; x3++) - { - for (int x2 = minX2; x2 < maxX2; x2++) - { - for (int x1 = minX1; x1 < maxX1; x1++) - { - if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) - { - int x1p = x1 + 1; - int x2p = x2 + 1; - int x3p = x3 + 1; - ////////////////////////////////////////////////////////////////////////// - //read distribution - //////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - - //E N T - //c c c - ////////// - //W S B - //a a a - - //Rest ist b - - //mfxyz - //a - negative - //b - null - //c - positive - - // a b c - //-1 0 1 - - real mfcbb = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3); - - real mfabb = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p); - - real mfbbb = (*this->zeroDistributions)(x1, x2, x3); - - //////////////////////////////////////////////////////////////////////////////////// - real drho = ((((mfccc+mfaaa)+(mfaca+mfcac))+((mfacc+mfcaa)+(mfaac+mfcca)))+ - (((mfbac+mfbca)+(mfbaa+mfbcc))+((mfabc+mfcba)+(mfaba+mfcbc))+((mfacb+mfcab)+(mfaab+mfccb)))+ - ((mfabb+mfcbb)+(mfbab+mfbcb))+(mfbba+mfbbc))+mfbbb; - - real rho = c1o1+drho; - //////////////////////////////////////////////////////////////////////////////////// - real vvx = ((((mfccc-mfaaa)+(mfcac-mfaca))+((mfcaa-mfacc)+(mfcca-mfaac)))+ - (((mfcba-mfabc)+(mfcbc-mfaba))+((mfcab-mfacb)+(mfccb-mfaab)))+ - (mfcbb-mfabb))/rho; - real vvy = ((((mfccc-mfaaa)+(mfaca-mfcac))+((mfacc-mfcaa)+(mfcca-mfaac)))+ - (((mfbca-mfbac)+(mfbcc-mfbaa))+((mfacb-mfcab)+(mfccb-mfaab)))+ - (mfbcb-mfbab))/rho; - real vvz = ((((mfccc-mfaaa)+(mfcac-mfaca))+((mfacc-mfcaa)+(mfaac-mfcca)))+ - (((mfbac-mfbca)+(mfbcc-mfbaa))+((mfabc-mfcba)+(mfcbc-mfaba)))+ - (mfbbc-mfbba))/rho; - //////////////////////////////////////////////////////////////////////////////////// - - real omega = collFactor; - - //forcing - /////////////////////////////////////////////////////////////////////////////////////////// - if (withForcing) - { - muX1 = static_cast<real>(x1-1+ix1*maxX1); - muX2 = static_cast<real>(x2-1+ix2*maxX2); - muX3 = static_cast<real>(x3-1+ix3*maxX3); - - forcingX1 = muForcingX1.Eval(); - forcingX2 = muForcingX2.Eval(); - forcingX3 = muForcingX3.Eval(); - - vvx += forcingX1*deltaT*0.5; // X - vvy += forcingX2*deltaT*0.5; // Y - vvz += forcingX3*deltaT*0.5; // Z - } - /////////////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - real oMdrho = c1o1; // comp special - //////////////////////////////////////////////////////////////////////////////////// - real m0, m1, m2; - real vx2; - real vy2; - real vz2; - vx2 = vvx*vvx; - vy2 = vvy*vvy; - vz2 = vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimitP = 0.01;// * 0.0001f; - real qudricLimitM = 0.01;// * 0.0001f; - real qudricLimitD = 0.01;// * 0.001f; - //LBMReal s9 = minusomega; - //test - //s9 = 0.; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa+mfaac; - m1 = mfaac-mfaaa; - m0 = m2+mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1-m0 * vvz; - mfaac = m2-c2o1* m1 * vvz+vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba+mfabc; - m1 = mfabc-mfaba; - m0 = m2+mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1-m0 * vvz; - mfabc = m2-c2o1* m1 * vvz+vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca+mfacc; - m1 = mfacc-mfaca; - m0 = m2+mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1-m0 * vvz; - mfacc = m2- c2o1 * m1 * vvz+vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa+mfbac; - m1 = mfbac-mfbaa; - m0 = m2+mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1-m0 * vvz; - mfbac = m2- c2o1 * m1 * vvz+vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba+mfbbc; - m1 = mfbbc-mfbba; - m0 = m2+mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1-m0 * vvz; - mfbbc = m2- c2o1 * m1 * vvz+vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca+mfbcc; - m1 = mfbcc-mfbca; - m0 = m2+mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1-m0 * vvz; - mfbcc = m2- c2o1 * m1 * vvz+vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa+mfcac; - m1 = mfcac-mfcaa; - m0 = m2+mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1-m0 * vvz; - mfcac = m2- c2o1 * m1 * vvz+vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba+mfcbc; - m1 = mfcbc-mfcba; - m0 = m2+mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1-m0 * vvz; - mfcbc = m2- c2o1 * m1 * vvz+vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca+mfccc; - m1 = mfccc-mfcca; - m0 = m2+mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1-m0 * vvz; - mfccc = m2- c2o1 * m1 * vvz+vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa+mfaca; - m1 = mfaca-mfaaa; - m0 = m2+mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1-m0 * vvy; - mfaca = m2- c2o1 * m1 * vvy+vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab+mfacb; - m1 = mfacb-mfaab; - m0 = m2+mfabb; - mfaab = m0; - mfabb = m1-m0 * vvy; - mfacb = m2- c2o1 * m1 * vvy+vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac+mfacc; - m1 = mfacc-mfaac; - m0 = m2+mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1-m0 * vvy; - mfacc = m2- c2o1 * m1 * vvy+vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa+mfbca; - m1 = mfbca-mfbaa; - m0 = m2+mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1-m0 * vvy; - mfbca = m2- c2o1 * m1 * vvy+vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab+mfbcb; - m1 = mfbcb-mfbab; - m0 = m2+mfbbb; - mfbab = m0; - mfbbb = m1-m0 * vvy; - mfbcb = m2- c2o1 * m1 * vvy+vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac+mfbcc; - m1 = mfbcc-mfbac; - m0 = m2+mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1-m0 * vvy; - mfbcc = m2- c2o1 * m1 * vvy+vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa+mfcca; - m1 = mfcca-mfcaa; - m0 = m2+mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1-m0 * vvy; - mfcca = m2- c2o1 * m1 * vvy+vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab+mfccb; - m1 = mfccb-mfcab; - m0 = m2+mfcbb; - mfcab = m0; - mfcbb = m1-m0 * vvy; - mfccb = m2- c2o1 * m1 * vvy+vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac+mfccc; - m1 = mfccc-mfcac; - m0 = m2+mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1-m0 * vvy; - mfccc = m2- c2o1 * m1 * vvy+vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa+mfcaa; - m1 = mfcaa-mfaaa; - m0 = m2+mfbaa; - mfaaa = m0; - m0 += c1o1 * oMdrho; - mfbaa = m1-m0 * vvx; - mfcaa = m2- c2o1 * m1 * vvx+vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba+mfcba; - m1 = mfcba-mfaba; - m0 = m2+mfbba; - mfaba = m0; - mfbba = m1-m0 * vvx; - mfcba = m2- c2o1 * m1 * vvx+vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca+mfcca; - m1 = mfcca-mfaca; - m0 = m2+mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1-m0 * vvx; - mfcca = m2- c2o1 * m1 * vvx+vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab+mfcab; - m1 = mfcab-mfaab; - m0 = m2+mfbab; - mfaab = m0; - mfbab = m1-m0 * vvx; - mfcab = m2- c2o1 * m1 * vvx+vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb+mfcbb; - m1 = mfcbb-mfabb; - m0 = m2+mfbbb; - mfabb = m0; - mfbbb = m1-m0 * vvx; - mfcbb = m2- c2o1 * m1 * vvx+vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb+mfccb; - m1 = mfccb-mfacb; - m0 = m2+mfbcb; - mfacb = m0; - mfbcb = m1-m0 * vvx; - mfccb = m2- c2o1 * m1 * vvx+vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac+mfcac; - m1 = mfcac-mfaac; - m0 = m2+mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1-m0 * vvx; - mfcac = m2- c2o1 * m1 * vvx+vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc+mfcbc; - m1 = mfcbc-mfabc; - m0 = m2+mfbbc; - mfabc = m0; - mfbbc = m1-m0 * vvx; - mfcbc = m2-c2o1* m1 * vvx+vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc+mfccc; - m1 = mfccc-mfacc; - m0 = m2+mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1-m0 * vvx; - mfccc = m2-c2o1* m1 * vvx+vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - - //LBMReal OxxPyyPzz = one; // bulk viscosity - - //////////////////////////////////////////////////////////// - //3. - ////////////////////////////// - //LBMReal OxyyPxzz = one;//three * (two - omega) / (three - omega);// - //LBMReal OxyyMxzz = one;//six * (two - omega) / (six - omega);// - //LBMReal Oxyz = one;//twelve * (two - omega) / (twelve + omega);// - - //LBMReal OxyyPxzz = eight*(-two+omega)*(one+two*omega)/(-eight-fourteen*omega+seven*omega*omega);//one; - - //LBMReal OxyyMxzz = eight*(-two+omega)*(-seven+four*omega)/(fiftysix-fifty*omega+nine*omega*omega);//one; - - //LBMReal Oxyz = twentyfour*(-two+omega)*(-two-seven*omega+three*omega*omega)/(fourtyeight+c152*omega-c130*omega*omega+twentynine*omega*omega*omega); - ////////////////////////////// - //LBMReal OxyyPxzz = two-omega;// - //LBMReal OxyyMxzz = two-omega;// - ////////////////////////////// - //LBMReal OxyyPxzz = (eight * (omega - two)) / (omega - eight);//Ginzburg - //LBMReal OxyyMxzz = (eight * (omega - two)) / (omega - eight);//Ginzburg - ////////////////////////////// - //LBMReal OxyyPxzz = omega;//BGK - //LBMReal OxyyMxzz = omega;//BGK - ////////////////////////////// - //LBMReal OxyyPxzz = (one + omega) / two;//1P5 - //LBMReal OxyyMxzz = (one + omega) / two;//1P5 - ////////////////////////////// - //LBMReal OxyyPxzz = (three - omega) / two;//0P5 - //LBMReal OxyyMxzz = (three - omega) / two;//0P5 - ////////////////////////////// - //LBMReal OxyyPxzz = (one + (eight * (omega - two)) / (omega - eight)) / two;//one + Ginzburg / two ... Car - //LBMReal OxyyMxzz = (one + (eight * (omega - two)) / (omega - eight)) / two;//one + Ginzburg / two ... Car - //////////////////////////////////////////////////////////// - //4. - ////////////////////////////// - real O4 = c1o1; - ////////////////////////////// - //LBMReal O4 = omega;//TRT - //////////////////////////////////////////////////////////// - //5. - ////////////////////////////// - real O5 = c1o1; - //////////////////////////////////////////////////////////// - //6. - ////////////////////////////// - real O6 = c1o1; - //////////////////////////////////////////////////////////// - - - //central moments to cumulants - //4. - real CUMcbb = mfcbb-((mfcaa+c1o3) * mfabb+ c2o1 * mfbba * mfbab)/rho; //ab 15.05.2015 verwendet - real CUMbcb = mfbcb-((mfaca+c1o3) * mfbab+ c2o1 * mfbba * mfabb)/rho; //ab 15.05.2015 verwendet - real CUMbbc = mfbbc-((mfaac+c1o3) * mfbba+ c2o1 * mfbab * mfabb)/rho; //ab 15.05.2015 verwendet - - real CUMcca = mfcca-(((mfcaa * mfaca+ c2o1 * mfbba * mfbba)+c1o3 * (mfcaa+mfaca))/rho-c1o9*(drho/rho)); - real CUMcac = mfcac-(((mfcaa * mfaac+ c2o1 * mfbab * mfbab)+c1o3 * (mfcaa+mfaac))/rho-c1o9*(drho/rho)); - real CUMacc = mfacc-(((mfaac * mfaca+ c2o1 * mfabb * mfabb)+c1o3 * (mfaac+mfaca))/rho-c1o9*(drho/rho)); - - //5. - real CUMbcc = mfbcc-((mfaac * mfbca+mfaca * mfbac+ c4o1 * mfabb * mfbbb+ c2o1 * (mfbab * mfacb+mfbba * mfabc))+c1o3 * (mfbca+mfbac))/rho; - real CUMcbc = mfcbc-((mfaac * mfcba+mfcaa * mfabc+ c4o1 * mfbab * mfbbb+ c2o1 * (mfabb * mfcab+mfbba * mfbac))+c1o3 * (mfcba+mfabc))/rho; - real CUMccb = mfccb-((mfcaa * mfacb+mfaca * mfcab+ c4o1 * mfbba * mfbbb+ c2o1 * (mfbab * mfbca+mfabb * mfcba))+c1o3 * (mfacb+mfcab))/rho; - - //6. - - real CUMccc = mfccc+((-c4o1 * mfbbb * mfbbb - -(mfcaa * mfacc+mfaca * mfcac+mfaac * mfcca) - - c4o1 * (mfabb * mfcbb+mfbab * mfbcb+mfbba * mfbbc) - - c2o1 * (mfbca * mfbac+mfcba * mfabc+mfcab * mfacb))/rho - +(c4o1 * (mfbab * mfbab * mfaca+mfabb * mfabb * mfcaa+mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb)/(rho * rho) - -c1o3 * (mfacc+mfcac+mfcca)/rho - -c1o9 * (mfcaa+mfaca+mfaac)/rho - +(c2o1 * (mfbab * mfbab+mfabb * mfabb+mfbba * mfbba) - +(mfaac * mfaca+mfaac * mfcaa+mfaca * mfcaa)+c1o3 *(mfaac+mfaca+mfcaa))/(rho * rho) * c2o3 - +c1o27*((drho * drho-drho)/(rho*rho))); - //+ c1o27*(one -three/rho +two/(rho*rho))); - - - - - //2. - // linear combinations - real mxxPyyPzz = mfcaa+mfaca+mfaac; - real mxxMyy = mfcaa-mfaca; - real mxxMzz = mfcaa-mfaac; - - ////////////////////////////////////////////////////////////////////////// - // LBMReal magicBulk=(CUMacc+CUMcac+CUMcca)*(one/OxxPyyPzz-c1o2)*c3o2*8.; - - ////////////////////////////////////////////////////////////////////////// - //limiter-Scheise Teil 1 - //LBMReal oxxyy,oxxzz,oxy,oxz,oyz; - //LBMReal smag=0.001; - //oxxyy = omega+(one-omega)*fabs(mxxMyy)/(fabs(mxxMyy)+smag); - //oxxzz = omega+(one-omega)*fabs(mxxMzz)/(fabs(mxxMzz)+smag); - //oxy = omega+(one-omega)*fabs(mfbba)/(fabs(mfbba)+smag); - //oxz = omega+(one-omega)*fabs(mfbab)/(fabs(mfbab)+smag); - //oyz = omega+(one-omega)*fabs(mfabb)/(fabs(mfabb)+smag); - - //////////////////////////////////////////////////////////////////////////// - ////Teil 1b - //LBMReal constante = 1000.0; - //LBMReal nuEddi = constante * fabs(mxxPyyPzz); - //LBMReal omegaLimit = one / (one / omega + three * nuEddi); - - //{ - // LBMReal dxux = c1o2 * (-omegaLimit) *(mxxMyy + mxxMzz) + OxxPyyPzz * (mfaaa - mxxPyyPzz); - // LBMReal dyuy = dxux + omegaLimit * c3o2 * mxxMyy; - // LBMReal dzuz = dxux + omegaLimit * c3o2 * mxxMzz; - - ////relax - //mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- three * (one - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - //mxxMyy += omegaLimit * (-mxxMyy) - three * (one + c1o2 * (-omegaLimit)) * (vx2 * dxux + vy2 * dyuy); - //mxxMzz += omegaLimit * (-mxxMzz) - three * (one + c1o2 * (-omegaLimit)) * (vx2 * dxux + vz2 * dzuz); - - //} - //mfabb += omegaLimit * (-mfabb); - //mfbab += omegaLimit * (-mfbab); - //mfbba += omegaLimit * (-mfbba); - //////////////////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //incl. correction (hat noch nicht so gut funktioniert...Optimierungsbedarf??) - - real dxux = c1o2 * (-omega) * (mxxMyy + mxxMzz);// +c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux+omega * c3o2 * mxxMyy; - real dzuz = dxux+omega * c3o2 * mxxMzz; - - real Dxy =-c3o1 *omega*mfbba; - real Dxz =-c3o1 *omega*mfbab; - real Dyz =-c3o1 *omega*mfabb; - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //non Newtonian fluid collision factor - real shearRate = sqrt(c2o1 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz) / (drho + c1o1); - omega = getRheologyCollFactor(omega, shearRate, rho); - //omega = Rheology::getHerschelBulkleyCollFactor(omega, shearRate, drho); - //omega = Rheology::getBinghamCollFactor(omega, shearRate, drho); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - dxux = c1o2 * (-omega) * (mxxMyy + mxxMzz);// +c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - dyuy = dxux + omega * c3o2 * mxxMyy; - dzuz = dxux + omega * c3o2 * mxxMzz; - - Dxy = -c3o1 * omega * mfbba; - Dxz = -c3o1 * omega * mfbab; - Dyz = -c3o1 * omega * mfabb; - - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - - if(omega < c1o1) { omega = c1o1; } //arbitrary limit (24.09.2020) - - //omega = collFactorc1o1 - - //magic parameter for rheology - real a = 10; - OxxPyyPzz = c1o1 / (a * ((c1o1 / omega) - c1o2) + c1o2); - OxxPyyPzz = (OxxPyyPzz > c1o1) ? c1o1 : OxxPyyPzz; - - real OxyyPxzz = 8.0 * (omega - 2.0) * (OxxPyyPzz * (3.0 * omega - 1.0) - 5.0 * omega) / (8.0 * (5.0 - 2.0 * omega) * omega + OxxPyyPzz * (8.0 + omega * (9.0 * omega - 26.0))); - real OxyyMxzz = 8.0 * (omega - 2.0) * (omega + OxxPyyPzz * (3.0 * omega - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * omega + 9.0 * omega * omega) - 8.0 * omega); - real Oxyz = 24.0 * (omega - 2.0) * (4.0 * omega * omega + omega * OxxPyyPzz * (18.0 - 13.0 * omega) + OxxPyyPzz * OxxPyyPzz * (2.0 + omega * (6.0 * omega - 11.0))) / (16.0 * omega * omega * (omega - 6.0) - 2.0 * omega * OxxPyyPzz * (216.0 + 5.0 * omega * (9.0 * omega - 46.0)) + OxxPyyPzz * OxxPyyPzz * (omega * (3.0 * omega - 10.0) * (15.0 * omega - 28.0) - 48.0)); - - real A_ = (4.0 * omega * omega + 2.0 * omega * OxxPyyPzz * (omega - 6.0) + OxxPyyPzz * OxxPyyPzz * (omega * (10.0 - 3.0 * omega) - 4.0)) / ((omega - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * omega) - 8.0 * omega)); - real B_ = (4.0 * omega * OxxPyyPzz * (9.0 * omega - 16.0) - 4.0 * omega * omega - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * omega * (omega - 2.0))) / (3.0 * (omega - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * omega) - 8.0 * omega)); - - - //relax - - //wadjust = OxxPyyPzz+(one-OxxPyyPzz)*fabs((mfaaa-mxxPyyPzz))/(fabs((mfaaa-mxxPyyPzz))+qudricLimitD); - //mxxPyyPzz += wadjust*(mfaaa-mxxPyyPzz)-three * (one-c1o2 * OxxPyyPzz) * (vx2 * dxux+vy2 * dyuy+vz2 * dzuz); - mxxPyyPzz += OxxPyyPzz * (mfaaa - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - - // mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz)-three * (one-c1o2 * OxxPyyPzz) * (vx2 * dxux+vy2 * dyuy+vz2 * dzuz);//-magicBulk*OxxPyyPzz; - //mxxMyy += omega * (-mxxMyy)-three * (one+c1o2 * (-omega)) * (vx2 * dxux-vy2 * dyuy); - //mxxMzz += omega * (-mxxMzz)-three * (one+c1o2 * (-omega)) * (vx2 * dxux-vz2 * dzuz); - - ////////////////////////////////////////////////////////////////////////// - //limiter-Scheise Teil 2 - //mxxMyy += oxxyy * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vy2 * dyuy); - //mxxMzz += oxxzz * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vz2 * dzuz); - ////////////////////////////////////////////////////////////////////////// - - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////no correction - //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz);//-magicBulk*OxxPyyPzz; - //mxxMyy += -(-omega) * (-mxxMyy); - //mxxMzz += -(-omega) * (-mxxMzz); - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //mfabb += omega * (-mfabb); - //mfbab += omega * (-mfbab); - //mfbba += omega * (-mfbba); - - ////////////////////////////////////////////////////////////////////////// - //limiter-Scheise Teil 3 - //mfabb += oyz * (-mfabb); - //mfbab += oxz * (-mfbab); - //mfbba += oxy * (-mfbba); - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcaa = c1o3 * (mxxMyy+mxxMzz+mxxPyyPzz); - mfaca = c1o3 * (-c2o1 * mxxMyy+mxxMzz+mxxPyyPzz); - mfaac = c1o3 * (mxxMyy- c2o1 * mxxMzz+mxxPyyPzz); - - //3. - // linear combinations - - real mxxyPyzz = mfcba+mfabc; - real mxxyMyzz = mfcba-mfabc; - - real mxxzPyyz = mfcab+mfacb; - real mxxzMyyz = mfcab-mfacb; - - real mxyyPxzz = mfbca+mfbac; - real mxyyMxzz = mfbca-mfbac; - - //relax - ////////////////////////////////////////////////////////////////////////// - //das ist der limiter - wadjust = Oxyz+(c1o1-Oxyz)*fabs(mfbbb)/(fabs(mfbbb)+qudricLimitD); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*fabs(mxxyPyzz)/(fabs(mxxyPyzz)+qudricLimitP); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*fabs(mxxyMyzz)/(fabs(mxxyMyzz)+qudricLimitM); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*fabs(mxxzPyyz)/(fabs(mxxzPyyz)+qudricLimitP); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*fabs(mxxzMyyz)/(fabs(mxxzMyyz)+qudricLimitM); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*fabs(mxyyPxzz)/(fabs(mxyyPxzz)+qudricLimitP); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*fabs(mxyyMxzz)/(fabs(mxyyMxzz)+qudricLimitM); - mxyyMxzz += wadjust * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - //mfbbb += OxyyMxzz * (-mfbbb); - //mxxyPyzz += OxyyPxzz * (-mxxyPyzz); - //mxxyMyzz += OxyyMxzz * (-mxxyMyzz); - //mxxzPyyz += OxyyPxzz * (-mxxzPyyz); - //mxxzMyyz += OxyyMxzz * (-mxxzMyyz); - //mxyyPxzz += OxyyPxzz * (-mxyyPxzz); - //mxyyMxzz += OxyyMxzz * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - - //// linear combinations back - mfcba = (mxxyMyzz+mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz+mxxyPyzz) * c1o2; - mfcab = (mxxzMyyz+mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz+mxxzPyyz) * c1o2; - mfbca = (mxyyMxzz+mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz+mxyyPxzz) * c1o2; - - //4. - ////////////////////////////////////////////////////////////////////////// - //mit limiter - // wadjust = O4+(one-O4)*fabs(CUMacc)/(fabs(CUMacc)+qudricLimit); - //CUMacc += wadjust * (-CUMacc); - // wadjust = O4+(one-O4)*fabs(CUMcac)/(fabs(CUMcac)+qudricLimit); - //CUMcac += wadjust * (-CUMcac); - // wadjust = O4+(one-O4)*fabs(CUMcca)/(fabs(CUMcca)+qudricLimit); - //CUMcca += wadjust * (-CUMcca); - - // wadjust = O4+(one-O4)*fabs(CUMbbc)/(fabs(CUMbbc)+qudricLimit); - //CUMbbc += wadjust * (-CUMbbc); - // wadjust = O4+(one-O4)*fabs(CUMbcb)/(fabs(CUMbcb)+qudricLimit); - //CUMbcb += wadjust * (-CUMbcb); - // wadjust = O4+(one-O4)*fabs(CUMcbb)/(fabs(CUMcbb)+qudricLimit); - //CUMcbb += wadjust * (-CUMcbb); - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - - - //ohne limiter - //CUMacc += O4 * (-CUMacc); - //CUMcac += O4 * (-CUMcac); - //CUMcca += O4 * (-CUMcca); - - //CUMbbc += O4 * (-CUMbbc); - //CUMbcb += O4 * (-CUMbcb); - //CUMcbb += O4 * (-CUMcbb); - CUMacc = -O4*(c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * A_ + (c1o1 - O4) * (CUMacc); - CUMcac = -O4*(c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * A_ + (c1o1 - O4) * (CUMcac); - CUMcca = -O4*(c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * A_ + (c1o1 - O4) * (CUMcca); - CUMbbc = -O4*(c1o1 / omega - c1o2) * Dxy * c1o3 * B_ + (c1o1 - O4) * (CUMbbc); - CUMbcb = -O4*(c1o1 / omega - c1o2) * Dxz * c1o3 * B_ + (c1o1 - O4) * (CUMbcb); - CUMcbb = -O4*(c1o1 / omega - c1o2) * Dyz * c1o3 * B_ + (c1o1 - O4) * (CUMcbb); - ////////////////////////////////////////////////////////////////////////// - - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - - - //back cumulants to central moments - //4. - mfcbb = CUMcbb+((mfcaa+c1o3) * mfabb+ c2o1 * mfbba * mfbab)/rho; - mfbcb = CUMbcb+((mfaca+c1o3) * mfbab+ c2o1 * mfbba * mfabb)/rho; - mfbbc = CUMbbc+((mfaac+c1o3) * mfbba+ c2o1 * mfbab * mfabb)/rho; - - mfcca = CUMcca+(((mfcaa * mfaca+ c2o1 * mfbba * mfbba)+c1o3 * (mfcaa+mfaca))/rho-c1o9*(drho/rho));//(one/rho-one)); - mfcac = CUMcac+(((mfcaa * mfaac+ c2o1 * mfbab * mfbab)+c1o3 * (mfcaa+mfaac))/rho-c1o9*(drho/rho));//(one/rho-one)); - mfacc = CUMacc+(((mfaac * mfaca+ c2o1 * mfabb * mfabb)+c1o3 * (mfaac+mfaca))/rho-c1o9*(drho/rho));//(one/rho-one)); - - //5. - mfbcc = CUMbcc+((mfaac * mfbca+mfaca * mfbac+ c4o1 * mfabb * mfbbb+ c2o1 * (mfbab * mfacb+mfbba * mfabc))+c1o3 * (mfbca+mfbac))/rho; - mfcbc = CUMcbc+((mfaac * mfcba+mfcaa * mfabc+ c4o1 * mfbab * mfbbb+ c2o1 * (mfabb * mfcab+mfbba * mfbac))+c1o3 * (mfcba+mfabc))/rho; - mfccb = CUMccb+((mfcaa * mfacb+mfaca * mfcab+ c4o1 * mfbba * mfbbb+ c2o1 * (mfbab * mfbca+mfabb * mfcba))+c1o3 * (mfacb+mfcab))/rho; - - //6. - - mfccc = CUMccc-((-c4o1 * mfbbb * mfbbb - -(mfcaa * mfacc+mfaca * mfcac+mfaac * mfcca) - - c4o1 * (mfabb * mfcbb+mfbab * mfbcb+mfbba * mfbbc) - - c2o1 * (mfbca * mfbac+mfcba * mfabc+mfcab * mfacb))/rho - +(c4o1 * (mfbab * mfbab * mfaca+mfabb * mfabb * mfcaa+mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb)/(rho * rho) - -c1o3 * (mfacc+mfcac+mfcca)/rho - -c1o9 * (mfcaa+mfaca+mfaac)/rho - +(c2o1 * (mfbab * mfbab+mfabb * mfabb+mfbba * mfbba) - +(mfaac * mfaca+mfaac * mfcaa+mfaca * mfcaa)+c1o3 *(mfaac+mfaca+mfcaa))/(rho * rho) * c2o3 - +c1o27*((drho * drho-drho)/(rho*rho))); - //////////////////////////////////////////////////////////////////////////////////// - //forcing - mfbaa=-mfbaa; - mfaba=-mfaba; - mfaab=-mfaab; - ////////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2+mfaab * (vvz-c1o2)+(mfaaa+ c1o1 * oMdrho) * (vz2-vvz) * c1o2; - m1 = -mfaac- c2o1 * mfaab * vvz+mfaaa * (c1o1 -vz2)- c1o1 * oMdrho * vz2; - m2 = mfaac * c1o2+mfaab * (vvz+c1o2)+(mfaaa+ c1o1 * oMdrho) * (vz2+vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2+mfabb * (vvz-c1o2)+mfaba * (vz2-vvz) * c1o2; - m1 = -mfabc- c2o1 * mfabb * vvz+mfaba * (c1o1 -vz2); - m2 = mfabc * c1o2+mfabb * (vvz+c1o2)+mfaba * (vz2+vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2+mfacb * (vvz-c1o2)+(mfaca+c1o3 * oMdrho) * (vz2-vvz) * c1o2; - m1 = -mfacc- c2o1 * mfacb * vvz+mfaca * (c1o1 -vz2)-c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2+mfacb * (vvz+c1o2)+(mfaca+c1o3 * oMdrho) * (vz2+vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2+mfbab * (vvz-c1o2)+mfbaa * (vz2-vvz) * c1o2; - m1 = -mfbac- c2o1 * mfbab * vvz+mfbaa * (c1o1 -vz2); - m2 = mfbac * c1o2+mfbab * (vvz+c1o2)+mfbaa * (vz2+vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2+mfbbb * (vvz-c1o2)+mfbba * (vz2-vvz) * c1o2; - m1 = -mfbbc- c2o1 * mfbbb * vvz+mfbba * (c1o1 -vz2); - m2 = mfbbc * c1o2+mfbbb * (vvz+c1o2)+mfbba * (vz2+vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2+mfbcb * (vvz-c1o2)+mfbca * (vz2-vvz) * c1o2; - m1 = -mfbcc- c2o1 * mfbcb * vvz+mfbca * (c1o1 -vz2); - m2 = mfbcc * c1o2+mfbcb * (vvz+c1o2)+mfbca * (vz2+vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2+mfcab * (vvz-c1o2)+(mfcaa+c1o3 * oMdrho) * (vz2-vvz) * c1o2; - m1 = -mfcac- c2o1 * mfcab * vvz+mfcaa * (c1o1 -vz2)-c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2+mfcab * (vvz+c1o2)+(mfcaa+c1o3 * oMdrho) * (vz2+vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2+mfcbb * (vvz-c1o2)+mfcba * (vz2-vvz) * c1o2; - m1 = -mfcbc- c2o1 * mfcbb * vvz+mfcba * (c1o1 -vz2); - m2 = mfcbc * c1o2+mfcbb * (vvz+c1o2)+mfcba * (vz2+vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2+mfccb * (vvz-c1o2)+(mfcca+c1o9 * oMdrho) * (vz2-vvz) * c1o2; - m1 = -mfccc- c2o1 * mfccb * vvz+mfcca * (c1o1 -vz2)-c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2+mfccb * (vvz+c1o2)+(mfcca+c1o9 * oMdrho) * (vz2+vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2+mfaba * (vvy-c1o2)+(mfaaa+c1o6 * oMdrho) * (vy2-vvy) * c1o2; - m1 = -mfaca- c2o1 * mfaba * vvy+mfaaa * (c1o1 -vy2)-c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2+mfaba * (vvy+c1o2)+(mfaaa+c1o6 * oMdrho) * (vy2+vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2+mfabb * (vvy-c1o2)+(mfaab+c2o3 * oMdrho) * (vy2-vvy) * c1o2; - m1 = -mfacb- c2o1 * mfabb * vvy+mfaab * (c1o1 -vy2)-c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2+mfabb * (vvy+c1o2)+(mfaab+c2o3 * oMdrho) * (vy2+vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2+mfabc * (vvy-c1o2)+(mfaac+c1o6 * oMdrho) * (vy2-vvy) * c1o2; - m1 = -mfacc- c2o1 * mfabc * vvy+mfaac * (c1o1 -vy2)-c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2+mfabc * (vvy+c1o2)+(mfaac+c1o6 * oMdrho) * (vy2+vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2+mfbba * (vvy-c1o2)+mfbaa * (vy2-vvy) * c1o2; - m1 = -mfbca- c2o1 * mfbba * vvy+mfbaa * (c1o1 -vy2); - m2 = mfbca * c1o2+mfbba * (vvy+c1o2)+mfbaa * (vy2+vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2+mfbbb * (vvy-c1o2)+mfbab * (vy2-vvy) * c1o2; - m1 = -mfbcb- c2o1 * mfbbb * vvy+mfbab * (c1o1 -vy2); - m2 = mfbcb * c1o2+mfbbb * (vvy+c1o2)+mfbab * (vy2+vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2+mfbbc * (vvy-c1o2)+mfbac * (vy2-vvy) * c1o2; - m1 = -mfbcc- c2o1 * mfbbc * vvy+mfbac * (c1o1 -vy2); - m2 = mfbcc * c1o2+mfbbc * (vvy+c1o2)+mfbac * (vy2+vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2+mfcba * (vvy-c1o2)+(mfcaa+c1o18 * oMdrho) * (vy2-vvy) * c1o2; - m1 = -mfcca- c2o1 * mfcba * vvy+mfcaa * (c1o1 -vy2)-c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2+mfcba * (vvy+c1o2)+(mfcaa+c1o18 * oMdrho) * (vy2+vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2+mfcbb * (vvy-c1o2)+(mfcab+c2o9 * oMdrho) * (vy2-vvy) * c1o2; - m1 = -mfccb- c2o1 * mfcbb * vvy+mfcab * (c1o1 -vy2)-c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2+mfcbb * (vvy+c1o2)+(mfcab+c2o9 * oMdrho) * (vy2+vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2+mfcbc * (vvy-c1o2)+(mfcac+c1o18 * oMdrho) * (vy2-vvy) * c1o2; - m1 = -mfccc- c2o1 * mfcbc * vvy+mfcac * (c1o1 -vy2)-c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2+mfcbc * (vvy+c1o2)+(mfcac+c1o18 * oMdrho) * (vy2+vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2+mfbaa * (vvx-c1o2)+(mfaaa+c1o36 * oMdrho) * (vx2-vvx) * c1o2; - m1 = -mfcaa- c2o1 * mfbaa * vvx+mfaaa * (c1o1 -vx2)-c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2+mfbaa * (vvx+c1o2)+(mfaaa+c1o36 * oMdrho) * (vx2+vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2+mfbba * (vvx-c1o2)+(mfaba+c1o9 * oMdrho) * (vx2-vvx) * c1o2; - m1 = -mfcba- c2o1 * mfbba * vvx+mfaba * (c1o1 -vx2)-c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2+mfbba * (vvx+c1o2)+(mfaba+c1o9 * oMdrho) * (vx2+vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2+mfbca * (vvx-c1o2)+(mfaca+c1o36 * oMdrho) * (vx2-vvx) * c1o2; - m1 = -mfcca- c2o1 * mfbca * vvx+mfaca * (c1o1 -vx2)-c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2+mfbca * (vvx+c1o2)+(mfaca+c1o36 * oMdrho) * (vx2+vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2+mfbab * (vvx-c1o2)+(mfaab+c1o9 * oMdrho) * (vx2-vvx) * c1o2; - m1 = -mfcab- c2o1 * mfbab * vvx+mfaab * (c1o1 -vx2)-c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2+mfbab * (vvx+c1o2)+(mfaab+c1o9 * oMdrho) * (vx2+vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2+mfbbb * (vvx-c1o2)+(mfabb+c4o9 * oMdrho) * (vx2-vvx) * c1o2; - m1 = -mfcbb- c2o1 * mfbbb * vvx+mfabb * (c1o1 -vx2)-c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2+mfbbb * (vvx+c1o2)+(mfabb+c4o9 * oMdrho) * (vx2+vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2+mfbcb * (vvx-c1o2)+(mfacb+c1o9 * oMdrho) * (vx2-vvx) * c1o2; - m1 = -mfccb- c2o1 * mfbcb * vvx+mfacb * (c1o1 -vx2)-c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2+mfbcb * (vvx+c1o2)+(mfacb+c1o9 * oMdrho) * (vx2+vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2+mfbac * (vvx-c1o2)+(mfaac+c1o36 * oMdrho) * (vx2-vvx) * c1o2; - m1 = -mfcac- c2o1 * mfbac * vvx+mfaac * (c1o1 -vx2)-c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2+mfbac * (vvx+c1o2)+(mfaac+c1o36 * oMdrho) * (vx2+vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2+mfbbc * (vvx-c1o2)+(mfabc+c1o9 * oMdrho) * (vx2-vvx) * c1o2; - m1 = -mfcbc- c2o1 * mfbbc * vvx+mfabc * (c1o1 -vx2)-c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2+mfbbc * (vvx+c1o2)+(mfabc+c1o9 * oMdrho) * (vx2+vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2+mfbcc * (vvx-c1o2)+(mfacc+c1o36 * oMdrho) * (vx2-vvx) * c1o2; - m1 = -mfccc- c2o1 * mfbcc * vvx+mfacc * (c1o1 -vx2)-c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2+mfbcc * (vvx+c1o2)+(mfacc+c1o36 * oMdrho) * (vx2+vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - //proof correctness - ////////////////////////////////////////////////////////////////////////// -#ifdef PROOF_CORRECTNESS - real drho_post = (mfaaa+mfaac+mfaca+mfcaa+mfacc+mfcac+mfccc+mfcca) - +(mfaab+mfacb+mfcab+mfccb)+(mfaba+mfabc+mfcba+mfcbc)+(mfbaa+mfbac+mfbca+mfbcc) - +(mfabb+mfcbb)+(mfbab+mfbcb)+(mfbba+mfbbc)+mfbbb; - //LBMReal dif = fabs(rho - rho_post); - real dif = drho - drho_post; -#ifdef SINGLEPRECISION - if (dif > 10.0E-7 || dif < -10.0E-7) -#else - if (dif > 10.0E-15 || dif < -10.0E-15) -#endif - { - UB_THROW(UbException(UB_EXARGS, "rho="+UbSystem::toString(drho)+", rho_post="+UbSystem::toString(drho_post) - +" dif="+UbSystem::toString(dif) - +" rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3) - +" in " + block.lock()->toString()+" step = "+UbSystem::toString(step))); - } -#endif - ////////////////////////////////////////////////////////////////////////// - //write distribution - ////////////////////////////////////////////////////////////////////////// - (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = mfabb; - (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = mfbab; - (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = mfbba; - (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = mfaab; - (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3) = mfcab; - (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = mfaba; - (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3) = mfcba; - (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = mfbaa; - (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3) = mfbca; - (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = mfaaa; - (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3) = mfcaa; - (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3) = mfaca; - (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfcca; - - (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3) = mfcbb; - (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3) = mfbcb; - (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p) = mfbbc; - (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3) = mfccb; - (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3) = mfacb; - (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p) = mfcbc; - (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p) = mfabc; - (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbcc; - (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p) = mfbac; - (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfccc; - (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfacc; - (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfcac; - (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p) = mfaac; - - (*this->zeroDistributions)(x1, x2, x3) = mfbbb; - ////////////////////////////////////////////////////////////////////////// - - } - } - } - } - //timer.stop(); -} -////////////////////////////////////////////////////////////////////////// -real RheologyK17LBMKernel::getCalculationTime() -{ - //return timer.getDuration(); - return timer.getTotalTime(); -} -////////////////////////////////////////////////////////////////////////// -void RheologyK17LBMKernel::setBulkViscosity(real value) -{ - bulkViscosity = value; -} - -////////////////////////////////////////////////////////////////////////// -//void RheologyK17LBMKernel::setBulkOmegaToOmega(bool value) -//{ -// bulkOmegaToOmega = value; -//} - -//void RheologyK17LBMKernel::setViscosityFlag(bool vf) -//{ -// viscosityFlag = vf; -//} diff --git a/src/cpu/NonNewtonianFluids/LBM/RheologyK17LBMKernel.h b/src/cpu/NonNewtonianFluids/LBM/RheologyK17LBMKernel.h deleted file mode 100644 index 1244bb031c1dffda3ea369739a5e9436238e1e0a..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/LBM/RheologyK17LBMKernel.h +++ /dev/null @@ -1,90 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file RheologyK17LBMKernel.h -//! \ingroup LBM -//! \author Konstantin Kutscher -//======================================================================================= - -#ifndef RheologyK17LBMKernel_h__ -#define RheologyK17LBMKernel_h__ - -#include "LBMKernel.h" -#include "BCSet.h" -#include "D3Q27System.h" -#include "basics/utilities/UbTiming.h" -#include "basics/container/CbArray4D.h" -#include "basics/container/CbArray3D.h" - -//! \brief compressible cumulant LBM kernel with rheological properties of shear and bulk viscosity for non-Newtonian fluids. -//! \details CFD solver that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model -//! \author K. Kutscher, M. Geier -class RheologyK17LBMKernel : public LBMKernel -{ -public: - //! This option set relaxation parameter: NORMAL - enum Parameter{NORMAL, MAGIC}; -public: - RheologyK17LBMKernel(); - virtual ~RheologyK17LBMKernel(void); - virtual void calculate(int step) override; - virtual SPtr<LBMKernel> clone() override; - real getCalculationTime() override; - //! The value should not be equal to a shear viscosity - void setBulkViscosity(real value); -protected: - virtual void initDataSet(); - - virtual real getRheologyCollFactor(real omegaInf, real shearRate, real drho) const - { - UB_THROW(UbException("real getRheologyCollFactor() - belongs in the derived class")); - } - - real f[D3Q27System::ENDF+1]; - - UbTimer timer; - - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr localDistributions; - CbArray4D<real,IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions; - CbArray3D<real,IndexerX3X2X1>::CbArray3DPtr zeroDistributions; - - mu::value_type muX1,muX2,muX3; - mu::value_type muDeltaT; - mu::value_type muNu; - real forcingX1; - real forcingX2; - real forcingX3; - - // bulk viscosity - real OxxPyyPzz; //omega2 (bulk viscosity) - real bulkViscosity; - -}; -#endif // RheologyK17LBMKernel_h__ - - diff --git a/src/cpu/NonNewtonianFluids/LBM/RheologyModelLBMKernel.cpp b/src/cpu/NonNewtonianFluids/LBM/RheologyModelLBMKernel.cpp deleted file mode 100644 index 7f1c8c884d4cf3b4a174f7d2c58e2f070c459b6b..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/LBM/RheologyModelLBMKernel.cpp +++ /dev/null @@ -1,931 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file RheologyModelLBMKernel.cpp -//! \ingroup LBM -//! \author Konstantin Kutscher -//======================================================================================= - -#include "RheologyModelLBMKernel.h" -#include "D3Q27System.h" -#include "BCArray3D.h" -#include "D3Q27EsoTwist3DSplittedVector.h" -#include <math.h> -#include "DataSet3D.h" -#include "LBMKernel.h" - -#define PROOF_CORRECTNESS - -//using namespace UbMath; -using namespace vf::basics::constant; - -RheologyModelLBMKernel::RheologyModelLBMKernel() : forcingX1(0), forcingX2(0), forcingX3(0) -{ - compressible = false; - OxyyMxzz = 1.0; -} - -RheologyModelLBMKernel::~RheologyModelLBMKernel() -{ -} - -void RheologyModelLBMKernel::calculate(int step) -{ - 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); - } - ///////////////////////////////////// - - localDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); - nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); - zeroDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - const int bcArrayMaxX1 = (int)bcArray->getNX1(); - const int bcArrayMaxX2 = (int)bcArray->getNX2(); - const int bcArrayMaxX3 = (int)bcArray->getNX3(); - - int minX1 = ghostLayerWidth; - int minX2 = ghostLayerWidth; - int minX3 = ghostLayerWidth; - int maxX1 = bcArrayMaxX1 - ghostLayerWidth; - int maxX2 = bcArrayMaxX2 - ghostLayerWidth; - int maxX3 = bcArrayMaxX3 - ghostLayerWidth; - - - { - for (int x3 = minX3; x3 < maxX3; x3++) - { - for (int x2 = minX2; x2 < maxX2; x2++) - { - for (int x1 = minX1; x1 < maxX1; x1++) - { - if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) - { - int x1p = x1 + 1; - int x2p = x2 + 1; - int x3p = x3 + 1; - ////////////////////////////////////////////////////////////////////////// - //read distribution - // Cumulant (NSE part) - //////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - - //E N T - //c c c - ////////// - //W S B - //a a a - - //Rest ist b - - //mfxyz - //a - negative - //b - null - //c - positive - - // a b c - //-1 0 1 - - real mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3); - - real mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p); - - real mfbbb = (*this->zeroDistributionsF)(x1, x2, x3); - - real m0, m1, m2; - - real rho = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) - + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) - + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)); - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)); - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)); - - real collFactorF = collFactor; - - //forcing - /////////////////////////////////////////////////////////////////////////////////////////// - if (withForcing) - { - muX1 = static_cast<real>(x1 - 1 + ix1 * maxX1); - muX2 = static_cast<real>(x2 - 1 + ix2 * maxX2); - muX3 = static_cast<real>(x3 - 1 + ix3 * maxX3); - - forcingX1 = muForcingX1.Eval(); - forcingX2 = muForcingX2.Eval(); - forcingX3 = muForcingX3.Eval(); - - vvx += forcingX1 * deltaT * 0.5; // X - vvy += forcingX2 * deltaT * 0.5; // Y - vvz += forcingX3 * deltaT * 0.5; // Z - } - /////////////////////////////////////////////////////////////////////////////////////////// - real oMdrho; - - oMdrho = mfccc + mfaaa; - m0 = mfaca + mfcac; - m1 = mfacc + mfcaa; - m2 = mfaac + mfcca; - oMdrho += m0; - m1 += m2; - oMdrho += m1; - m0 = mfbac + mfbca; - m1 = mfbaa + mfbcc; - m0 += m1; - m1 = mfabc + mfcba; - m2 = mfaba + mfcbc; - m1 += m2; - m0 += m1; - m1 = mfacb + mfcab; - m2 = mfaab + mfccb; - m1 += m2; - m0 += m1; - oMdrho += m0; - m0 = mfabb + mfcbb; - m1 = mfbab + mfbcb; - m2 = mfbba + mfbbc; - m0 += m1 + m2; - m0 += mfbbb; //hat gefehlt - oMdrho = 1. - (oMdrho + m0); - - real vx2; - real vy2; - real vz2; - vx2 = vvx * vvx; - vy2 = vvy * vvy; - vz2 = vvz * vvz; - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimit = 0.01; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += 1. * oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = 1.; //omega2 or bulk viscosity - real OxyyPxzz = 1.;//-s9;//2+s9;// - //LBMReal OxyyMxzz = 1.;//2+s9;// - real O4 = 1.; - real O5 = 1.; - real 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 - - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab); - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); - - real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho); - real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho); - real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho); - - //Cum 5. - real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho; - real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho; - real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho; - - //Cum 6. - real 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 - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - real dxux = -c1o2 * collFactorF * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + collFactorF * c3o2 * mxxMyy; - real dzuz = dxux + collFactorF * c3o2 * mxxMzz; - - real Dxy = -c3o1 * collFactorF * mfbba; - real Dxz = -c3o1 * collFactorF * mfbab; - real Dyz = -c3o1 * collFactorF * mfabb; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //non Newtonian fluid collision factor - real shearRate = sqrt(c2o1 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz) / (rho + c1o1); - collFactorF = getRheologyCollFactor(collFactorF, shearRate, rho); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - //relax - mxxPyyPzz += OxxPyyPzz * (mfaaa - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - mxxMyy += collFactorF * (-mxxMyy) - 3. * (1. - c1o2 * collFactorF) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += collFactorF * (-mxxMzz) - 3. * (1. - c1o2 * collFactorF) * (vx2 * dxux - vz2 * dzuz); - - mfabb += collFactorF * (-mfabb); - mfbab += collFactorF * (-mfbab); - mfbba += collFactorF * (-mfbba); - - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mfbbb) / (fabs(mfbbb) + qudricLimit); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxyMyzz) / (fabs(mxxyMyzz) + qudricLimit); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxxzPyyz) / (fabs(mxxzPyyz) + qudricLimit); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxxzMyyz) / (fabs(mxxzMyyz) + qudricLimit); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz + (1. - OxyyPxzz) * fabs(mxyyPxzz) / (fabs(mxyyPxzz) + qudricLimit); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz + (1. - OxyyMxzz) * fabs(mxyyMxzz) / (fabs(mxyyMxzz) + qudricLimit); - mxyyMxzz += wadjust * (-mxyyMxzz); - - // linear combinations back - mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - CUMacc += O4 * (-CUMacc); - CUMcac += O4 * (-CUMcac); - CUMcca += O4 * (-CUMcca); - - CUMbbc += O4 * (-CUMbbc); - CUMbcb += O4 * (-CUMbcb); - CUMcbb += O4 * (-CUMcbb); - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - //back cumulants to central moments - //4. - //mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015 - //mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015 - //mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015 - - mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab); - mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); - mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); - - mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho; - mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho; - mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho; - - //5. - mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho; - mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho; - mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho; - - //6. - mfccc = CUMccc - ((-4. * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) - - 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) - + (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + 2. * (mfcaa * mfaca * mfaac) - + 16. * mfbba * mfbab * mfabb) - - c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9 * oMdrho * oMdrho - - c1o9 * (mfcaa + mfaca + mfaac) * oMdrho * (1. - 2. * oMdrho) - c1o27 * oMdrho * oMdrho * (-2. * oMdrho) - + (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 * oMdrho) - c1o27 * oMdrho; - - //////////////////////////////////////////////////////////////////////////////////// - //forcing - mfbaa = -mfbaa; - mfaba = -mfaba; - mfaab = -mfaab; - ////////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + 1. * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - 2. * mfaab * vvz + mfaaa * (1. - vz2) - 1. * oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + 1. * oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - 2. * mfabb * vvz + mfaba * (1. - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - 2. * mfacb * vvz + mfaca * (1. - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - 2. * mfbab * vvz + mfbaa * (1. - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - 2. * mfbbb * vvz + mfbba * (1. - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - 2. * mfbcb * vvz + mfbca * (1. - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - 2. * mfcab * vvz + mfcaa * (1. - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - 2. * mfcbb * vvz + mfcba * (1. - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - 2. * mfccb * vvz + mfcca * (1. - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - 2. * mfaba * vvy + mfaaa * (1. - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - 2. * mfabb * vvy + mfaab * (1. - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - 2. * mfabc * vvy + mfaac * (1. - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - 2. * mfbba * vvy + mfbaa * (1. - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - 2. * mfbbb * vvy + mfbab * (1. - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - 2. * mfbbc * vvy + mfbac * (1. - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - 2. * mfcba * vvy + mfcaa * (1. - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - 2. * mfcbb * vvy + mfcab * (1. - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - 2. * mfcbc * vvy + mfcac * (1. - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - 2. * mfbaa * vvx + mfaaa * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - 2. * mfbba * vvx + mfaba * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - 2. * mfbca * vvx + mfaca * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - 2. * mfbab * vvx + mfaab * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - 2. * mfbbb * vvx + mfabb * (1. - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - 2. * mfbcb * vvx + mfacb * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - 2. * mfbac * vvx + mfaac * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - 2. * mfbbc * vvx + mfabc * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - 2. * mfbcc * vvx + mfacc * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - - ////////////////////////////////////////////////////////////////////////// - //proof correctness - ////////////////////////////////////////////////////////////////////////// -#ifdef PROOF_CORRECTNESS - real rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) - + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) - + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - //LBMReal dif = fabs(rho - rho_post); - real dif = rho - rho_post; -#ifdef SINGLEPRECISION - if (dif > 10.0E-7 || dif < -10.0E-7) -#else - if (dif > 10.0E-15 || dif < -10.0E-15) -#endif - { - UB_THROW(UbException(UB_EXARGS, "rho=" + UbSystem::toString(rho) + ", rho_post=" + UbSystem::toString(rho_post) - + " dif=" + UbSystem::toString(dif) - + " rho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3))); - //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 - ////////////////////////////////////////////////////////////////////////// - (*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; - } - } - } - } - - } -} - -//SPtr<LBMKernel> RheologyModelLBMKernel::clone() -//{ -// SPtr<LBMKernel> kernel(new RheologyModelLBMKernel()); -// kernel->setNX(nx); -// kernel->setCollisionFactor(collFactor); -// collFactorF = collFactor; -// dynamicPointerCast<RheologyModelLBMKernel>(kernel)->initDataSet(); -// kernel->setBCSet(bcSet->clone(kernel)); -// kernel->setWithForcing(withForcing); -// kernel->setForcingX1(muForcingX1); -// kernel->setForcingX2(muForcingX2); -// kernel->setForcingX3(muForcingX3); -// kernel->setIndex(ix1, ix2, ix3); -// kernel->setDeltaT(deltaT); -// -// return kernel; -//} - -real RheologyModelLBMKernel::getCalculationTime() -{ - return timer.getTotalTime(); -} - -void RheologyModelLBMKernel::swapDistributions() -{ - LBMKernel::swapDistributions(); -} - -void RheologyModelLBMKernel::initDataSet() -{ - SPtr<DistributionArray3D> df(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.0)); - dataSet->setFdistributions(df); -} diff --git a/src/cpu/NonNewtonianFluids/LBM/RheologyModelLBMKernel.h b/src/cpu/NonNewtonianFluids/LBM/RheologyModelLBMKernel.h deleted file mode 100644 index 4ff3bb9f7b679c4f97b2a685b2d1bbe64912d892..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/LBM/RheologyModelLBMKernel.h +++ /dev/null @@ -1,83 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file RheologyModelLBMKernel.h -//! \ingroup LBM -//! \author Konstantin Kutscher -//======================================================================================= -#ifndef RheologyModelLBMKernel_H -#define RheologyModelLBMKernel_H - -#include "LBMKernel.h" -#include "BCSet.h" -#include "D3Q27System.h" -#include "basics/utilities/UbTiming.h" -#include "basics/container/CbArray4D.h" -#include "basics/container/CbArray3D.h" - -class RheologyModelLBMKernel; - -//! \brief Base class for model of thixotropy based on K16. Use Template Method design pattern for Implementation of different models. -//! \author K. Kutscher, M. Geier -class RheologyModelLBMKernel : public LBMKernel -{ -public: - RheologyModelLBMKernel(); - virtual ~RheologyModelLBMKernel(); - void calculate(int step); - virtual SPtr<LBMKernel> clone() { UB_THROW(UbException("SPtr<LBMKernel> clone() - belongs in the derived class")); }; - real getCalculationTime(); - - void swapDistributions(); - -protected: - void initDataSet(); - - virtual real getRheologyCollFactor(real omegaInf, real shearRate, real drho) const { UB_THROW(UbException("real getRheologyCollFactor() - belongs in the derived class")); } - - real f[D3Q27System::ENDF + 1]; - - UbTimer timer; - - real OxyyMxzz; - - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF; - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributionsF; - - mu::value_type muX1, muX2, muX3; - mu::value_type muDeltaT; - mu::value_type muNu; - real forcingX1; - real forcingX2; - real forcingX3; - - bool test; -}; - -#endif diff --git a/src/cpu/NonNewtonianFluids/LBM/RheologyModelLBMKernel2.cpp b/src/cpu/NonNewtonianFluids/LBM/RheologyModelLBMKernel2.cpp deleted file mode 100644 index 380bb9861343803b3ec2165af96c684ac4722c47..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/LBM/RheologyModelLBMKernel2.cpp +++ /dev/null @@ -1,930 +0,0 @@ -#include "RheologyModelLBMKernel2.h" -#include "D3Q27System.h" -#include "BCArray3D.h" -#include "D3Q27EsoTwist3DSplittedVector.h" -#include <math.h> -#include "DataSet3D.h" -#include "LBMKernel.h" -#include "Rheology.h" -#include "UbMath.h" - -#define PROOF_CORRECTNESS - -using namespace UbMath; -using namespace vf::basics::constant; - - -RheologyModelLBMKernel2::RheologyModelLBMKernel2() : forcingX1(0), forcingX2(0), forcingX3(0) -{ - compressible = false; - OxyyMxzz = 1.0; -} - -RheologyModelLBMKernel2::~RheologyModelLBMKernel2() -{ -} - -void RheologyModelLBMKernel2::calculate(int step) -{ - 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); - } - ///////////////////////////////////// - - localDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); - nonLocalDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); - zeroDistributionsF = dynamicPointerCast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - const int bcArrayMaxX1 = (int)bcArray->getNX1(); - const int bcArrayMaxX2 = (int)bcArray->getNX2(); - const int bcArrayMaxX3 = (int)bcArray->getNX3(); - - int minX1 = ghostLayerWidth; - int minX2 = ghostLayerWidth; - int minX3 = ghostLayerWidth; - int maxX1 = bcArrayMaxX1 - ghostLayerWidth; - int maxX2 = bcArrayMaxX2 - ghostLayerWidth; - int maxX3 = bcArrayMaxX3 - ghostLayerWidth; - - - { - for (int x3 = minX3; x3 < maxX3; x3++) - { - for (int x2 = minX2; x2 < maxX2; x2++) - { - for (int x1 = minX1; x1 < maxX1; x1++) - { - if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) - { - int x1p = x1 + 1; - int x2p = x2 + 1; - int x3p = x3 + 1; - ////////////////////////////////////////////////////////////////////////// - //read distribution - // Cumulant (NSE part) - //////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - - //E N T - //c c c - ////////// - //W S B - //a a a - - //Rest ist b - - //mfxyz - //a - negative - //b - null - //c - positive - - // a b c - //-1 0 1 - - real mfcbb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3); - - real mfabb = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p); - - real mfbbb = (*this->zeroDistributionsF)(x1, x2, x3); - - real m0, m1, m2; - - real rho = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) - + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) - + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)); - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)); - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)); - - real collFactorF = collFactor; - - //forcing - /////////////////////////////////////////////////////////////////////////////////////////// - if (withForcing) - { - muX1 = static_cast<real>(x1 - 1 + ix1 * maxX1); - muX2 = static_cast<real>(x2 - 1 + ix2 * maxX2); - muX3 = static_cast<real>(x3 - 1 + ix3 * maxX3); - - forcingX1 = muForcingX1.Eval(); - forcingX2 = muForcingX2.Eval(); - forcingX3 = muForcingX3.Eval(); - - vvx += forcingX1 * deltaT * 0.5; // X - vvy += forcingX2 * deltaT * 0.5; // Y - vvz += forcingX3 * deltaT * 0.5; // Z - } - /////////////////////////////////////////////////////////////////////////////////////////// - real oMdrho; - - oMdrho = mfccc + mfaaa; - m0 = mfaca + mfcac; - m1 = mfacc + mfcaa; - m2 = mfaac + mfcca; - oMdrho += m0; - m1 += m2; - oMdrho += m1; - m0 = mfbac + mfbca; - m1 = mfbaa + mfbcc; - m0 += m1; - m1 = mfabc + mfcba; - m2 = mfaba + mfcbc; - m1 += m2; - m0 += m1; - m1 = mfacb + mfcab; - m2 = mfaab + mfccb; - m1 += m2; - m0 += m1; - oMdrho += m0; - m0 = mfabb + mfcbb; - m1 = mfbab + mfbcb; - m2 = mfbba + mfbbc; - m0 += m1 + m2; - m0 += mfbbb; //hat gefehlt - oMdrho = 1. - (oMdrho + m0); - - real vx2; - real vy2; - real vz2; - vx2 = vvx * vvx; - vy2 = vvy * vvy; - vz2 = vvz * vvz; - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimit = 0.01; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += 1. * oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += vf::basics::constant::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 += vf::basics::constant::c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = 1.; //omega2 or bulk viscosity - real OxyyPxzz = 1.;//-s9;//2+s9;// - //real OxyyMxzz = 1.;//2+s9;// - real O4 = 1.; - real O5 = 1.; - real 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 - - real CUMcbb = mfcbb - ((mfcaa + vf::basics::constant::c1o3) * mfabb + 2. * mfbba * mfbab); - real CUMbcb = mfbcb - ((mfaca + vf::basics::constant::c1o3) * mfbab + 2. * mfbba * mfabb); - real CUMbbc = mfbbc - ((mfaac + vf::basics::constant::c1o3) * mfbba + 2. * mfbab * mfabb); - - real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + vf::basics::constant::c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho); - real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + vf::basics::constant::c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho); - real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + vf::basics::constant::c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho); - - //Cum 5. - real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - vf::basics::constant::c1o3 * (mfbca + mfbac) * oMdrho; - real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - vf::basics::constant::c1o3 * (mfcba + mfabc) * oMdrho; - real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - vf::basics::constant::c1o3 * (mfacb + mfcab) * oMdrho; - - //Cum 6. - real 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) - - vf::basics::constant::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 - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - real dxux = -c1o2 * collFactorF * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + collFactorF * c3o2 * mxxMyy; - real dzuz = dxux + collFactorF * c3o2 * mxxMzz; - -// LBMReal Dxy = -three * collFactorF * mfbba; -// LBMReal Dxz = -three * collFactorF * mfbab; -// LBMReal Dyz = -three * collFactorF * mfabb; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //non Newtonian fluid collision factor -// LBMReal shearRate = sqrt(c2 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz) / (rho + one); - - real shearFactor = sqrt(c1o2 * ((mfcaa - mfaaa * vf::basics::constant::c1o3) * (mfcaa - mfaaa * vf::basics::constant::c1o3) + (mfaca - mfaaa * vf::basics::constant::c1o3) * (mfaca - mfaaa * vf::basics::constant::c1o3) + (mfaac - mfaaa * vf::basics::constant::c1o3) * (mfaac - mfaaa * vf::basics::constant::c1o3)) + mfbba * mfbba + mfbab * mfbab + mfabb * mfabb) + UbMath::Epsilon<real>::val(); - - //collFactorF = getRheologyCollFactor(collFactorF, shearRate, rho); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - //relax - //mxxPyyPzz += OxxPyyPzz * (mfaaa - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - // - //LBMReal collFactorFyy = getRheologyCollFactor(collFactorF, std::sqrt(dxux*dxux + dyuy*dyuy) / (rho + one), rho); - //mxxMyy += collFactorFyy * (-mxxMyy) - 3. * (1. - c1o2 * collFactorFyy) * (vx2 * dxux - vy2 * dyuy); - // - //LBMReal collFactorFzz = getRheologyCollFactor(collFactorF, std::sqrt(dxux*dxux + dzuz*dzuz) / (rho + one), rho); - //mxxMzz += collFactorFzz * (-mxxMzz) - 3. * (1. - c1o2 * collFactorFzz) * (vx2 * dxux - vz2 * dzuz); - - //mfabb += getRheologyCollFactor(collFactorF, std::abs(Dyz) / (rho + one), rho) * (-mfabb); - //mfbab += getRheologyCollFactor(collFactorF, std::abs(Dxz) / (rho + one), rho) * (-mfbab); - //mfbba += getRheologyCollFactor(collFactorF, std::abs(Dxy) / (rho + one), rho) * (-mfbba); - - SPtr<Rheology> thix = Rheology::getInstance(); - real tau0 = thix->getYieldStress(); - - mxxPyyPzz += OxxPyyPzz * (mfaaa - mxxPyyPzz /*+ ((mxxPyyPzz-mfaaa)/shearFactor*tau0)*/) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - //mxxPyyPzz += OxxPyyPzz * (mfaaa - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - //mxxMyy += collFactorF * (-mxxMyy + mxxMyy/shearFactor*tau0) - 3. * (1. - c1o2 * collFactorF) * (vx2 * dxux - vy2 * dyuy); - //mxxMzz += collFactorF * (-mxxMzz + mxxMzz/shearFactor*tau0) - 3. * (1. - c1o2 * collFactorF) * (vx2 * dxux - vz2 * dzuz); - - //mfabb += collFactorF * (-mfabb + mfabb/shearFactor*tau0); - //mfbab += collFactorF * (-mfbab + mfbab/shearFactor*tau0); - //mfbba += collFactorF * (-mfbba + mfbba/shearFactor*tau0); - - collFactorF = collFactor * (c1o1 - tau0 / shearFactor); - - mxxMyy += collFactorF * (-mxxMyy/* + mxxMyy / shearFactor * tau0*/) - 3. * (1. - c1o2 * collFactorF) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += collFactorF * (-mxxMzz/* + mxxMzz / shearFactor * tau0*/) - 3. * (1. - c1o2 * collFactorF) * (vx2 * dxux - vz2 * dzuz); - - mfabb += collFactorF * (-mfabb/* + mfabb / shearFactor * tau0*/); - mfbab += collFactorF * (-mfbab/* + mfbab / shearFactor * tau0*/); - mfbba += collFactorF * (-mfbba/* + mfbba / shearFactor * tau0*/); - - - // linear combinations back - mfcaa = vf::basics::constant::c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = vf::basics::constant::c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = vf::basics::constant::c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - wadjust = OxyyMxzz + (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 + vf::basics::constant::c1o3) * mfabb + 2. * mfbba * mfbab); - mfbcb = CUMbcb + ((mfaca + vf::basics::constant::c1o3) * mfbab + 2. * mfbba * mfabb); - mfbbc = CUMbbc + ((mfaac + vf::basics::constant::c1o3) * mfbba + 2. * mfbab * mfabb); - - mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + vf::basics::constant::c1o3 * (mfcaa + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho; - mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + vf::basics::constant::c1o3 * (mfcaa + mfaac) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho; - mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + vf::basics::constant::c1o3 * (mfaac + mfaca) * oMdrho + c1o9 * (oMdrho - 1) * oMdrho; - - //5. - mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) + vf::basics::constant::c1o3 * (mfbca + mfbac) * oMdrho; - mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) + vf::basics::constant::c1o3 * (mfcba + mfabc) * oMdrho; - mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) + vf::basics::constant::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) - - vf::basics::constant::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 * (vvz - c1o2) + (mfaaa + 1. * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - 2. * mfaab * vvz + mfaaa * (1. - vz2) - 1. * oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + 1. * oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - 2. * mfabb * vvz + mfaba * (1. - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + vf::basics::constant::c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - 2. * mfacb * vvz + mfaca * (1. - vz2) - vf::basics::constant::c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + vf::basics::constant::c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - 2. * mfbab * vvz + mfbaa * (1. - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - 2. * mfbbb * vvz + mfbba * (1. - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - 2. * mfbcb * vvz + mfbca * (1. - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + vf::basics::constant::c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - 2. * mfcab * vvz + mfcaa * (1. - vz2) - vf::basics::constant::c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + vf::basics::constant::c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - 2. * mfcbb * vvz + mfcba * (1. - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - 2. * mfccb * vvz + mfcca * (1. - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - 2. * mfaba * vvy + mfaaa * (1. - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - 2. * mfabb * vvy + mfaab * (1. - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - 2. * mfabc * vvy + mfaac * (1. - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - 2. * mfbba * vvy + mfbaa * (1. - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - 2. * mfbbb * vvy + mfbab * (1. - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - 2. * mfbbc * vvy + mfbac * (1. - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - 2. * mfcba * vvy + mfcaa * (1. - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - 2. * mfcbb * vvy + mfcab * (1. - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - 2. * mfcbc * vvy + mfcac * (1. - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - 2. * mfbaa * vvx + mfaaa * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - 2. * mfbba * vvx + mfaba * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - 2. * mfbca * vvx + mfaca * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - 2. * mfbab * vvx + mfaab * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - 2. * mfbbb * vvx + mfabb * (1. - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - 2. * mfbcb * vvx + mfacb * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - 2. * mfbac * vvx + mfaac * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - 2. * mfbbc * vvx + mfabc * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - 2. * mfbcc * vvx + mfacc * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - - ////////////////////////////////////////////////////////////////////////// - //proof correctness - ////////////////////////////////////////////////////////////////////////// -#ifdef PROOF_CORRECTNESS - real rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) - + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) - + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - //LBMReal dif = fabs(rho - rho_post); - real dif = rho - rho_post; -#ifdef SINGLEPRECISION - if (dif > 10.0E-7 || dif < -10.0E-7) -#else - if (dif > 10.0E-15 || dif < -10.0E-15) -#endif - { - UB_THROW(UbException(UB_EXARGS, "rho=" + UbSystem::toString(rho) + ", rho_post=" + UbSystem::toString(rho_post) - + " dif=" + UbSystem::toString(dif) - + " rho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3))); - //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 - ////////////////////////////////////////////////////////////////////////// - (*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; - } - } - } - } - - } -} - -//SPtr<LBMKernel> RheologyModelLBMKernel2::clone() -//{ -// SPtr<LBMKernel> kernel(new RheologyModelLBMKernel2()); -// kernel->setNX(nx); -// kernel->setCollisionFactor(collFactor); -// collFactorF = collFactor; -// dynamicPointerCast<RheologyModelLBMKernel2>(kernel)->initDataSet(); -// kernel->setBCSet(bcSet->clone(kernel)); -// kernel->setWithForcing(withForcing); -// kernel->setForcingX1(muForcingX1); -// kernel->setForcingX2(muForcingX2); -// kernel->setForcingX3(muForcingX3); -// kernel->setIndex(ix1, ix2, ix3); -// kernel->setDeltaT(deltaT); -// -// return kernel; -//} - -real RheologyModelLBMKernel2::getCalculationTime() -{ - return timer.getTotalTime(); -} - -void RheologyModelLBMKernel2::swapDistributions() -{ - LBMKernel::swapDistributions(); -} - -void RheologyModelLBMKernel2::initDataSet() -{ - SPtr<DistributionArray3D> df(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.0)); - dataSet->setFdistributions(df); -} diff --git a/src/cpu/NonNewtonianFluids/LBM/RheologyModelLBMKernel2.h b/src/cpu/NonNewtonianFluids/LBM/RheologyModelLBMKernel2.h deleted file mode 100644 index ca97551c849d2b3315ff1813ecb0b3936a451a5b..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/LBM/RheologyModelLBMKernel2.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef RheologyModelLBMKernel2_H -#define RheologyModelLBMKernel2_H - -#include "LBMKernel.h" -#include "BCSet.h" -#include "D3Q27System.h" -#include "basics/utilities/UbTiming.h" -#include "basics/container/CbArray4D.h" -#include "basics/container/CbArray3D.h" - -class RheologyModelLBMKernel2; - -//! \brief Base class for model of thixotropy based on K16. Use Template Method design pattern for Implementation of different models. -//! \author K. Kutscher, M. Geier -class RheologyModelLBMKernel2 : public LBMKernel -{ -public: - RheologyModelLBMKernel2(); - virtual ~RheologyModelLBMKernel2(); - void calculate(int step); - virtual SPtr<LBMKernel> clone() { UB_THROW(UbException("SPtr<LBMKernel> clone() - belongs in the derived class")); }; - real getCalculationTime(); - - void swapDistributions(); - -protected: - void initDataSet(); - - virtual real getRheologyCollFactor(real omegaInf, real shearRate, real drho) const { UB_THROW(UbException("real getRheologyCollFactor() - belongs in the derived class")); } - - real f[D3Q27System::ENDF + 1]; - - UbTimer timer; - - real OxyyMxzz; - - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF; - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributionsF; - - mu::value_type muX1, muX2, muX3; - mu::value_type muDeltaT; - mu::value_type muNu; - real forcingX1; - real forcingX2; - real forcingX3; - - bool test; -}; - -#endif diff --git a/src/cpu/NonNewtonianFluids/LBM/RheologyPowellEyringModelLBMKernel.h b/src/cpu/NonNewtonianFluids/LBM/RheologyPowellEyringModelLBMKernel.h deleted file mode 100644 index 5cf0533f96b1c1df10ea8843196e15064044cbb9..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/LBM/RheologyPowellEyringModelLBMKernel.h +++ /dev/null @@ -1,70 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file RheologyPowellEyringModelLBMKernel.h -//! \ingroup LBM -//! \author Konstantin Kutscher -//======================================================================================= -#ifndef RheologyPowellEyringModelLBMKernel_H -#define RheologyPowellEyringModelLBMKernel_H - -#include "RheologyK17LBMKernel.h" -#include "Rheology.h" - -//! \brief Cumulant LBM kernel + Herschel-Bulkley plastic model -//! \author K. Kutscher, M. Geier -class RheologyPowellEyringModelLBMKernel : public RheologyK17LBMKernel -{ -public: - RheologyPowellEyringModelLBMKernel() {}; - ~RheologyPowellEyringModelLBMKernel() {}; - SPtr<LBMKernel> clone() override - { - SPtr<LBMKernel> kernel(new RheologyPowellEyringModelLBMKernel()); - kernel->setNX(nx); - kernel->setCollisionFactor(collFactor); - dynamicPointerCast<RheologyPowellEyringModelLBMKernel>(kernel)->initDataSet(); - kernel->setBCSet(bcSet->clone(kernel)); - kernel->setWithForcing(withForcing); - kernel->setForcingX1(muForcingX1); - kernel->setForcingX2(muForcingX2); - kernel->setForcingX3(muForcingX3); - kernel->setIndex(ix1, ix2, ix3); - kernel->setDeltaT(deltaT); - - return kernel; - } -protected: - real getRheologyCollFactor(real omegaInf, real shearRate, real drho) const override - { - return Rheology::getPowellEyringCollFactor(omegaInf, shearRate, drho); - } -}; - - -#endif \ No newline at end of file diff --git a/src/cpu/NonNewtonianFluids/LBM/ThixotropyExpLBMKernel.cpp b/src/cpu/NonNewtonianFluids/LBM/ThixotropyExpLBMKernel.cpp deleted file mode 100644 index a55ee9a28740843a4bf3c8587b3afb5f348c2759..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/LBM/ThixotropyExpLBMKernel.cpp +++ /dev/null @@ -1,1873 +0,0 @@ -#include "ThixotropyExpLBMKernel.h" -#include "D3Q27System.h" -#include "Interpolator.h" -#include "D3Q27EsoTwist3DSplittedVector.h" -#include <math.h> -#include "DataSet3D.h" -#include "LBMKernel.h" - -#define PROOF_CORRECTNESS - -//using namespace UbMath; -using namespace vf::basics::constant; - -////////////////////////////////////////////////////////////////////////// -ThixotropyExpLBMKernel::ThixotropyExpLBMKernel() -{ - this->parameter = ThixotropyExpLBMKernel::NORMAL; - this->compressible = false; - //this->TwoDistributions = true; -} -////////////////////////////////////////////////////////////////////////// -ThixotropyExpLBMKernel::~ThixotropyExpLBMKernel(void) -{ - -} -////////////////////////////////////////////////////////////////////////// -void ThixotropyExpLBMKernel::initDataSet() -{ - //DistributionArray3DPtr d(new D3Q27EsoTwist3DSplittedVector(nx1+ghostLayerWitdh*2, nx2+ghostLayerWitdh*2, nx3+ghostLayerWitdh*2, -999.0)); - SPtr<DistributionArray3D> df(new D3Q27EsoTwist3DSplittedVector(nx[0]+2, nx[1]+2, nx[2]+2, -999.0)); - SPtr<DistributionArray3D> dh(new D3Q27EsoTwist3DSplittedVector(nx[0]+2, nx[1]+2, nx[2]+2, -999.0)); - dataSet->setFdistributions(df); - dataSet->setHdistributions(dh); -} -////////////////////////////////////////////////////////////////////////// -SPtr<LBMKernel> ThixotropyExpLBMKernel::clone() -{ - SPtr<LBMKernel> kernel(new ThixotropyExpLBMKernel()); - kernel->setNX(nx); - kernel->setCollisionFactor(collFactor); - collFactorF = collFactor; - collFactorH = collFactor; - dynamicPointerCast<ThixotropyExpLBMKernel>(kernel)->initDataSet(); - dynamicPointerCast<ThixotropyExpLBMKernel>(kernel)->setCollisionFactorF(this->collFactorF); - dynamicPointerCast<ThixotropyExpLBMKernel>(kernel)->setCollisionFactorH(this->collFactorH); - dynamicPointerCast<ThixotropyExpLBMKernel>(kernel)->setAlpha(this->alpha); - dynamicPointerCast<ThixotropyExpLBMKernel>(kernel)->setTheta(this->theta); - kernel->setBCSet(bcSet->clone(kernel)); - kernel->setWithForcing(withForcing); - kernel->setForcingX1(muForcingX1); - kernel->setForcingX2(muForcingX2); - kernel->setForcingX3(muForcingX3); - kernel->setIndex(ix1, ix2, ix3); - kernel->setDeltaT(deltaT); - - switch (parameter) - { - case NORMAL: - dynamicPointerCast<ThixotropyExpLBMKernel>(kernel)->OxyyMxzz = 1.0; - break; - case MAGIC: - dynamicPointerCast<ThixotropyExpLBMKernel>(kernel)->OxyyMxzz = 2.0 + (-collFactorF); - break; - } - return kernel; -} -////////////////////////////////////////////////////////////////////////// -void ThixotropyExpLBMKernel::calculate(int step) -{ - 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); - } - ///////////////////////////////////// - - 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(); - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - const int bcArrayMaxX1 = (int)bcArray->getNX1(); - const int bcArrayMaxX2 = (int)bcArray->getNX2(); - const int bcArrayMaxX3 = (int)bcArray->getNX3(); - - int minX1 = ghostLayerWidth; - int minX2 = ghostLayerWidth; - int minX3 = ghostLayerWidth; - int maxX1 = bcArrayMaxX1 - ghostLayerWidth; - int maxX2 = bcArrayMaxX2 - ghostLayerWidth; - int maxX3 = bcArrayMaxX3 - ghostLayerWidth; - - - //#pragma omp parallel num_threads(8) - { - // int i = omp_get_thread_num(); - // printf_s("Hello from thread %d\n", i); - //} - //#pragma omp for - for (int x3 = minX3; x3 < maxX3; x3++) - { - for (int x2 = minX2; x2 < maxX2; x2++) - { - for (int x1 = minX1; x1 < maxX1; x1++) - { - if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) - { - int x1p = x1 + 1; - int x2p = x2 + 1; - int x3p = x3 + 1; - ////////////////////////////////////////////////////////////////////////// - //read distribution - // Cumulant (NSE part) - //////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - - real mfcbb = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3); - - real mfabb = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p); - - real mfbbb = (*this->zeroDistributionsH)(x1, x2, x3); - - real lambda = (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; - - //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 - - 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); - - real m0, m1, m2; - - real rho = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) - + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) - + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)); - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)); - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)); - - -// LBMReal eta0 = (1/collFactor-c1o2)*c1o3; -// LBMReal eta = (1 + lambda)* eta0; - //collFactorF = one/(3*eta/(rho+one)+c1o2); - collFactorF = collFactor; - - //forcing - /////////////////////////////////////////////////////////////////////////////////////////// - if (withForcing) - { - muX1 = static_cast<real>(x1 - 1 + ix1*maxX1); - muX2 = static_cast<real>(x2 - 1 + ix2*maxX2); - muX3 = static_cast<real>(x3 - 1 + ix3*maxX3); - - forcingX1 = muForcingX1.Eval(); - forcingX2 = muForcingX2.Eval(); - forcingX3 = muForcingX3.Eval(); - - vvx += forcingX1*deltaT*0.5; // X - vvy += forcingX2*deltaT*0.5; // Y - vvz += forcingX3*deltaT*0.5; // Z - } - /////////////////////////////////////////////////////////////////////////////////////////// - real oMdrho; - - oMdrho = mfccc + mfaaa; - m0 = mfaca + mfcac; - m1 = mfacc + mfcaa; - m2 = mfaac + mfcca; - oMdrho += m0; - m1 += m2; - oMdrho += m1; - m0 = mfbac + mfbca; - m1 = mfbaa + mfbcc; - m0 += m1; - m1 = mfabc + mfcba; - m2 = mfaba + mfcbc; - m1 += m2; - m0 += m1; - m1 = mfacb + mfcab; - m2 = mfaab + mfccb; - m1 += m2; - m0 += m1; - oMdrho += m0; - m0 = mfabb + mfcbb; - m1 = mfbab + mfbcb; - m2 = mfbba + mfbbc; - m0 += m1 + m2; - m0 += mfbbb; //hat gefehlt - oMdrho = 1. - (oMdrho + m0); - - real vx2; - real vy2; - real vz2; - vx2 = vvx*vvx; - vy2 = vvy*vvy; - vz2 = vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimit = 0.01; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += 1. * oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = 1.; //omega2 or bulk viscosity - real OxyyPxzz = 1.;//-s9;//2+s9;// - //LBMReal OxyyMxzz = 1.;//2+s9;// - real O4 = 1.; - real O5 = 1.; - real 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 - - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab); - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); - - real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho - 1)*oMdrho); - real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho - 1)*oMdrho); - real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho - 1)*oMdrho); - - //Cum 5. - real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho; - real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho; - real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho; - - //Cum 6. - real 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 - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - real dxux = -c1o2 * collFactorF *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz*(mfaaa - mxxPyyPzz); - real dyuy = dxux + collFactorF * c3o2 * mxxMyy; - real dzuz = dxux + collFactorF * c3o2 * mxxMzz; - - real Dxy =-c3o1*collFactorF*mfbba; - real Dxz =-c3o1*collFactorF*mfbab; - real Dyz =-c3o1*collFactorF*mfabb; - - real gammaDot = sqrt(dxux * dxux + dyuy * dyuy + dzuz * dzuz + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz) / (rho + c1o1); - //collFactorF = BinghamModel::getBinghamCollFactor(collFactorF, gammaDot, rho); - - //relax - mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - mxxMyy += collFactorF * (-mxxMyy) - 3. * (1. - c1o2 * collFactorF) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += collFactorF * (-mxxMzz) - 3. * (1. - c1o2 * collFactorF) * (vx2 * dxux - vz2 * dzuz); - - mfabb += collFactorF * (-mfabb); - mfbab += collFactorF * (-mfbab); - mfbba += collFactorF * (-mfbba); - - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - wadjust = OxyyMxzz + (1. - OxyyMxzz)*fabs(mfbbb) / (fabs(mfbbb) + qudricLimit); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz + (1. - OxyyPxzz)*fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz + (1. - OxyyMxzz)*fabs(mxxyMyzz) / (fabs(mxxyMyzz) + qudricLimit); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz + (1. - OxyyPxzz)*fabs(mxxzPyyz) / (fabs(mxxzPyyz) + qudricLimit); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz + (1. - OxyyMxzz)*fabs(mxxzMyyz) / (fabs(mxxzMyyz) + qudricLimit); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz + (1. - OxyyPxzz)*fabs(mxyyPxzz) / (fabs(mxyyPxzz) + qudricLimit); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz + (1. - OxyyMxzz)*fabs(mxyyMxzz) / (fabs(mxyyMxzz) + qudricLimit); - mxyyMxzz += wadjust * (-mxyyMxzz); - - // linear combinations back - mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - CUMacc += O4 * (-CUMacc); - CUMcac += O4 * (-CUMcac); - CUMcca += O4 * (-CUMcca); - - CUMbbc += O4 * (-CUMbbc); - CUMbcb += O4 * (-CUMbcb); - CUMcbb += O4 * (-CUMcbb); - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - //back cumulants to central moments - //4. - //mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015 - //mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015 - //mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015 - - mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab); - mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); - mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); - - mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho - 1)*oMdrho; - mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho - 1)*oMdrho; - mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho - 1)*oMdrho; - - //5. - mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho; - mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho; - mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho; - - //6. - mfccc = CUMccc - ((-4. * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) - - 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) - + (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + 2. * (mfcaa * mfaca * mfaac) - + 16. * mfbba * mfbab * mfabb) - - c1o3* (mfacc + mfcac + mfcca) * oMdrho - c1o9*oMdrho*oMdrho - - c1o9* (mfcaa + mfaca + mfaac) * oMdrho*(1. - 2.* oMdrho) - c1o27* oMdrho * oMdrho*(-2.* oMdrho) - + (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) - c1o27*oMdrho; - - //////////////////////////////////////////////////////////////////////////////////// - //forcing - mfbaa = -mfbaa; - mfaba = -mfaba; - mfaab = -mfaab; - ////////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + 1. * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - 2. * mfaab * vvz + mfaaa * (1. - vz2) - 1. * oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + 1. * oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - 2. * mfabb * vvz + mfaba * (1. - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - 2. * mfacb * vvz + mfaca * (1. - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - 2. * mfbab * vvz + mfbaa * (1. - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - 2. * mfbbb * vvz + mfbba * (1. - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - 2. * mfbcb * vvz + mfbca * (1. - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - 2. * mfcab * vvz + mfcaa * (1. - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - 2. * mfcbb * vvz + mfcba * (1. - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - 2. * mfccb * vvz + mfcca * (1. - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - 2. * mfaba * vvy + mfaaa * (1. - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - 2. * mfabb * vvy + mfaab * (1. - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - 2. * mfabc * vvy + mfaac * (1. - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - 2. * mfbba * vvy + mfbaa * (1. - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - 2. * mfbbb * vvy + mfbab * (1. - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - 2. * mfbbc * vvy + mfbac * (1. - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - 2. * mfcba * vvy + mfcaa * (1. - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - 2. * mfcbb * vvy + mfcab * (1. - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - 2. * mfcbc * vvy + mfcac * (1. - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - 2. * mfbaa * vvx + mfaaa * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - 2. * mfbba * vvx + mfaba * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - 2. * mfbca * vvx + mfaca * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - 2. * mfbab * vvx + mfaab * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - 2. * mfbbb * vvx + mfabb * (1. - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - 2. * mfbcb * vvx + mfacb * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - 2. * mfbac * vvx + mfaac * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - 2. * mfbbc * vvx + mfabc * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - 2. * mfbcc * vvx + mfacc * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - - ////////////////////////////////////////////////////////////////////////// - //proof correctness - ////////////////////////////////////////////////////////////////////////// -#ifdef PROOF_CORRECTNESS - real rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) - + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) - + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - //LBMReal dif = fabs(rho - rho_post); - real dif = rho - rho_post; -#ifdef SINGLEPRECISION - if (dif > 10.0E-7 || dif < -10.0E-7) -#else - if (dif > 10.0E-15 || dif < -10.0E-15) -#endif - { - UB_THROW(UbException(UB_EXARGS, "rho=" + UbSystem::toString(rho) + ", rho_post=" + UbSystem::toString(rho_post) - + " dif=" + UbSystem::toString(dif) - + " rho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3))); - //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 - ////////////////////////////////////////////////////////////////////////// - (*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; - - - - - - - - - - - - - - - - - real ux, uy, uz; - - ux = vvx; - uy = vvy; - uz = vvz; - - - - - //////////////////////////////////////////////////////////////////////////// - // Central Factorized Moment (advection diffusion part) - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - //read distribution - - 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); - - //////////////////////////////////////////////////////////////////////////////////// - real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb)) + (mfbba + mfbbc)) + mfbbb; - - //flocculation - //LBMReal lambda = drho; - - //LBMReal theta = 60 * 1.28172e+06; - //LBMReal alpha = 0.005;// *10.0; - - //LBMReal gammaDot = sqrt(dxux * dxux + dyuy * dyuy + dzuz * dzuz + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz) / (rho + one); - - //collFactorF = collFactorF - 1e-4 / (gammaDot + one * 1e-9); - - //collFactorF = (collFactorF < 0.5) ? 0.5 : collFactorF; - - real dlambda = c1o1 / theta - alpha * lambda * gammaDot; - - - ////////////////////////////////////////////////////////////////////////// - //collision Factorized Central moment Kernel Geier 2015 - ////////////////////////////////////////////////////////////////////////// - real Mom000 = mfaaa + mfaab + mfaac + mfaba + mfabb + mfabc + mfaca + - mfacb + mfacc + mfbaa + mfbab + mfbac + mfbba + mfbbb + mfbbc + mfbca + - mfbcb + mfbcc + mfcaa + mfcab + mfcac + mfcba + mfcbb + mfcbc + mfcca + mfccb + mfccc; - - Mom000 += dlambda*c1o2; //1 - - //(100)// - real Mom100 = mfaaa*(-1 - ux) + mfaab*(-1 - ux) + mfaac*(-1 - ux) + mfaba*(-1 - ux) + mfabb*(-1 - ux) + mfabc*(-1 - ux) + mfaca*(-1 - ux) + - mfacb*(-1 - ux) + mfacc*(-1 - ux) + mfcaa*(1 - ux) + mfcab*(1 - ux) + mfcac*(1 - ux) + mfcba*(1 - ux) + mfcbb*(1 - ux) + - mfcbc*(1 - ux) + mfcca*(1 - ux) + mfccb*(1 - ux) + mfccc*(1 - ux) - mfbaa*ux - mfbab*ux - mfbac*ux - mfbba*ux - mfbbb*ux - - mfbbc*ux - mfbca*ux - mfbcb*ux - mfbcc*ux; - - real Mom010 = mfaaa*(-1 - uy) + mfaab*(-1 - uy) + mfaac*(-1 - uy) + mfbaa*(-1 - uy) + mfbab*(-1 - uy) + mfbac*(-1 - uy) + mfcaa*(-1 - uy) + - mfcab*(-1 - uy) + mfcac*(-1 - uy) + mfaca*(1 - uy) + mfacb*(1 - uy) + mfacc*(1 - uy) + mfbca*(1 - uy) + mfbcb*(1 - uy) + - mfbcc*(1 - uy) + mfcca*(1 - uy) + mfccb*(1 - uy) + mfccc*(1 - uy) - mfaba*uy - mfabb*uy - mfabc*uy - mfbba*uy - mfbbb*uy - - mfbbc*uy - mfcba*uy - mfcbb*uy - mfcbc*uy; - - real Mom001 = mfaaa*(-1 - uz) + mfaba*(-1 - uz) + mfaca*(-1 - uz) + mfbaa*(-1 - uz) + mfbba*(-1 - uz) + mfbca*(-1 - uz) + mfcaa*(-1 - uz) + - mfcba*(-1 - uz) + mfcca*(-1 - uz) + mfaac*(1 - uz) + mfabc*(1 - uz) + mfacc*(1 - uz) + mfbac*(1 - uz) + mfbbc*(1 - uz) + - mfbcc*(1 - uz) + mfcac*(1 - uz) + mfcbc*(1 - uz) + mfccc*(1 - uz) - mfaab*uz - mfabb*uz - mfacb*uz - mfbab*uz - mfbbb*uz - - mfbcb*uz - mfcab*uz - mfcbb*uz - mfccb*uz; - //// - - //(110)// - real Mom110 = mfaaa*(-1 - ux)*(-1 - uy) + mfaab*(-1 - ux)*(-1 - uy) + mfaac*(-1 - ux)*(-1 - uy) + mfcaa*(1 - ux)*(-1 - uy) + - mfcab*(1 - ux)*(-1 - uy) + mfcac*(1 - ux)*(-1 - uy) - mfbaa*ux*(-1 - uy) - mfbab*ux*(-1 - uy) - mfbac*ux*(-1 - uy) + - mfaca*(-1 - ux)*(1 - uy) + mfacb*(-1 - ux)*(1 - uy) + mfacc*(-1 - ux)*(1 - uy) + mfcca*(1 - ux)*(1 - uy) + mfccb*(1 - ux)*(1 - uy) + - mfccc*(1 - ux)*(1 - uy) - mfbca*ux*(1 - uy) - mfbcb*ux*(1 - uy) - mfbcc*ux*(1 - uy) - mfaba*(-1 - ux)*uy - mfabb*(-1 - ux)*uy - - mfabc*(-1 - ux)*uy - mfcba*(1 - ux)*uy - mfcbb*(1 - ux)*uy - mfcbc*(1 - ux)*uy + mfbba*ux*uy + mfbbb*ux*uy + mfbbc*ux*uy; - - real Mom101 = mfaaa*(-1 - ux)*(-1 - uz) + mfaba*(-1 - ux)*(-1 - uz) + mfaca*(-1 - ux)*(-1 - uz) + mfcaa*(1 - ux)*(-1 - uz) + - mfcba*(1 - ux)*(-1 - uz) + mfcca*(1 - ux)*(-1 - uz) - mfbaa*ux*(-1 - uz) - mfbba*ux*(-1 - uz) - mfbca*ux*(-1 - uz) + - mfaac*(-1 - ux)*(1 - uz) + mfabc*(-1 - ux)*(1 - uz) + mfacc*(-1 - ux)*(1 - uz) + mfcac*(1 - ux)*(1 - uz) + mfcbc*(1 - ux)*(1 - uz) + - mfccc*(1 - ux)*(1 - uz) - mfbac*ux*(1 - uz) - mfbbc*ux*(1 - uz) - mfbcc*ux*(1 - uz) - mfaab*(-1 - ux)*uz - mfabb*(-1 - ux)*uz - - mfacb*(-1 - ux)*uz - mfcab*(1 - ux)*uz - mfcbb*(1 - ux)*uz - mfccb*(1 - ux)*uz + mfbab*ux*uz + mfbbb*ux*uz + mfbcb*ux*uz; - - real Mom011 = mfaaa*(-1 - uy)*(-1 - uz) + mfbaa*(-1 - uy)*(-1 - uz) + mfcaa*(-1 - uy)*(-1 - uz) + mfaca*(1 - uy)*(-1 - uz) + - mfbca*(1 - uy)*(-1 - uz) + mfcca*(1 - uy)*(-1 - uz) - mfaba*uy*(-1 - uz) - mfbba*uy*(-1 - uz) - mfcba*uy*(-1 - uz) + - mfaac*(-1 - uy)*(1 - uz) + mfbac*(-1 - uy)*(1 - uz) + mfcac*(-1 - uy)*(1 - uz) + mfacc*(1 - uy)*(1 - uz) + mfbcc*(1 - uy)*(1 - uz) + - mfccc*(1 - uy)*(1 - uz) - mfabc*uy*(1 - uz) - mfbbc*uy*(1 - uz) - mfcbc*uy*(1 - uz) - mfaab*(-1 - uy)*uz - mfbab*(-1 - uy)*uz - - mfcab*(-1 - uy)*uz - mfacb*(1 - uy)*uz - mfbcb*(1 - uy)*uz - mfccb*(1 - uy)*uz + mfabb*uy*uz + mfbbb*uy*uz + mfcbb*uy*uz; - //// - - real Mom111 = mfaaa*(-1 - ux)*(-1 - uy)*(-1 - uz) + mfcaa*(1 - ux)*(-1 - uy)*(-1 - uz) - mfbaa*ux*(-1 - uy)*(-1 - uz) + - mfaca*(-1 - ux)*(1 - uy)*(-1 - uz) + mfcca*(1 - ux)*(1 - uy)*(-1 - uz) - mfbca*ux*(1 - uy)*(-1 - uz) - - mfaba*(-1 - ux)*uy*(-1 - uz) - mfcba*(1 - ux)*uy*(-1 - uz) + mfbba*ux*uy*(-1 - uz) + mfaac*(-1 - ux)*(-1 - uy)*(1 - uz) + - mfcac*(1 - ux)*(-1 - uy)*(1 - uz) - mfbac*ux*(-1 - uy)*(1 - uz) + mfacc*(-1 - ux)*(1 - uy)*(1 - uz) + - mfccc*(1 - ux)*(1 - uy)*(1 - uz) - mfbcc*ux*(1 - uy)*(1 - uz) - mfabc*(-1 - ux)*uy*(1 - uz) - mfcbc*(1 - ux)*uy*(1 - uz) + - mfbbc*ux*uy*(1 - uz) - mfaab*(-1 - ux)*(-1 - uy)*uz - mfcab*(1 - ux)*(-1 - uy)*uz + mfbab*ux*(-1 - uy)*uz - - mfacb*(-1 - ux)*(1 - uy)*uz - mfccb*(1 - ux)*(1 - uy)*uz + mfbcb*ux*(1 - uy)*uz + mfabb*(-1 - ux)*uy*uz + mfcbb*(1 - ux)*uy*uz - - mfbbb*ux*uy*uz; - - //(200)// - real Mom200 = ((mfcaa + mfcab + mfcac + mfcba + mfcbb + mfcbc + mfcca + mfccb + - mfccc)*pow(-1 + ux, 2) + - (mfbaa + mfbab + mfbac + mfbba + mfbbb + mfbbc + mfbca + - mfbcb + mfbcc)*pow(ux, 2) + - (mfaaa + mfaab + mfaac + mfaba + mfabb + mfabc + mfaca + - mfacb + mfacc)*pow(1 + ux, 2)) - Mom000 / 3; - - real Mom020 = ((mfaca + mfacb + mfacc)*pow(-1 + uy, 2) + - (mfbca + mfbcb + mfbcc)*pow(-1 + uy, 2) + - (mfcca + mfccb + mfccc)*pow(-1 + uy, 2) + - (mfaba + mfabb + mfabc)*pow(uy, 2) + - (mfbba + mfbbb + mfbbc)*pow(uy, 2) + - (mfcba + mfcbb + mfcbc)*pow(uy, 2) + - (mfaaa + mfaab + mfaac)*pow(1 + uy, 2) + - (mfbaa + mfbab + mfbac)*pow(1 + uy, 2) + - (mfcaa + mfcab + mfcac)*pow(1 + uy, 2)) - Mom000 / 3; - - real Mom002 = (mfaba + mfabc + mfaca + mfacc + mfbba + mfbbc + mfbca + mfbcc + - mfcba + mfcbc + mfcca + mfccc + mfaac*pow(-1 + uz, 2) + - mfbac*pow(-1 + uz, 2) + mfcac*pow(-1 + uz, 2) + - 2 * mfaba*uz - 2 * mfabc*uz + 2 * mfaca*uz - 2 * mfacc*uz + - 2 * mfbba*uz - 2 * mfbbc*uz + 2 * mfbca*uz - 2 * mfbcc*uz + - 2 * mfcba*uz - 2 * mfcbc*uz + 2 * mfcca*uz - 2 * mfccc*uz + - mfaab*pow(uz, 2) + mfaba*pow(uz, 2) + mfabb*pow(uz, 2) + - mfabc*pow(uz, 2) + mfaca*pow(uz, 2) + mfacb*pow(uz, 2) + - mfacc*pow(uz, 2) + mfbab*pow(uz, 2) + mfbba*pow(uz, 2) + - mfbbb*pow(uz, 2) + mfbbc*pow(uz, 2) + mfbca*pow(uz, 2) + - mfbcb*pow(uz, 2) + mfbcc*pow(uz, 2) + mfcab*pow(uz, 2) + - mfcba*pow(uz, 2) + mfcbb*pow(uz, 2) + mfcbc*pow(uz, 2) + - mfcca*pow(uz, 2) + mfccb*pow(uz, 2) + mfccc*pow(uz, 2) + - mfaaa*pow(1 + uz, 2) + mfbaa*pow(1 + uz, 2) + - mfcaa*pow(1 + uz, 2)) - Mom000 / 3; - //// - - //(210)// - real Mom210 = (pow(1 + ux, 2)*(-((mfaca + mfacb + mfacc)*(-1 + uy)) - - (mfaba + mfabb + mfabc)*uy - - (mfaaa + mfaab + mfaac)*(1 + uy)) + - pow(ux, 2)*(-((mfbca + mfbcb + mfbcc)*(-1 + uy)) - - (mfbba + mfbbb + mfbbc)*uy - - (mfbaa + mfbab + mfbac)*(1 + uy)) + - pow(-1 + ux, 2)*(-((mfcca + mfccb + mfccc)*(-1 + uy)) - - (mfcba + mfcbb + mfcbc)*uy - - (mfcaa + mfcab + mfcac)*(1 + uy))) - Mom010 / 3; - - real Mom201 = (-(pow(1 + ux, 2)*(mfaba - mfabc + mfaca - mfacc + - mfaac*(-1 + uz) + mfaab*uz + mfaba*uz + mfabb*uz + - mfabc*uz + mfaca*uz + mfacb*uz + mfacc*uz + - mfaaa*(1 + uz))) - - pow(ux, 2)*(mfbba - mfbbc + mfbca - mfbcc + - mfbac*(-1 + uz) + mfbab*uz + mfbba*uz + mfbbb*uz + - mfbbc*uz + mfbca*uz + mfbcb*uz + mfbcc*uz + mfbaa*(1 + uz)) - - pow(-1 + ux, 2)*(mfcba - mfcbc + mfcca - mfccc + - mfcac*(-1 + uz) + mfcab*uz + mfcba*uz + mfcbb*uz + - mfcbc*uz + mfcca*uz + mfccb*uz + mfccc*uz + mfcaa*(1 + uz))) - Mom001 / 3; - - real Mom120 = ((-1 - ux)*((mfaca + mfacb + mfacc)*pow(-1 + uy, 2) + - (mfaba + mfabb + mfabc)*pow(uy, 2) + - (mfaaa + mfaab + mfaac)*pow(1 + uy, 2)) - - ux*((mfbca + mfbcb + mfbcc)*pow(-1 + uy, 2) + - (mfbba + mfbbb + mfbbc)*pow(uy, 2) + - (mfbaa + mfbab + mfbac)*pow(1 + uy, 2)) + - (1 - ux)*((mfcca + mfccb + mfccc)*pow(-1 + uy, 2) + - (mfcba + mfcbb + mfcbc)*pow(uy, 2) + - (mfcaa + mfcab + mfcac)*pow(1 + uy, 2))) - Mom100 / 3; - - - real Mom102 = (-((1 + ux)*(mfaba + mfabc + mfaca + mfacc + - mfaac*pow(-1 + uz, 2) + 2 * mfaba*uz - 2 * mfabc*uz + - 2 * mfaca*uz - 2 * mfacc*uz + mfaab*pow(uz, 2) + - mfaba*pow(uz, 2) + mfabb*pow(uz, 2) + - mfabc*pow(uz, 2) + mfaca*pow(uz, 2) + - mfacb*pow(uz, 2) + mfacc*pow(uz, 2) + - mfaaa*pow(1 + uz, 2))) - - ux*(mfbba + mfbbc + mfbca + mfbcc + mfbac*pow(-1 + uz, 2) + - 2 * mfbba*uz - 2 * mfbbc*uz + 2 * mfbca*uz - 2 * mfbcc*uz + - mfbab*pow(uz, 2) + mfbba*pow(uz, 2) + - mfbbb*pow(uz, 2) + mfbbc*pow(uz, 2) + - mfbca*pow(uz, 2) + mfbcb*pow(uz, 2) + - mfbcc*pow(uz, 2) + mfbaa*pow(1 + uz, 2)) - - (-1 + ux)*(mfcba + mfcbc + mfcca + mfccc + - mfcac*pow(-1 + uz, 2) + 2 * mfcba*uz - 2 * mfcbc*uz + - 2 * mfcca*uz - 2 * mfccc*uz + mfcab*pow(uz, 2) + - mfcba*pow(uz, 2) + mfcbb*pow(uz, 2) + - mfcbc*pow(uz, 2) + mfcca*pow(uz, 2) + - mfccb*pow(uz, 2) + mfccc*pow(uz, 2) + - mfcaa*pow(1 + uz, 2))) - Mom100 / 3; - - real Mom021 = (-(pow(1 + uy, 2)*(mfaac*(-1 + uz) + mfaab*uz + - mfaaa*(1 + uz))) - - pow(uy, 2)*(mfabc*(-1 + uz) + mfabb*uz + mfaba*(1 + uz)) - - pow(-1 + uy, 2)*(mfacc*(-1 + uz) + mfacb*uz + - mfaca*(1 + uz)) - pow(1 + uy, 2)* - (mfbac*(-1 + uz) + mfbab*uz + mfbaa*(1 + uz)) - - pow(uy, 2)*(mfbbc*(-1 + uz) + mfbbb*uz + mfbba*(1 + uz)) - - pow(-1 + uy, 2)*(mfbcc*(-1 + uz) + mfbcb*uz + - mfbca*(1 + uz)) - pow(1 + uy, 2)* - (mfcac*(-1 + uz) + mfcab*uz + mfcaa*(1 + uz)) - - pow(uy, 2)*(mfcbc*(-1 + uz) + mfcbb*uz + mfcba*(1 + uz)) - - pow(-1 + uy, 2)*(mfccc*(-1 + uz) + mfccb*uz + mfcca*(1 + uz))) - Mom001 / 3; - - real Mom012 = (-((1 + uy)*(mfaac*pow(-1 + uz, 2) + mfaab*pow(uz, 2) + - mfaaa*pow(1 + uz, 2))) - - uy*(mfabc*pow(-1 + uz, 2) + mfabb*pow(uz, 2) + - mfaba*pow(1 + uz, 2)) - - (-1 + uy)*(mfacc*pow(-1 + uz, 2) + mfacb*pow(uz, 2) + - mfaca*pow(1 + uz, 2)) - - (1 + uy)*(mfbac*pow(-1 + uz, 2) + mfbab*pow(uz, 2) + - mfbaa*pow(1 + uz, 2)) - - uy*(mfbbc*pow(-1 + uz, 2) + mfbbb*pow(uz, 2) + - mfbba*pow(1 + uz, 2)) - - (-1 + uy)*(mfbcc*pow(-1 + uz, 2) + mfbcb*pow(uz, 2) + - mfbca*pow(1 + uz, 2)) - - (1 + uy)*(mfcac*pow(-1 + uz, 2) + mfcab*pow(uz, 2) + - mfcaa*pow(1 + uz, 2)) - - uy*(mfcbc*pow(-1 + uz, 2) + mfcbb*pow(uz, 2) + - mfcba*pow(1 + uz, 2)) - - (-1 + uy)*(mfccc*pow(-1 + uz, 2) + mfccb*pow(uz, 2) + - mfcca*pow(1 + uz, 2))) - Mom010 / 3; - //// - - - //(220)// - real Mom220 = (pow(1 + ux, 2)*((mfaca + mfacb + mfacc)*pow(-1 + uy, 2) + - (mfaba + mfabb + mfabc)*pow(uy, 2) + - (mfaaa + mfaab + mfaac)*pow(1 + uy, 2)) + - pow(ux, 2)*((mfbca + mfbcb + mfbcc)*pow(-1 + uy, 2) + - (mfbba + mfbbb + mfbbc)*pow(uy, 2) + - (mfbaa + mfbab + mfbac)*pow(1 + uy, 2)) + - pow(-1 + ux, 2)*((mfcca + mfccb + mfccc)*pow(-1 + uy, 2) + - (mfcba + mfcbb + mfcbc)*pow(uy, 2) + - (mfcaa + mfcab + mfcac)*pow(1 + uy, 2))) - Mom000 / 9; - - real Mom202 = (pow(1 + ux, 2)*(mfaba + mfabc + mfaca + mfacc + - mfaac*pow(-1 + uz, 2) + 2 * mfaba*uz - 2 * mfabc*uz + - 2 * mfaca*uz - 2 * mfacc*uz + mfaab*pow(uz, 2) + - mfaba*pow(uz, 2) + mfabb*pow(uz, 2) + - mfabc*pow(uz, 2) + mfaca*pow(uz, 2) + - mfacb*pow(uz, 2) + mfacc*pow(uz, 2) + - mfaaa*pow(1 + uz, 2)) + - pow(ux, 2)*(mfbba + mfbbc + mfbca + mfbcc + - mfbac*pow(-1 + uz, 2) + 2 * mfbba*uz - 2 * mfbbc*uz + - 2 * mfbca*uz - 2 * mfbcc*uz + mfbab*pow(uz, 2) + - mfbba*pow(uz, 2) + mfbbb*pow(uz, 2) + - mfbbc*pow(uz, 2) + mfbca*pow(uz, 2) + - mfbcb*pow(uz, 2) + mfbcc*pow(uz, 2) + - mfbaa*pow(1 + uz, 2)) + - pow(-1 + ux, 2)*(mfcba + mfcbc + mfcca + mfccc + - mfcac*pow(-1 + uz, 2) + 2 * mfcba*uz - 2 * mfcbc*uz + - 2 * mfcca*uz - 2 * mfccc*uz + mfcab*pow(uz, 2) + - mfcba*pow(uz, 2) + mfcbb*pow(uz, 2) + - mfcbc*pow(uz, 2) + mfcca*pow(uz, 2) + - mfccb*pow(uz, 2) + mfccc*pow(uz, 2) + - mfcaa*pow(1 + uz, 2))) - Mom000 / 9; - - real Mom022 = (pow(1 + uy, 2)*(mfaac*pow(-1 + uz, 2) + mfaab*pow(uz, 2) + - mfaaa*pow(1 + uz, 2)) + - pow(uy, 2)*(mfabc*pow(-1 + uz, 2) + mfabb*pow(uz, 2) + - mfaba*pow(1 + uz, 2)) + - pow(-1 + uy, 2)*(mfacc*pow(-1 + uz, 2) + - mfacb*pow(uz, 2) + mfaca*pow(1 + uz, 2)) + - pow(1 + uy, 2)*(mfbac*pow(-1 + uz, 2) + mfbab*pow(uz, 2) + - mfbaa*pow(1 + uz, 2)) + - pow(uy, 2)*(mfbbc*pow(-1 + uz, 2) + mfbbb*pow(uz, 2) + - mfbba*pow(1 + uz, 2)) + - pow(-1 + uy, 2)*(mfbcc*pow(-1 + uz, 2) + - mfbcb*pow(uz, 2) + mfbca*pow(1 + uz, 2)) + - pow(1 + uy, 2)*(mfcac*pow(-1 + uz, 2) + mfcab*pow(uz, 2) + - mfcaa*pow(1 + uz, 2)) + - pow(uy, 2)*(mfcbc*pow(-1 + uz, 2) + mfcbb*pow(uz, 2) + - mfcba*pow(1 + uz, 2)) + - pow(-1 + uy, 2)*(mfccc*pow(-1 + uz, 2) + - mfccb*pow(uz, 2) + mfcca*pow(1 + uz, 2))) - Mom000 / 9; - //// - - //(221)// - real Mom221 = (pow(1 + ux, 2)*(-(pow(1 + uy, 2)* - (mfaac*(-1 + uz) + mfaab*uz + mfaaa*(1 + uz))) - - pow(uy, 2)*(mfabc*(-1 + uz) + mfabb*uz + - mfaba*(1 + uz)) - - pow(-1 + uy, 2)*(mfacc*(-1 + uz) + mfacb*uz + - mfaca*(1 + uz))) + - pow(ux, 2)*(-(pow(1 + uy, 2)* - (mfbac*(-1 + uz) + mfbab*uz + mfbaa*(1 + uz))) - - pow(uy, 2)*(mfbbc*(-1 + uz) + mfbbb*uz + - mfbba*(1 + uz)) - - pow(-1 + uy, 2)*(mfbcc*(-1 + uz) + mfbcb*uz + - mfbca*(1 + uz))) + - pow(-1 + ux, 2)*(-(pow(1 + uy, 2)* - (mfcac*(-1 + uz) + mfcab*uz + mfcaa*(1 + uz))) - - pow(uy, 2)*(mfcbc*(-1 + uz) + mfcbb*uz + - mfcba*(1 + uz)) - - pow(-1 + uy, 2)*(mfccc*(-1 + uz) + mfccb*uz + - mfcca*(1 + uz)))) - Mom001 / 9; - - real Mom212 = (pow(1 + ux, 2)*(-((1 + uy)* - (mfaac*pow(-1 + uz, 2) + mfaab*pow(uz, 2) + - mfaaa*pow(1 + uz, 2))) - - uy*(mfabc*pow(-1 + uz, 2) + mfabb*pow(uz, 2) + - mfaba*pow(1 + uz, 2)) - - (-1 + uy)*(mfacc*pow(-1 + uz, 2) + mfacb*pow(uz, 2) + - mfaca*pow(1 + uz, 2))) + - pow(ux, 2)*(-((1 + uy)* - (mfbac*pow(-1 + uz, 2) + mfbab*pow(uz, 2) + - mfbaa*pow(1 + uz, 2))) - - uy*(mfbbc*pow(-1 + uz, 2) + mfbbb*pow(uz, 2) + - mfbba*pow(1 + uz, 2)) - - (-1 + uy)*(mfbcc*pow(-1 + uz, 2) + mfbcb*pow(uz, 2) + - mfbca*pow(1 + uz, 2))) + - pow(-1 + ux, 2)*(-((1 + uy)* - (mfcac*pow(-1 + uz, 2) + mfcab*pow(uz, 2) + - mfcaa*pow(1 + uz, 2))) - - uy*(mfcbc*pow(-1 + uz, 2) + mfcbb*pow(uz, 2) + - mfcba*pow(1 + uz, 2)) - - (-1 + uy)*(mfccc*pow(-1 + uz, 2) + mfccb*pow(uz, 2) + - mfcca*pow(1 + uz, 2)))) - Mom010 / 9; - - real Mom122 = ((-1 - ux)*(pow(1 + uy, 2)* - (mfaac*pow(-1 + uz, 2) + mfaab*pow(uz, 2) + - mfaaa*pow(1 + uz, 2)) + - pow(uy, 2)*(mfabc*pow(-1 + uz, 2) + mfabb*pow(uz, 2) + - mfaba*pow(1 + uz, 2)) + - pow(-1 + uy, 2)*(mfacc*pow(-1 + uz, 2) + - mfacb*pow(uz, 2) + mfaca*pow(1 + uz, 2))) - - ux*(pow(1 + uy, 2)*(mfbac*pow(-1 + uz, 2) + - mfbab*pow(uz, 2) + mfbaa*pow(1 + uz, 2)) + - pow(uy, 2)*(mfbbc*pow(-1 + uz, 2) + mfbbb*pow(uz, 2) + - mfbba*pow(1 + uz, 2)) + - pow(-1 + uy, 2)*(mfbcc*pow(-1 + uz, 2) + - mfbcb*pow(uz, 2) + mfbca*pow(1 + uz, 2))) + - (1 - ux)*(pow(1 + uy, 2)* - (mfcac*pow(-1 + uz, 2) + mfcab*pow(uz, 2) + - mfcaa*pow(1 + uz, 2)) + - pow(uy, 2)*(mfcbc*pow(-1 + uz, 2) + mfcbb*pow(uz, 2) + - mfcba*pow(1 + uz, 2)) + - pow(-1 + uy, 2)*(mfccc*pow(-1 + uz, 2) + - mfccb*pow(uz, 2) + mfcca*pow(1 + uz, 2)))) - Mom100 / 9; - //// - - //(211)// - real Mom211 = (pow(1 + ux, 2)*((1 + uy)*(mfaac*(-1 + uz) + mfaab*uz + - mfaaa*(1 + uz)) + - uy*(mfabc*(-1 + uz) + mfabb*uz + mfaba*(1 + uz)) + - (-1 + uy)*(mfacc*(-1 + uz) + mfacb*uz + mfaca*(1 + uz))) + - pow(ux, 2)*((1 + uy)*(mfbac*(-1 + uz) + mfbab*uz + - mfbaa*(1 + uz)) + - uy*(mfbbc*(-1 + uz) + mfbbb*uz + mfbba*(1 + uz)) + - (-1 + uy)*(mfbcc*(-1 + uz) + mfbcb*uz + mfbca*(1 + uz))) + - pow(-1 + ux, 2)*((1 + uy)* - (mfcac*(-1 + uz) + mfcab*uz + mfcaa*(1 + uz)) + - uy*(mfcbc*(-1 + uz) + mfcbb*uz + mfcba*(1 + uz)) + - (-1 + uy)*(mfccc*(-1 + uz) + mfccb*uz + mfcca*(1 + uz)))) - Mom011 / 3; - - real Mom121 = ((-1 - ux)*(-(pow(1 + uy, 2)* - (mfaac*(-1 + uz) + mfaab*uz + mfaaa*(1 + uz))) - - pow(uy, 2)*(mfabc*(-1 + uz) + mfabb*uz + - mfaba*(1 + uz)) - - pow(-1 + uy, 2)*(mfacc*(-1 + uz) + mfacb*uz + - mfaca*(1 + uz))) - - ux*(-(pow(1 + uy, 2)*(mfbac*(-1 + uz) + mfbab*uz + - mfbaa*(1 + uz))) - - pow(uy, 2)*(mfbbc*(-1 + uz) + mfbbb*uz + - mfbba*(1 + uz)) - - pow(-1 + uy, 2)*(mfbcc*(-1 + uz) + mfbcb*uz + - mfbca*(1 + uz))) + - (1 - ux)*(-(pow(1 + uy, 2)* - (mfcac*(-1 + uz) + mfcab*uz + mfcaa*(1 + uz))) - - pow(uy, 2)*(mfcbc*(-1 + uz) + mfcbb*uz + - mfcba*(1 + uz)) - - pow(-1 + uy, 2)*(mfccc*(-1 + uz) + mfccb*uz + - mfcca*(1 + uz)))) - Mom101 / 3; - - real Mom112 = ((-1 - ux)*(-((1 + uy)*(mfaac*pow(-1 + uz, 2) + - mfaab*pow(uz, 2) + mfaaa*pow(1 + uz, 2))) - - uy*(mfabc*pow(-1 + uz, 2) + mfabb*pow(uz, 2) + - mfaba*pow(1 + uz, 2)) - - (-1 + uy)*(mfacc*pow(-1 + uz, 2) + mfacb*pow(uz, 2) + - mfaca*pow(1 + uz, 2))) - - ux*(-((1 + uy)*(mfbac*pow(-1 + uz, 2) + mfbab*pow(uz, 2) + - mfbaa*pow(1 + uz, 2))) - - uy*(mfbbc*pow(-1 + uz, 2) + mfbbb*pow(uz, 2) + - mfbba*pow(1 + uz, 2)) - - (-1 + uy)*(mfbcc*pow(-1 + uz, 2) + mfbcb*pow(uz, 2) + - mfbca*pow(1 + uz, 2))) + - (1 - ux)*(-((1 + uy)*(mfcac*pow(-1 + uz, 2) + - mfcab*pow(uz, 2) + mfcaa*pow(1 + uz, 2))) - - uy*(mfcbc*pow(-1 + uz, 2) + mfcbb*pow(uz, 2) + - mfcba*pow(1 + uz, 2)) - - (-1 + uy)*(mfccc*pow(-1 + uz, 2) + mfccb*pow(uz, 2) + - mfcca*pow(1 + uz, 2)))) - Mom110 / 3; - //// - - //(222)// - real Mom222 = (pow(1 + ux, 2)*(pow(1 + uy, 2)* - (mfaac*pow(-1 + uz, 2) + mfaab*pow(uz, 2) + - mfaaa*pow(1 + uz, 2)) + - pow(uy, 2)*(mfabc*pow(-1 + uz, 2) + mfabb*pow(uz, 2) + - mfaba*pow(1 + uz, 2)) + - pow(-1 + uy, 2)*(mfacc*pow(-1 + uz, 2) + - mfacb*pow(uz, 2) + mfaca*pow(1 + uz, 2))) + - pow(ux, 2)*(pow(1 + uy, 2)* - (mfbac*pow(-1 + uz, 2) + mfbab*pow(uz, 2) + - mfbaa*pow(1 + uz, 2)) + - pow(uy, 2)*(mfbbc*pow(-1 + uz, 2) + mfbbb*pow(uz, 2) + - mfbba*pow(1 + uz, 2)) + - pow(-1 + uy, 2)*(mfbcc*pow(-1 + uz, 2) + - mfbcb*pow(uz, 2) + mfbca*pow(1 + uz, 2))) + - pow(-1 + ux, 2)*(pow(1 + uy, 2)* - (mfcac*pow(-1 + uz, 2) + mfcab*pow(uz, 2) + - mfcaa*pow(1 + uz, 2)) + - pow(uy, 2)*(mfcbc*pow(-1 + uz, 2) + mfcbb*pow(uz, 2) + - mfcba*pow(1 + uz, 2)) + - pow(-1 + uy, 2)*(mfccc*pow(-1 + uz, 2) + - mfccb*pow(uz, 2) + mfcca*pow(1 + uz, 2)))) - Mom000 / 27; - //// - - - - - - real Meq000 = drho+dlambda*c1o2; - - - // relaxation Central Moment MRT - - Mom000 = Meq000; - - Mom000 += dlambda*c1o2; - - Mom100 = (1 - collFactorH) * Mom100; - Mom010 = (1 - collFactorH) * Mom010; - Mom001 = (1 - collFactorH) * Mom001; - - Mom110 = 0; - Mom101 = 0; - Mom011 = 0; - - Mom111 = 0; - - //(200)// - Mom200 = Mom000 / 3; - Mom020 = Mom000 / 3; - Mom002 = Mom000 / 3; - //// - - //(210)// - Mom210 = Mom010 / 3; - Mom201 = Mom001 / 3; - Mom120 = Mom100 / 3; - - - Mom102 = Mom100 / 3; - Mom021 = Mom001 / 3; - Mom012 = Mom010 / 3; - //// - - - //(220)// - Mom220 = Mom000 / 9; - Mom202 = Mom000 / 9; - Mom022 = Mom000 / 9; - //// - - //(221)// - Mom221 = Mom001 / 9; - Mom212 = Mom010 / 9; - Mom122 = Mom100 / 9; - //// - - //(211)// - Mom211 = Mom011 / 3; - Mom121 = Mom101 / 3; - Mom112 = Mom110 / 3; - //// - - //(222)// - Mom222 = Mom000 / 27; - //// - - - - //Back transformation to distributions - - mfcbb = (Mom122 + Mom222 + 2 * Mom122*ux + Mom022*ux*(1 + ux) + - 2 * (Mom112 + Mom212 + 2 * Mom112*ux + Mom012*ux*(1 + ux))*uy + - (Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))* - (-1 + pow(uy, 2)) - - 2 * (-Mom221 - Mom021*ux*(1 + ux) - Mom121*(1 + 2 * ux) - - 2 * (Mom111 + Mom211 + 2 * Mom111*ux + Mom011*ux*(1 + ux))* - uy - (Mom101 + Mom201 + 2 * Mom101*ux + - Mom001*ux*(1 + ux))*(-1 + pow(uy, 2)))*uz + - (-Mom220 - Mom020*ux*(1 + ux) - Mom120*(1 + 2 * ux) - - 2 * (Mom110 + Mom210 + 2 * Mom110*ux + Mom010*ux*(1 + ux))* - uy - (Mom100 + Mom200 + 2 * Mom100*ux + - Mom000*ux*(1 + ux))*(-1 + pow(uy, 2)))* - (1 - pow(uz, 2))) / 2.; - mfbcb = (Mom222 + 2 * Mom122*ux + Mom022*(-1 + pow(ux, 2)) + - (Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))*uy* - (1 + uy) + (Mom212 + 2 * Mom112*ux + - Mom012*(-1 + pow(ux, 2)))*(1 + 2 * uy) - - 2 * (Mom021 - Mom221 - 2 * Mom121*ux - Mom021*pow(ux, 2) - - (Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))*uy* - (1 + uy) - (Mom211 + 2 * Mom111*ux + - Mom011*(-1 + pow(ux, 2)))*(1 + 2 * uy))*uz + - (Mom020 - Mom220 - 2 * Mom120*ux - Mom020*pow(ux, 2) - - (Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))*uy* - (1 + uy) - (Mom210 + 2 * Mom110*ux + - Mom010*(-1 + pow(ux, 2)))*(1 + 2 * uy))* - (1 - pow(uz, 2))) / 2.; - mfbbc = (Mom222 + 2 * Mom122*ux + Mom022*(-1 + pow(ux, 2)) + - 2 * (Mom212 + 2 * Mom112*ux + Mom012*(-1 + pow(ux, 2)))*uy + - (Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))* - (-1 + pow(uy, 2)) + - (Mom220 + 2 * Mom120*ux + Mom020*(-1 + pow(ux, 2)) + - 2 * (Mom210 + 2 * Mom110*ux + Mom010*(-1 + pow(ux, 2)))* - uy + (Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))* - (-1 + pow(uy, 2)))*uz*(1 + uz) + - (Mom221 + 2 * Mom121*ux + Mom021*(-1 + pow(ux, 2)) + - 2 * (Mom211 + 2 * Mom111*ux + Mom011*(-1 + pow(ux, 2)))* - uy + (Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))* - (-1 + pow(uy, 2)))*(1 + 2 * uz)) / 2.; - mfccb = (-Mom222 - Mom022*ux*(1 + ux) - Mom122*(1 + 2 * ux) - - (Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))*uy* - (1 + uy) - (Mom112 + Mom212 + 2 * Mom112*ux + - Mom012*ux*(1 + ux))*(1 + 2 * uy) - - 2 * (Mom121 + Mom221 + 2 * Mom121*ux + Mom021*ux*(1 + ux) + - (Mom101 + Mom201 + 2 * Mom101*ux + Mom001*ux*(1 + ux))*uy* - (1 + uy) + (Mom111 + Mom211 + 2 * Mom111*ux + - Mom011*ux*(1 + ux))*(1 + 2 * uy))*uz + - (Mom120 + Mom220 + 2 * Mom120*ux + Mom020*ux*(1 + ux) + - (Mom100 + Mom200 + 2 * Mom100*ux + Mom000*ux*(1 + ux))*uy* - (1 + uy) + (Mom110 + Mom210 + 2 * Mom110*ux + - Mom010*ux*(1 + ux))*(1 + 2 * uy))*(1 - pow(uz, 2))) / 4.; - mfacb = (Mom122 - Mom222 - 2 * Mom122*ux - Mom022*(-1 + ux)*ux - - (Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))*uy* - (1 + uy) - (Mom212 + Mom012*(-1 + ux)*ux + - Mom112*(-1 + 2 * ux))*(1 + 2 * uy) - - 2 * (Mom221 + Mom021*(-1 + ux)*ux + Mom121*(-1 + 2 * ux) + - (Mom201 + Mom001*(-1 + ux)*ux + Mom101*(-1 + 2 * ux))*uy* - (1 + uy) + (Mom211 + Mom011*(-1 + ux)*ux + - Mom111*(-1 + 2 * ux))*(1 + 2 * uy))*uz + - (Mom220 + Mom020*(-1 + ux)*ux + Mom120*(-1 + 2 * ux) + - (Mom200 + Mom000*(-1 + ux)*ux + Mom100*(-1 + 2 * ux))*uy* - (1 + uy) + (Mom210 + Mom010*(-1 + ux)*ux + - Mom110*(-1 + 2 * ux))*(1 + 2 * uy))*(1 - pow(uz, 2))) / 4.; - mfcbc = (-Mom222 - Mom022*ux*(1 + ux) - Mom122*(1 + 2 * ux) - - 2 * (Mom112 + Mom212 + 2 * Mom112*ux + Mom012*ux*(1 + ux))*uy - - (Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))* - (-1 + pow(uy, 2)) + - (-Mom220 - Mom020*ux*(1 + ux) - Mom120*(1 + 2 * ux) - - 2 * (Mom110 + Mom210 + 2 * Mom110*ux + Mom010*ux*(1 + ux))* - uy - (Mom100 + Mom200 + 2 * Mom100*ux + - Mom000*ux*(1 + ux))*(-1 + pow(uy, 2)))*uz*(1 + uz) + - (-Mom221 - Mom021*ux*(1 + ux) - Mom121*(1 + 2 * ux) - - 2 * (Mom111 + Mom211 + 2 * Mom111*ux + Mom011*ux*(1 + ux))* - uy - (Mom101 + Mom201 + 2 * Mom101*ux + - Mom001*ux*(1 + ux))*(-1 + pow(uy, 2)))*(1 + 2 * uz)) / 4.; - mfabc = (Mom122 - Mom222 - 2 * Mom122*ux - Mom022*(-1 + ux)*ux - - 2 * (Mom212 + Mom012*(-1 + ux)*ux + Mom112*(-1 + 2 * ux))*uy - - (Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))* - (-1 + pow(uy, 2)) + - (Mom120 - Mom220 - 2 * Mom120*ux - Mom020*(-1 + ux)*ux - - 2 * (Mom210 + Mom010*(-1 + ux)*ux + Mom110*(-1 + 2 * ux))* - uy - (Mom200 + Mom000*(-1 + ux)*ux + - Mom100*(-1 + 2 * ux))*(-1 + pow(uy, 2)))*uz*(1 + uz) + - (Mom121 - Mom221 - 2 * Mom121*ux - Mom021*(-1 + ux)*ux - - 2 * (Mom211 + Mom011*(-1 + ux)*ux + Mom111*(-1 + 2 * ux))* - uy - (Mom201 + Mom001*(-1 + ux)*ux + - Mom101*(-1 + 2 * ux))*(-1 + pow(uy, 2)))*(1 + 2 * uz)) / 4.; - mfbcc = (Mom022 - Mom222 - 2 * Mom122*ux - Mom022*pow(ux, 2) - - (Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))*uy* - (1 + uy) - (Mom212 + 2 * Mom112*ux + - Mom012*(-1 + pow(ux, 2)))*(1 + 2 * uy) + - (Mom020 - Mom220 - 2 * Mom120*ux - Mom020*pow(ux, 2) - - (Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))*uy* - (1 + uy) - (Mom210 + 2 * Mom110*ux + - Mom010*(-1 + pow(ux, 2)))*(1 + 2 * uy))*uz*(1 + uz) + - (Mom021 - Mom221 - 2 * Mom121*ux - Mom021*pow(ux, 2) - - (Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))*uy* - (1 + uy) - (Mom211 + 2 * Mom111*ux + - Mom011*(-1 + pow(ux, 2)))*(1 + 2 * uy))*(1 + 2 * uz)) / 4.; - mfbac = (Mom022 - Mom222 - 2 * Mom122*ux - Mom022*pow(ux, 2) - - (Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))* - (-1 + uy)*uy - (Mom212 + 2 * Mom112*ux + - Mom012*(-1 + pow(ux, 2)))*(-1 + 2 * uy) + - (Mom020 - Mom220 - 2 * Mom120*ux - Mom020*pow(ux, 2) - - (Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))* - (-1 + uy)*uy - (Mom210 + 2 * Mom110*ux + - Mom010*(-1 + pow(ux, 2)))*(-1 + 2 * uy))*uz*(1 + uz) + - (Mom021 - Mom221 - 2 * Mom121*ux - Mom021*pow(ux, 2) - - (Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))* - (-1 + uy)*uy - (Mom211 + 2 * Mom111*ux + - Mom011*(-1 + pow(ux, 2)))*(-1 + 2 * uy))*(1 + 2 * uz)) / 4.; - mfccc = (Mom122 + Mom222 + 2 * Mom122*ux + Mom022*ux*(1 + ux) + - (Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))*uy* - (1 + uy) + (Mom112 + Mom212 + 2 * Mom112*ux + - Mom012*ux*(1 + ux))*(1 + 2 * uy) + - (Mom120 + Mom220 + 2 * Mom120*ux + Mom020*ux*(1 + ux) + - (Mom100 + Mom200 + 2 * Mom100*ux + Mom000*ux*(1 + ux))*uy* - (1 + uy) + (Mom110 + Mom210 + 2 * Mom110*ux + - Mom010*ux*(1 + ux))*(1 + 2 * uy))*uz*(1 + uz) + - (Mom121 + Mom221 + 2 * Mom121*ux + Mom021*ux*(1 + ux) + - (Mom101 + Mom201 + 2 * Mom101*ux + Mom001*ux*(1 + ux))*uy* - (1 + uy) + (Mom111 + Mom211 + 2 * Mom111*ux + - Mom011*ux*(1 + ux))*(1 + 2 * uy))*(1 + 2 * uz)) / 8.; - mfacc = (Mom222 + Mom022*(-1 + ux)*ux + Mom122*(-1 + 2 * ux) + - (Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))*uy* - (1 + uy) + (Mom212 + Mom012*(-1 + ux)*ux + - Mom112*(-1 + 2 * ux))*(1 + 2 * uy) + - (Mom220 + Mom020*(-1 + ux)*ux + Mom120*(-1 + 2 * ux) + - (Mom200 + Mom000*(-1 + ux)*ux + Mom100*(-1 + 2 * ux))*uy* - (1 + uy) + (Mom210 + Mom010*(-1 + ux)*ux + - Mom110*(-1 + 2 * ux))*(1 + 2 * uy))*uz*(1 + uz) + - (Mom221 + Mom021*(-1 + ux)*ux + Mom121*(-1 + 2 * ux) + - (Mom201 + Mom001*(-1 + ux)*ux + Mom101*(-1 + 2 * ux))*uy* - (1 + uy) + (Mom211 + Mom011*(-1 + ux)*ux + - Mom111*(-1 + 2 * ux))*(1 + 2 * uy))*(1 + 2 * uz)) / 8.; - mfcac = (Mom122 + Mom222 + 2 * Mom122*ux + Mom022*ux*(1 + ux) + - (Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))* - (-1 + uy)*uy + (Mom112 + Mom212 + 2 * Mom112*ux + - Mom012*ux*(1 + ux))*(-1 + 2 * uy) + - (Mom120 + Mom220 + 2 * Mom120*ux + Mom020*ux*(1 + ux) + - (Mom100 + Mom200 + 2 * Mom100*ux + Mom000*ux*(1 + ux))* - (-1 + uy)*uy + (Mom110 + Mom210 + 2 * Mom110*ux + - Mom010*ux*(1 + ux))*(-1 + 2 * uy))*uz*(1 + uz) + - (Mom121 + Mom221 + 2 * Mom121*ux + Mom021*ux*(1 + ux) + - (Mom101 + Mom201 + 2 * Mom101*ux + Mom001*ux*(1 + ux))* - (-1 + uy)*uy + (Mom111 + Mom211 + 2 * Mom111*ux + - Mom011*ux*(1 + ux))*(-1 + 2 * uy))*(1 + 2 * uz)) / 8.; - mfaac = (Mom222 + Mom022*(-1 + ux)*ux + Mom122*(-1 + 2 * ux) + - (Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))* - (-1 + uy)*uy + (Mom212 + Mom012*(-1 + ux)*ux + - Mom112*(-1 + 2 * ux))*(-1 + 2 * uy) + - (Mom220 + Mom020*(-1 + ux)*ux + Mom120*(-1 + 2 * ux) + - (Mom200 + Mom000*(-1 + ux)*ux + Mom100*(-1 + 2 * ux))* - (-1 + uy)*uy + (Mom210 + Mom010*(-1 + ux)*ux + - Mom110*(-1 + 2 * ux))*(-1 + 2 * uy))*uz*(1 + uz) + - (Mom221 + Mom021*(-1 + ux)*ux + Mom121*(-1 + 2 * ux) + - (Mom201 + Mom001*(-1 + ux)*ux + Mom101*(-1 + 2 * ux))* - (-1 + uy)*uy + (Mom211 + Mom011*(-1 + ux)*ux + - Mom111*(-1 + 2 * ux))*(-1 + 2 * uy))*(1 + 2 * uz)) / 8.; - - mfabb = (Mom222 + Mom022*(-1 + ux)*ux + Mom122*(-1 + 2 * ux) + - 2 * (Mom212 + Mom012*(-1 + ux)*ux + Mom112*(-1 + 2 * ux))*uy + - (Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))* - (-1 + pow(uy, 2)) - - 2 * (Mom121 - Mom221 - 2 * Mom121*ux - Mom021*(-1 + ux)*ux - - 2 * (Mom211 + Mom011*(-1 + ux)*ux + Mom111*(-1 + 2 * ux))* - uy - (Mom201 + Mom001*(-1 + ux)*ux + - Mom101*(-1 + 2 * ux))*(-1 + pow(uy, 2)))*uz + - (Mom120 - Mom220 - 2 * Mom120*ux - Mom020*(-1 + ux)*ux - - 2 * (Mom210 + Mom010*(-1 + ux)*ux + Mom110*(-1 + 2 * ux))* - uy - (Mom200 + Mom000*(-1 + ux)*ux + - Mom100*(-1 + 2 * ux))*(-1 + pow(uy, 2)))* - (1 - pow(uz, 2))) / 2.; - mfbab = (Mom222 + 2 * Mom122*ux + Mom022*(-1 + pow(ux, 2)) + - (Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))* - (-1 + uy)*uy + (Mom212 + 2 * Mom112*ux + - Mom012*(-1 + pow(ux, 2)))*(-1 + 2 * uy) - - 2 * (Mom021 - Mom221 - 2 * Mom121*ux - Mom021*pow(ux, 2) - - (Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))* - (-1 + uy)*uy - (Mom211 + 2 * Mom111*ux + - Mom011*(-1 + pow(ux, 2)))*(-1 + 2 * uy))*uz + - (Mom020 - Mom220 - 2 * Mom120*ux - Mom020*pow(ux, 2) - - (Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))* - (-1 + uy)*uy - (Mom210 + 2 * Mom110*ux + - Mom010*(-1 + pow(ux, 2)))*(-1 + 2 * uy))* - (1 - pow(uz, 2))) / 2.; - mfbba = (Mom222 + 2 * Mom122*ux + Mom022*(-1 + pow(ux, 2)) + - 2 * (Mom212 + 2 * Mom112*ux + Mom012*(-1 + pow(ux, 2)))*uy + - (Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))* - (-1 + pow(uy, 2)) + - (Mom220 + 2 * Mom120*ux + Mom020*(-1 + pow(ux, 2)) + - 2 * (Mom210 + 2 * Mom110*ux + Mom010*(-1 + pow(ux, 2)))* - uy + (Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))* - (-1 + pow(uy, 2)))*(-1 + uz)*uz + - (Mom221 + 2 * Mom121*ux + Mom021*(-1 + pow(ux, 2)) + - 2 * (Mom211 + 2 * Mom111*ux + Mom011*(-1 + pow(ux, 2)))* - uy + (Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))* - (-1 + pow(uy, 2)))*(-1 + 2 * uz)) / 2.; - mfaab = (Mom122 - Mom222 - 2 * Mom122*ux - Mom022*(-1 + ux)*ux - - (Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))* - (-1 + uy)*uy - (Mom212 + Mom012*(-1 + ux)*ux + - Mom112*(-1 + 2 * ux))*(-1 + 2 * uy) - - 2 * (Mom221 + Mom021*(-1 + ux)*ux + Mom121*(-1 + 2 * ux) + - (Mom201 + Mom001*(-1 + ux)*ux + Mom101*(-1 + 2 * ux))* - (-1 + uy)*uy + (Mom211 + Mom011*(-1 + ux)*ux + - Mom111*(-1 + 2 * ux))*(-1 + 2 * uy))*uz + - (Mom220 + Mom020*(-1 + ux)*ux + Mom120*(-1 + 2 * ux) + - (Mom200 + Mom000*(-1 + ux)*ux + Mom100*(-1 + 2 * ux))* - (-1 + uy)*uy + (Mom210 + Mom010*(-1 + ux)*ux + - Mom110*(-1 + 2 * ux))*(-1 + 2 * uy))*(1 - pow(uz, 2))) / 4.; - mfcab = (-Mom222 - Mom022*ux*(1 + ux) - Mom122*(1 + 2 * ux) - - (Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))* - (-1 + uy)*uy - (Mom112 + Mom212 + 2 * Mom112*ux + - Mom012*ux*(1 + ux))*(-1 + 2 * uy) - - 2 * (Mom121 + Mom221 + 2 * Mom121*ux + Mom021*ux*(1 + ux) + - (Mom101 + Mom201 + 2 * Mom101*ux + Mom001*ux*(1 + ux))* - (-1 + uy)*uy + (Mom111 + Mom211 + 2 * Mom111*ux + - Mom011*ux*(1 + ux))*(-1 + 2 * uy))*uz + - (Mom120 + Mom220 + 2 * Mom120*ux + Mom020*ux*(1 + ux) + - (Mom100 + Mom200 + 2 * Mom100*ux + Mom000*ux*(1 + ux))* - (-1 + uy)*uy + (Mom110 + Mom210 + 2 * Mom110*ux + - Mom010*ux*(1 + ux))*(-1 + 2 * uy))*(1 - pow(uz, 2))) / 4.; - mfaba = (Mom122 - Mom222 - 2 * Mom122*ux - Mom022*(-1 + ux)*ux - 2 * (Mom212 + Mom012*(-1 + ux)*ux + Mom112*(-1 + 2 * ux))*uy - - (Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))*(-1 + pow(uy, 2)) + - (Mom120 - Mom220 - 2 * Mom120*ux - Mom020*(-1 + ux)*ux - 2 * (Mom210 + Mom010*(-1 + ux)*ux + Mom110*(-1 + 2 * ux))*uy - - (Mom200 + Mom000*(-1 + ux)*ux + Mom100*(-1 + 2 * ux))*(-1 + pow(uy, 2)))*(-1 + uz)*uz + - (Mom121 - Mom221 - 2 * Mom121*ux - Mom021*(-1 + ux)*ux - 2 * (Mom211 + Mom011*(-1 + ux)*ux + Mom111*(-1 + 2 * ux))*uy - - (Mom201 + Mom001*(-1 + ux)*ux + Mom101*(-1 + 2 * ux))*(-1 + pow(uy, 2)))*(-1 + 2 * uz)) / 4.; - mfcba = (-Mom222 - Mom022*ux*(1 + ux) - Mom122*(1 + 2 * ux) - 2 * (Mom112 + Mom212 + 2 * Mom112*ux + Mom012*ux*(1 + ux))*uy - - (Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))*(-1 + pow(uy, 2)) + - (-Mom220 - Mom020*ux*(1 + ux) - Mom120*(1 + 2 * ux) - 2 * (Mom110 + Mom210 + 2 * Mom110*ux + Mom010*ux*(1 + ux))*uy - - (Mom100 + Mom200 + 2 * Mom100*ux + Mom000*ux*(1 + ux))*(-1 + pow(uy, 2)))*(-1 + uz)*uz + - (-Mom221 - Mom021*ux*(1 + ux) - Mom121*(1 + 2 * ux) - 2 * (Mom111 + Mom211 + 2 * Mom111*ux + Mom011*ux*(1 + ux))*uy - - (Mom101 + Mom201 + 2 * Mom101*ux + Mom001*ux*(1 + ux))*(-1 + pow(uy, 2)))*(-1 + 2 * uz)) / 4.; - mfbaa = (Mom022 - Mom222 - 2 * Mom122*ux - Mom022*pow(ux, 2) - (Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))*(-1 + uy)*uy - - (Mom212 + 2 * Mom112*ux + Mom012*(-1 + pow(ux, 2)))*(-1 + 2 * uy) + - (Mom020 - Mom220 - 2 * Mom120*ux - Mom020*pow(ux, 2) - - (Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))*(-1 + uy)*uy - - (Mom210 + 2 * Mom110*ux + Mom010*(-1 + pow(ux, 2)))*(-1 + 2 * uy))*(-1 + uz)*uz + - (Mom021 - Mom221 - 2 * Mom121*ux - Mom021*pow(ux, 2) - - (Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))*(-1 + uy)*uy - - (Mom211 + 2 * Mom111*ux + Mom011*(-1 + pow(ux, 2)))*(-1 + 2 * uy))*(-1 + 2 * uz)) / 4.; - mfbca = (Mom022 - Mom222 - 2 * Mom122*ux - Mom022*pow(ux, 2) - (Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))*uy*(1 + uy) - - (Mom212 + 2 * Mom112*ux + Mom012*(-1 + pow(ux, 2)))*(1 + 2 * uy) + - (Mom020 - Mom220 - 2 * Mom120*ux - Mom020*pow(ux, 2) - - (Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))*uy*(1 + uy) - - (Mom210 + 2 * Mom110*ux + Mom010*(-1 + pow(ux, 2)))*(1 + 2 * uy))*(-1 + uz)*uz + - (Mom021 - Mom221 - 2 * Mom121*ux - Mom021*pow(ux, 2) - - (Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))*uy*(1 + uy) - - (Mom211 + 2 * Mom111*ux + Mom011*(-1 + pow(ux, 2)))*(1 + 2 * uy))*(-1 + 2 * uz)) / 4.; - mfaaa = (Mom222 + Mom022*(-1 + ux)*ux + Mom122*(-1 + 2 * ux) + (Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))*(-1 + uy)*uy + - (Mom212 + Mom012*(-1 + ux)*ux + Mom112*(-1 + 2 * ux))*(-1 + 2 * uy) + - (Mom220 + Mom020*(-1 + ux)*ux + Mom120*(-1 + 2 * ux) + - (Mom200 + Mom000*(-1 + ux)*ux + Mom100*(-1 + 2 * ux))*(-1 + uy)*uy + - (Mom210 + Mom010*(-1 + ux)*ux + Mom110*(-1 + 2 * ux))*(-1 + 2 * uy))*(-1 + uz)*uz + - (Mom221 + Mom021*(-1 + ux)*ux + Mom121*(-1 + 2 * ux) + - (Mom201 + Mom001*(-1 + ux)*ux + Mom101*(-1 + 2 * ux))*(-1 + uy)*uy + - (Mom211 + Mom011*(-1 + ux)*ux + Mom111*(-1 + 2 * ux))*(-1 + 2 * uy))*(-1 + 2 * uz)) / 8.; - mfcaa = (Mom122 + Mom222 + 2 * Mom122*ux + Mom022*ux*(1 + ux) + - (Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))*(-1 + uy)*uy + - (Mom112 + Mom212 + 2 * Mom112*ux + Mom012*ux*(1 + ux))*(-1 + 2 * uy) + - (Mom120 + Mom220 + 2 * Mom120*ux + Mom020*ux*(1 + ux) + - (Mom100 + Mom200 + 2 * Mom100*ux + Mom000*ux*(1 + ux))*(-1 + uy)*uy + - (Mom110 + Mom210 + 2 * Mom110*ux + Mom010*ux*(1 + ux))*(-1 + 2 * uy))*(-1 + uz)*uz + - (Mom121 + Mom221 + 2 * Mom121*ux + Mom021*ux*(1 + ux) + - (Mom101 + Mom201 + 2 * Mom101*ux + Mom001*ux*(1 + ux))*(-1 + uy)*uy + - (Mom111 + Mom211 + 2 * Mom111*ux + Mom011*ux*(1 + ux))*(-1 + 2 * uy))*(-1 + 2 * uz)) / 8.; - mfaca = (Mom222 + Mom022*(-1 + ux)*ux + Mom122*(-1 + 2 * ux) + (Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))*uy*(1 + uy) + - (Mom212 + Mom012*(-1 + ux)*ux + Mom112*(-1 + 2 * ux))*(1 + 2 * uy) + - (Mom220 + Mom020*(-1 + ux)*ux + Mom120*(-1 + 2 * ux) + - (Mom200 + Mom000*(-1 + ux)*ux + Mom100*(-1 + 2 * ux))*uy*(1 + uy) + - (Mom210 + Mom010*(-1 + ux)*ux + Mom110*(-1 + 2 * ux))*(1 + 2 * uy))*(-1 + uz)*uz + - (Mom221 + Mom021*(-1 + ux)*ux + Mom121*(-1 + 2 * ux) + - (Mom201 + Mom001*(-1 + ux)*ux + Mom101*(-1 + 2 * ux))*uy*(1 + uy) + - (Mom211 + Mom011*(-1 + ux)*ux + Mom111*(-1 + 2 * ux))*(1 + 2 * uy))*(-1 + 2 * uz)) / 8.; - mfcca = (Mom122 + Mom222 + 2 * Mom122*ux + Mom022*ux*(1 + ux) + (Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))*uy*(1 + uy) + - (Mom112 + Mom212 + 2 * Mom112*ux + Mom012*ux*(1 + ux))*(1 + 2 * uy) + - (Mom120 + Mom220 + 2 * Mom120*ux + Mom020*ux*(1 + ux) + - (Mom100 + Mom200 + 2 * Mom100*ux + Mom000*ux*(1 + ux))*uy*(1 + uy) + - (Mom110 + Mom210 + 2 * Mom110*ux + Mom010*ux*(1 + ux))*(1 + 2 * uy))*(-1 + uz)*uz + - (Mom121 + Mom221 + 2 * Mom121*ux + Mom021*ux*(1 + ux) + - (Mom101 + Mom201 + 2 * Mom101*ux + Mom001*ux*(1 + ux))*uy*(1 + uy) + - (Mom111 + Mom211 + 2 * Mom111*ux + Mom011*ux*(1 + ux))*(1 + 2 * uy))*(-1 + 2 * uz)) / 8.; - - mfbbb = Mom022 - Mom222 - 2 * Mom122*ux - Mom022*pow(ux, 2) - 2 * (Mom212 + 2 * Mom112*ux + Mom012*(-1 + pow(ux, 2)))*uy - - (Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))*(-1 + pow(uy, 2)) - - 2 * (Mom221 + 2 * Mom121*ux + Mom021*(-1 + pow(ux, 2)) + 2 * (Mom211 + 2 * Mom111*ux + Mom011*(-1 + pow(ux, 2)))*uy + - (Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))*(-1 + pow(uy, 2)))*uz + - (Mom220 + 2 * Mom120*ux + Mom020*(-1 + pow(ux, 2)) + 2 * (Mom210 + 2 * Mom110*ux + Mom010*(-1 + pow(ux, 2)))*uy + - (Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))*(-1 + pow(uy, 2)))*(1 - pow(uz, 2)); - - //////////////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - //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; - //UBLOG(logINFO, "lambda ="<<drho_post); -// //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, "Flocculation=" + UbSystem::toString(drho) + ", flocculation post=" + UbSystem::toString(drho_post) -// + " dif=" + UbSystem::toString(dif) -// + " Flocculation 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 - ////////////////////////////////////////////////////////////////////////// - (*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; - ////////////////////////////////////////////////////////////////////////// - - - } - } - } - } - - } -} -////////////////////////////////////////////////////////////////////////// -real ThixotropyExpLBMKernel::getCalculationTime() -{ - //return timer.getDuration(); - return timer.getTotalTime(); -} -////////////////////////////////////////////////////////////////////////// -void ThixotropyExpLBMKernel::setCollisionFactorF(real collFactor) -{ - setCollisionFactor(collFactor); - this->collFactorF = collFactor; - -} -////////////////////////////////////////////////////////////////////////// -void ThixotropyExpLBMKernel::setCollisionFactorH(real collFactor) -{ - this->collFactorH = collFactor; -} -////////////////////////////////////////////////////////////////////////// -real ThixotropyExpLBMKernel::getCollisionFactorF() const -{ - return this->collFactorF; -} -////////////////////////////////////////////////////////////////////////// -real ThixotropyExpLBMKernel::getCollisionFactorH() const -{ - return this->collFactorH; -} -void ThixotropyExpLBMKernel::setAlpha(real alpha) -{ - this->alpha = alpha; -} -real ThixotropyExpLBMKernel::getAlpha() const -{ - return this->alpha; -} -void ThixotropyExpLBMKernel::setTheta(real theta) -{ - this->theta = theta; -} -real ThixotropyExpLBMKernel::getTheta() const -{ - return this->theta; -} -void ThixotropyExpLBMKernel::swapDistributions() -{ - LBMKernel::swapDistributions(); - dataSet->getHdistributions()->swap(); -} -////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/NonNewtonianFluids/LBM/ThixotropyExpLBMKernel.h b/src/cpu/NonNewtonianFluids/LBM/ThixotropyExpLBMKernel.h deleted file mode 100644 index 754dd0ae09129455331c5a55b3b4d640350f33db..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/LBM/ThixotropyExpLBMKernel.h +++ /dev/null @@ -1,72 +0,0 @@ -#ifndef ThixotropyExpLBMKernel_H -#define ThixotropyExpLBMKernel_H - -#include "LBMKernel.h" -#include "BCSet.h" -#include "D3Q27System.h" -#include "basics/utilities/UbTiming.h" -#include "basics/container/CbArray4D.h" -#include "basics/container/CbArray3D.h" - -class ThixotropyExpLBMKernel; - -//! \brief Cumulant + Fact. Central LBM kernel. -//! \author Hussein -class ThixotropyExpLBMKernel : public LBMKernel -{ -public: - //! This option set relaxation parameter: NORMAL - enum Parameter { NORMAL, MAGIC }; -public: - ThixotropyExpLBMKernel(); - virtual ~ThixotropyExpLBMKernel(void); - virtual void calculate(int step); - virtual SPtr<LBMKernel> clone(); - real getCalculationTime(); - - void setCollisionFactorF(real collFactor); - void setCollisionFactorH(real collFactor); - real getCollisionFactorF() const; - real getCollisionFactorH() const; - - void setAlpha(real alpha); - real getAlpha() const; - - void setTheta(real theta); - real getTheta() const; - - void swapDistributions(); - -protected: - virtual void initDataSet(); - real f[D3Q27System::ENDF + 1]; - - UbTimer timer; - - real OxyyMxzz; - Parameter parameter; - - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF; - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributionsF; - - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH; - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributionsH; - - mu::value_type muX1, muX2, muX3; - mu::value_type muDeltaT; - mu::value_type muNu; - real forcingX1; - real forcingX2; - real forcingX3; - - real collFactorF; - real collFactorH; - - real theta; - real alpha; -}; - -#endif - diff --git a/src/cpu/NonNewtonianFluids/LBM/ThixotropyLBMKernel.cpp b/src/cpu/NonNewtonianFluids/LBM/ThixotropyLBMKernel.cpp deleted file mode 100644 index f764af6f5cd75b67ce51f8644d9f1839894fcdc3..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/LBM/ThixotropyLBMKernel.cpp +++ /dev/null @@ -1,1867 +0,0 @@ -#include "ThixotropyLBMKernel.h" -#include "D3Q27System.h" -#include "Interpolator.h" -#include "D3Q27EsoTwist3DSplittedVector.h" -#include <math.h> -#include "DataSet3D.h" -#include "LBMKernel.h" - -#define PROOF_CORRECTNESS - -//using namespace UbMath; -using namespace vf::basics::constant; - -////////////////////////////////////////////////////////////////////////// -ThixotropyLBMKernel::ThixotropyLBMKernel() -{ - this->parameter = ThixotropyLBMKernel::NORMAL; - this->compressible = false; - //this->TwoDistributions = true; -} -////////////////////////////////////////////////////////////////////////// -ThixotropyLBMKernel::~ThixotropyLBMKernel(void) -{ - -} -////////////////////////////////////////////////////////////////////////// -void ThixotropyLBMKernel::initDataSet() -{ - //DistributionArray3DPtr d(new D3Q27EsoTwist3DSplittedVector(nx1+ghostLayerWitdh*2, nx2+ghostLayerWitdh*2, nx3+ghostLayerWitdh*2, -999.0)); - SPtr<DistributionArray3D> df(new D3Q27EsoTwist3DSplittedVector(nx[0]+2, nx[1]+2, nx[2]+2, -999.0)); - SPtr<DistributionArray3D> dh(new D3Q27EsoTwist3DSplittedVector(nx[0]+2, nx[1]+2, nx[2]+2, -999.0)); - dataSet->setFdistributions(df); - dataSet->setHdistributions(dh); -} -////////////////////////////////////////////////////////////////////////// -SPtr<LBMKernel> ThixotropyLBMKernel::clone() -{ - SPtr<LBMKernel> kernel(new ThixotropyLBMKernel()); - kernel->setNX(nx); - kernel->setCollisionFactor(collFactor); - collFactorF = collFactor; - collFactorH = collFactor; - dynamicPointerCast<ThixotropyLBMKernel>(kernel)->initDataSet(); - dynamicPointerCast<ThixotropyLBMKernel>(kernel)->setCollisionFactorF(this->collFactorF); - dynamicPointerCast<ThixotropyLBMKernel>(kernel)->setCollisionFactorH(this->collFactorH); - dynamicPointerCast<ThixotropyLBMKernel>(kernel)->setAlpha(this->alpha); - dynamicPointerCast<ThixotropyLBMKernel>(kernel)->setTheta(this->theta); - kernel->setBCSet(bcSet->clone(kernel)); - kernel->setWithForcing(withForcing); - kernel->setForcingX1(muForcingX1); - kernel->setForcingX2(muForcingX2); - kernel->setForcingX3(muForcingX3); - kernel->setIndex(ix1, ix2, ix3); - kernel->setDeltaT(deltaT); - - switch (parameter) - { - case NORMAL: - dynamicPointerCast<ThixotropyLBMKernel>(kernel)->OxyyMxzz = 1.0; - break; - case MAGIC: - dynamicPointerCast<ThixotropyLBMKernel>(kernel)->OxyyMxzz = 2.0 + (-collFactorF); - break; - } - return kernel; -} -////////////////////////////////////////////////////////////////////////// -void ThixotropyLBMKernel::calculate(int step) -{ - 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 / collFactorF - 1.0 / 2.0); - - muForcingX1.DefineVar("nu", &muNu); - muForcingX2.DefineVar("nu", &muNu); - muForcingX3.DefineVar("nu", &muNu); - } - ///////////////////////////////////// - - 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(); - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - const int bcArrayMaxX1 = (int)bcArray->getNX1(); - const int bcArrayMaxX2 = (int)bcArray->getNX2(); - const int bcArrayMaxX3 = (int)bcArray->getNX3(); - - int minX1 = ghostLayerWidth; - int minX2 = ghostLayerWidth; - int minX3 = ghostLayerWidth; - int maxX1 = bcArrayMaxX1 - ghostLayerWidth; - int maxX2 = bcArrayMaxX2 - ghostLayerWidth; - int maxX3 = bcArrayMaxX3 - ghostLayerWidth; - - - //#pragma omp parallel num_threads(8) - { - // int i = omp_get_thread_num(); - // printf_s("Hello from thread %d\n", i); - //} - //#pragma omp for - for (int x3 = minX3; x3 < maxX3; x3++) - { - for (int x2 = minX2; x2 < maxX2; x2++) - { - for (int x1 = minX1; x1 < maxX1; x1++) - { - if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) - { - int x1p = x1 + 1; - int x2p = x2 + 1; - int x3p = x3 + 1; - ////////////////////////////////////////////////////////////////////////// - //read distribution - // Cumulant (NSE part) - //////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - - real mfcbb = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3); - - real mfabb = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p); - - real mfbbb = (*this->zeroDistributionsH)(x1, x2, x3); - - real lambda = (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; - - //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 - - 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); - - real m0, m1, m2; - - real rho = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) - + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) - + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)); - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)); - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)); - - - real eta0 = (1/collFactor-c1o2)*c1o3; - real eta = (1 + lambda)* eta0; - collFactorF = c1o1 /(3*eta/(rho+ c1o1)+c1o2); - //collFactorF = collFactor; - - //forcing - /////////////////////////////////////////////////////////////////////////////////////////// - if (withForcing) - { - muX1 = static_cast<real>(x1 - 1 + ix1*maxX1); - muX2 = static_cast<real>(x2 - 1 + ix2*maxX2); - muX3 = static_cast<real>(x3 - 1 + ix3*maxX3); - - forcingX1 = muForcingX1.Eval(); - forcingX2 = muForcingX2.Eval(); - forcingX3 = muForcingX3.Eval(); - - vvx += forcingX1*deltaT*0.5; // X - vvy += forcingX2*deltaT*0.5; // Y - vvz += forcingX3*deltaT*0.5; // Z - } - /////////////////////////////////////////////////////////////////////////////////////////// - real oMdrho; - - oMdrho = mfccc + mfaaa; - m0 = mfaca + mfcac; - m1 = mfacc + mfcaa; - m2 = mfaac + mfcca; - oMdrho += m0; - m1 += m2; - oMdrho += m1; - m0 = mfbac + mfbca; - m1 = mfbaa + mfbcc; - m0 += m1; - m1 = mfabc + mfcba; - m2 = mfaba + mfcbc; - m1 += m2; - m0 += m1; - m1 = mfacb + mfcab; - m2 = mfaab + mfccb; - m1 += m2; - m0 += m1; - oMdrho += m0; - m0 = mfabb + mfcbb; - m1 = mfbab + mfbcb; - m2 = mfbba + mfbbc; - m0 += m1 + m2; - m0 += mfbbb; //hat gefehlt - oMdrho = 1. - (oMdrho + m0); - - real vx2; - real vy2; - real vz2; - vx2 = vvx*vvx; - vy2 = vvy*vvy; - vz2 = vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimit = 0.01; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - 2. * m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - 2. * m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += 1. * oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - 2. * m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = 1.; //omega2 or bulk viscosity - real OxyyPxzz = 1.;//-s9;//2+s9;// - //real OxyyMxzz = 1.;//2+s9;// - real O4 = 1.; - real O5 = 1.; - real 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 - - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab); - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); - - real CUMcca = mfcca - ((mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho - 1)*oMdrho); - real CUMcac = mfcac - ((mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho - 1)*oMdrho); - real CUMacc = mfacc - ((mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho - 1)*oMdrho); - - //Cum 5. - real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho; - real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho; - real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho; - - //Cum 6. - real 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 - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - real dxux = -c1o2 * collFactorF *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz*(mfaaa - mxxPyyPzz); - real dyuy = dxux + collFactorF * c3o2 * mxxMyy; - real dzuz = dxux + collFactorF * c3o2 * mxxMzz; - - real Dxy =-c3o1 *collFactorF*mfbba; - real Dxz =-c3o1*collFactorF*mfbab; - real Dyz =-c3o1*collFactorF*mfabb; - - //relax - mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - mxxMyy += collFactorF * (-mxxMyy) - 3. * (1. - c1o2 * collFactorF) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += collFactorF * (-mxxMzz) - 3. * (1. - c1o2 * collFactorF) * (vx2 * dxux - vz2 * dzuz); - - mfabb += collFactorF * (-mfabb); - mfbab += collFactorF * (-mfbab); - mfbba += collFactorF * (-mfbba); - - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-2. * mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - 2. * mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - wadjust = OxyyMxzz + (1. - OxyyMxzz)*fabs(mfbbb) / (fabs(mfbbb) + qudricLimit); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz + (1. - OxyyPxzz)*fabs(mxxyPyzz) / (fabs(mxxyPyzz) + qudricLimit); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz + (1. - OxyyMxzz)*fabs(mxxyMyzz) / (fabs(mxxyMyzz) + qudricLimit); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz + (1. - OxyyPxzz)*fabs(mxxzPyyz) / (fabs(mxxzPyyz) + qudricLimit); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz + (1. - OxyyMxzz)*fabs(mxxzMyyz) / (fabs(mxxzMyyz) + qudricLimit); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz + (1. - OxyyPxzz)*fabs(mxyyPxzz) / (fabs(mxyyPxzz) + qudricLimit); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz + (1. - OxyyMxzz)*fabs(mxyyMxzz) / (fabs(mxyyMxzz) + qudricLimit); - mxyyMxzz += wadjust * (-mxyyMxzz); - - // linear combinations back - mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - CUMacc += O4 * (-CUMacc); - CUMcac += O4 * (-CUMcac); - CUMcca += O4 * (-CUMcca); - - CUMbbc += O4 * (-CUMbbc); - CUMbcb += O4 * (-CUMbcb); - CUMcbb += O4 * (-CUMcbb); - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - //back cumulants to central moments - //4. - //mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + 2. * mfbba * mfbab); // till 18.05.2015 - //mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + 2. * mfbba * mfabb); // till 18.05.2015 - //mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + 2. * mfbab * mfabb); // till 18.05.2015 - - mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + 2. * mfbba * mfbab); - mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + 2. * mfbba * mfabb); - mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + 2. * mfbab * mfabb); - - mfcca = CUMcca + (mfcaa * mfaca + 2. * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho - 1)*oMdrho; - mfcac = CUMcac + (mfcaa * mfaac + 2. * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho - 1)*oMdrho; - mfacc = CUMacc + (mfaac * mfaca + 2. * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho - 1)*oMdrho; - - //5. - mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + 4. * mfabb * mfbbb + 2. * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho; - mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + 4. * mfbab * mfbbb + 2. * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho; - mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + 4. * mfbba * mfbbb + 2. * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho; - - //6. - mfccc = CUMccc - ((-4. * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - 4. * (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) - - 2. * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) - + (4. * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + 2. * (mfcaa * mfaca * mfaac) - + 16. * mfbba * mfbab * mfabb) - - c1o3* (mfacc + mfcac + mfcca) * oMdrho - c1o9*oMdrho*oMdrho - - c1o9* (mfcaa + mfaca + mfaac) * oMdrho*(1. - 2.* oMdrho) - c1o27* oMdrho * oMdrho*(-2.* oMdrho) - + (2. * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) - c1o27*oMdrho; - - //////////////////////////////////////////////////////////////////////////////////// - //forcing - mfbaa = -mfbaa; - mfaba = -mfaba; - mfaab = -mfaab; - ////////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + 1. * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - 2. * mfaab * vvz + mfaaa * (1. - vz2) - 1. * oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + 1. * oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - 2. * mfabb * vvz + mfaba * (1. - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - 2. * mfacb * vvz + mfaca * (1. - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - 2. * mfbab * vvz + mfbaa * (1. - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - 2. * mfbbb * vvz + mfbba * (1. - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - 2. * mfbcb * vvz + mfbca * (1. - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - 2. * mfcab * vvz + mfcaa * (1. - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - 2. * mfcbb * vvz + mfcba * (1. - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - 2. * mfccb * vvz + mfcca * (1. - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - 2. * mfaba * vvy + mfaaa * (1. - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - 2. * mfabb * vvy + mfaab * (1. - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - 2. * mfabc * vvy + mfaac * (1. - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - 2. * mfbba * vvy + mfbaa * (1. - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - 2. * mfbbb * vvy + mfbab * (1. - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - 2. * mfbbc * vvy + mfbac * (1. - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - 2. * mfcba * vvy + mfcaa * (1. - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - 2. * mfcbb * vvy + mfcab * (1. - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - 2. * mfcbc * vvy + mfcac * (1. - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - 2. * mfbaa * vvx + mfaaa * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - 2. * mfbba * vvx + mfaba * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - 2. * mfbca * vvx + mfaca * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - 2. * mfbab * vvx + mfaab * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - 2. * mfbbb * vvx + mfabb * (1. - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - 2. * mfbcb * vvx + mfacb * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - 2. * mfbac * vvx + mfaac * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - 2. * mfbbc * vvx + mfabc * (1. - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - 2. * mfbcc * vvx + mfacc * (1. - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - - ////////////////////////////////////////////////////////////////////////// - //proof correctness - ////////////////////////////////////////////////////////////////////////// -#ifdef PROOF_CORRECTNESS - real rho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) - + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) - + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - //LBMReal dif = fabs(rho - rho_post); - real dif = rho - rho_post; -#ifdef SINGLEPRECISION - if (dif > 10.0E-7 || dif < -10.0E-7) -#else - if (dif > 10.0E-15 || dif < -10.0E-15) -#endif - { - UB_THROW(UbException(UB_EXARGS, "rho=" + UbSystem::toString(rho) + ", rho_post=" + UbSystem::toString(rho_post) - + " dif=" + UbSystem::toString(dif) - + " rho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3))); - //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 - ////////////////////////////////////////////////////////////////////////// - (*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; - - - - - - - - - - - - - - - - - real ux, uy, uz; - - ux = vvx; - uy = vvy; - uz = vvz; - - - - - //////////////////////////////////////////////////////////////////////////// - // Central Factorized Moment (advection diffusion part) - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - //read distribution - - 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); - - //////////////////////////////////////////////////////////////////////////////////// - real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb)) + (mfbba + mfbbc)) + mfbbb; - - //flocculation - //LBMReal lambda = drho; - - //LBMReal theta = 60 * 1.28172e+06; - //LBMReal alpha = 0.005;// *10.0; - - real gammaDot = sqrt(dxux * dxux + dyuy * dyuy + dzuz * dzuz + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz) / (rho + c1o1); - - real dlambda = c1o1 / theta - alpha * lambda * gammaDot; - - //LBMReal dlambda = one / (T*pow(lambda,m)) - alpha * lambda * gammaDot; - - ////////////////////////////////////////////////////////////////////////// - //collision Factorized Central moment Kernel Geier 2015 - ////////////////////////////////////////////////////////////////////////// - real Mom000 = mfaaa + mfaab + mfaac + mfaba + mfabb + mfabc + mfaca + - mfacb + mfacc + mfbaa + mfbab + mfbac + mfbba + mfbbb + mfbbc + mfbca + - mfbcb + mfbcc + mfcaa + mfcab + mfcac + mfcba + mfcbb + mfcbc + mfcca + mfccb + mfccc; - - Mom000 += dlambda*c1o2; //1 - - //(100)// - real Mom100 = mfaaa*(-1 - ux) + mfaab*(-1 - ux) + mfaac*(-1 - ux) + mfaba*(-1 - ux) + mfabb*(-1 - ux) + mfabc*(-1 - ux) + mfaca*(-1 - ux) + - mfacb*(-1 - ux) + mfacc*(-1 - ux) + mfcaa*(1 - ux) + mfcab*(1 - ux) + mfcac*(1 - ux) + mfcba*(1 - ux) + mfcbb*(1 - ux) + - mfcbc*(1 - ux) + mfcca*(1 - ux) + mfccb*(1 - ux) + mfccc*(1 - ux) - mfbaa*ux - mfbab*ux - mfbac*ux - mfbba*ux - mfbbb*ux - - mfbbc*ux - mfbca*ux - mfbcb*ux - mfbcc*ux; - - real Mom010 = mfaaa*(-1 - uy) + mfaab*(-1 - uy) + mfaac*(-1 - uy) + mfbaa*(-1 - uy) + mfbab*(-1 - uy) + mfbac*(-1 - uy) + mfcaa*(-1 - uy) + - mfcab*(-1 - uy) + mfcac*(-1 - uy) + mfaca*(1 - uy) + mfacb*(1 - uy) + mfacc*(1 - uy) + mfbca*(1 - uy) + mfbcb*(1 - uy) + - mfbcc*(1 - uy) + mfcca*(1 - uy) + mfccb*(1 - uy) + mfccc*(1 - uy) - mfaba*uy - mfabb*uy - mfabc*uy - mfbba*uy - mfbbb*uy - - mfbbc*uy - mfcba*uy - mfcbb*uy - mfcbc*uy; - - real Mom001 = mfaaa*(-1 - uz) + mfaba*(-1 - uz) + mfaca*(-1 - uz) + mfbaa*(-1 - uz) + mfbba*(-1 - uz) + mfbca*(-1 - uz) + mfcaa*(-1 - uz) + - mfcba*(-1 - uz) + mfcca*(-1 - uz) + mfaac*(1 - uz) + mfabc*(1 - uz) + mfacc*(1 - uz) + mfbac*(1 - uz) + mfbbc*(1 - uz) + - mfbcc*(1 - uz) + mfcac*(1 - uz) + mfcbc*(1 - uz) + mfccc*(1 - uz) - mfaab*uz - mfabb*uz - mfacb*uz - mfbab*uz - mfbbb*uz - - mfbcb*uz - mfcab*uz - mfcbb*uz - mfccb*uz; - //// - - //(110)// - real Mom110 = mfaaa*(-1 - ux)*(-1 - uy) + mfaab*(-1 - ux)*(-1 - uy) + mfaac*(-1 - ux)*(-1 - uy) + mfcaa*(1 - ux)*(-1 - uy) + - mfcab*(1 - ux)*(-1 - uy) + mfcac*(1 - ux)*(-1 - uy) - mfbaa*ux*(-1 - uy) - mfbab*ux*(-1 - uy) - mfbac*ux*(-1 - uy) + - mfaca*(-1 - ux)*(1 - uy) + mfacb*(-1 - ux)*(1 - uy) + mfacc*(-1 - ux)*(1 - uy) + mfcca*(1 - ux)*(1 - uy) + mfccb*(1 - ux)*(1 - uy) + - mfccc*(1 - ux)*(1 - uy) - mfbca*ux*(1 - uy) - mfbcb*ux*(1 - uy) - mfbcc*ux*(1 - uy) - mfaba*(-1 - ux)*uy - mfabb*(-1 - ux)*uy - - mfabc*(-1 - ux)*uy - mfcba*(1 - ux)*uy - mfcbb*(1 - ux)*uy - mfcbc*(1 - ux)*uy + mfbba*ux*uy + mfbbb*ux*uy + mfbbc*ux*uy; - - real Mom101 = mfaaa*(-1 - ux)*(-1 - uz) + mfaba*(-1 - ux)*(-1 - uz) + mfaca*(-1 - ux)*(-1 - uz) + mfcaa*(1 - ux)*(-1 - uz) + - mfcba*(1 - ux)*(-1 - uz) + mfcca*(1 - ux)*(-1 - uz) - mfbaa*ux*(-1 - uz) - mfbba*ux*(-1 - uz) - mfbca*ux*(-1 - uz) + - mfaac*(-1 - ux)*(1 - uz) + mfabc*(-1 - ux)*(1 - uz) + mfacc*(-1 - ux)*(1 - uz) + mfcac*(1 - ux)*(1 - uz) + mfcbc*(1 - ux)*(1 - uz) + - mfccc*(1 - ux)*(1 - uz) - mfbac*ux*(1 - uz) - mfbbc*ux*(1 - uz) - mfbcc*ux*(1 - uz) - mfaab*(-1 - ux)*uz - mfabb*(-1 - ux)*uz - - mfacb*(-1 - ux)*uz - mfcab*(1 - ux)*uz - mfcbb*(1 - ux)*uz - mfccb*(1 - ux)*uz + mfbab*ux*uz + mfbbb*ux*uz + mfbcb*ux*uz; - - real Mom011 = mfaaa*(-1 - uy)*(-1 - uz) + mfbaa*(-1 - uy)*(-1 - uz) + mfcaa*(-1 - uy)*(-1 - uz) + mfaca*(1 - uy)*(-1 - uz) + - mfbca*(1 - uy)*(-1 - uz) + mfcca*(1 - uy)*(-1 - uz) - mfaba*uy*(-1 - uz) - mfbba*uy*(-1 - uz) - mfcba*uy*(-1 - uz) + - mfaac*(-1 - uy)*(1 - uz) + mfbac*(-1 - uy)*(1 - uz) + mfcac*(-1 - uy)*(1 - uz) + mfacc*(1 - uy)*(1 - uz) + mfbcc*(1 - uy)*(1 - uz) + - mfccc*(1 - uy)*(1 - uz) - mfabc*uy*(1 - uz) - mfbbc*uy*(1 - uz) - mfcbc*uy*(1 - uz) - mfaab*(-1 - uy)*uz - mfbab*(-1 - uy)*uz - - mfcab*(-1 - uy)*uz - mfacb*(1 - uy)*uz - mfbcb*(1 - uy)*uz - mfccb*(1 - uy)*uz + mfabb*uy*uz + mfbbb*uy*uz + mfcbb*uy*uz; - //// - - real Mom111 = mfaaa*(-1 - ux)*(-1 - uy)*(-1 - uz) + mfcaa*(1 - ux)*(-1 - uy)*(-1 - uz) - mfbaa*ux*(-1 - uy)*(-1 - uz) + - mfaca*(-1 - ux)*(1 - uy)*(-1 - uz) + mfcca*(1 - ux)*(1 - uy)*(-1 - uz) - mfbca*ux*(1 - uy)*(-1 - uz) - - mfaba*(-1 - ux)*uy*(-1 - uz) - mfcba*(1 - ux)*uy*(-1 - uz) + mfbba*ux*uy*(-1 - uz) + mfaac*(-1 - ux)*(-1 - uy)*(1 - uz) + - mfcac*(1 - ux)*(-1 - uy)*(1 - uz) - mfbac*ux*(-1 - uy)*(1 - uz) + mfacc*(-1 - ux)*(1 - uy)*(1 - uz) + - mfccc*(1 - ux)*(1 - uy)*(1 - uz) - mfbcc*ux*(1 - uy)*(1 - uz) - mfabc*(-1 - ux)*uy*(1 - uz) - mfcbc*(1 - ux)*uy*(1 - uz) + - mfbbc*ux*uy*(1 - uz) - mfaab*(-1 - ux)*(-1 - uy)*uz - mfcab*(1 - ux)*(-1 - uy)*uz + mfbab*ux*(-1 - uy)*uz - - mfacb*(-1 - ux)*(1 - uy)*uz - mfccb*(1 - ux)*(1 - uy)*uz + mfbcb*ux*(1 - uy)*uz + mfabb*(-1 - ux)*uy*uz + mfcbb*(1 - ux)*uy*uz - - mfbbb*ux*uy*uz; - - //(200)// - real Mom200 = ((mfcaa + mfcab + mfcac + mfcba + mfcbb + mfcbc + mfcca + mfccb + - mfccc)*pow(-1 + ux, 2) + - (mfbaa + mfbab + mfbac + mfbba + mfbbb + mfbbc + mfbca + - mfbcb + mfbcc)*pow(ux, 2) + - (mfaaa + mfaab + mfaac + mfaba + mfabb + mfabc + mfaca + - mfacb + mfacc)*pow(1 + ux, 2)) - Mom000 / 3; - - real Mom020 = ((mfaca + mfacb + mfacc)*pow(-1 + uy, 2) + - (mfbca + mfbcb + mfbcc)*pow(-1 + uy, 2) + - (mfcca + mfccb + mfccc)*pow(-1 + uy, 2) + - (mfaba + mfabb + mfabc)*pow(uy, 2) + - (mfbba + mfbbb + mfbbc)*pow(uy, 2) + - (mfcba + mfcbb + mfcbc)*pow(uy, 2) + - (mfaaa + mfaab + mfaac)*pow(1 + uy, 2) + - (mfbaa + mfbab + mfbac)*pow(1 + uy, 2) + - (mfcaa + mfcab + mfcac)*pow(1 + uy, 2)) - Mom000 / 3; - - real Mom002 = (mfaba + mfabc + mfaca + mfacc + mfbba + mfbbc + mfbca + mfbcc + - mfcba + mfcbc + mfcca + mfccc + mfaac*pow(-1 + uz, 2) + - mfbac*pow(-1 + uz, 2) + mfcac*pow(-1 + uz, 2) + - 2 * mfaba*uz - 2 * mfabc*uz + 2 * mfaca*uz - 2 * mfacc*uz + - 2 * mfbba*uz - 2 * mfbbc*uz + 2 * mfbca*uz - 2 * mfbcc*uz + - 2 * mfcba*uz - 2 * mfcbc*uz + 2 * mfcca*uz - 2 * mfccc*uz + - mfaab*pow(uz, 2) + mfaba*pow(uz, 2) + mfabb*pow(uz, 2) + - mfabc*pow(uz, 2) + mfaca*pow(uz, 2) + mfacb*pow(uz, 2) + - mfacc*pow(uz, 2) + mfbab*pow(uz, 2) + mfbba*pow(uz, 2) + - mfbbb*pow(uz, 2) + mfbbc*pow(uz, 2) + mfbca*pow(uz, 2) + - mfbcb*pow(uz, 2) + mfbcc*pow(uz, 2) + mfcab*pow(uz, 2) + - mfcba*pow(uz, 2) + mfcbb*pow(uz, 2) + mfcbc*pow(uz, 2) + - mfcca*pow(uz, 2) + mfccb*pow(uz, 2) + mfccc*pow(uz, 2) + - mfaaa*pow(1 + uz, 2) + mfbaa*pow(1 + uz, 2) + - mfcaa*pow(1 + uz, 2)) - Mom000 / 3; - //// - - //(210)// - real Mom210 = (pow(1 + ux, 2)*(-((mfaca + mfacb + mfacc)*(-1 + uy)) - - (mfaba + mfabb + mfabc)*uy - - (mfaaa + mfaab + mfaac)*(1 + uy)) + - pow(ux, 2)*(-((mfbca + mfbcb + mfbcc)*(-1 + uy)) - - (mfbba + mfbbb + mfbbc)*uy - - (mfbaa + mfbab + mfbac)*(1 + uy)) + - pow(-1 + ux, 2)*(-((mfcca + mfccb + mfccc)*(-1 + uy)) - - (mfcba + mfcbb + mfcbc)*uy - - (mfcaa + mfcab + mfcac)*(1 + uy))) - Mom010 / 3; - - real Mom201 = (-(pow(1 + ux, 2)*(mfaba - mfabc + mfaca - mfacc + - mfaac*(-1 + uz) + mfaab*uz + mfaba*uz + mfabb*uz + - mfabc*uz + mfaca*uz + mfacb*uz + mfacc*uz + - mfaaa*(1 + uz))) - - pow(ux, 2)*(mfbba - mfbbc + mfbca - mfbcc + - mfbac*(-1 + uz) + mfbab*uz + mfbba*uz + mfbbb*uz + - mfbbc*uz + mfbca*uz + mfbcb*uz + mfbcc*uz + mfbaa*(1 + uz)) - - pow(-1 + ux, 2)*(mfcba - mfcbc + mfcca - mfccc + - mfcac*(-1 + uz) + mfcab*uz + mfcba*uz + mfcbb*uz + - mfcbc*uz + mfcca*uz + mfccb*uz + mfccc*uz + mfcaa*(1 + uz))) - Mom001 / 3; - - real Mom120 = ((-1 - ux)*((mfaca + mfacb + mfacc)*pow(-1 + uy, 2) + - (mfaba + mfabb + mfabc)*pow(uy, 2) + - (mfaaa + mfaab + mfaac)*pow(1 + uy, 2)) - - ux*((mfbca + mfbcb + mfbcc)*pow(-1 + uy, 2) + - (mfbba + mfbbb + mfbbc)*pow(uy, 2) + - (mfbaa + mfbab + mfbac)*pow(1 + uy, 2)) + - (1 - ux)*((mfcca + mfccb + mfccc)*pow(-1 + uy, 2) + - (mfcba + mfcbb + mfcbc)*pow(uy, 2) + - (mfcaa + mfcab + mfcac)*pow(1 + uy, 2))) - Mom100 / 3; - - - real Mom102 = (-((1 + ux)*(mfaba + mfabc + mfaca + mfacc + - mfaac*pow(-1 + uz, 2) + 2 * mfaba*uz - 2 * mfabc*uz + - 2 * mfaca*uz - 2 * mfacc*uz + mfaab*pow(uz, 2) + - mfaba*pow(uz, 2) + mfabb*pow(uz, 2) + - mfabc*pow(uz, 2) + mfaca*pow(uz, 2) + - mfacb*pow(uz, 2) + mfacc*pow(uz, 2) + - mfaaa*pow(1 + uz, 2))) - - ux*(mfbba + mfbbc + mfbca + mfbcc + mfbac*pow(-1 + uz, 2) + - 2 * mfbba*uz - 2 * mfbbc*uz + 2 * mfbca*uz - 2 * mfbcc*uz + - mfbab*pow(uz, 2) + mfbba*pow(uz, 2) + - mfbbb*pow(uz, 2) + mfbbc*pow(uz, 2) + - mfbca*pow(uz, 2) + mfbcb*pow(uz, 2) + - mfbcc*pow(uz, 2) + mfbaa*pow(1 + uz, 2)) - - (-1 + ux)*(mfcba + mfcbc + mfcca + mfccc + - mfcac*pow(-1 + uz, 2) + 2 * mfcba*uz - 2 * mfcbc*uz + - 2 * mfcca*uz - 2 * mfccc*uz + mfcab*pow(uz, 2) + - mfcba*pow(uz, 2) + mfcbb*pow(uz, 2) + - mfcbc*pow(uz, 2) + mfcca*pow(uz, 2) + - mfccb*pow(uz, 2) + mfccc*pow(uz, 2) + - mfcaa*pow(1 + uz, 2))) - Mom100 / 3; - - real Mom021 = (-(pow(1 + uy, 2)*(mfaac*(-1 + uz) + mfaab*uz + - mfaaa*(1 + uz))) - - pow(uy, 2)*(mfabc*(-1 + uz) + mfabb*uz + mfaba*(1 + uz)) - - pow(-1 + uy, 2)*(mfacc*(-1 + uz) + mfacb*uz + - mfaca*(1 + uz)) - pow(1 + uy, 2)* - (mfbac*(-1 + uz) + mfbab*uz + mfbaa*(1 + uz)) - - pow(uy, 2)*(mfbbc*(-1 + uz) + mfbbb*uz + mfbba*(1 + uz)) - - pow(-1 + uy, 2)*(mfbcc*(-1 + uz) + mfbcb*uz + - mfbca*(1 + uz)) - pow(1 + uy, 2)* - (mfcac*(-1 + uz) + mfcab*uz + mfcaa*(1 + uz)) - - pow(uy, 2)*(mfcbc*(-1 + uz) + mfcbb*uz + mfcba*(1 + uz)) - - pow(-1 + uy, 2)*(mfccc*(-1 + uz) + mfccb*uz + mfcca*(1 + uz))) - Mom001 / 3; - - real Mom012 = (-((1 + uy)*(mfaac*pow(-1 + uz, 2) + mfaab*pow(uz, 2) + - mfaaa*pow(1 + uz, 2))) - - uy*(mfabc*pow(-1 + uz, 2) + mfabb*pow(uz, 2) + - mfaba*pow(1 + uz, 2)) - - (-1 + uy)*(mfacc*pow(-1 + uz, 2) + mfacb*pow(uz, 2) + - mfaca*pow(1 + uz, 2)) - - (1 + uy)*(mfbac*pow(-1 + uz, 2) + mfbab*pow(uz, 2) + - mfbaa*pow(1 + uz, 2)) - - uy*(mfbbc*pow(-1 + uz, 2) + mfbbb*pow(uz, 2) + - mfbba*pow(1 + uz, 2)) - - (-1 + uy)*(mfbcc*pow(-1 + uz, 2) + mfbcb*pow(uz, 2) + - mfbca*pow(1 + uz, 2)) - - (1 + uy)*(mfcac*pow(-1 + uz, 2) + mfcab*pow(uz, 2) + - mfcaa*pow(1 + uz, 2)) - - uy*(mfcbc*pow(-1 + uz, 2) + mfcbb*pow(uz, 2) + - mfcba*pow(1 + uz, 2)) - - (-1 + uy)*(mfccc*pow(-1 + uz, 2) + mfccb*pow(uz, 2) + - mfcca*pow(1 + uz, 2))) - Mom010 / 3; - //// - - - //(220)// - real Mom220 = (pow(1 + ux, 2)*((mfaca + mfacb + mfacc)*pow(-1 + uy, 2) + - (mfaba + mfabb + mfabc)*pow(uy, 2) + - (mfaaa + mfaab + mfaac)*pow(1 + uy, 2)) + - pow(ux, 2)*((mfbca + mfbcb + mfbcc)*pow(-1 + uy, 2) + - (mfbba + mfbbb + mfbbc)*pow(uy, 2) + - (mfbaa + mfbab + mfbac)*pow(1 + uy, 2)) + - pow(-1 + ux, 2)*((mfcca + mfccb + mfccc)*pow(-1 + uy, 2) + - (mfcba + mfcbb + mfcbc)*pow(uy, 2) + - (mfcaa + mfcab + mfcac)*pow(1 + uy, 2))) - Mom000 / 9; - - real Mom202 = (pow(1 + ux, 2)*(mfaba + mfabc + mfaca + mfacc + - mfaac*pow(-1 + uz, 2) + 2 * mfaba*uz - 2 * mfabc*uz + - 2 * mfaca*uz - 2 * mfacc*uz + mfaab*pow(uz, 2) + - mfaba*pow(uz, 2) + mfabb*pow(uz, 2) + - mfabc*pow(uz, 2) + mfaca*pow(uz, 2) + - mfacb*pow(uz, 2) + mfacc*pow(uz, 2) + - mfaaa*pow(1 + uz, 2)) + - pow(ux, 2)*(mfbba + mfbbc + mfbca + mfbcc + - mfbac*pow(-1 + uz, 2) + 2 * mfbba*uz - 2 * mfbbc*uz + - 2 * mfbca*uz - 2 * mfbcc*uz + mfbab*pow(uz, 2) + - mfbba*pow(uz, 2) + mfbbb*pow(uz, 2) + - mfbbc*pow(uz, 2) + mfbca*pow(uz, 2) + - mfbcb*pow(uz, 2) + mfbcc*pow(uz, 2) + - mfbaa*pow(1 + uz, 2)) + - pow(-1 + ux, 2)*(mfcba + mfcbc + mfcca + mfccc + - mfcac*pow(-1 + uz, 2) + 2 * mfcba*uz - 2 * mfcbc*uz + - 2 * mfcca*uz - 2 * mfccc*uz + mfcab*pow(uz, 2) + - mfcba*pow(uz, 2) + mfcbb*pow(uz, 2) + - mfcbc*pow(uz, 2) + mfcca*pow(uz, 2) + - mfccb*pow(uz, 2) + mfccc*pow(uz, 2) + - mfcaa*pow(1 + uz, 2))) - Mom000 / 9; - - real Mom022 = (pow(1 + uy, 2)*(mfaac*pow(-1 + uz, 2) + mfaab*pow(uz, 2) + - mfaaa*pow(1 + uz, 2)) + - pow(uy, 2)*(mfabc*pow(-1 + uz, 2) + mfabb*pow(uz, 2) + - mfaba*pow(1 + uz, 2)) + - pow(-1 + uy, 2)*(mfacc*pow(-1 + uz, 2) + - mfacb*pow(uz, 2) + mfaca*pow(1 + uz, 2)) + - pow(1 + uy, 2)*(mfbac*pow(-1 + uz, 2) + mfbab*pow(uz, 2) + - mfbaa*pow(1 + uz, 2)) + - pow(uy, 2)*(mfbbc*pow(-1 + uz, 2) + mfbbb*pow(uz, 2) + - mfbba*pow(1 + uz, 2)) + - pow(-1 + uy, 2)*(mfbcc*pow(-1 + uz, 2) + - mfbcb*pow(uz, 2) + mfbca*pow(1 + uz, 2)) + - pow(1 + uy, 2)*(mfcac*pow(-1 + uz, 2) + mfcab*pow(uz, 2) + - mfcaa*pow(1 + uz, 2)) + - pow(uy, 2)*(mfcbc*pow(-1 + uz, 2) + mfcbb*pow(uz, 2) + - mfcba*pow(1 + uz, 2)) + - pow(-1 + uy, 2)*(mfccc*pow(-1 + uz, 2) + - mfccb*pow(uz, 2) + mfcca*pow(1 + uz, 2))) - Mom000 / 9; - //// - - //(221)// - real Mom221 = (pow(1 + ux, 2)*(-(pow(1 + uy, 2)* - (mfaac*(-1 + uz) + mfaab*uz + mfaaa*(1 + uz))) - - pow(uy, 2)*(mfabc*(-1 + uz) + mfabb*uz + - mfaba*(1 + uz)) - - pow(-1 + uy, 2)*(mfacc*(-1 + uz) + mfacb*uz + - mfaca*(1 + uz))) + - pow(ux, 2)*(-(pow(1 + uy, 2)* - (mfbac*(-1 + uz) + mfbab*uz + mfbaa*(1 + uz))) - - pow(uy, 2)*(mfbbc*(-1 + uz) + mfbbb*uz + - mfbba*(1 + uz)) - - pow(-1 + uy, 2)*(mfbcc*(-1 + uz) + mfbcb*uz + - mfbca*(1 + uz))) + - pow(-1 + ux, 2)*(-(pow(1 + uy, 2)* - (mfcac*(-1 + uz) + mfcab*uz + mfcaa*(1 + uz))) - - pow(uy, 2)*(mfcbc*(-1 + uz) + mfcbb*uz + - mfcba*(1 + uz)) - - pow(-1 + uy, 2)*(mfccc*(-1 + uz) + mfccb*uz + - mfcca*(1 + uz)))) - Mom001 / 9; - - real Mom212 = (pow(1 + ux, 2)*(-((1 + uy)* - (mfaac*pow(-1 + uz, 2) + mfaab*pow(uz, 2) + - mfaaa*pow(1 + uz, 2))) - - uy*(mfabc*pow(-1 + uz, 2) + mfabb*pow(uz, 2) + - mfaba*pow(1 + uz, 2)) - - (-1 + uy)*(mfacc*pow(-1 + uz, 2) + mfacb*pow(uz, 2) + - mfaca*pow(1 + uz, 2))) + - pow(ux, 2)*(-((1 + uy)* - (mfbac*pow(-1 + uz, 2) + mfbab*pow(uz, 2) + - mfbaa*pow(1 + uz, 2))) - - uy*(mfbbc*pow(-1 + uz, 2) + mfbbb*pow(uz, 2) + - mfbba*pow(1 + uz, 2)) - - (-1 + uy)*(mfbcc*pow(-1 + uz, 2) + mfbcb*pow(uz, 2) + - mfbca*pow(1 + uz, 2))) + - pow(-1 + ux, 2)*(-((1 + uy)* - (mfcac*pow(-1 + uz, 2) + mfcab*pow(uz, 2) + - mfcaa*pow(1 + uz, 2))) - - uy*(mfcbc*pow(-1 + uz, 2) + mfcbb*pow(uz, 2) + - mfcba*pow(1 + uz, 2)) - - (-1 + uy)*(mfccc*pow(-1 + uz, 2) + mfccb*pow(uz, 2) + - mfcca*pow(1 + uz, 2)))) - Mom010 / 9; - - real Mom122 = ((-1 - ux)*(pow(1 + uy, 2)* - (mfaac*pow(-1 + uz, 2) + mfaab*pow(uz, 2) + - mfaaa*pow(1 + uz, 2)) + - pow(uy, 2)*(mfabc*pow(-1 + uz, 2) + mfabb*pow(uz, 2) + - mfaba*pow(1 + uz, 2)) + - pow(-1 + uy, 2)*(mfacc*pow(-1 + uz, 2) + - mfacb*pow(uz, 2) + mfaca*pow(1 + uz, 2))) - - ux*(pow(1 + uy, 2)*(mfbac*pow(-1 + uz, 2) + - mfbab*pow(uz, 2) + mfbaa*pow(1 + uz, 2)) + - pow(uy, 2)*(mfbbc*pow(-1 + uz, 2) + mfbbb*pow(uz, 2) + - mfbba*pow(1 + uz, 2)) + - pow(-1 + uy, 2)*(mfbcc*pow(-1 + uz, 2) + - mfbcb*pow(uz, 2) + mfbca*pow(1 + uz, 2))) + - (1 - ux)*(pow(1 + uy, 2)* - (mfcac*pow(-1 + uz, 2) + mfcab*pow(uz, 2) + - mfcaa*pow(1 + uz, 2)) + - pow(uy, 2)*(mfcbc*pow(-1 + uz, 2) + mfcbb*pow(uz, 2) + - mfcba*pow(1 + uz, 2)) + - pow(-1 + uy, 2)*(mfccc*pow(-1 + uz, 2) + - mfccb*pow(uz, 2) + mfcca*pow(1 + uz, 2)))) - Mom100 / 9; - //// - - //(211)// - real Mom211 = (pow(1 + ux, 2)*((1 + uy)*(mfaac*(-1 + uz) + mfaab*uz + - mfaaa*(1 + uz)) + - uy*(mfabc*(-1 + uz) + mfabb*uz + mfaba*(1 + uz)) + - (-1 + uy)*(mfacc*(-1 + uz) + mfacb*uz + mfaca*(1 + uz))) + - pow(ux, 2)*((1 + uy)*(mfbac*(-1 + uz) + mfbab*uz + - mfbaa*(1 + uz)) + - uy*(mfbbc*(-1 + uz) + mfbbb*uz + mfbba*(1 + uz)) + - (-1 + uy)*(mfbcc*(-1 + uz) + mfbcb*uz + mfbca*(1 + uz))) + - pow(-1 + ux, 2)*((1 + uy)* - (mfcac*(-1 + uz) + mfcab*uz + mfcaa*(1 + uz)) + - uy*(mfcbc*(-1 + uz) + mfcbb*uz + mfcba*(1 + uz)) + - (-1 + uy)*(mfccc*(-1 + uz) + mfccb*uz + mfcca*(1 + uz)))) - Mom011 / 3; - - real Mom121 = ((-1 - ux)*(-(pow(1 + uy, 2)* - (mfaac*(-1 + uz) + mfaab*uz + mfaaa*(1 + uz))) - - pow(uy, 2)*(mfabc*(-1 + uz) + mfabb*uz + - mfaba*(1 + uz)) - - pow(-1 + uy, 2)*(mfacc*(-1 + uz) + mfacb*uz + - mfaca*(1 + uz))) - - ux*(-(pow(1 + uy, 2)*(mfbac*(-1 + uz) + mfbab*uz + - mfbaa*(1 + uz))) - - pow(uy, 2)*(mfbbc*(-1 + uz) + mfbbb*uz + - mfbba*(1 + uz)) - - pow(-1 + uy, 2)*(mfbcc*(-1 + uz) + mfbcb*uz + - mfbca*(1 + uz))) + - (1 - ux)*(-(pow(1 + uy, 2)* - (mfcac*(-1 + uz) + mfcab*uz + mfcaa*(1 + uz))) - - pow(uy, 2)*(mfcbc*(-1 + uz) + mfcbb*uz + - mfcba*(1 + uz)) - - pow(-1 + uy, 2)*(mfccc*(-1 + uz) + mfccb*uz + - mfcca*(1 + uz)))) - Mom101 / 3; - - real Mom112 = ((-1 - ux)*(-((1 + uy)*(mfaac*pow(-1 + uz, 2) + - mfaab*pow(uz, 2) + mfaaa*pow(1 + uz, 2))) - - uy*(mfabc*pow(-1 + uz, 2) + mfabb*pow(uz, 2) + - mfaba*pow(1 + uz, 2)) - - (-1 + uy)*(mfacc*pow(-1 + uz, 2) + mfacb*pow(uz, 2) + - mfaca*pow(1 + uz, 2))) - - ux*(-((1 + uy)*(mfbac*pow(-1 + uz, 2) + mfbab*pow(uz, 2) + - mfbaa*pow(1 + uz, 2))) - - uy*(mfbbc*pow(-1 + uz, 2) + mfbbb*pow(uz, 2) + - mfbba*pow(1 + uz, 2)) - - (-1 + uy)*(mfbcc*pow(-1 + uz, 2) + mfbcb*pow(uz, 2) + - mfbca*pow(1 + uz, 2))) + - (1 - ux)*(-((1 + uy)*(mfcac*pow(-1 + uz, 2) + - mfcab*pow(uz, 2) + mfcaa*pow(1 + uz, 2))) - - uy*(mfcbc*pow(-1 + uz, 2) + mfcbb*pow(uz, 2) + - mfcba*pow(1 + uz, 2)) - - (-1 + uy)*(mfccc*pow(-1 + uz, 2) + mfccb*pow(uz, 2) + - mfcca*pow(1 + uz, 2)))) - Mom110 / 3; - //// - - //(222)// - real Mom222 = (pow(1 + ux, 2)*(pow(1 + uy, 2)* - (mfaac*pow(-1 + uz, 2) + mfaab*pow(uz, 2) + - mfaaa*pow(1 + uz, 2)) + - pow(uy, 2)*(mfabc*pow(-1 + uz, 2) + mfabb*pow(uz, 2) + - mfaba*pow(1 + uz, 2)) + - pow(-1 + uy, 2)*(mfacc*pow(-1 + uz, 2) + - mfacb*pow(uz, 2) + mfaca*pow(1 + uz, 2))) + - pow(ux, 2)*(pow(1 + uy, 2)* - (mfbac*pow(-1 + uz, 2) + mfbab*pow(uz, 2) + - mfbaa*pow(1 + uz, 2)) + - pow(uy, 2)*(mfbbc*pow(-1 + uz, 2) + mfbbb*pow(uz, 2) + - mfbba*pow(1 + uz, 2)) + - pow(-1 + uy, 2)*(mfbcc*pow(-1 + uz, 2) + - mfbcb*pow(uz, 2) + mfbca*pow(1 + uz, 2))) + - pow(-1 + ux, 2)*(pow(1 + uy, 2)* - (mfcac*pow(-1 + uz, 2) + mfcab*pow(uz, 2) + - mfcaa*pow(1 + uz, 2)) + - pow(uy, 2)*(mfcbc*pow(-1 + uz, 2) + mfcbb*pow(uz, 2) + - mfcba*pow(1 + uz, 2)) + - pow(-1 + uy, 2)*(mfccc*pow(-1 + uz, 2) + - mfccb*pow(uz, 2) + mfcca*pow(1 + uz, 2)))) - Mom000 / 27; - //// - - - - - - real Meq000 = drho+dlambda*c1o2; - - - // relaxation Central Moment MRT - - Mom000 = Meq000; - - Mom000 += dlambda*c1o2; - - Mom100 = (1 - collFactorH) * Mom100; - Mom010 = (1 - collFactorH) * Mom010; - Mom001 = (1 - collFactorH) * Mom001; - - Mom110 = 0; - Mom101 = 0; - Mom011 = 0; - - Mom111 = 0; - - //(200)// - Mom200 = Mom000 / 3; - Mom020 = Mom000 / 3; - Mom002 = Mom000 / 3; - //// - - //(210)// - Mom210 = Mom010 / 3; - Mom201 = Mom001 / 3; - Mom120 = Mom100 / 3; - - - Mom102 = Mom100 / 3; - Mom021 = Mom001 / 3; - Mom012 = Mom010 / 3; - //// - - - //(220)// - Mom220 = Mom000 / 9; - Mom202 = Mom000 / 9; - Mom022 = Mom000 / 9; - //// - - //(221)// - Mom221 = Mom001 / 9; - Mom212 = Mom010 / 9; - Mom122 = Mom100 / 9; - //// - - //(211)// - Mom211 = Mom011 / 3; - Mom121 = Mom101 / 3; - Mom112 = Mom110 / 3; - //// - - //(222)// - Mom222 = Mom000 / 27; - //// - - - - //Back transformation to distributions - - mfcbb = (Mom122 + Mom222 + 2 * Mom122*ux + Mom022*ux*(1 + ux) + - 2 * (Mom112 + Mom212 + 2 * Mom112*ux + Mom012*ux*(1 + ux))*uy + - (Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))* - (-1 + pow(uy, 2)) - - 2 * (-Mom221 - Mom021*ux*(1 + ux) - Mom121*(1 + 2 * ux) - - 2 * (Mom111 + Mom211 + 2 * Mom111*ux + Mom011*ux*(1 + ux))* - uy - (Mom101 + Mom201 + 2 * Mom101*ux + - Mom001*ux*(1 + ux))*(-1 + pow(uy, 2)))*uz + - (-Mom220 - Mom020*ux*(1 + ux) - Mom120*(1 + 2 * ux) - - 2 * (Mom110 + Mom210 + 2 * Mom110*ux + Mom010*ux*(1 + ux))* - uy - (Mom100 + Mom200 + 2 * Mom100*ux + - Mom000*ux*(1 + ux))*(-1 + pow(uy, 2)))* - (1 - pow(uz, 2))) / 2.; - mfbcb = (Mom222 + 2 * Mom122*ux + Mom022*(-1 + pow(ux, 2)) + - (Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))*uy* - (1 + uy) + (Mom212 + 2 * Mom112*ux + - Mom012*(-1 + pow(ux, 2)))*(1 + 2 * uy) - - 2 * (Mom021 - Mom221 - 2 * Mom121*ux - Mom021*pow(ux, 2) - - (Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))*uy* - (1 + uy) - (Mom211 + 2 * Mom111*ux + - Mom011*(-1 + pow(ux, 2)))*(1 + 2 * uy))*uz + - (Mom020 - Mom220 - 2 * Mom120*ux - Mom020*pow(ux, 2) - - (Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))*uy* - (1 + uy) - (Mom210 + 2 * Mom110*ux + - Mom010*(-1 + pow(ux, 2)))*(1 + 2 * uy))* - (1 - pow(uz, 2))) / 2.; - mfbbc = (Mom222 + 2 * Mom122*ux + Mom022*(-1 + pow(ux, 2)) + - 2 * (Mom212 + 2 * Mom112*ux + Mom012*(-1 + pow(ux, 2)))*uy + - (Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))* - (-1 + pow(uy, 2)) + - (Mom220 + 2 * Mom120*ux + Mom020*(-1 + pow(ux, 2)) + - 2 * (Mom210 + 2 * Mom110*ux + Mom010*(-1 + pow(ux, 2)))* - uy + (Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))* - (-1 + pow(uy, 2)))*uz*(1 + uz) + - (Mom221 + 2 * Mom121*ux + Mom021*(-1 + pow(ux, 2)) + - 2 * (Mom211 + 2 * Mom111*ux + Mom011*(-1 + pow(ux, 2)))* - uy + (Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))* - (-1 + pow(uy, 2)))*(1 + 2 * uz)) / 2.; - mfccb = (-Mom222 - Mom022*ux*(1 + ux) - Mom122*(1 + 2 * ux) - - (Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))*uy* - (1 + uy) - (Mom112 + Mom212 + 2 * Mom112*ux + - Mom012*ux*(1 + ux))*(1 + 2 * uy) - - 2 * (Mom121 + Mom221 + 2 * Mom121*ux + Mom021*ux*(1 + ux) + - (Mom101 + Mom201 + 2 * Mom101*ux + Mom001*ux*(1 + ux))*uy* - (1 + uy) + (Mom111 + Mom211 + 2 * Mom111*ux + - Mom011*ux*(1 + ux))*(1 + 2 * uy))*uz + - (Mom120 + Mom220 + 2 * Mom120*ux + Mom020*ux*(1 + ux) + - (Mom100 + Mom200 + 2 * Mom100*ux + Mom000*ux*(1 + ux))*uy* - (1 + uy) + (Mom110 + Mom210 + 2 * Mom110*ux + - Mom010*ux*(1 + ux))*(1 + 2 * uy))*(1 - pow(uz, 2))) / 4.; - mfacb = (Mom122 - Mom222 - 2 * Mom122*ux - Mom022*(-1 + ux)*ux - - (Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))*uy* - (1 + uy) - (Mom212 + Mom012*(-1 + ux)*ux + - Mom112*(-1 + 2 * ux))*(1 + 2 * uy) - - 2 * (Mom221 + Mom021*(-1 + ux)*ux + Mom121*(-1 + 2 * ux) + - (Mom201 + Mom001*(-1 + ux)*ux + Mom101*(-1 + 2 * ux))*uy* - (1 + uy) + (Mom211 + Mom011*(-1 + ux)*ux + - Mom111*(-1 + 2 * ux))*(1 + 2 * uy))*uz + - (Mom220 + Mom020*(-1 + ux)*ux + Mom120*(-1 + 2 * ux) + - (Mom200 + Mom000*(-1 + ux)*ux + Mom100*(-1 + 2 * ux))*uy* - (1 + uy) + (Mom210 + Mom010*(-1 + ux)*ux + - Mom110*(-1 + 2 * ux))*(1 + 2 * uy))*(1 - pow(uz, 2))) / 4.; - mfcbc = (-Mom222 - Mom022*ux*(1 + ux) - Mom122*(1 + 2 * ux) - - 2 * (Mom112 + Mom212 + 2 * Mom112*ux + Mom012*ux*(1 + ux))*uy - - (Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))* - (-1 + pow(uy, 2)) + - (-Mom220 - Mom020*ux*(1 + ux) - Mom120*(1 + 2 * ux) - - 2 * (Mom110 + Mom210 + 2 * Mom110*ux + Mom010*ux*(1 + ux))* - uy - (Mom100 + Mom200 + 2 * Mom100*ux + - Mom000*ux*(1 + ux))*(-1 + pow(uy, 2)))*uz*(1 + uz) + - (-Mom221 - Mom021*ux*(1 + ux) - Mom121*(1 + 2 * ux) - - 2 * (Mom111 + Mom211 + 2 * Mom111*ux + Mom011*ux*(1 + ux))* - uy - (Mom101 + Mom201 + 2 * Mom101*ux + - Mom001*ux*(1 + ux))*(-1 + pow(uy, 2)))*(1 + 2 * uz)) / 4.; - mfabc = (Mom122 - Mom222 - 2 * Mom122*ux - Mom022*(-1 + ux)*ux - - 2 * (Mom212 + Mom012*(-1 + ux)*ux + Mom112*(-1 + 2 * ux))*uy - - (Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))* - (-1 + pow(uy, 2)) + - (Mom120 - Mom220 - 2 * Mom120*ux - Mom020*(-1 + ux)*ux - - 2 * (Mom210 + Mom010*(-1 + ux)*ux + Mom110*(-1 + 2 * ux))* - uy - (Mom200 + Mom000*(-1 + ux)*ux + - Mom100*(-1 + 2 * ux))*(-1 + pow(uy, 2)))*uz*(1 + uz) + - (Mom121 - Mom221 - 2 * Mom121*ux - Mom021*(-1 + ux)*ux - - 2 * (Mom211 + Mom011*(-1 + ux)*ux + Mom111*(-1 + 2 * ux))* - uy - (Mom201 + Mom001*(-1 + ux)*ux + - Mom101*(-1 + 2 * ux))*(-1 + pow(uy, 2)))*(1 + 2 * uz)) / 4.; - mfbcc = (Mom022 - Mom222 - 2 * Mom122*ux - Mom022*pow(ux, 2) - - (Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))*uy* - (1 + uy) - (Mom212 + 2 * Mom112*ux + - Mom012*(-1 + pow(ux, 2)))*(1 + 2 * uy) + - (Mom020 - Mom220 - 2 * Mom120*ux - Mom020*pow(ux, 2) - - (Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))*uy* - (1 + uy) - (Mom210 + 2 * Mom110*ux + - Mom010*(-1 + pow(ux, 2)))*(1 + 2 * uy))*uz*(1 + uz) + - (Mom021 - Mom221 - 2 * Mom121*ux - Mom021*pow(ux, 2) - - (Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))*uy* - (1 + uy) - (Mom211 + 2 * Mom111*ux + - Mom011*(-1 + pow(ux, 2)))*(1 + 2 * uy))*(1 + 2 * uz)) / 4.; - mfbac = (Mom022 - Mom222 - 2 * Mom122*ux - Mom022*pow(ux, 2) - - (Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))* - (-1 + uy)*uy - (Mom212 + 2 * Mom112*ux + - Mom012*(-1 + pow(ux, 2)))*(-1 + 2 * uy) + - (Mom020 - Mom220 - 2 * Mom120*ux - Mom020*pow(ux, 2) - - (Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))* - (-1 + uy)*uy - (Mom210 + 2 * Mom110*ux + - Mom010*(-1 + pow(ux, 2)))*(-1 + 2 * uy))*uz*(1 + uz) + - (Mom021 - Mom221 - 2 * Mom121*ux - Mom021*pow(ux, 2) - - (Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))* - (-1 + uy)*uy - (Mom211 + 2 * Mom111*ux + - Mom011*(-1 + pow(ux, 2)))*(-1 + 2 * uy))*(1 + 2 * uz)) / 4.; - mfccc = (Mom122 + Mom222 + 2 * Mom122*ux + Mom022*ux*(1 + ux) + - (Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))*uy* - (1 + uy) + (Mom112 + Mom212 + 2 * Mom112*ux + - Mom012*ux*(1 + ux))*(1 + 2 * uy) + - (Mom120 + Mom220 + 2 * Mom120*ux + Mom020*ux*(1 + ux) + - (Mom100 + Mom200 + 2 * Mom100*ux + Mom000*ux*(1 + ux))*uy* - (1 + uy) + (Mom110 + Mom210 + 2 * Mom110*ux + - Mom010*ux*(1 + ux))*(1 + 2 * uy))*uz*(1 + uz) + - (Mom121 + Mom221 + 2 * Mom121*ux + Mom021*ux*(1 + ux) + - (Mom101 + Mom201 + 2 * Mom101*ux + Mom001*ux*(1 + ux))*uy* - (1 + uy) + (Mom111 + Mom211 + 2 * Mom111*ux + - Mom011*ux*(1 + ux))*(1 + 2 * uy))*(1 + 2 * uz)) / 8.; - mfacc = (Mom222 + Mom022*(-1 + ux)*ux + Mom122*(-1 + 2 * ux) + - (Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))*uy* - (1 + uy) + (Mom212 + Mom012*(-1 + ux)*ux + - Mom112*(-1 + 2 * ux))*(1 + 2 * uy) + - (Mom220 + Mom020*(-1 + ux)*ux + Mom120*(-1 + 2 * ux) + - (Mom200 + Mom000*(-1 + ux)*ux + Mom100*(-1 + 2 * ux))*uy* - (1 + uy) + (Mom210 + Mom010*(-1 + ux)*ux + - Mom110*(-1 + 2 * ux))*(1 + 2 * uy))*uz*(1 + uz) + - (Mom221 + Mom021*(-1 + ux)*ux + Mom121*(-1 + 2 * ux) + - (Mom201 + Mom001*(-1 + ux)*ux + Mom101*(-1 + 2 * ux))*uy* - (1 + uy) + (Mom211 + Mom011*(-1 + ux)*ux + - Mom111*(-1 + 2 * ux))*(1 + 2 * uy))*(1 + 2 * uz)) / 8.; - mfcac = (Mom122 + Mom222 + 2 * Mom122*ux + Mom022*ux*(1 + ux) + - (Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))* - (-1 + uy)*uy + (Mom112 + Mom212 + 2 * Mom112*ux + - Mom012*ux*(1 + ux))*(-1 + 2 * uy) + - (Mom120 + Mom220 + 2 * Mom120*ux + Mom020*ux*(1 + ux) + - (Mom100 + Mom200 + 2 * Mom100*ux + Mom000*ux*(1 + ux))* - (-1 + uy)*uy + (Mom110 + Mom210 + 2 * Mom110*ux + - Mom010*ux*(1 + ux))*(-1 + 2 * uy))*uz*(1 + uz) + - (Mom121 + Mom221 + 2 * Mom121*ux + Mom021*ux*(1 + ux) + - (Mom101 + Mom201 + 2 * Mom101*ux + Mom001*ux*(1 + ux))* - (-1 + uy)*uy + (Mom111 + Mom211 + 2 * Mom111*ux + - Mom011*ux*(1 + ux))*(-1 + 2 * uy))*(1 + 2 * uz)) / 8.; - mfaac = (Mom222 + Mom022*(-1 + ux)*ux + Mom122*(-1 + 2 * ux) + - (Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))* - (-1 + uy)*uy + (Mom212 + Mom012*(-1 + ux)*ux + - Mom112*(-1 + 2 * ux))*(-1 + 2 * uy) + - (Mom220 + Mom020*(-1 + ux)*ux + Mom120*(-1 + 2 * ux) + - (Mom200 + Mom000*(-1 + ux)*ux + Mom100*(-1 + 2 * ux))* - (-1 + uy)*uy + (Mom210 + Mom010*(-1 + ux)*ux + - Mom110*(-1 + 2 * ux))*(-1 + 2 * uy))*uz*(1 + uz) + - (Mom221 + Mom021*(-1 + ux)*ux + Mom121*(-1 + 2 * ux) + - (Mom201 + Mom001*(-1 + ux)*ux + Mom101*(-1 + 2 * ux))* - (-1 + uy)*uy + (Mom211 + Mom011*(-1 + ux)*ux + - Mom111*(-1 + 2 * ux))*(-1 + 2 * uy))*(1 + 2 * uz)) / 8.; - - mfabb = (Mom222 + Mom022*(-1 + ux)*ux + Mom122*(-1 + 2 * ux) + - 2 * (Mom212 + Mom012*(-1 + ux)*ux + Mom112*(-1 + 2 * ux))*uy + - (Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))* - (-1 + pow(uy, 2)) - - 2 * (Mom121 - Mom221 - 2 * Mom121*ux - Mom021*(-1 + ux)*ux - - 2 * (Mom211 + Mom011*(-1 + ux)*ux + Mom111*(-1 + 2 * ux))* - uy - (Mom201 + Mom001*(-1 + ux)*ux + - Mom101*(-1 + 2 * ux))*(-1 + pow(uy, 2)))*uz + - (Mom120 - Mom220 - 2 * Mom120*ux - Mom020*(-1 + ux)*ux - - 2 * (Mom210 + Mom010*(-1 + ux)*ux + Mom110*(-1 + 2 * ux))* - uy - (Mom200 + Mom000*(-1 + ux)*ux + - Mom100*(-1 + 2 * ux))*(-1 + pow(uy, 2)))* - (1 - pow(uz, 2))) / 2.; - mfbab = (Mom222 + 2 * Mom122*ux + Mom022*(-1 + pow(ux, 2)) + - (Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))* - (-1 + uy)*uy + (Mom212 + 2 * Mom112*ux + - Mom012*(-1 + pow(ux, 2)))*(-1 + 2 * uy) - - 2 * (Mom021 - Mom221 - 2 * Mom121*ux - Mom021*pow(ux, 2) - - (Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))* - (-1 + uy)*uy - (Mom211 + 2 * Mom111*ux + - Mom011*(-1 + pow(ux, 2)))*(-1 + 2 * uy))*uz + - (Mom020 - Mom220 - 2 * Mom120*ux - Mom020*pow(ux, 2) - - (Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))* - (-1 + uy)*uy - (Mom210 + 2 * Mom110*ux + - Mom010*(-1 + pow(ux, 2)))*(-1 + 2 * uy))* - (1 - pow(uz, 2))) / 2.; - mfbba = (Mom222 + 2 * Mom122*ux + Mom022*(-1 + pow(ux, 2)) + - 2 * (Mom212 + 2 * Mom112*ux + Mom012*(-1 + pow(ux, 2)))*uy + - (Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))* - (-1 + pow(uy, 2)) + - (Mom220 + 2 * Mom120*ux + Mom020*(-1 + pow(ux, 2)) + - 2 * (Mom210 + 2 * Mom110*ux + Mom010*(-1 + pow(ux, 2)))* - uy + (Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))* - (-1 + pow(uy, 2)))*(-1 + uz)*uz + - (Mom221 + 2 * Mom121*ux + Mom021*(-1 + pow(ux, 2)) + - 2 * (Mom211 + 2 * Mom111*ux + Mom011*(-1 + pow(ux, 2)))* - uy + (Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))* - (-1 + pow(uy, 2)))*(-1 + 2 * uz)) / 2.; - mfaab = (Mom122 - Mom222 - 2 * Mom122*ux - Mom022*(-1 + ux)*ux - - (Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))* - (-1 + uy)*uy - (Mom212 + Mom012*(-1 + ux)*ux + - Mom112*(-1 + 2 * ux))*(-1 + 2 * uy) - - 2 * (Mom221 + Mom021*(-1 + ux)*ux + Mom121*(-1 + 2 * ux) + - (Mom201 + Mom001*(-1 + ux)*ux + Mom101*(-1 + 2 * ux))* - (-1 + uy)*uy + (Mom211 + Mom011*(-1 + ux)*ux + - Mom111*(-1 + 2 * ux))*(-1 + 2 * uy))*uz + - (Mom220 + Mom020*(-1 + ux)*ux + Mom120*(-1 + 2 * ux) + - (Mom200 + Mom000*(-1 + ux)*ux + Mom100*(-1 + 2 * ux))* - (-1 + uy)*uy + (Mom210 + Mom010*(-1 + ux)*ux + - Mom110*(-1 + 2 * ux))*(-1 + 2 * uy))*(1 - pow(uz, 2))) / 4.; - mfcab = (-Mom222 - Mom022*ux*(1 + ux) - Mom122*(1 + 2 * ux) - - (Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))* - (-1 + uy)*uy - (Mom112 + Mom212 + 2 * Mom112*ux + - Mom012*ux*(1 + ux))*(-1 + 2 * uy) - - 2 * (Mom121 + Mom221 + 2 * Mom121*ux + Mom021*ux*(1 + ux) + - (Mom101 + Mom201 + 2 * Mom101*ux + Mom001*ux*(1 + ux))* - (-1 + uy)*uy + (Mom111 + Mom211 + 2 * Mom111*ux + - Mom011*ux*(1 + ux))*(-1 + 2 * uy))*uz + - (Mom120 + Mom220 + 2 * Mom120*ux + Mom020*ux*(1 + ux) + - (Mom100 + Mom200 + 2 * Mom100*ux + Mom000*ux*(1 + ux))* - (-1 + uy)*uy + (Mom110 + Mom210 + 2 * Mom110*ux + - Mom010*ux*(1 + ux))*(-1 + 2 * uy))*(1 - pow(uz, 2))) / 4.; - mfaba = (Mom122 - Mom222 - 2 * Mom122*ux - Mom022*(-1 + ux)*ux - 2 * (Mom212 + Mom012*(-1 + ux)*ux + Mom112*(-1 + 2 * ux))*uy - - (Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))*(-1 + pow(uy, 2)) + - (Mom120 - Mom220 - 2 * Mom120*ux - Mom020*(-1 + ux)*ux - 2 * (Mom210 + Mom010*(-1 + ux)*ux + Mom110*(-1 + 2 * ux))*uy - - (Mom200 + Mom000*(-1 + ux)*ux + Mom100*(-1 + 2 * ux))*(-1 + pow(uy, 2)))*(-1 + uz)*uz + - (Mom121 - Mom221 - 2 * Mom121*ux - Mom021*(-1 + ux)*ux - 2 * (Mom211 + Mom011*(-1 + ux)*ux + Mom111*(-1 + 2 * ux))*uy - - (Mom201 + Mom001*(-1 + ux)*ux + Mom101*(-1 + 2 * ux))*(-1 + pow(uy, 2)))*(-1 + 2 * uz)) / 4.; - mfcba = (-Mom222 - Mom022*ux*(1 + ux) - Mom122*(1 + 2 * ux) - 2 * (Mom112 + Mom212 + 2 * Mom112*ux + Mom012*ux*(1 + ux))*uy - - (Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))*(-1 + pow(uy, 2)) + - (-Mom220 - Mom020*ux*(1 + ux) - Mom120*(1 + 2 * ux) - 2 * (Mom110 + Mom210 + 2 * Mom110*ux + Mom010*ux*(1 + ux))*uy - - (Mom100 + Mom200 + 2 * Mom100*ux + Mom000*ux*(1 + ux))*(-1 + pow(uy, 2)))*(-1 + uz)*uz + - (-Mom221 - Mom021*ux*(1 + ux) - Mom121*(1 + 2 * ux) - 2 * (Mom111 + Mom211 + 2 * Mom111*ux + Mom011*ux*(1 + ux))*uy - - (Mom101 + Mom201 + 2 * Mom101*ux + Mom001*ux*(1 + ux))*(-1 + pow(uy, 2)))*(-1 + 2 * uz)) / 4.; - mfbaa = (Mom022 - Mom222 - 2 * Mom122*ux - Mom022*pow(ux, 2) - (Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))*(-1 + uy)*uy - - (Mom212 + 2 * Mom112*ux + Mom012*(-1 + pow(ux, 2)))*(-1 + 2 * uy) + - (Mom020 - Mom220 - 2 * Mom120*ux - Mom020*pow(ux, 2) - - (Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))*(-1 + uy)*uy - - (Mom210 + 2 * Mom110*ux + Mom010*(-1 + pow(ux, 2)))*(-1 + 2 * uy))*(-1 + uz)*uz + - (Mom021 - Mom221 - 2 * Mom121*ux - Mom021*pow(ux, 2) - - (Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))*(-1 + uy)*uy - - (Mom211 + 2 * Mom111*ux + Mom011*(-1 + pow(ux, 2)))*(-1 + 2 * uy))*(-1 + 2 * uz)) / 4.; - mfbca = (Mom022 - Mom222 - 2 * Mom122*ux - Mom022*pow(ux, 2) - (Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))*uy*(1 + uy) - - (Mom212 + 2 * Mom112*ux + Mom012*(-1 + pow(ux, 2)))*(1 + 2 * uy) + - (Mom020 - Mom220 - 2 * Mom120*ux - Mom020*pow(ux, 2) - - (Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))*uy*(1 + uy) - - (Mom210 + 2 * Mom110*ux + Mom010*(-1 + pow(ux, 2)))*(1 + 2 * uy))*(-1 + uz)*uz + - (Mom021 - Mom221 - 2 * Mom121*ux - Mom021*pow(ux, 2) - - (Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))*uy*(1 + uy) - - (Mom211 + 2 * Mom111*ux + Mom011*(-1 + pow(ux, 2)))*(1 + 2 * uy))*(-1 + 2 * uz)) / 4.; - mfaaa = (Mom222 + Mom022*(-1 + ux)*ux + Mom122*(-1 + 2 * ux) + (Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))*(-1 + uy)*uy + - (Mom212 + Mom012*(-1 + ux)*ux + Mom112*(-1 + 2 * ux))*(-1 + 2 * uy) + - (Mom220 + Mom020*(-1 + ux)*ux + Mom120*(-1 + 2 * ux) + - (Mom200 + Mom000*(-1 + ux)*ux + Mom100*(-1 + 2 * ux))*(-1 + uy)*uy + - (Mom210 + Mom010*(-1 + ux)*ux + Mom110*(-1 + 2 * ux))*(-1 + 2 * uy))*(-1 + uz)*uz + - (Mom221 + Mom021*(-1 + ux)*ux + Mom121*(-1 + 2 * ux) + - (Mom201 + Mom001*(-1 + ux)*ux + Mom101*(-1 + 2 * ux))*(-1 + uy)*uy + - (Mom211 + Mom011*(-1 + ux)*ux + Mom111*(-1 + 2 * ux))*(-1 + 2 * uy))*(-1 + 2 * uz)) / 8.; - mfcaa = (Mom122 + Mom222 + 2 * Mom122*ux + Mom022*ux*(1 + ux) + - (Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))*(-1 + uy)*uy + - (Mom112 + Mom212 + 2 * Mom112*ux + Mom012*ux*(1 + ux))*(-1 + 2 * uy) + - (Mom120 + Mom220 + 2 * Mom120*ux + Mom020*ux*(1 + ux) + - (Mom100 + Mom200 + 2 * Mom100*ux + Mom000*ux*(1 + ux))*(-1 + uy)*uy + - (Mom110 + Mom210 + 2 * Mom110*ux + Mom010*ux*(1 + ux))*(-1 + 2 * uy))*(-1 + uz)*uz + - (Mom121 + Mom221 + 2 * Mom121*ux + Mom021*ux*(1 + ux) + - (Mom101 + Mom201 + 2 * Mom101*ux + Mom001*ux*(1 + ux))*(-1 + uy)*uy + - (Mom111 + Mom211 + 2 * Mom111*ux + Mom011*ux*(1 + ux))*(-1 + 2 * uy))*(-1 + 2 * uz)) / 8.; - mfaca = (Mom222 + Mom022*(-1 + ux)*ux + Mom122*(-1 + 2 * ux) + (Mom202 + Mom002*(-1 + ux)*ux + Mom102*(-1 + 2 * ux))*uy*(1 + uy) + - (Mom212 + Mom012*(-1 + ux)*ux + Mom112*(-1 + 2 * ux))*(1 + 2 * uy) + - (Mom220 + Mom020*(-1 + ux)*ux + Mom120*(-1 + 2 * ux) + - (Mom200 + Mom000*(-1 + ux)*ux + Mom100*(-1 + 2 * ux))*uy*(1 + uy) + - (Mom210 + Mom010*(-1 + ux)*ux + Mom110*(-1 + 2 * ux))*(1 + 2 * uy))*(-1 + uz)*uz + - (Mom221 + Mom021*(-1 + ux)*ux + Mom121*(-1 + 2 * ux) + - (Mom201 + Mom001*(-1 + ux)*ux + Mom101*(-1 + 2 * ux))*uy*(1 + uy) + - (Mom211 + Mom011*(-1 + ux)*ux + Mom111*(-1 + 2 * ux))*(1 + 2 * uy))*(-1 + 2 * uz)) / 8.; - mfcca = (Mom122 + Mom222 + 2 * Mom122*ux + Mom022*ux*(1 + ux) + (Mom102 + Mom202 + 2 * Mom102*ux + Mom002*ux*(1 + ux))*uy*(1 + uy) + - (Mom112 + Mom212 + 2 * Mom112*ux + Mom012*ux*(1 + ux))*(1 + 2 * uy) + - (Mom120 + Mom220 + 2 * Mom120*ux + Mom020*ux*(1 + ux) + - (Mom100 + Mom200 + 2 * Mom100*ux + Mom000*ux*(1 + ux))*uy*(1 + uy) + - (Mom110 + Mom210 + 2 * Mom110*ux + Mom010*ux*(1 + ux))*(1 + 2 * uy))*(-1 + uz)*uz + - (Mom121 + Mom221 + 2 * Mom121*ux + Mom021*ux*(1 + ux) + - (Mom101 + Mom201 + 2 * Mom101*ux + Mom001*ux*(1 + ux))*uy*(1 + uy) + - (Mom111 + Mom211 + 2 * Mom111*ux + Mom011*ux*(1 + ux))*(1 + 2 * uy))*(-1 + 2 * uz)) / 8.; - - mfbbb = Mom022 - Mom222 - 2 * Mom122*ux - Mom022*pow(ux, 2) - 2 * (Mom212 + 2 * Mom112*ux + Mom012*(-1 + pow(ux, 2)))*uy - - (Mom202 + 2 * Mom102*ux + Mom002*(-1 + pow(ux, 2)))*(-1 + pow(uy, 2)) - - 2 * (Mom221 + 2 * Mom121*ux + Mom021*(-1 + pow(ux, 2)) + 2 * (Mom211 + 2 * Mom111*ux + Mom011*(-1 + pow(ux, 2)))*uy + - (Mom201 + 2 * Mom101*ux + Mom001*(-1 + pow(ux, 2)))*(-1 + pow(uy, 2)))*uz + - (Mom220 + 2 * Mom120*ux + Mom020*(-1 + pow(ux, 2)) + 2 * (Mom210 + 2 * Mom110*ux + Mom010*(-1 + pow(ux, 2)))*uy + - (Mom200 + 2 * Mom100*ux + Mom000*(-1 + pow(ux, 2)))*(-1 + pow(uy, 2)))*(1 - pow(uz, 2)); - - //////////////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - //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; - //UBLOG(logINFO, "lambda ="<<drho_post); -// //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, "Flocculation=" + UbSystem::toString(drho) + ", flocculation post=" + UbSystem::toString(drho_post) -// + " dif=" + UbSystem::toString(dif) -// + " Flocculation 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 - ////////////////////////////////////////////////////////////////////////// - (*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; - ////////////////////////////////////////////////////////////////////////// - - - } - } - } - } - - } -} -////////////////////////////////////////////////////////////////////////// -real ThixotropyLBMKernel::getCalculationTime() -{ - //return timer.getDuration(); - return timer.getTotalTime(); -} -////////////////////////////////////////////////////////////////////////// -void ThixotropyLBMKernel::setCollisionFactorF(real collFactor) -{ - setCollisionFactor(collFactor); - this->collFactorF = collFactor; - -} -////////////////////////////////////////////////////////////////////////// -void ThixotropyLBMKernel::setCollisionFactorH(real collFactor) -{ - this->collFactorH = collFactor; -} -////////////////////////////////////////////////////////////////////////// -real ThixotropyLBMKernel::getCollisionFactorF() const -{ - return this->collFactorF; -} -////////////////////////////////////////////////////////////////////////// -real ThixotropyLBMKernel::getCollisionFactorH() const -{ - return this->collFactorH; -} -void ThixotropyLBMKernel::setAlpha(real alpha) -{ - this->alpha = alpha; -} -real ThixotropyLBMKernel::getAlpha() const -{ - return this->alpha; -} -void ThixotropyLBMKernel::setTheta(real theta) -{ - this->theta = theta; -} -real ThixotropyLBMKernel::getTheta() const -{ - return this->theta; -} -void ThixotropyLBMKernel::swapDistributions() -{ - LBMKernel::swapDistributions(); - dataSet->getHdistributions()->swap(); -} -////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/NonNewtonianFluids/LBM/ThixotropyLBMKernel.h b/src/cpu/NonNewtonianFluids/LBM/ThixotropyLBMKernel.h deleted file mode 100644 index 00b374ed133f58878ed8e1cf541c3fad79ea7c5e..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/LBM/ThixotropyLBMKernel.h +++ /dev/null @@ -1,72 +0,0 @@ -#ifndef ThixotropyLBMKernel_H -#define ThixotropyLBMKernel_H - -#include "LBMKernel.h" -#include "BCSet.h" -#include "D3Q27System.h" -#include "basics/utilities/UbTiming.h" -#include "basics/container/CbArray4D.h" -#include "basics/container/CbArray3D.h" - -class ThixotropyLBMKernel; - -//! \brief Cumulant + Fact. Central LBM kernel. -//! \author Hussein -class ThixotropyLBMKernel : public LBMKernel -{ -public: - //! This option set relaxation parameter: NORMAL - enum Parameter { NORMAL, MAGIC }; -public: - ThixotropyLBMKernel(); - virtual ~ThixotropyLBMKernel(void); - virtual void calculate(int step); - virtual SPtr<LBMKernel> clone(); - real getCalculationTime(); - - void setCollisionFactorF(real collFactor); - void setCollisionFactorH(real collFactor); - real getCollisionFactorF() const; - real getCollisionFactorH() const; - - void setAlpha(real alpha); - real getAlpha() const; - - void setTheta(real theta); - real getTheta() const; - - void swapDistributions(); - -protected: - virtual void initDataSet(); - real f[D3Q27System::ENDF + 1]; - - UbTimer timer; - - real OxyyMxzz; - Parameter parameter; - - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsF; - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsF; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributionsF; - - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributionsH; - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributionsH; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr zeroDistributionsH; - - mu::value_type muX1, muX2, muX3; - mu::value_type muDeltaT; - mu::value_type muNu; - real forcingX1; - real forcingX2; - real forcingX3; - - real collFactorF; - real collFactorH; - - real theta; - real alpha; -}; - -#endif - diff --git a/src/cpu/NonNewtonianFluids/NonNewtonianFluids.h b/src/cpu/NonNewtonianFluids/NonNewtonianFluids.h deleted file mode 100644 index de4bea429adcb1d919504fcb2fcbd0a224794419..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/NonNewtonianFluids.h +++ /dev/null @@ -1,61 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file NonNewtonianFluids.h -//! \ingroup NonNewtonianFluids -//! \author Konstantin Kutscher -//======================================================================================= -#ifndef NonNewtonianFluids_h -#define NonNewtonianFluids_h - -#include "NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.h" -#include "NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.h" -#include "NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.h" -#include "NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.h" -#include "NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.h" -#include "NonNewtonianFluids/BoundaryConditions/RheologyNoSlipBCStrategy.h" -#include "NonNewtonianFluids/BoundaryConditions/RheologyBinghamModelNoSlipBCStrategy.h" -#include "NonNewtonianFluids/BoundaryConditions/RheologyHerschelBulkleyModelNoSlipBCStrategy.h" -#include "NonNewtonianFluids/BoundaryConditions/RheologyPowellEyringModelNoSlipBCStrategy.h" -#include "NonNewtonianFluids/BoundaryConditions/RheologyBinghamModelVelocityBCStrategy.h" - -#include "NonNewtonianFluids/SimulationObservers/CalculateTorqueSimulationObserver.h" -#include "NonNewtonianFluids/SimulationObservers/WriteThixotropyQuantitiesSimulationObserver.h" - -#include "NonNewtonianFluids/LBM/ThixotropyLBMKernel.h" -#include "NonNewtonianFluids/LBM/ThixotropyExpLBMKernel.h" -#include "NonNewtonianFluids/LBM/RheologyBinghamModelLBMKernel.h" -#include "NonNewtonianFluids/LBM/RheologyHerschelBulkleyModelLBMKernel.h" -#include "NonNewtonianFluids/LBM/RheologyInterpolator.h" -#include "NonNewtonianFluids/LBM/Rheology.h" -#include "NonNewtonianFluids/LBM/RheologyK17LBMKernel.h" -#include "NonNewtonianFluids/LBM/RheologyPowellEyringModelLBMKernel.h" - -#include "NonNewtonianFluids/Visitors/NonNewtonianBoundaryConditionsBlockVisitor.h" - -#endif \ No newline at end of file diff --git a/src/cpu/NonNewtonianFluids/SimulationObservers/CalculateTorqueSimulationObserver.cpp b/src/cpu/NonNewtonianFluids/SimulationObservers/CalculateTorqueSimulationObserver.cpp deleted file mode 100644 index d4e9ed564257b9e013b043c33b9e3676ecc220dc..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/SimulationObservers/CalculateTorqueSimulationObserver.cpp +++ /dev/null @@ -1,294 +0,0 @@ -#include "CalculateTorqueSimulationObserver.h" -#include "BCSet.h" - -#include <parallel/Communicator.h> -#include "D3Q27Interactor.h" -#include "UbScheduler.h" -#include "Grid3D.h" -#include "BoundaryConditions.h" -#include "DataSet3D.h" -#include "Block3D.h" -#include "LBMKernel.h" -#include "BCArray3D.h" -#include "EsoTwist3D.h" -#include "DistributionArray3D.h" -#include "NonNewtonianFluids/LBM/Rheology.h" - -CalculateTorqueSimulationObserver::CalculateTorqueSimulationObserver( SPtr<Grid3D> grid, SPtr<UbScheduler> s, const std::string &path_, std::shared_ptr<vf::parallel::Communicator> comm) : SimulationObserver(grid, s), path(path_), comm(comm), torqueX1global(0), torqueX2global(0), torqueX3global(0) -{ - if (comm->getProcessID() == comm->getRoot()) - { - std::ofstream ostr; - std::string fname = path_; - ostr.open(fname.c_str(), std::ios_base::out | std::ios_base::app); - if(!ostr) - { - ostr.clear(); - const std::string path = UbSystem::getPathFromString(fname); - if(path.size()>0){ UbSystem::makeDirectory(path); ostr.open(fname.c_str(), std::ios_base::out | std::ios_base::app);} - if(!ostr) throw UbException(UB_EXARGS,"couldn't open file "+fname); - } - - ostr << "step;"; - ostr << "Tx;"; - ostr << "Ty;"; - ostr << "Tz" << std::endl; - ostr.close(); - } -} -////////////////////////////////////////////////////////////////////////// -CalculateTorqueSimulationObserver::~CalculateTorqueSimulationObserver() -{ - -} -////////////////////////////////////////////////////////////////////////// -void CalculateTorqueSimulationObserver::update( real step ) -{ - if(scheduler->isDue(step) ) - collectData(step); - - UBLOG(logDEBUG3, "D3Q27ForcesSimulationObserver::update:" << step); -} -////////////////////////////////////////////////////////////////////////// -void CalculateTorqueSimulationObserver::collectData( real step ) -{ - calculateForces(); - - if (comm->getProcessID() == comm->getRoot()) - { - int istep = static_cast<int>(step); - std::ofstream ostr; - std::string fname = path; - ostr.open(fname.c_str(), std::ios_base::out | std::ios_base::app); - if(!ostr) - { - ostr.clear(); - std::string path = UbSystem::getPathFromString(fname); - if(path.size()>0){ UbSystem::makeDirectory(path); ostr.open(fname.c_str(), std::ios_base::out | std::ios_base::app);} - if(!ostr) throw UbException(UB_EXARGS,"couldn't open file "+fname); - } - - ostr << istep << ";"; - ostr << torqueX1global << ";"; - ostr << torqueX2global << ";"; - ostr << torqueX3global << ";"; - ostr << Fx << ";"; - ostr << Fy << ";"; - ostr << Fz; - ostr << std::endl; - ostr.close(); - } -} -////////////////////////////////////////////////////////////////////////// -void CalculateTorqueSimulationObserver::calculateForces() -{ - torqueX1global = 0.0; - torqueX2global = 0.0; - torqueX3global = 0.0; - - for(SPtr<D3Q27Interactor> interactor : interactors) - { - real x1Centre = interactor->getGbObject3D()->getX1Centroid(); - real x2Centre = interactor->getGbObject3D()->getX2Centroid(); - real x3Centre = interactor->getGbObject3D()->getX3Centroid(); - - for(BcNodeIndicesMap::value_type t : interactor->getBcNodeIndicesMap()) - { - real torqueX1 = 0.0; - real torqueX2 = 0.0; - real torqueX3 = 0.0; - - SPtr<Block3D> block = t.first; - std::set< std::vector<int> >& transNodeIndicesSet = t.second; - - real deltaX = grid->getDeltaX(block); - - SPtr<ILBMKernel> kernel = block->getKernel(); - - SPtr<BCArray3D> bcArray = kernel->getBCSet()->getBCArray(); - SPtr<DistributionArray3D> distributions = kernel->getDataSet()->getFdistributions(); - - int ghostLayerWidth = kernel->getGhostLayerWidth(); - int minX1 = ghostLayerWidth; - int maxX1 = (int)bcArray->getNX1() - 1 - ghostLayerWidth; - int minX2 = ghostLayerWidth; - int maxX2 = (int)bcArray->getNX2() - 1 - ghostLayerWidth; - int minX3 = ghostLayerWidth; - int maxX3 = (int)bcArray->getNX3() - 1 - ghostLayerWidth; - - for(std::vector<int> node : transNodeIndicesSet) - { - int x1 = node[0]; - int x2 = node[1]; - int x3 = node[2]; - - //without ghost nodes - if (x1 < minX1 || x1 > maxX1 || x2 < minX2 || x2 > maxX2 ||x3 < minX3 || x3 > maxX3 ) continue; - - if(bcArray->isFluid(x1,x2,x3)) //es kann sein, dass der node von einem anderen interactor z.B. als solid gemarkt wurde!!! - { - SPtr<BoundaryConditions> bc = bcArray->getBC(x1,x2,x3); - - Vector3D worldCoordinates = grid->getNodeCoordinates(block, x1, x2, x3); - real rx = (worldCoordinates[0] - x1Centre) / deltaX; - real ry = (worldCoordinates[1] - x2Centre) / deltaX; - real rz = (worldCoordinates[2] - x3Centre) / deltaX; - - // real nx = rx / sqrt(rx * rx + ry * ry + rz * rz); - // real ny = ry / sqrt(rx * rx + ry * ry + rz * rz); - // real nz = rz / sqrt(rx * rx + ry * ry + rz * rz); - - UbTupleDouble3 forceVec = getForces(x1, x2, x3, distributions, bc); - //UbTupleDouble3 forceVec = getForcesFromMoments(x1, x2, x3, kernel, distributions, bc, nx, ny, nz); - //UbTupleDouble3 forceVec = getForcesFromStressTensor(x1, x2, x3, kernel, distributions, bc, nx, ny, nz); - /*real*/ Fx = val<1>(forceVec); - /*real*/ Fy = val<2>(forceVec); - /*real*/ Fz = val<3>(forceVec); - - - - torqueX1 += ry * Fz - rz * Fy; - torqueX2 += rz * Fx - rx * Fz; - torqueX3 += rx * Fy - ry * Fx; - } - } - - torqueX1global += torqueX1; - torqueX2global += torqueX2; - torqueX3global += torqueX3; - } - } - std::vector<real> values; - std::vector<real> rvalues; - values.push_back(torqueX1global); - values.push_back(torqueX2global); - values.push_back(torqueX3global); - - rvalues = comm->gather(values); - if (comm->getProcessID() == comm->getRoot()) - { - torqueX1global = 0.0; - torqueX2global = 0.0; - torqueX3global = 0.0; - - for (int i = 0; i < (int)rvalues.size(); i+=3) - { - torqueX1global += rvalues[i]; - torqueX2global += rvalues[i+1]; - torqueX3global += rvalues[i+2]; - } - } -} -////////////////////////////////////////////////////////////////////////// -UbTupleDouble3 CalculateTorqueSimulationObserver::getForces(int x1, int x2, int x3, SPtr<DistributionArray3D> distributions, SPtr<BoundaryConditions> bc) -{ - UbTupleDouble3 force(0.0,0.0,0.0); - - if(bc) - { - //references to tuple "force" - real& forceX1 = val<1>(force); - real& forceX2 = val<2>(force); - real& forceX3 = val<3>(force); - real f, fnbr; - - dynamicPointerCast<EsoTwist3D>(distributions)->swap(); - - for(int fdir=D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++) - { - if(bc->hasNoSlipBoundaryFlag(fdir) || bc->hasVelocityBoundaryFlag(fdir)) - { - const int invDir = D3Q27System::INVDIR[fdir]; - f = dynamicPointerCast<EsoTwist3D>(distributions)->getPostCollisionDistributionForDirection(x1, x2, x3, invDir); - fnbr = dynamicPointerCast<EsoTwist3D>(distributions)->getPostCollisionDistributionForDirection(x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); - - forceX1 += (f + fnbr) * D3Q27System::DX1[invDir]; - forceX2 += (f + fnbr) * D3Q27System::DX2[invDir]; - forceX3 += (f + fnbr) * D3Q27System::DX3[invDir]; - } - } - - dynamicPointerCast<EsoTwist3D>(distributions)->swap(); - } - - return force; -} -////////////////////////////////////////////////////////////////////////// -UbTupleDouble3 CalculateTorqueSimulationObserver::getForcesFromMoments(int x1, int x2, int x3, SPtr<ILBMKernel> kernel, SPtr<DistributionArray3D> distributions, SPtr<BoundaryConditions> bc, real nx, real ny, real nz) -{ - using namespace vf::basics::constant; - UbTupleDouble3 force(0.0, 0.0, 0.0); - - - if (bc) { - real f[D3Q27System::ENDF + 1]; - distributions->getPreCollisionDistribution(f, x1, x2, x3); - real collFactor = kernel->getCollisionFactor(); - real shearRate = D3Q27System::getShearRate(f, collFactor); - real rho = D3Q27System::getDensity(f); - real omega = Rheology::getBinghamCollFactor(collFactor, shearRate, rho); - std::array<real, 6> moments = D3Q27System::getSecondMoments(f, omega); - - // references to tuple "force" - real &forceX1 = val<1>(force); - real &forceX2 = val<2>(force); - real &forceX3 = val<3>(force); - - real mxx = (moments[0] + moments[1] + moments[2])*c1o3; - real myy = (-c2o1 * moments[1] + moments[2] + moments[0]) * c1o3; - real mzz = (-c2o1 * moments[2] + moments[1] + moments[0]) * c1o3; - real mxy = moments[3]; - real mxz = moments[4]; - real myz = moments[5]; - - forceX1 = mxx *nx + mxy*ny + mxz*nz; - forceX2 = mxy *nx + myy*ny + myz*nz; - forceX3 = mxz *nx + myz*ny + mzz*nz; - } - - return force; -} -////////////////////////////////////////////////////////////////////////// -UbTupleDouble3 CalculateTorqueSimulationObserver::getForcesFromStressTensor(int x1, int x2, int x3, SPtr<ILBMKernel> kernel, SPtr<DistributionArray3D> distributions, SPtr<BoundaryConditions> bc, real nx, real ny, real nz) -{ - using namespace vf::basics::constant; - UbTupleDouble3 force(0.0, 0.0, 0.0); - - if (bc) { - real f[D3Q27System::ENDF + 1]; - distributions->getPreCollisionDistribution(f, x1, x2, x3); - real collFactor = kernel->getCollisionFactor(); - real shearRate = D3Q27System::getShearRate(f, collFactor); - real rho = D3Q27System::getDensity(f); - real omega = Rheology::getBinghamCollFactor(collFactor, shearRate, rho); - std::array<real, 6> stress = D3Q27System::getStressTensor(f, omega); - - // references to tuple "force" - real &forceX1 = val<1>(force); - real &forceX2 = val<2>(force); - real &forceX3 = val<3>(force); - - real &tauXX = stress[0]; - real &tauYY = stress[1]; - real &tauZZ = stress[2]; - real &tauXY = stress[3]; - real &tauXZ = stress[4]; - real &tauYZ = stress[5]; - - //https: // journals.aps.org/pre/pdf/10.1103/PhysRevE.88.013303 - - forceX1 = tauXX * nx + tauXY * ny + tauXZ * nz; - forceX2 = tauXY * nx + tauYY * ny + tauYZ * nz; - forceX3 = tauXZ * nx + tauYZ * ny + tauZZ * nz; - } - - return force; -} -////////////////////////////////////////////////////////////////////////// -void CalculateTorqueSimulationObserver::addInteractor( SPtr<D3Q27Interactor> interactor ) -{ - interactors.push_back(interactor); -} - - - diff --git a/src/cpu/NonNewtonianFluids/SimulationObservers/CalculateTorqueSimulationObserver.h b/src/cpu/NonNewtonianFluids/SimulationObservers/CalculateTorqueSimulationObserver.h deleted file mode 100644 index e1948d95f69daa795fe8ea5e1733b5b8be1f2754..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/SimulationObservers/CalculateTorqueSimulationObserver.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * D3Q27ForcesSimulationObserver.h - * - * Created on: 29.09.2012 - * Author: K. Kucher - */ - -#ifndef CalculateTorqueSimulationObserver_H -#define CalculateTorqueSimulationObserver_H - -#include <PointerDefinitions.h> -#include <string> -#include <vector> - -#include "SimulationObserver.h" -#include "UbTuple.h" -#include "D3Q27System.h" - -class ForceCalculator; -namespace vf::parallel {class Communicator;} -class Grid3D; -class UbScheduler; -class D3Q27Interactor; -class DistributionArray3D; -class BoundaryConditions; -class ILBMKernel; - -class CalculateTorqueSimulationObserver: public SimulationObserver -{ -public: - //! Constructor - CalculateTorqueSimulationObserver(SPtr<Grid3D> grid, SPtr<UbScheduler> s, const std::string &path, std::shared_ptr<vf::parallel::Communicator> comm); - virtual ~CalculateTorqueSimulationObserver(); - void update(real step); - void addInteractor(SPtr<D3Q27Interactor> interactor); -protected: - void collectData(real step); - void calculateForces(); - UbTupleDouble3 getForces(int x1, int x2, int x3, SPtr<DistributionArray3D> distributions, SPtr<BoundaryConditions> bc); - UbTupleDouble3 getForcesFromMoments(int x1, int x2, int x3, SPtr<ILBMKernel> kernel, SPtr<DistributionArray3D> distributions, SPtr<BoundaryConditions> bc, real nx, real ny, real nz); - UbTupleDouble3 getForcesFromStressTensor(int x1, int x2, int x3, SPtr<ILBMKernel> kernel, SPtr<DistributionArray3D> distributions, SPtr<BoundaryConditions> bc, real nx, real ny, real nz); - -private: - std::string path; - std::shared_ptr<vf::parallel::Communicator> comm; - std::vector<SPtr<D3Q27Interactor> > interactors; - real torqueX1global; - real torqueX2global; - real torqueX3global; - - real Fx, Fy, Fz; -}; - - -#endif /* D3Q27ForcesSimulationObserver_H */ diff --git a/src/cpu/NonNewtonianFluids/SimulationObservers/WriteThixotropyQuantitiesSimulationObserver.cpp b/src/cpu/NonNewtonianFluids/SimulationObservers/WriteThixotropyQuantitiesSimulationObserver.cpp deleted file mode 100644 index 4eb5c20109baa9d2368201bf96b7807de0f5cb41..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/SimulationObservers/WriteThixotropyQuantitiesSimulationObserver.cpp +++ /dev/null @@ -1,281 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file WriteMultiphaseQuantitiesCoProcessor.h -//! \ingroup CoProcessors -//! \author Konstantin Kutscher -//======================================================================================= -#include "WriteThixotropyQuantitiesSimulationObserver.h" -#include "LBMKernel.h" -#include "BCSet.h" -#include "UbScheduler.h" -#include "DataSet3D.h" -#include "D3Q27System.h" -#include "BCArray3D.h" -#include <vector> -#include <string> -#include <algorithm> -#include <numeric> -#include "basics/writer/WbWriterVtkXmlASCII.h" -#include "LBM/ThixotropyExpLBMKernel.h" -#include "LBM/Rheology.h" - -using namespace std; - -WriteThixotropyQuantitiesSimulationObserver::WriteThixotropyQuantitiesSimulationObserver() = default; -////////////////////////////////////////////////////////////////////////// -WriteThixotropyQuantitiesSimulationObserver::WriteThixotropyQuantitiesSimulationObserver(SPtr<Grid3D> grid, SPtr<UbScheduler> s, const std::string& path, WbWriter* const writer, SPtr<LBMUnitConverter> conv, std::shared_ptr<vf::parallel::Communicator> comm) : SimulationObserver(grid, s), path(path), writer(writer), conv(conv), comm(comm) -{ - gridRank = comm->getProcessID(); - minInitLevel = this->grid->getCoarsestInitializedLevel(); - maxInitLevel = this->grid->getFinestInitializedLevel(); - - blockVector.resize(maxInitLevel + 1); - - for (int level = minInitLevel; level <= maxInitLevel; level++) - { - grid->getBlocks(level, gridRank, true, blockVector[level]); - } -} -////////////////////////////////////////////////////////////////////////// -void WriteThixotropyQuantitiesSimulationObserver::init() -{ - -} -////////////////////////////////////////////////////////////////////////// -void WriteThixotropyQuantitiesSimulationObserver::update(real step) -{ - if (scheduler->isDue(step)) - collectData(step); - - UBLOG(logDEBUG3, "WriteThixotropyQuantitiesSimulationObserver::update:" << step); -} -////////////////////////////////////////////////////////////////////////// -void WriteThixotropyQuantitiesSimulationObserver::collectData(real step) -{ - int istep = static_cast<int>(step); - //ConcentrationSum = 0; - for (int level = minInitLevel; level <= maxInitLevel; level++) - { - for(SPtr<Block3D> block : blockVector[level]) - { - if (block) - { - addDataMQ(block); - } - } - } - //cout <<"at step = "<< step << ", the sum of Concentration in the domain = "<<ConcentrationSum << endl; - string pfilePath, partPath, subfolder, cfilePath; - - subfolder = "thyxotropy" + UbSystem::toString(istep); - pfilePath = path + "/thyxotropy/" + subfolder; - cfilePath = path + "/thyxotropy/thyxotropy_collection"; - partPath = pfilePath + "/thyxotropy" + UbSystem::toString(gridRank) + "_" + UbSystem::toString(istep); - - - string partName = writer->writeOctsWithNodeData(partPath, nodes, cells, datanames, data); - - size_t found = partName.find_last_of("/"); - string piece = partName.substr(found + 1); - piece = subfolder + "/" + piece; - - vector<string> cellDataNames; - vector<string> pieces = comm->gather(piece); - if (comm->getProcessID() == comm->getRoot()) - { - string pname = WbWriterVtkXmlASCII::getInstance()->writeParallelFile(pfilePath, pieces, datanames, cellDataNames); - found = pname.find_last_of("/"); - piece = pname.substr(found + 1); - - vector<string> filenames; - filenames.push_back(piece); - if (step == SimulationObserver::scheduler->getMinBegin()) - { - WbWriterVtkXmlASCII::getInstance()->writeCollection(cfilePath, filenames, istep, false); - } - else - { - WbWriterVtkXmlASCII::getInstance()->addFilesToCollection(cfilePath, filenames, istep, false); - } - UBLOG(logINFO, "WriteThixotropyQuantitiesSimulationObserver step: " << istep); - } - - clearData(); -} -////////////////////////////////////////////////////////////////////////// -void WriteThixotropyQuantitiesSimulationObserver::clearData() -{ - nodes.clear(); - cells.clear(); - datanames.clear(); - data.clear(); -} -////////////////////////////////////////////////////////////////////////// -void WriteThixotropyQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> block) -{ - UbTupleDouble3 org = grid->getBlockWorldCoordinates(block);; - UbTupleDouble3 nodeOffset = grid->getNodeOffset(block); - real dx = grid->getDeltaX(block); - - //double level = (double)block->getLevel(); - //double blockID = (double)block->getGlobalID(); - - //Diese Daten werden geschrieben: - datanames.resize(0); - datanames.push_back("viscosity"); - //datanames.push_back("lambda"); - //datanames.push_back("ShearRate"); - datanames.push_back("omega"); - //datanames.push_back("Fluxx"); - //datanames.push_back("Fluxy"); - //datanames.push_back("Fluxz"); - //datanames.push_back("delC"); - //datanames.push_back("diff"); - //datanames.push_back("AccumulatedConcentration"); - //datanames.push_back("m100"); - //datanames.push_back("Level"); - //datanames.push_back("BlockID"); - - - - data.resize(datanames.size()); - - SPtr<ILBMKernel> kernel = block->getKernel(); - SPtr<BCArray3D> bcArray = kernel->getBCSet()->getBCArray(); - SPtr<DistributionArray3D> distributionsF = kernel->getDataSet()->getFdistributions(); - //SPtr<DistributionArray3D> distributionsH = kernel->getDataSet()->getHdistributions(); - //LBMReal collFactorF = staticPointerCast<ThixotropyExpLBMKernel>(kernel)->getCollisionFactorF(); - real collFactor = kernel->getCollisionFactor(); - real f[D3Q27System::ENDF + 1]; - //LBMReal h[D3Q27System::ENDF + 1]; - //LBMReal viscosity=0; // lambda, gammaDot; - - //knotennummerierung faengt immer bei 0 an! - int SWB, SEB, NEB, NWB, SWT, SET, NET, NWT; - - int minX1 = 0; - int minX2 = 0; - int minX3 = 0; - - int maxX1 = (int)(distributionsF->getNX1()); - int maxX2 = (int)(distributionsF->getNX2()); - int maxX3 = (int)(distributionsF->getNX3()); - - //int minX1 = 1; - //int minX2 = 1; - //int minX3 = 1; - - //int maxX1 = (int)(distributions->getNX1()); - //int maxX2 = (int)(distributions->getNX2()); - //int maxX3 = (int)(distributions->getNX3()); - - //nummern vergeben und node vector erstellen + daten sammeln - CbArray3D<int> nodeNumbers((int)maxX1, (int)maxX2, (int)maxX3, -1); - maxX1 -= 2; - maxX2 -= 2; - maxX3 -= 2; - //D3Q27BoundaryConditionPtr bcPtr; - int nr = (int)nodes.size(); - - for (int ix3 = minX3; ix3 <= maxX3; ix3++) - { - for (int ix2 = minX2; ix2 <= maxX2; ix2++) - { - for (int ix1 = minX1; ix1 <= maxX1; ix1++) - { - if (!bcArray->isUndefined(ix1, ix2, ix3) && !bcArray->isSolid(ix1, ix2, ix3)) - { - int index = 0; - nodeNumbers(ix1, ix2, ix3) = nr++; - nodes.push_back(makeUbTuple(float(val<1>(org) - val<1>(nodeOffset) + ix1*dx), - float(val<2>(org) - val<2>(nodeOffset) + ix2*dx), - float(val<3>(org) - val<3>(nodeOffset) + ix3*dx))); - - //distributionsH->getDistribution(h, ix1, ix2, ix3); - - //lambda = D3Q27System::getDensity(h); - - //if (UbMath::isNaN(lambda) || UbMath::isInfinity(lambda) ) - // UB_THROW(UbException(UB_EXARGS, "lambda is not a number (nan or -1.#IND) or infinity number -1.#INF in block=" + block->toString() + - // ", node=" + UbSystem::toString(ix1) + "," + UbSystem::toString(ix2) + "," + UbSystem::toString(ix3))); - - //distributionsF->getDistribution(f, ix1, ix2, ix3); - //LBMReal rho = D3Q27System::getDensity(f); - - //LBMReal gammaDot = D3Q27System::getShearRate(f, collFactor); - - //LBMReal collFactorF = collFactor - 1e-6 / (gammaDot + one * 1e-9); - //collFactorF = (collFactorF < 0.5) ? 0.5 : collFactorF; - - //LBMReal collFactorF = Rheology::getBinghamCollFactor(collFactor, gammaDot, rho); - - //data[index++].push_back(lambda); - //data[index++].push_back(gammaDot); - //data[index++].push_back(collFactorF); - - distributionsF->getPreCollisionDistribution(f, ix1, ix2, ix3); - real rho = D3Q27System::getDensity(f); - real shearRate = D3Q27System::getShearRate(f, collFactor); - //LBMReal omega = Rheology::getHerschelBulkleyCollFactor(collFactor, shearRate, rho); - //LBMReal omega = Rheology::getPowellEyringCollFactor(collFactor, shearRate, rho); - real omega = Rheology::getBinghamCollFactor(collFactor, shearRate, rho); - real viscosity = (omega == 0) ? 0 : vf::basics::constant::c1o3 * (vf::basics::constant::c1o1/omega- vf::basics::constant::c1o2); - - - data[index++].push_back(viscosity); - data[index++].push_back(omega); - } - } - } - } - maxX1 -= 1; - maxX2 -= 1; - maxX3 -= 1; - //cell vector erstellen - for (int ix3 = minX3; ix3 <= maxX3; ix3++) - { - for (int ix2 = minX2; ix2 <= maxX2; ix2++) - { - for (int ix1 = minX1; ix1 <= maxX1; ix1++) - { - if ((SWB = nodeNumbers(ix1, ix2, ix3)) >= 0 - && (SEB = nodeNumbers(ix1 + 1, ix2, ix3)) >= 0 - && (NEB = nodeNumbers(ix1 + 1, ix2 + 1, ix3)) >= 0 - && (NWB = nodeNumbers(ix1, ix2 + 1, ix3)) >= 0 - && (SWT = nodeNumbers(ix1, ix2, ix3 + 1)) >= 0 - && (SET = nodeNumbers(ix1 + 1, ix2, ix3 + 1)) >= 0 - && (NET = nodeNumbers(ix1 + 1, ix2 + 1, ix3 + 1)) >= 0 - && (NWT = nodeNumbers(ix1, ix2 + 1, ix3 + 1)) >= 0) - { - cells.push_back(makeUbTuple((unsigned int)SWB, (unsigned int)SEB, (unsigned int)NEB, (unsigned int)NWB, (unsigned int)SWT, (unsigned int)SET, (unsigned int)NET, (unsigned int)NWT)); - } - } - } - } -} diff --git a/src/cpu/NonNewtonianFluids/SimulationObservers/WriteThixotropyQuantitiesSimulationObserver.h b/src/cpu/NonNewtonianFluids/SimulationObservers/WriteThixotropyQuantitiesSimulationObserver.h deleted file mode 100644 index 5ef994a08fe36812361903fb02e83be510faa13e..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/SimulationObservers/WriteThixotropyQuantitiesSimulationObserver.h +++ /dev/null @@ -1,75 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file WriteMultiphaseQuantitiesSimulationObserver.h -//! \ingroup SimulationObservers -//! \author Konstantin Kutscher -//======================================================================================= - -#ifndef WriteThixotropyQuantitiesSimulationObserver_H -#define WriteThixotropyQuantitiesSimulationObserver_H - -#include "SimulationObserver.h" -#include "Grid3D.h" -#include "Block3D.h" -#include "LBMUnitConverter.h" -#include <parallel/Communicator.h> -#include "WbWriter.h" - -class WriteThixotropyQuantitiesSimulationObserver : public SimulationObserver -{ -public: - WriteThixotropyQuantitiesSimulationObserver(); - WriteThixotropyQuantitiesSimulationObserver(SPtr<Grid3D> grid, SPtr<UbScheduler> s, const std::string& path, WbWriter* const writer, SPtr<LBMUnitConverter> conv, std::shared_ptr<vf::parallel::Communicator> comm); - ~WriteThixotropyQuantitiesSimulationObserver() = default; - - void update(real step) override; - -protected: - void collectData(real step); - void addDataMQ(SPtr<Block3D> block); - void clearData(); - -private: - void init(); - std::vector<UbTupleFloat3> nodes; - std::vector<UbTupleUInt8> cells; - std::vector<std::string> datanames; - std::vector<std::vector<real> > data; - std::string path; - WbWriter* writer; - SPtr<LBMUnitConverter> conv; -// bool bcInformation; - std::vector<std::vector<SPtr<Block3D> > > blockVector; - int minInitLevel; - int maxInitLevel; - int gridRank; - std::shared_ptr<vf::parallel::Communicator> comm; -// double ConcentrationSum; -}; -#endif diff --git a/src/cpu/NonNewtonianFluids/Visitors/NonNewtonianBoundaryConditionsBlockVisitor.cpp b/src/cpu/NonNewtonianFluids/Visitors/NonNewtonianBoundaryConditionsBlockVisitor.cpp deleted file mode 100644 index 70ba6d614926d5ba300119a8597c276146194780..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/Visitors/NonNewtonianBoundaryConditionsBlockVisitor.cpp +++ /dev/null @@ -1,122 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file NonNewtonianBoundaryConditionsBlockVisitor.cpp -//! \ingroup Visitors -//! \author Konstantin Kutscher -//======================================================================================= - -#include "NonNewtonianBoundaryConditionsBlockVisitor.h" -#include "BC.h" -#include "BCArray3D.h" -#include "BCSet.h" -#include "Block3D.h" -#include "D3Q27EsoTwist3DSplittedVector.h" -#include "DataSet3D.h" -#include "Grid3D.h" -#include "D3Q27System.h" -#include "BC.h" -#include "Block3D.h" -#include "BCArray3D.h" -#include "ILBMKernel.h" - - -#include "NonNewtonianFluids/BoundaryConditions/NonNewtonianBCStrategy.h" - -NonNewtonianBoundaryConditionsBlockVisitor::NonNewtonianBoundaryConditionsBlockVisitor() : Block3DVisitor(0, D3Q27System::MAXLEVEL) -{ -} -////////////////////////////////////////////////////////////////////////// -NonNewtonianBoundaryConditionsBlockVisitor::~NonNewtonianBoundaryConditionsBlockVisitor() = default; -////////////////////////////////////////////////////////////////////////// -void NonNewtonianBoundaryConditionsBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block) -{ - if (block->getRank() == grid->getRank()) { - SPtr<ILBMKernel> kernel = block->getKernel(); - - if (!kernel) { - throw UbException(UB_EXARGS, "LBMKernel in " + block->toString() + "is not exist!"); - } - - SPtr<BCSet> bcSet = kernel->getBCSet(); - - if (!bcSet) { - throw UbException(UB_EXARGS, "Boundary Conditions Processor is not exist!"); - } - - SPtr<BCArray3D> bcArray = bcSet->getBCArray(); - - bool compressible = kernel->getCompressible(); - real collFactor = kernel->getCollisionFactor(); - - 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; - - bcSet->clearBC(); - - SPtr<DistributionArray3D> distributions = kernel->getDataSet()->getFdistributions(); - SPtr<DistributionArray3D> distributionsH = kernel->getDataSet()->getHdistributions(); - SPtr<DistributionArray3D> distributionsH2 = kernel->getDataSet()->getH2distributions(); - - 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 bcStrategy = bcPtr->getBCStrategyKey(); - SPtr<BCStrategy> bca = BCStrategyRegistry::getInstance()->getBCStrategy(bcStrategy); - - if (bca) { - bca = bca->clone(); - bca->setBlock(block); - bca->setNodeIndex(x1, x2, x3); - bca->setBcPointer(bcPtr); - bca->addDistributions(distributions); - - if (distributionsH) - dynamicPointerCast<NonNewtonianBCStrategy>(bca)->addDistributionsH(distributionsH); - if (distributionsH2) - dynamicPointerCast<NonNewtonianBCStrategy>(bca)->addDistributionsH2(distributionsH2); - - bca->setCollFactor(collFactor); - bca->setCompressible(compressible); - bca->setBcArray(bcArray); - bcSet->addBC(bca); - } - } - } - } - } - } - } -} diff --git a/src/cpu/NonNewtonianFluids/Visitors/NonNewtonianBoundaryConditionsBlockVisitor.h b/src/cpu/NonNewtonianFluids/Visitors/NonNewtonianBoundaryConditionsBlockVisitor.h deleted file mode 100644 index 759fef3b89a58e123067a93b18c87f7db664ef19..0000000000000000000000000000000000000000 --- a/src/cpu/NonNewtonianFluids/Visitors/NonNewtonianBoundaryConditionsBlockVisitor.h +++ /dev/null @@ -1,54 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// This file is part of VirtualFluids. VirtualFluids is free software: you can -// redistribute it and/or modify it under the terms of the GNU General Public -// License as published by the Free Software Foundation, either version 3 of -// the License, or (at your option) any later version. -// -// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -// for more details. -// -// You should have received a copy of the GNU General Public License along -// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>. -// -//! \file NonNewtonianBoundaryConditionsBlockVisitor.h -//! \ingroup Visitors -//! \author Konstantin Kutscher -//======================================================================================= - -#ifndef NonNewtonianBoundaryConditionsBlockVisitor_h__ -#define NonNewtonianBoundaryConditionsBlockVisitor_h__ - -#include <PointerDefinitions.h> - -#include "Block3DVisitor.h" - -class Grid3D; -class Block3D; - -//! \brief set boundary conditions -class NonNewtonianBoundaryConditionsBlockVisitor : public Block3DVisitor -{ -public: - NonNewtonianBoundaryConditionsBlockVisitor(); - ~NonNewtonianBoundaryConditionsBlockVisitor() override; - - void visit(SPtr<Grid3D> grid, SPtr<Block3D> block) override; - -}; -#endif // BoundaryConditionBlockVisitor_h__ diff --git a/src/cpu/core/SimulationObservers/CalculateTorqueSimulationObserver.cpp b/src/cpu/core/SimulationObservers/CalculateTorqueSimulationObserver.cpp deleted file mode 100644 index 9672acdfc0a93110ded797aff0f18561876a000c..0000000000000000000000000000000000000000 --- a/src/cpu/core/SimulationObservers/CalculateTorqueSimulationObserver.cpp +++ /dev/null @@ -1,298 +0,0 @@ -#include "NonNewtonianFluids/SimulationObservers/CalculateTorqueSimulationObserver.h" -#include "BCSet.h" - -#include <parallel/Communicator.h> -#include "D3Q27Interactor.h" -#include "UbScheduler.h" -#include "Grid3D.h" -#include "BoundaryConditions.h" -#include "DataSet3D.h" -#include "Block3D.h" -#include "LBMKernel.h" -#include "BCArray3D.h" -#include "EsoTwist3D.h" -#include "DistributionArray3D.h" -#include "NonNewtonianFluids/LBM/Rheology.h" - -CalculateTorqueSimulationObserver::CalculateTorqueSimulationObserver( SPtr<Grid3D> grid, SPtr<UbScheduler> s, const std::string &path_, std::shared_ptr<vf::parallel::Communicator> comm) : SimulationObserver(grid, s), path(path_), comm(comm), torqueX1global(0), torqueX2global(0), torqueX3global(0) -{ - if (comm->getProcessID() == comm->getRoot()) - { - std::ofstream ostr; - std::string fname = path_; - ostr.open(fname.c_str(), std::ios_base::out | std::ios_base::app); - if(!ostr) - { - ostr.clear(); - const std::string path = UbSystem::getPathFromString(fname); - if(path.size()>0){ UbSystem::makeDirectory(path); ostr.open(fname.c_str(), std::ios_base::out | std::ios_base::app);} - if(!ostr) throw UbException(UB_EXARGS,"couldn't open file "+fname); - } - - ostr << "step;"; - ostr << "Tx;"; - ostr << "Ty;"; - ostr << "Tz" << std::endl; - ostr.close(); - } -} -////////////////////////////////////////////////////////////////////////// -CalculateTorqueSimulationObserver::~CalculateTorqueSimulationObserver() -{ - -} -////////////////////////////////////////////////////////////////////////// -void CalculateTorqueSimulationObserver::update( real step ) -{ - if(scheduler->isDue(step) ) - collectData(step); - - UBLOG(logDEBUG3, "D3Q27ForcesSimulationObserver::update:" << step); -} -////////////////////////////////////////////////////////////////////////// -void CalculateTorqueSimulationObserver::collectData( real step ) -{ - calculateForces(); - - if (comm->getProcessID() == comm->getRoot()) - { - int istep = static_cast<int>(step); - std::ofstream ostr; - std::string fname = path; - ostr.open(fname.c_str(), std::ios_base::out | std::ios_base::app); - if(!ostr) - { - ostr.clear(); - std::string path = UbSystem::getPathFromString(fname); - if(path.size()>0){ UbSystem::makeDirectory(path); ostr.open(fname.c_str(), std::ios_base::out | std::ios_base::app);} - if(!ostr) throw UbException(UB_EXARGS,"couldn't open file "+fname); - } - - ostr << istep << ";"; - ostr << torqueX1global << ";"; - ostr << torqueX2global << ";"; - ostr << torqueX3global << ";"; - ostr << Fx << ";"; - ostr << Fy << ";"; - ostr << Fz; - ostr << std::endl; - ostr.close(); - } -} -////////////////////////////////////////////////////////////////////////// -void CalculateTorqueSimulationObserver::calculateForces() -{ - using namespace vf::basics::constant; - - torqueX1global = c0o1; - torqueX2global = c0o1; - torqueX3global = c0o1; - - for(SPtr<D3Q27Interactor> interactor : interactors) - { - real x1Centre = interactor->getGbObject3D()->getX1Centroid(); - real x2Centre = interactor->getGbObject3D()->getX2Centroid(); - real x3Centre = interactor->getGbObject3D()->getX3Centroid(); - - for(BcNodeIndicesMap::value_type t : interactor->getBcNodeIndicesMap()) - { - real torqueX1 = c0o1; - real torqueX2 = c0o1; - real torqueX3 = c0o1; - - SPtr<Block3D> block = t.first; - std::set< std::vector<int> >& transNodeIndicesSet = t.second; - - real deltaX = grid->getDeltaX(block); - - SPtr<ILBMKernel> kernel = block->getKernel(); - - SPtr<BCArray3D> bcArray = kernel->getBCSet()->getBCArray(); - SPtr<DistributionArray3D> distributions = kernel->getDataSet()->getFdistributions(); - - int ghostLayerWidth = kernel->getGhostLayerWidth(); - int minX1 = ghostLayerWidth; - int maxX1 = (int)bcArray->getNX1() - 1 - ghostLayerWidth; - int minX2 = ghostLayerWidth; - int maxX2 = (int)bcArray->getNX2() - 1 - ghostLayerWidth; - int minX3 = ghostLayerWidth; - int maxX3 = (int)bcArray->getNX3() - 1 - ghostLayerWidth; - - for(std::vector<int> node : transNodeIndicesSet) - { - int x1 = node[0]; - int x2 = node[1]; - int x3 = node[2]; - - //without ghost nodes - if (x1 < minX1 || x1 > maxX1 || x2 < minX2 || x2 > maxX2 ||x3 < minX3 || x3 > maxX3 ) continue; - - if(bcArray->isFluid(x1,x2,x3)) //es kann sein, dass der node von einem anderen interactor z.B. als solid gemarkt wurde!!! - { - SPtr<BoundaryConditions> bc = bcArray->getBC(x1,x2,x3); - - Vector3D worldCoordinates = grid->getNodeCoordinates(block, x1, x2, x3); - real rx = (worldCoordinates[0] - x1Centre) / deltaX; - real ry = (worldCoordinates[1] - x2Centre) / deltaX; - real rz = (worldCoordinates[2] - x3Centre) / deltaX; - - // real nx = rx / sqrt(rx * rx + ry * ry + rz * rz); - // real ny = ry / sqrt(rx * rx + ry * ry + rz * rz); - // real nz = rz / sqrt(rx * rx + ry * ry + rz * rz); - - UbTupleDouble3 forceVec = getForces(x1, x2, x3, distributions, bc); - //UbTupleDouble3 forceVec = getForcesFromMoments(x1, x2, x3, kernel, distributions, bc, nx, ny, nz); - //UbTupleDouble3 forceVec = getForcesFromStressTensor(x1, x2, x3, kernel, distributions, bc, nx, ny, nz); - /*real*/ Fx = val<1>(forceVec); - /*real*/ Fy = val<2>(forceVec); - /*real*/ Fz = val<3>(forceVec); - - - - torqueX1 += ry * Fz - rz * Fy; - torqueX2 += rz * Fx - rx * Fz; - torqueX3 += rx * Fy - ry * Fx; - } - } - - torqueX1global += torqueX1; - torqueX2global += torqueX2; - torqueX3global += torqueX3; - } - } - std::vector<real> values; - std::vector<real> rvalues; - values.push_back(torqueX1global); - values.push_back(torqueX2global); - values.push_back(torqueX3global); - - rvalues = comm->gather(values); - if (comm->getProcessID() == comm->getRoot()) - { - torqueX1global = c0o1; - torqueX2global = c0o1; - torqueX3global = c0o1; - - for (int i = 0; i < (int)rvalues.size(); i+=3) - { - torqueX1global += rvalues[i]; - torqueX2global += rvalues[i+1]; - torqueX3global += rvalues[i+2]; - } - } -} -////////////////////////////////////////////////////////////////////////// -UbTupleDouble3 CalculateTorqueSimulationObserver::getForces(int x1, int x2, int x3, SPtr<DistributionArray3D> distributions, SPtr<BoundaryConditions> bc) -{ - using namespace vf::basics::constant; - - UbTupleDouble3 force(c0o1,c0o1,c0o1); - - if(bc) - { - //references to tuple "force" - real& forceX1 = val<1>(force); - real& forceX2 = val<2>(force); - real& forceX3 = val<3>(force); - real f, fnbr; - - dynamicPointerCast<EsoTwist3D>(distributions)->swap(); - - for(int fdir=D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++) - { - if(bc->hasNoSlipBoundaryFlag(fdir) || bc->hasVelocityBoundaryFlag(fdir)) - { - const int invDir = D3Q27System::INVDIR[fdir]; - f = dynamicPointerCast<EsoTwist3D>(distributions)->getPostCollisionDistributionForDirection(x1, x2, x3, invDir); - fnbr = dynamicPointerCast<EsoTwist3D>(distributions)->getPostCollisionDistributionForDirection(x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); - - forceX1 += (f + fnbr) * D3Q27System::DX1[invDir]; - forceX2 += (f + fnbr) * D3Q27System::DX2[invDir]; - forceX3 += (f + fnbr) * D3Q27System::DX3[invDir]; - } - } - - dynamicPointerCast<EsoTwist3D>(distributions)->swap(); - } - - return force; -} -////////////////////////////////////////////////////////////////////////// -UbTupleDouble3 CalculateTorqueSimulationObserver::getForcesFromMoments(int x1, int x2, int x3, SPtr<ILBMKernel> kernel, SPtr<DistributionArray3D> distributions, SPtr<BoundaryConditions> bc, real nx, real ny, real nz) -{ - using namespace vf::basics::constant; - UbTupleDouble3 force(c0o1, c0o1, c0o1); - - - if (bc) { - real f[D3Q27System::ENDF + 1]; - distributions->getPreCollisionDistribution(f, x1, x2, x3); - real collFactor = kernel->getCollisionFactor(); - real shearRate = D3Q27System::getShearRate(f, collFactor); - real rho = D3Q27System::getDensity(f); - real omega = Rheology::getBinghamCollFactor(collFactor, shearRate, rho); - std::array<real, 6> moments = D3Q27System::getSecondMoments(f, omega); - - // references to tuple "force" - real &forceX1 = val<1>(force); - real &forceX2 = val<2>(force); - real &forceX3 = val<3>(force); - - real mxx = (moments[0] + moments[1] + moments[2])*c1o3; - real myy = (-c2o1 * moments[1] + moments[2] + moments[0]) * c1o3; - real mzz = (-c2o1 * moments[2] + moments[1] + moments[0]) * c1o3; - real mxy = moments[3]; - real mxz = moments[4]; - real myz = moments[5]; - - forceX1 = mxx *nx + mxy*ny + mxz*nz; - forceX2 = mxy *nx + myy*ny + myz*nz; - forceX3 = mxz *nx + myz*ny + mzz*nz; - } - - return force; -} -////////////////////////////////////////////////////////////////////////// -UbTupleDouble3 CalculateTorqueSimulationObserver::getForcesFromStressTensor(int x1, int x2, int x3, SPtr<ILBMKernel> kernel, SPtr<DistributionArray3D> distributions, SPtr<BoundaryConditions> bc, real nx, real ny, real nz) -{ - using namespace vf::basics::constant; - UbTupleDouble3 force(c0o1, c0o1, c0o1); - - if (bc) { - real f[D3Q27System::ENDF + 1]; - distributions->getPreCollisionDistribution(f, x1, x2, x3); - real collFactor = kernel->getCollisionFactor(); - real shearRate = D3Q27System::getShearRate(f, collFactor); - real rho = D3Q27System::getDensity(f); - real omega = Rheology::getBinghamCollFactor(collFactor, shearRate, rho); - std::array<real, 6> stress = D3Q27System::getStressTensor(f, omega); - - // references to tuple "force" - real &forceX1 = val<1>(force); - real &forceX2 = val<2>(force); - real &forceX3 = val<3>(force); - - real &tauXX = stress[0]; - real &tauYY = stress[1]; - real &tauZZ = stress[2]; - real &tauXY = stress[3]; - real &tauXZ = stress[4]; - real &tauYZ = stress[5]; - - //https: // journals.aps.org/pre/pdf/10.1103/PhysRevE.88.013303 - - forceX1 = tauXX * nx + tauXY * ny + tauXZ * nz; - forceX2 = tauXY * nx + tauYY * ny + tauYZ * nz; - forceX3 = tauXZ * nx + tauYZ * ny + tauZZ * nz; - } - - return force; -} -////////////////////////////////////////////////////////////////////////// -void CalculateTorqueSimulationObserver::addInteractor( SPtr<D3Q27Interactor> interactor ) -{ - interactors.push_back(interactor); -} - - -